Kubernetes – Secret(机密)

Kubernetes secret(机密)对象让你可以存储和管理敏感信息,比如密码、OAuth令牌和ssh密钥等。将这些信息放在一个秘密的地方,要比将其原样放在Pod定义或容器镜像中更安全、更灵活。

创建机密对象

要创建机密对象,可以通过:

  • 从txt文件创建
  • 从yaml文件创建

从txt文件创建

假设pod需要访问数据库,数据库的用户名和密码保存在本地./username.txt./password.txt文件中。

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

可以使用以下命令,创建机密对象:

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

类似地, 可以查看机密列表:

kubectl get secrets

查看机密详情:

kubectl describe secrets/db-user-pass

从yaml文件创建

还可以从yaml文件创建机密对象。

先把用户名和密码转为base64编码:

echo -n 'admin' | base64
YWRtaW4=
echo -n '1f2d1e2e67df' | base64
MWYyZDFlMmU2N2Rm

yaml文件:

apiVersion: v1
kind: Secret
metadata:
  name: mysecret
type: Opaque
data:
  username: YWRtaW4= # base64 编码
  password: MWYyZDFlMmU2N2Rm # base64 编码

创建机密对象:

kubectl apply -f ./secret.yaml

使用机密

一旦创建了机密对象,就可以在pod中使用它。机密对象通常的使用方式是:

  • 作为环境变量
  • 挂载机密存储卷

作为环境变量使用机密

作为环境变量使用机密:

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

在容器中,机密对象中的键值对以普通环境变量的方式访问。

在容器内执行命令:

echo $SECRET_USERNAME
admin
echo $SECRET_PASSWORD
1f2d1e2e67df

挂载机密存储卷访问机密

apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
  - name: mypod
    image: redis
    volumeMounts:
    - name: foo
      mountPath: "/etc/foo"
      readOnly: true
  volumes:
  - name: foo
    secret:
      secretName: mysecret

在挂载机密卷的容器中,机密键值对以文件的形式出现,文件名是键名,键值以base-64解码并存储在这些文件中。

在容器内执行命令:

ls /etc/foo/
username
password
cat /etc/foo/username
admin
cat /etc/foo/password
1f2d1e2e67df


浙ICP备17015664号 浙公网安备 33011002012336号 联系我们 网站地图  
@2019 qikegu.com 版权所有,禁止转载