如何将Vault Secret注入Pod作为环境变量而不重写图像的入口点?



关于如何将保险库秘密作为环境变量注入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

这种方法的问题是它覆盖了容器映像的入口点(如这里所指出的),这是我想避免的。

是否有可能导入vault secret作为环境变量而不覆盖底层映像的默认命令和参数?

一个可靠地用我的图像的原始入口点替换<entrypoint script>而不硬编码的解决方案也是可以的。

可靠地替代我的图像的原始入口点没有硬编码它也会好的。

您所引用的链接解决方案就是这种解决方案的一个例子。

为了详细说明,假设您的图像的原始入口点是<entrypoint script>。根据金库的文件,你需要提供机密。您分享的解决方案使用command覆盖了原来的入口点,它变成了sh -c。它的参数(args)由'source /vault/secrets/config && <entrypoint script>指定。当新的入口点运行时,它将获取秘密并运行原来的入口点。

我已经使用了多个diff选项第三方,CRD等,您可以checkout Vault- CRD Vault作为源并同步到Configmap秘密或但它是base64编码的不是和CM &secret可以作为Env变量注入到部署。

另一种选择

如果你想用vault部署和你可以使用

annotations:
vault.hashicorp.com/agent-image: <Agent image>
vault.hashicorp.com/agent-inject: "true"
vault.hashicorp.com/agent-inject-secret-secrets: kv/<Path-of-secret>
vault.hashicorp.com/agent-inject-template-secrets: |2
{{- with secret "kv/<Path-of-secret>" -}}
#!/bin/sh
set -e
{{- range $key, $value := .Data.data }}
export {{ $key }}={{ $value }}
{{- end }}
exec "$@"
{{- end }}
vault.hashicorp.com/auth-path: auth/<K8s cluster for auth>
vault.hashicorp.com/role: app

这将在您的POD中创建文件。

在进入点调用之前执行这个文件,它将在POD中设置env变量。

runapp

#!/bin/bash
if [ -f '/vault/secrets/secrets' ]; then
source '/vault/secrets/secrets'
fi
node <path-insnide-docker>/index.js

Dockerfileentrypoint如果使用shell脚本文件,则无需提及CMD部署在规范。

相关内容

  • 没有找到相关文章