目录

一、从文件创建

二、编写yaml文件

三、将Secret挂载到Volume中

四、向指定路径映射secret密钥

五、将Secret设置为环境变量

六、存储dockerregistry的认证信息


Kubernetes中的Secrets是用于存储敏感信息的一种对象类型,例如密码、令牌、证书等。Secrets可以以编码、加密或未加密的形式存储。使用Secrets可以保护敏感信息不被直接暴露在Pod定义中,从而增加了应用程序的安全性。

一、从文件创建

echo -n 'admin' > ./username.txtecho -n '123456' > ./password.txtkubectl create secret generic db-user-pass --from-file=./username.txt --from-file=./password.txtkubectl get secrets db-user-pass -o yamlecho MTIzNDU2 | base64 -d

二、编写yaml文件

echo -n 'admin' | base64echo -n '123456' | base64vim mysecret.yamlapiVersion: v1kind: Secretmetadata:name: mysecrettype: Opaquedata:username: YWRtaW4=#必须编码后的值password: MTIzNDU2kubectl apply -f mysecret.yamlkubectl get secrets mysecret -o yaml

三、将Secret挂载到Volume中

vim pod1.yamlapiVersion: v1kind: Podmetadata:name: mysecretspec:containers:- name: nginximage: nginxvolumeMounts:- name: secretsmountPath: "/secret"readOnly: truevolumes:- name: secretssecret:secretName: mysecretkubectl apply-f pod1.yamlkubectl get podkubectl execmysecret -- ls /secretkubectl delete-f pod1.yaml

四、向指定路径映射secret密钥

vim pod2.yamlapiVersion: v1kind: Podmetadata:name: mysecretspec:containers:- name: nginximage: nginxvolumeMounts:- name: secretsmountPath: "/secret"readOnly: truevolumes:- name: secretssecret:secretName: mysecretitems:- key: usernamepath: my-group/my-usernamekubectl apply -f pod2.yamlkubectl execmysecret -- cat /secret/my-group/my-usernamekubectl delete-f pod2.yaml

五、将Secret设置为环境变量

vim pod3.yamlapiVersion: v1kind: Podmetadata:name: secret-envspec:containers:- name: pod3image: busyboxcommand: ["/bin/sh", "-c", "env"]env:- name: SECRET_USERNAMEvalueFrom:secretKeyRef:name: mysecretkey: username- name: SECRET_PASSWORDvalueFrom:secretKeyRef:name: mysecretkey: passwordrestartPolicy: Neverkubectl apply -f pod3.yamlkubectl logs secret-env

六、存储dockerregistry的认证信息

新建私有仓库

kubectl create secret docker-registry myregistrykey --docker-server=reg.westos.org --docker-username=admin --docker-password=123456 --docker-email=yyl@westos.orgvim pod4.yamlapiVersion: v1kind: Podmetadata:name: mypodspec:containers:- name: game2048image: reg.westos.org/westos/game2048imagePullSecrets:- name: myregistrykeykubectl apply -f pod4.yamlkubectl get pod

推荐把registrykey绑定到sa,这样yaml文件中就可以不用指定,更加安全。

kubectl patch serviceaccount default -p '{"imagePullSecrets": [{"name": "myregistrykey"}]}'kubectl describe sa default