kubernetes(k8s) 学习 (九) k8s存储之 Secret ( 简介+两种使用方式)

Secret简介

Secret资源的功能类似于ConfigMap,但它专用于存放敏感数据,如密码、数字证书、私钥、令牌和ssh key等。
敏感信息放在 secret 中比放在 Pod 的定义或者容器镜像中来说更加安全和灵活。

Secret对象存储数据以键值方式存储数据,再pod资源中通过环境变量或存储卷进行数据访问。
Secret对象仅会被分发至调用了此对象的pod资源所在的工作节点,且只能由节点将其存储于内存中
另外,Secret对象的数据的存储及打印格式为base64编码的字符串,因此用户在创建对象时也要提供此种编码格式的数据
不过,在容器中以环境变量或存储卷的方式访问时,他们会被自动解码为明文格式。

在master节点上,Secret对象以非加密的格式存储于etcd中,因此管理员必须加以精心管控以确保敏感数据的机密性,必须确保etcd集群节点间以及与APIserver的安全通信,etcd服务的访问授权,还包括用户访问APIServer时的授权,因为拥有创建pod资源的用户都可以使用Secret资源并能够通过pod中的容器访问其数据。

Secret对象主要有两种用途

一是作为存储卷注入到pod上,由容器应用程序所使用,
二是用于kubelet为pod里的容器拉取镜像时向私有仓库提供认证信息。

Secret资源主要有四种类型组成:

1、Opaque:自定义数据内容;base64编码,用来存储密码、密钥、信息、证书
等数据,类型标识符为generic


2、kubernetes.io/service-account-token:ServiceAccount的认证信息,可在创建service account时由kubernetes自动创建

3、kubernetes.io/dockerconfigjson: 用来存储Docker镜像仓库的认证信息,
类型标识符为docker-registry

4、kubernetes.io/tls:用于为ssl通信模式存储证书和私钥文件,
命令式创建时类型标识符为tls。

Pod 可以用两种方式使用 secret:

作为 volume 中的文件被挂载到 pod 中的一个或者多个容器里。
当 kubelet 为 pod 拉取镜像时使用

secret的创建

serviceaccout 创建时 Kubernetes 会默认创建对应的 secret。对应的 secret 会自动挂载到 Pod 的 /run/secrets/kubernetes.io/serviceaccount 目录中。

$ kubectl  run nginx --image=nginx

$ kubectl get pod
NAME                     READY   STATUS    RESTARTS   AGE
nginx-6db489d4b7-886wq   1/1     Running   0          4s

$ kubectl exec nginx-6db489d4b7-886wq ls /var/run/secrets/kubernetes.io/serviceaccount
ca.crt
namespace
token
每个namespace下有一个名为default的默认的ServiceAccount对象

$ kubectl get Secret 
NAME                  TYPE                                  DATA   AGE
default-token-mmkdj   kubernetes.io/service-account-token   3      8d

ServiceAccount里有一个名为Tokens的可以作为Volume一样被Mount到
Pod里的Secret,当Pod启动时这个Secret会被自动Mount到Pod的指定目录下,
用来协助完成Pod中的进程访问API Server时的身份鉴权过程。

$ kubectl get pod -o yaml

在这里插入图片描述
1.在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

作为存储卷注入到pod上,由容器应用程序所使用

用文件创建

Opaque Secret 其value为base64编码后的值。

从文件中创建Secret
$ echo -n 'admin' > ./username.txt
$ echo -n 'westos' > ./password.txt

$ kubectl create secret generic db-user-pass --from-
file=./username.txt --from-file=./password.txt
secret/db-user-pass created

$ kubectl get secrets 
NAME                  TYPE                                  DATA   AGE
db-user-pass          Opaque                                2      5s

如果密码具有特殊字符,则需要使用 \ 字符对其进行转义,执行以下命令:
$ kubectl create secret generic dev-db-secret --from-literal=username=devuser --from-literal=password=S\!B\\*d\$zDsb

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述3.
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

编写一个 secret 对象

解码测试
$ echo -n 'admin' | base64
YWRtaW4=
$ echo -n 'westos' | base64
d2VzdG9z

$ vim mysecret.yaml
apiVersion: v1
kind: Secret
metadata:
  name: mysecret
type: Opaque
data:
  username: YWRtaW4=
  password: d2VzdG9z

$ kubectl create -f secret1.yaml 
secret/mysecret created

在这里插入图片描述
1.在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

将secret挂载在volume中

在这里插入图片描述

将Secret挂载到Volume中
apiVersion: v1
kind: Pod
metadata:
  name: mysecret
spec:
  containers:
  - name: nginx
    image: nginx
    volumeMounts:
    - name: secrets
      mountPath: "/secret"
      readOnly: true
  volumes:
  - name: secrets
    secret:
      secretName: mysecret

$ kubectl exec mysecret cat  /secret/password
westos

1.在这里插入图片描述在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

向指定路径映射 secret 密钥

apiVersion: v1
kind: Pod
metadata:
  name: mysecret
spec:
  containers:
  - name: nginx
    image: nginx
    volumeMounts:
    - name: secrets
      mountPath: "/secret"
      readOnly: true
  volumes:
  - name: secrets
    secret:
      secretName: mysecret
      items:
      - key: username
        path: my-group/my-username

$ kubectl exec mysecret cat /secret/my-group/my-username 
admin

1.在这里插入图片描述在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

将Secret设置为环境变量

apiVersion: v1
kind: Pod
metadata:
  name: secret-env
spec:
  containers:
  - name: nginx
    image: nginx
    env:
      - name: SECRET_USERNAME
        valueFrom:
          secretKeyRef:
            name: mysecret
            key: username
      - name: SECRET_PASSWORD
        valueFrom:
          secretKeyRef:
            name: mysecret
            key: password

在这里插入图片描述
1.在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

kubernetes.io/dockerconfigjson用于存储docker registry的认证信息

imagePullSecret资源可用于辅助kubelet从需要认证的私有镜像仓库获取镜像,它通过将secret提供的密码传递给kubelet从而在拉取镜像前完成必要的认证过程。
使用imagePullSecret的方式有两种:一是创建docker-registry类型的secret对象,并在定义pod资源时明确通过imagePullSecret字段给出
另一个是创建docker-registry类型的secret对象,将其添加到某特定的serviceaccount对象中,那些使用该serviceaccount资源创建的pod对象,以及默认使用该serviceaccount的pod对象都将会直接使imagePullSecret中的认证信息。

$ kubectl create secret docker-registry myregistrykey --docker-server=reg.westos.org --docker-username=admin --docker-password=westos --docker-email=yx@westos.org
secret/myregistrykey created

$ vim mypod.yaml
apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
    - name: game2048
      image: reg.westos.org/westos/game2048
  imagePullSecrets:
    - name: myregistrykey

$ kubectl create -f mypod.yaml 
pod/mypod created

1.将自己的harbor仓库设置为私有
在这里插入图片描述
在这里插入图片描述
2.为私有仓库添加yx用户
在这里插入图片描述
在这里插入图片描述
测试当没有登录,且没有授权时
在这里插入图片描述
在这里插入图片描述
将用户授权
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值