kubernetes 的 Secret 对象可以存储和管理敏感信息,比如访问数据库的用户名,密码或者秘钥等等,Secret 会以密文的方式存储数据,避免直接在配置文件中保存敏感信息
Secret有三种类型:
- Service Account :用来访问Kubernetes API,由Kubernetes自动创建,并且会自动挂载到Pod的/run/secrets/kubernetes.io/serviceaccount目录中;
- Opaque :base64编码格式的Secret,用来存储密码、密钥等;
- kubernetes.io/dockerconfigjson :用来存储私有docker registry的认证信息。
创建方式
from-literal
每个—from-literal对应一个数据信息kubectl create secret generic mysecret --from-literal=usernarne=root --from-literal=password=123456secret/mysecret created
from-file
$ echo -n root > ./username$ echo -n 123456 > ./password$ kubectl create secret generic mysecretfile --from-file=./username --from-file=./passwordsecret/mysecretfile created
from-env-file
文件中每行Key=Value 对应一个信息数据
$ cat << EOF > env.txt> username=root> password=123456> EOF$ kubectl create secret generic mysecretenv --from-env-file=env.txtsecret/mysecretenv created
YMAL配置
文件中敏感数据必须通过base64进行编码
$ echo -n root | base64cm9vdA==$ echo -n 123456 | base64MTIzNDU2
创建yaml 文件
apiVersion: v1kind: Secretmetadata:name: admindata:username: cm9vdA==password: MTIzNDU2
执行
$ kubectl apply -f admin.yamlsecret/admin created
查看
通过kubectl get secret 查看存在的secret
$ kubectl get secretsNAME TYPE DATA AGEadmin Opaque 2 74sdefault-token-zn6nr kubernetes.io/service-account-token 3 10dmysecret Opaque 2 12hmysecretenv Opaque 2 12hmysecretfile Opaque 2 12h
查看详细信息
$ kubectl describe secret adminName: adminNamespace: defaultLabels: <none>Annotations:Type: OpaqueData====password: 6 bytesusername: 4 bytes
查看具体值

通过base64 解析出原始值
$ echo -n MTIzNDU2 |base64 -D
kubernetes.io/dockerconfigjson
可以直接用kubectl命令来创建用于docker registry认证的secret:
kubectl create secret docker-registry regcred \--docker-server=<你的镜像仓库服务器> \--docker-username=<你的用户名> \--docker-password=<你的密码> \--docker-email=<你的邮箱地址>
查看创建结果
kubectl get secret -o wideNAME TYPE DATA AGEregcred kubernetes.io/dockerconfigjson 1 26m
创建my-private-reg-pod.yaml,要从私有仓库拉取镜像,Kubernetes 需要凭证。 配置文件中的 imagePullSecrets 字段表明 Kubernetes 应该通过名为 regcred 的 Secret 获取凭证。
apiVersion: v1kind: Podmetadata:name: private-regspec:containers:- name: private-reg-containerimage: baxiang/liveness:1.0imagePullSecrets:- name: regcred
执行
kubectl apply -f my-private-reg-pod.yamlkubectl get pod private-reg
