Kubernetes secret(机密)对象让你可以存储和管理敏感信息,比如密码、OAuth令牌和ssh密钥等。将这些信息放在一个秘密的地方,要比将其原样放在Pod定义或容器镜像中更安全、更灵活。
创建机密对象
要创建机密对象,可以通过:
- 从txt文件创建
- 从yaml文件创建
从txt文件创建
假设pod需要访问数据库,数据库的用户名和密码保存在本地./username.txt
和./password.txt
文件中。
echo -n 'admin' > ./username.txt
echo -n '1f2d1e2e67df' > ./password.txt
可以使用以下命令,创建机密对象:
kubectl create secret generic db-user-pass --from-file=./username.txt --from-file=./password.txt
类似地, 可以查看机密列表:
kubectl get secrets
查看机密详情:
kubectl describe secrets/db-user-pass
从yaml文件创建
还可以从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= # base64 编码
password: MWYyZDFlMmU2N2Rm # base64 编码
创建机密对象:
kubectl apply -f ./secret.yaml
使用机密
一旦创建了机密对象,就可以在pod中使用它。机密对象通常的使用方式是:
- 作为环境变量
- 挂载机密存储卷
作为环境变量使用机密
作为环境变量使用机密:
apiVersion: v1
kind: Pod
metadata:
name: secret-env-pod
spec:
containers:
- name: mycontainer
image: redis
env:
- name: SECRET_USERNAME
valueFrom:
secretKeyRef:
name: mysecret
key: username
- name: SECRET_PASSWORD
valueFrom:
secretKeyRef:
name: mysecret
key: password
restartPolicy: Never
在容器中,机密对象中的键值对以普通环境变量的方式访问。
在容器内执行命令:
echo $SECRET_USERNAME
admin
echo $SECRET_PASSWORD
1f2d1e2e67df
挂载机密存储卷访问机密
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- name: mypod
image: redis
volumeMounts:
- name: foo
mountPath: "/etc/foo"
readOnly: true
volumes:
- name: foo
secret:
secretName: mysecret
在挂载机密卷的容器中,机密键值对以文件的形式出现,文件名是键名,键值以base-64解码并存储在这些文件中。
在容器内执行命令:
ls /etc/foo/
username
password
cat /etc/foo/username
admin
cat /etc/foo/password
1f2d1e2e67df