Kubernetes Secret 未以编码格式存储在环境变量中

Kubernetes Secret is not stored in encoded format in environment variables

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

应用-secret.yaml

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

deploy.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

为什么它在环境变量中不是编码格式。你能告诉我原因吗,是否可以编码格式?

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

还有一些其他选项可以 encryptrest 而不是 encode.

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

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

is it possible to have it in encoded format?

你可以做的是将编码的 .env 文件保存到秘密中,并将该文件挂载到部署路径中,应用程序可以访问 .env 文件,而其中的内容它将被编码。

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

这个命令只有你可以 运行 也许当你有集群的管理员权限时,否则其他人不能在 pod 内访问。