kubernetes secrets 保存敏感信息
·
kubernetes secrets 是用来保存密码、token、密钥...敏感信息的对象。
例如:有时我们在pod中需要连接aws 应用(s3、ddb),一般需要在env设置AWS_ACCESS_KEY_ID、AWS_SECRET_KEY,这时候,我们就可以把aws的key 保存在kubernetes的secrets中,一来可以保证不在image中保存敏感信息、二来多个pod可以共用secrets。
基本思路:
1. 把aws的 key 存在 secrets 中。
2.在 yaml 中 把secrets 读取后,保存在env中提供给应用使用。
1. 准备加密数据,必须使用base64来加密数据:
$ echo -n "admin" | base64
YWRtaW4=
$ echo -n "1f2d1e2e67df" | base64
MWYyZDFlMmU2N2Rm
2. 创建secrets:
test@local:~/k8s/test/local$ cat ./secrets.yaml
apiVersion: v1
kind: Secret
metadata:
name: aws-secret
type: Opaque
data:
AWS_ACCESS_KEY_ID: YWRtaW4=
AWS_SECRET_KEY: MWYyZDFlMmU2N2Rm
test@local:~/k8s/test/local$ kubectl create -f ./secrets.yaml
3.定义一个deployment,并把secrets应用到env:
test@local:~/k8s/test/local$ cat test.yaml
kind: Deployment
metadata:
name: busybox
spec:
replicas: 1
template:
metadata:
labels:
app: busybox
spec:
containers:
- name: busybox
image: busybox
command: ["sleep"]
args: ["1000"]
env:
- name: AWS_ACCESS_KEY_ID
valueFrom:
secretKeyRef:
name: aws-secret
key: AWS_ACCESS_KEY_ID
- name: AWS_SECRET_KEY
valueFrom:
secretKeyRef:
name: aws-secret
key: AWS_SECRET_KEY
volumes:
- name: "aws-secret"
secret:
secretName: aws-secret
4.检验结果:
test@local:~/k8s/test/local$ kubectl exec test -it -- env |grep SECRET
SECRET_PASSWORD=1f2d1e2e67df5. 其他
有时使用echo xxx |base64方法 加密带有多行的字符串(例如:公钥和私钥)比较麻烦,可以把此类字符串保存在文件中,然后使用以下方法创建secret:
kubectl create secret generic test-secret --from-file=./test_privite_key.pem --from-file=./test_public_key.pem
kubectl get secrets test-secret -o yaml
参考:
https://kubernetes.io/docs/concepts/configuration/secret/#creating-your-own-secrets
其他:
1. 把 连接 was ddb 的 aws key 放在 k8s 的 secrets 中,保证key的安全。
参考:https://kubernetes.io/docs/tasks/inject-data-application/distribute-credentials-secure/
更多推荐
所有评论(0)