如何使用 Spring Boot 将 Google Secret Manager 中的秘密作为环境变量注入 Kubernetes Pod 中?

Mor*_*lst 6 spring-boot kubernetes google-secret-manager

为了布莱恩的生命,我该怎么做?

Terraform用于在 GCP 中创建 SQL Server 实例。Root密码和用户密码是随机生成的,然后放入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
Run Code Online (Sandbox Code Playgroud)

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

还有一些bitnami/sealed-secrets我不喜欢的选项,因为设置已经在使用Terraform并将机密保存在 GCP 中。使用时sealed-secrets我可以跳过使用秘密管理器。与国际海事组织相同Vault

aci*_*uji 5

除了评论中的其他答案和建议之外,我还想推荐两个您可能会感兴趣的工具。

第一个是Secret-init

secrets-init是一个简约的初始化系统,设计为在容器环境中作为 PID 1 运行,并且它与多个秘密管理器服务(例如Google Secret Manager)集成

第二个是kube-secrets-init

kube-secrets-init是一个 Kubernetes 变异准入 Webhook,它可以直接或从 Kubernetes 作为 Secret 或 ConfigMap 来变异任何使用特殊前缀环境变量的 K8s Pod。

它还支持与 Google Secret Manager 集成:

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

这是一篇关于它如何工作的好文章。


小智 1

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

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