将Vault机密注入Kubernetes Pod环境变量

时间:2020-04-15 22:09:57

标签: postgresql kubernetes sonarqube hashicorp-vault kubernetes-secrets

我正在尝试在需要PostgresSQL的Kubernetes环境中安装Sonarqube。 我正在使用外部Postgres实例,并且在Vault中设置了crednetials kv机密。 SonarQube舵图在容器中创建一个环境变量,该变量采用Postgres的用户名和密码。

如何将我的保险柜中的秘密注入运行在Kubernetes上的sonarqube pod的环境变量中?

创建Kubernetes机密并在掌舵图中使用该机密是可行的,但是我们正在管理Vault上的所有机密,需要将Vault机密注入到Pod中。

谢谢

5 个答案:

答案 0 :(得分:2)

如果您在使用领事sidecar容器注入机密时遇到问题,并且发现很难设置,可以使用以下命令:https://github.com/DaspawnW/vault-crd

这是库自定义资源定义,可将库环境变量直接同步到kuberntes secret,因此现在您可以将secret直接添加到POD。与secretref

vault crd创建一个Pod,您必须在其中传递Vault Service名称或URL,使用该应用程序可以使用该应用程序连接到Vault,并且在Vault值更改时,它将自动将值同步到kubernetes secret。

https://vault.koudingspawn.de/

答案 1 :(得分:1)

您需要使用一个父流程,该流程将与Vault对话并检索值,然后运行实际流程。 https://github.com/hashicorp/envconsul是Vault小组的官方工具,但是如果您要查找的话,还有许多其他选择。

答案 2 :(得分:1)

有两种方法可以将保险库机密作为 ENV 变量注入 k8s pod。

1) 使用保险库代理注入器

应创建一个模板,将 Vault 机密导出为环境变量。

spec:
  template:
    metadata:
      annotations:
        # 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 }}

并且应用程序容器应该在启动期间获取这些文件。

args:
  ['sh', '-c', 'source /vault/secrets/config && <entrypoint script>']

参考:https://www.vaultproject.io/docs/platform/k8s/injector/examples#environment-variable-example

2) 使用banzaicloud bank-vault

参考:https://banzaicloud.com/blog/inject-secrets-into-pods-vault-revisited/

评论:

这两种方法都绕过了 k8s 安全性,因为机密没有存储在 etcd 中。 此外,Pod 在这两种方法中都不知道 vault。 因此,无需深入比较即可采用其中任何一种。

对于 vault-k8s 和 vault-helm 用户,我推荐第一种方法。

答案 3 :(得分:0)

答案 4 :(得分:-1)

kubernetes文档(https://kubernetes.io/docs/concepts/configuration/secret/#using-secrets-as-environment-variables)中有一个示例YAML,其中用秘密填充了环境变量。

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