Secrets是Kubernetes中一种对象类型,用来保存密码、私钥、口令等敏感信息。与直接将敏感信息嵌入image、pod相比,Secrets更安全、更灵活,用户对敏感信息的控制力更强。同Docker对敏感信息的管理类似,首先用户创建Secrets将敏感信息加密后保存在集群中,创建pod时通过volume、环境变量引用Secrets。
创建Secrets
假设pod需要访问数据库。首先将用户名保存在文件./username.txt,将密码保存在./password.txt文件:
# Create files needed for rest of example.
$ echo -n 'admin' > ./username.txt
$ echo -n '1f2d1e2e67df' > ./password.txt
将两个文件作为参数运行如下命令创建Secret,此时敏感数据被保存在系统中:
$ kubectl create secret generic db-user-pass --from-file=./username.txt --from-file=./password.txt
secret "db-user-pass" created
用Secret名称查看创建Secret:
$ kubectl get secrets
NAME TYPE DATA AGE
db-user-pass Opaque 2 51s
$ kubectl describe secrets/db-user-pass
Name: db-user-pass
Namespace: default
Labels: <none>
Annotations: <none>
Type: Opaque
Data
====
password.txt: 12 bytes
username.txt: 5 bytes
以上通过命令行创建Secret,需要首先将敏感内容保存在文件中,文件名作为Secret中单条条目的key。另外一种创建Secret的方法是声明对象。敏感信息可能包含任何控制字符、不可显示字符等,首先进行base64编码:
$ echo -n 'admin' | base64
YW