概览
Secret是用来保存小片敏感数据的k8s资源,例如密码,token,或者秘钥。这类数据当然也可以存放在Pod或者镜像中,但是放在Secret中是为了更方便的控制如何使用数据,并减少暴露的风险。
用户可以创建自己的secret,系统也会有自己的secret。
Pod需要先引用才能使用某个secret,Pod有2种方式来使用secret:作为volume的一个域被一个或多个容器挂载;在拉取镜像的时候被kubelet引用。
內建的Secrets
由ServiceAccount创建的API证书附加的秘钥
k8s自动生成的用来访问apiserver的Secret,所有Pod会默认使用这个Secret与apiserver通信
创建自己的Secret
使用kubectl create secret命令创建Secret
假如mougePod要访问数据库,需要用户名密码,分别存放在2个文件中:username.txt,password.txt
# Create files needed forrest of example.
$echo -n 'admin' > ./username.txt
$echo -n '1f2d1e2e67df' > ./password.txt
kubectl create secret指令将用户名密码写到secret中,并在apiserver创建Secret
$ 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 51s
$ kubectl describe secrets/db-user-pass
Name: db-user-pass
Namespace: default
Labels:Annotations:Type: Opaque
Data====password.txt:12bytes
username.txt:5 bytes
get或describe指令都不会展示secret的实际内容,这是出于对数据的保护的考虑,如果想查看实际内容请继续往下看。
手动创建Secret
创建一个secret.yaml文件,内容用base64编码
$ echo -n 'admin' |base64
YWRtaW4=$echo -n '1f2d1e2e67df' |base64
MWYyZDFlMmU2N2Rm
yaml文件内容:
apiVersion: v1
kind: Secret
metadata:
name: mysecret
type: Opaque
data:
username: YWRtaW4=password: MWYyZDFlMmU2N2Rm
创建:
$ kubectl create -f ./secret.yaml
secret"mysecret" created
解析Secret中内容
$ kubectl get sec