问题描述
我是 Kubernetes 的初学者。我创建了一个秘密文件并在部署 yaml 文件中引用了它。
app-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 编码 格式存储。默认情况下,将密钥添加或注入到 pod 或部署 Kubernetes 中,使用 base64 解码密钥,因此您从 OS 获取纯文本作为环境变量。
还有一些其他选项可以在休息而不是编码时加密。
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内部。