在Kubernetes中,如何将文件(Kubernetes卷中)的机密公开为环境变量?
背景:
我遵循了Google Cloud Platform GKE Vault Demo,并在其中展示了如何”连续将机密内容提取到本地文件位置。这使应用程序可以正常地从吊舱内的文件中读取机密,而无需进行修改直接与保险柜进行交互。”
我想知道如何将这些秘密作为环境变量(而不是文件)公开给其他应用程序容器使用。
答案 0 :(得分:1)
如果您想使用音量公开它,也许有很多方法可以做到这一点。
而卷仅与一个吊舱相连,因此您可以使用秘密代替它。
您必须创建秘密yaml文件并将其附加到pod上,以便它将值作为环境变量公开。
apiVersion: v1
kind: Secret
metadata:
name: mysecret
type: Opaque
data:
username: YWRtaW4=
password: MWYyZDFlMmU2N2Rm
要从configmap 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
有关更多参考,您可以访问kubernetes官方文档: https://kubernetes.io/docs/concepts/configuration/secret/
您可以将卷的秘密公开为环境变量。
答案 1 :(得分:1)
感谢@cryanbhu,这实际上救了我。
也可以导出所有变量而不必将其列出:
command: ["/bin/bash", "-c"] # you can also just use sh for other images
args:
- source /etc/secrets/myproject/config;
export $(cut -d= -f1 /etc/secrets/myproject/config);
python3 my_app.py;
确认对我有用:)
答案 2 :(得分:0)
我发现了如何将文件中的秘密注入到应用程序容器中。
首先,机密文件的每一行的格式应为KEY="VALUE"
。
对于那些使用Consul Template从Vault中获取机密的人,您可以这样操作:
- 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"
格式的机密文件。
从通过volumeMount
与应用容器共享的机密文件中,我们可以将机密作为环境变量注入,如下所示:
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;
通过这种方式,我们不必修改现有的应用程序代码,因为它们需要环境变量的秘密(用于使用Kubernetes Secrets)。