secret

secret用于存储一些安全相关的信息。

  • Opaque:使用base64编码存储信息,可以通过base64 –decode解码获得原始数据。

从文件中创建Secret

分别创建两个名为username.txt和password.txt的文件

$ echo -n "admin" > ./username.txt
$ echo -n "1f2d1e2e67df" > ./password.txt

使用kubectl create secret命令创建secret:

$ kubectl create secret generic db-user-pass –from-file=./username.txt –from-file=./password.txt

使用描述文件创建Secret

首先使用base64对数据进行编码

$ echo -n 'admin' | base64
YWRtaW4=
$ echo -n '123456' | base64
MTIzNDU2

创建一个类型为Secret的描述文件

apiVersion: v1
kind: Secret
metadata:
  name: secret1
type: Opaque
data:
  username: YWRtaW4=
  password: MTIzNDU2

$ kubectl create -f ./secret.yaml
secret "secret1" created
查看此Secret ::

$ kubectl get secret secret1 -o yaml

Secret的使用

创建好Secret之后,可以通过两种方式使用:

  • Volume方式

  • 环境变量方式

将Secret挂载到Volume中

挂载:

apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
  - name: mypod
        image: nginx
        volumeMounts:
        - name: foo
          mountPath: "/data/"
          readOnly: true
  volumes:
  - name: foo
        secret:
          secretName: secret1

进入Pod查看挂载的Secret

将Secret设置为环境变量

作为环境变量使用

apiVersion: v1
kind: Pod
metadata:
  name: secret-env-pod
spec:
  containers:
  - name: mycontainer
        image: nginx
        env:
          - name: SECRET_USERNAME
                valueFrom:
                  secretKeyRef:
                        name: mysecret
                        key: username
          - name: SECRET_PASSWORD
                valueFrom:
                  secretKeyRef:
                        name: mysecret
                        key: password
  restartPolicy: Never

需要注意的是,环境变量读取Secret很方便,但无法支持Secret动态更新。

参考资料