k8s入门之Secret(十)

Secret与ConfigMap都是用来存储配置信息的,不同之处在于ConfigMap是明文存储的,而Secret用来保存敏感信息,如:密码、OAuth令牌,ssh key等等。Secret常用有三种类型:

  • Opaque:使用base64编码格式存储密码等信息,加密性很弱。

  • kubernetes.io/dockerconfigjson:用来存储私有docker registry的认证信息(仓库地址、登录用户名密码)。

  • kubernetes.io/service-account-token:用来创建服务账号(Service Account),是一种自动被启用的用户认证机制,用来验证请求的合法性。

一、创建Opaque类型的Secret对象

1.使用命令创建Opaque类型的Secret对象

kubectl create secret generic mysecret1 --from-literal=username=root --from-literal=password=123456 

(1)参数说明:

  • generic 子命令表示创建的是Opaque类型的Secret

  • --from-literal:表示从对字面量值进行编码,后面跟kv键值对,对v进行编码;

你也可以使用--from-file参数指定对文件内容进行编码,此处读者可以自行练习。

(2)查看创建结果:

kubectl get secret 

k8s入门之Secret(十)

(3)使用describe命令查看详情

 kubectl describe secret mysecret1 

k8s入门之Secret(十)

可以看到被编码的数据没有显示出来,只能看到数据大小,可以使用以下方法查看被编码数据的明文

(4)输出yaml文件格式查看详情

kubectl get secret mysecret1 -o yaml 

k8s入门之Secret(十)

然后使用linux命令查看被编码数据的明文

echo -n "MTIzNDU2" | base64 -d 

k8s入门之Secret(十)

注意截图中被解码后的明文是不含换行符的

2.使用yaml文件创建Opaque类型的Secret对象

(1)获取要保存数据的编码

假如要保存username=admin,password=654321的数据,先用linux命令获取对应的base64编码数据。

echo -n "admin" | base64 echo -n "654321" | base64 

k8s入门之Secret(十)

(2)新建yaml文件

vi secret-my2.yaml 

(3)编写yaml文件内容

apiVersion: v1 kind: Secret metadata:   name: mysecret2 type: Opaque data:   username: YWRtaW4=   password: NjU0MzIx 

(4)执行创建命令

kubectl create -f secret-my2.yaml 

(5)查看创建结果

可以使用上面的方法查看,这里不再赘述

k8s入门之Secret(十)

二、使用Opaque类型的secret对象

1.通过环境变量的方式

liunx自带的命令env,可以用来查看当前系统的环境变量,我们可以把secret对象设置到环境变量上来进行测试

k8s入门之Secret(十)

(1)新建yaml文件

vi mysecret1-env.yaml 

(2)编写使用secret对象的pod的yaml文件内容

apiVersion: v1 kind: Pod metadata:   name: pod-test-mysecret1 spec:   containers:   - name: pod-test-mysecret1-bb     image: busybox     command: ["/bin/sh", "-c", "env"]     # 从secret对象中获取对应key的值赋值给环境变量     env:     - name: USERNAME       valueFrom:         secretKeyRef:           name: mysecret1           key: username     - name: PASSWORD       valueFrom:         secretKeyRef:           name: mysecret1           key: password 

(3)执行yaml文件创建pod

kubectl create -f mysecret1-env.yaml 

(4)查看pod,在默认名称空间下

k8s入门之Secret(十)

通过查看此pod的日志,可以看到输出的环境变量信息是mysecret1对象的信息

k8s入门之Secret(十)

2.通过vloume挂载方式

(1)新建yaml文件

vi mysecret2-volume.yaml 

(2)编写使用secret对象的pod的yaml文件内容

apiVersion: v1 kind: Pod metadata:   name: pod-test-mysecret2 spec:   containers:   - name: pod-test-mysecret2-bb     image: busybox     command: ["/bin/sh", "-c", "cat /etc/secrets/my-username;cat /etc/secrets/my-password;"]     volumeMounts:     - name: secrets       mountPath: /etc/secrets   volumes:   - name: secrets     secret:      secretName: mysecret2      items:      # 把secret对象挂载到文件名      - key: username        path: my-username      - key: password        path: my-password 

(3)执行yaml文件创建pod

kubectl create -f mysecret2-volume.yaml 

(4)查看pod,在默认名称空间下

k8s入门之Secret(十)

通过查看此pod的日志,可以看到输出的信息是mysecret2对象中的数据

k8s入门之Secret(十)

三、创建kubernetes.io/dockerconfigjson类型的Secret对象

  1. 通过命令创建
kubectl create secret docker-registry aliyun --docker-server=https://registry.aliyun.com --docker-username=root --docker-password=123456 --docker-email=test@qq.com 

2.查看创建结果

k8s入门之Secret(十)

3.查看详细信息

k8s入门之Secret(十)

4.解码密文信息

k8s入门之Secret(十)

5.使用此类型的secret对象

指定 imagePullSecrets 属性的name字段值为你创建的secret对象

apiVersion: v1 kind: Pod metadata:   name: myapp spec:   containers:   - name: myapp     image: xxx-api:v1.0   imagePullSecrets:   - name: aliyun 
发表评论

相关文章