如何将 Vault Secret 作为环境变量注入到 Pod 中而不覆盖镜像的入口点?

问题描述 投票:0回答:2

我按照 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>
且无需对其进行硬编码的解决方案也可以。

kubernetes hashicorp-vault
2个回答
1
投票

可靠替代的解决方案 我的图像的原始入口点,如果没有硬编码,它也会是 好的。

您引用的链接解决方案就是此类解决方案的一个示例。

为了详细说明,假设您的图像的原始入口点是

<entrypoint script>
。根据 Vault 文档,您需要获取机密信息。您共享的解决方案使用
command
覆盖原始入口点,它变成了
sh -c
。它的参数 (
args
) 由
'source /vault/secrets/config && <entrypoint script>
指定。当新入口点运行时,它会获取秘密并运行原始入口点。


0
投票
© www.soinside.com 2019 - 2024. All rights reserved.