3

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

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

所以我认为肯定有一种方法可以让我以我的云提供商的官方方式(谷歌云平台 - 秘密管理器)管理秘密。

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

我天真的猜测是这样的:

secretGenerator:
 - name: juicy-environment-config
   google-secret-resource-id: projects/133713371337/secrets/juicy-test-secret/versions/1
   type: some-google-specific-type
  • 这是可能吗?
  • 这个例子会是什么样子?
  • 这是在哪里记录的?
  • 如果这是不可能的,我有什么选择?
4

2 回答 2

3

我不知道有一个插件。Kustomize 中的插件系统有些新(大约 6 个月前添加),所以到目前为止还没有大量的插件系统,而 Secrets Manager 也只有几周的历史。你可以在https://github.com/kubernetes-sigs/kustomize/tree/master/docs/plugins找到文档来编写一个。它链接到一些用于秘密管理的 Go 插件,因此您可能可以使用其中一个并将其重新设计为 GCP API。

于 2020-02-01T23:52:16.500 回答
1

为此有一个 Go 插件(我帮助编写了它),但直到更新的 Kustomize 版本才支持插件,因此您需要直接安装 Kustomize 并像运行它kustomize build <path> | kubectl apply -f -而不是kubectl -k. 无论如何,这是一个好主意,因为在较新版本的 Kustomize 中,除了 kubectl 内置的功能之外,还有许多其他有用的功能。

示例中所示,安装插件后(或者您可以在 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它时,它会自动从谷歌秘密管理器中检索你的秘密值并输出 Kubernetessecret对象。

于 2020-09-30T18:42:26.347 回答