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=1f2d1e2e67df
5. 其他
有时使用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/



你可能感兴趣的:(kubernetes)