使用 kustomize 直接从 gcloud secrets manager 中查找 secret 作为 secretGenerator

Look up secrets from gcloud secrets manager directly as secretGenerator with kustomize

我正在使用 kubectl -k (kustomize) 设置我的 Kubernetes 集群。像任何其他此类安排一样,我在部署期间依赖于一些秘密。我想走的路线是使用 kustomizesecretGenerator 功能从文件或环境变量中获取我的秘密。

然而,以安全和可移植的方式管理上述文件或环境变量本身就是一项挑战。特别是因为我有 3 个单独的名称空间用于测试、阶段和生产,每个名称空间都需要一组不同的秘密。

所以我想肯定有一种方法可以让我以我的云提供商的官方方式管理机密(google 云平台 - 机密管理器)。

那么访问存储在秘密管理器中的秘密的 secretGenerator 会是什么样子?

我天真的猜测是这样的:

secretGenerator:
 - name: juicy-environment-config
   google-secret-resource-id: projects/133713371337/secrets/juicy-test-secret/versions/1
   type: some-google-specific-type

我不知道有这方面的插件。 Kustomize 中的插件系统有点新(大约 6 个月前添加),因此目前还没有大量的插件系统,而 Secrets Manager 才推出几周。不过,您可以在 https://github.com/kubernetes-sigs/kustomize/tree/master/docs/plugins 找到用于编写文档的文档。这链接到一些用于秘密管理的 Go 插件,因此您可以使用其中一个并将其重新工作到 GCP API。

is a Go plugin 用于此(我帮助编写),但直到更新版本的 Kustomize 才支持插件,因此您需要直接安装 Kustomize 并且 运行 它喜欢kustomize build <path> | kubectl apply -f - 而不是 kubectl -k。无论如何,这在我看来是个好主意,因为与 kubectl 中内置的功能相比,较新版本的 Kustomize 中还有许多其他有用的功能。

examples 中所示,安装插件后(或者您可以 运行 在 Docker 中安装插件,请参阅自述文件),您可以定义如下文件和将它们提交到版本控制:

my-secret.yaml

apiVersion: crd.forgecloud.com/v1
kind: EncryptedSecret
metadata:
  name: my-secrets
  namespace: default
source: GCP
gcpProjectID: my-gcp-project-id
keys:
- creds.json
- ca.crt

在你的kustomization.yaml中你会添加

generators:
- my-secret.yaml

并且当您 运行 kustomize build 时,它会自动从 Google Secret Manager 中检索您的秘密值并输出 Kubernetes secret 对象。