在 Kubernetes 中,如何将文件(在 Kubernetes 卷中)中的 secret 公开为环境变量?
背景:
我关注了Google Cloud Platform GKE Vault Demo在其中,他们展示了如何“连续将 secret 的内容提取到本地文件位置。这允许应用程序正常从 pod 内的文件读取 secret ,而无需进行修改以直接与 Vault 交互。”
我想知道如何将这些 secret 公开为环境变量(而不是文件)以供其他应用程序容器使用。
最佳答案
我找到了如何将文件中的 secret 注入(inject)到应用程序容器中。
首先, secret 文件每行的格式应为 KEY="VALUE"
。
对于那些使用 Consul Template 从 Vault 获取 secret 的人,您可以这样做:
- name: CT_LOCAL_CONFIG
value: |
vault {
ssl {
ca_cert = "/etc/vault/tls/ca.pem"
}
retry {
backoff = "1s"
}
}
template {
contents = <<EOH
{{- with secret "secret/myproject/dev/module1/mongo-readonly" }}
MONGO_READ_HOSTNAME="{{ .Data.hostname }}"
MONGO_READ_PORT="{{ .Data.port }}"
MONGO_READ_USERNAME="{{ .Data.username }}"
MONGO_READ_PASSWORD="{{ .Data.password }}"
{{- end }}
{{- with secret "secret/myproject/dev/module2/postgres-readonly" }}
POSTGRES_READ_HOSTNAME="{{ .Data.hostname }}"
POSTGRES_READ_PORT="{{ .Data.port }}"
POSTGRES_READ_USERNAME="{{ .Data.username }}"
POSTGRES_READ_PASSWORD="{{ .Data.password }}"
{{- end }}
EOH
destination = "/etc/secrets/myproject/config"
}
这将生成正确的 KEY="VALUE"
形式的 secret 文件。
从通过 volumeMount
共享到应用程序容器的 secret 文件中,我们可以将 secret 作为环境变量注入(inject),如下所示:
command: ["/bin/bash", "-c"] # for Python image, /bin/sh doesn't work, /bin/bash has source
args:
- source /etc/secrets/myproject/config;
export MONGO_READ_HOSTNAME;
export MONGO_READ_PORT;
export MONGO_READ_USERNAME;
export MONGO_READ_PASSWORD;
export POSTGRES_READ_HOSTNAME;
export POSTGRES_READ_PORT;
export POSTGRES_READ_USERNAME;
export POSTGRES_READ_PASSWORD;
python3 my_app.py;
这样,我们就不必修改需要环境变量中的 secret 的现有应用程序代码(用于使用 Kubernetes Secrets)。
关于kubernetes - 在 Kubernetes 中,将文件中的 secret 公开为环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55962949/