1

我是 Kubernetes 的初学者。我创建了一个秘密文件并在部署 yaml 文件中引用它。

应用程序-secret.yaml

apiVersion: v1
kind: Secret
metadata:
  name: app-secret
data:
  username: YWRtaW4=
  password: YWRtaW4=

部署.yaml

env:
          - name: DEPLOY_ENV
            value: ${env}
          - name: NAMESPACE_NAME
            valueFrom:
                fieldRef:
                  fieldPath : metadata.namespace
          - name: APP_USERNAME
            valueFrom:
                secretKeyRef:
                  name: app-secret
                  key: username
          - name: APP_PASSWORD
            valueFrom:
                secretKeyRef:
                  name: app-secret
                  key: password

使用命令kubectl get secret pod-54rfxd -n dev-ns -o json时,它仅以编码格式打印用户名和密码。当我使用命令查询环境变量列表时kubectl exec pod-54rfxd -n dev-ns -- printenv,它给出了以下结果。

APP_USERNAME=admin
APP_PASSWORD=admin

为什么它在环境变量中不是编码格式。您能否让我知道原因,是否可以将其编码为编码格式?

4

1 回答 1

1

创建密钥时,密钥会以base64 编码格式存储。默认情况下,将机密添加或注入到 pod 或部署 Kubernetes 时,使用base64解码机密,因此您从操作系统获取纯文本作为环境变量。

还有其他一些选项可以在静止时加密而不是编码

https://cloud.google.com/kubernetes-engine/docs/how-to/encrypting-secrets

https://docs.oracle.com/en-us/iaas/Content/ContEng/Tasks/contengencryptingdata.htm

是否有可能以编码格式保存它?

您可以做的是将编码的 .env 文件保存到 secret 中,并将该文件挂载到部署路径中,应用程序可以访问.env文件,同时对其中的内容进行编码。

kubectl exec pod-54rfxd -n dev-ns -- printenv

只有当您拥有集群的管理员权限时才能运行此命令,否则其他人无法在 pod 内访问。

于 2021-04-19T05:25:22.017 回答