secret是kubernetes上的标准资源,用来配置应用的环境变量,将环境变量做成 secret 资源。有两种使用方法,第一种:在Pod中使用 env.valueFrom.secretKeyRef 指令来引用即可将变量注入到Pod中,在Pod中使用printenv即可看到注入的变量。第二种:以挂载券的方式挂在为文件。

secret的三种类型:

        generic:通用的secret ,用来保存一些密码数据之类的

        docker-registry:保存docker registry 认证信息,在pull私有的仓库时需要认证时用到的账号密码信息,和 imagePullSecret 配合使用。

        tls:保存私钥和证书。


创建 secret:

kubectl create secret generic mysql-password --from-literal=password=123456

describe:

kubectl get secrets mysql-password -o yaml

yaml:

apiVersion: v1
kind: Secret
metadata:
  name: mysql-password
data:
  password: MTIzNDU2  # base64编码的

可以解码:

echo MTIzNDU2 | base64 -d
123456


以环境变量的方式注入Pod:

apiVersion: v1
kind: Pod
metadata: 
  name: secret-test
  labels:
    app: myapp
spec:
  containers:
  - name: busybox
    image: busybox:1.28
    command: ["sleep 3600;"]
    env:
    - name: MYSQL_PASSWORD # 注入到Pod中的变量名
      valueFrom:
        secretKeyRef:
          name: mysql-password # secret资源名称
          key: password

查看环境变量是否注入到了Pod中:

kubectl exec secret-test -it -- printenv
MYSQL_PASSWORD=123456


将secret挂载为文件的方式:

apiVersion: v1
kind: Pod
metadata:
  labels:
    run: pod-secret
  name: pod-secret
spec:
  containers:
  - image: busybox:1.28
    name: pod-secret
    command:
    - "sleep"
    - "3600"
    volumeMounts:
    - name: secret
      mountPath: /secret/
  volumes:
  - name: secret
    secret:
      secretName: mysql-secret

查看Pod中的文件:

kubectl exec -it pod-secret -- sh
/ # cat secret/password 
123456

注意:以secret方式注入的变量或挂载的文件当secret更新时Pod中注入的内容是不会被更新的。