如何将来自Google Secret Manager的机密作为环境变量注入Kubernetes Pod中?

问题描述

在布莱恩的一生中,我该怎么做?

Terraform用于在GCP中创建SQL Server实例。 根密码和用户密码是随机生成的,然后放入Google Secret Manager中。 数据库的IP通过私有DNS区域公开。

我现在如何获取用户名和密码来访问数据库到我的K8s集群?在此处运行Spring Boot应用。

这是我想到的一种选择:

在部署中,我添加了initContainer

- name: secrets
  image: gcr.io/google.com/cloudsdktool/cloud-sdk
  args: 
  - echo "DB_PASSWORD=$(gcloud secrets versions access latest --secret=\"$NAME_OF_SECRET\")" >> super_secret.env

好的,现在怎么办?如何从这里将其放入我的应用程序容器?

还有bitnami/sealed-secrets之类的选项,由于设置已经使用Terraform并将机密信息保存在GCP中,因此我不喜欢它们。使用sealed-secrets时,我可以跳过使用秘密管理器。与Vault IMO相同。

解决方法

如何从这里将其放入我的应用程序容器?

您可以使用volume来存储密钥,并将相同的卷安装在init容器和主容器中,以便与init容器中的主容器共享密钥。

apiVersion: v1
kind: Pod
metadata:
  name: my-app
spec:
  containers:
  - name: my-app
    image: my-app:latest
    volumeMounts:
    - name: config-data
      mountPath: /data
  initContainers:
  - name: secrets
    image: gcr.io/google.com/cloudsdktool/cloud-sdk
    args: 
    - echo "DB_PASSWORD=$(gcloud secrets versions access latest --secret=\"$NAME_OF_SECRET\")" >> super_secret.env
    volumeMounts:
    - name: config-data
      mountPath: /data
  volumes:
  - name: config-data
    emptyDir: {}
,

volumes的{​​{1}}与medium: Memory一起使用,以确保不会保留机密。

...
volumes:
      - name: scratch
        emptyDir:
          medium: Memory
          sizeLimit: "1Gi"
...
,

在评论中的其他答案和建议之外,我想提出两个您可能会发现有趣的工具。

第一个是secret-init

secrets-init是一个设计为PID 1的简约初始化系统 内部容器环境,并与 多重机密管理员服务,例如Google Secret Manager

第二个是kube-secrets-init

kube-secrets-init是一个Kubernetes变异入网卷, 会突变使用特殊前缀环境的所有K8s Pod 直接或来自Kubernetes的Secret或ConfigMap变量。

它还支持与Google Secret Manager集成:

用户可以将Google秘密名称(以gcp:secretmanager:前缀)作为环境变量值。 secrets-init将使用指定名称将任何环境值解析为引用的机密值。

这里有一个很好的article

,

您可以使用 spring-cloud-gcp-starter-secretmanager 从 Spring 应用程序本身加载机密。

文档 - https://cloud.spring.io/spring-cloud-gcp/reference/html/#secret-manager

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...