我按照 this 解释如何将保管库机密作为环境变量注入 Kubernetes 容器:
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-deployment
labels:
app: web
spec:
replicas: 1
selector:
matchLabels:
app: web
template:
metadata:
labels:
app: web
annotations:
vault.hashicorp.com/agent-inject: 'true'
vault.hashicorp.com/role: 'web'
vault.hashicorp.com/agent-inject-secret-config: 'secret/data/web'
# Environment variable export template
vault.hashicorp.com/agent-inject-template-config: |
{{ with secret "secret/data/web" -}}
export api_key="{{ .Data.data.payments_api_key }}"
{{- end }}
spec:
serviceAccountName: web
containers:
- name: web
image: alpine:latest
command:
['sh', '-c']
args:
['source /vault/secrets/config && <entrypoint script>']
ports:
- containerPort: 9090
这种方法的问题在于它会覆盖容器图像的入口点(如here所指出的),我想避免这种情况。
是否可以将保管库机密导入为环境变量而不覆盖底层映像的默认命令和参数?
一个可以可靠地用图像的原始入口点替换
<entrypoint script>
且无需对其进行硬编码的解决方案也可以。
可靠替代的解决方案 我的图像的原始入口点,如果没有硬编码,它也会是 好的。
您引用的链接解决方案就是此类解决方案的一个示例。
为了详细说明,假设您的图像的原始入口点是
<entrypoint script>
。根据 Vault 文档,您需要获取机密信息。您共享的解决方案使用 command
覆盖原始入口点,它变成了 sh -c
。它的参数 (args
) 由 'source /vault/secrets/config && <entrypoint script>
指定。当新入口点运行时,它会获取秘密并运行原始入口点。
有机会使用注释吗
vault-hashicorp-com-agent-inject-command
?
https://developer.hashicorp.com/vault/docs/platform/k8s/injector/annotations#vault-hashicorp-com-agent-inject-command