1. 创建
kubectl create secret generic <secret-name> --from-literal=<key>=<value>
或--from-file=<path-to-file>
kubectl create -f secret-data.yaml
secret-data.yaml
apiVersion: v1 kind: Secret metadata: name: app-secret data: DB_Host: mysql DB_User: root DB_Password: paswrd
2. 转换编码
- 编码:
echo -n 'mysql' | base64
- 解码:
echo -n 'bXlzcWw=' | base64 --decode
3. 查看
kubectl get secret app-secret -o yaml
4. 添加到pod
pod-definition.yaml
: secrets 可以作为数据卷挂载或公开为环境变量
由 Pod 中的容器使用
apiVersion: v1
kind: Pod
metadata:
name: simple-webapp-color
labels:
name: simple-webapp-color
spec:
containers:
- name: simple-webapp-color
image: simple-webapp-color
ports:
- containerPort: 8080
envFrom:
- secretRef:
name: app-config
env:
- name: DB_Password
valueFrom:
secretKeyRef:
name: app-secret
key: DB_Password
volumes:
- name: app-secret-volume
secret:
secretName: app-secret
如果以文件形式创建secret,则对每个secret会生成对应的文件:ls /opt/app-secret-volumes
,cat /opt/app-secret-volumes/DB_Password
最佳实践:
- 未将secret对象定义文件签入源代码存储库
- 为Secret启用静态加密,以便将它们加密存储在ETCD中
Kubernetes处理secret的方式:
- 仅当节点上的pod需要时,才会将secret发送到该节点
- Kubelet将secret存储到tmpfs中,这样secret就不会写入磁盘存储
- 一旦依赖于secret的Pod被删除,kubelet也会删除其本地的secret数据副本