在 Kubernetes 中使用具有多个动态命名空间的 Vault

And*_*den 2 kubernetes hashicorp-vault

是否可以在命名空间之间共享 ServiceAccount 或以某种方式使用来自不同命名空间的 ServiceAccount 启动 pod?

我们希望使用 Vault 在动态开发环境之间存储公共秘密数据。遵循非常好的步行,尽管HERE,我们能够验证和提取单个命名空间的机密。然而,在我们的用例中,我们将为每个开发环境的生命周期创建一个新的命名空间。

如果可能,我们希望避免还必须为每个命名空间配置具有新身份验证后端的保险库。

Dav*_*aze 6

创建 Vault 角色时,您可以配置bound_service_account_namespaces为特殊值*,并允许来自任何命名空间的固定服务帐户名称。要改编文档中的“创建角色”示例

vault write auth/kubernetes/role/demo \
    bound_service_account_names=vault-auth \
    bound_service_account_namespaces='*' \
    policies=default \
    ttl=1h
Run Code Online (Sandbox Code Playgroud)

您必须在每个命名空间中重新创建 Kubernetes 服务帐户,并且它必须具有在角色中指定的确切名称。但是,Kubernetes 服务帐户是单个 k8s 对象,它并不比您已有的 Deployments、Services、ConfigMaps 和 Secrets 难;此模式不需要任何 Vault 重新配置。

(如果您使用的是 Helm 之类的模板工具,则服务帐户不能遵循以下命名约定{{ .Release.Name }}-{{ .Chart.Name }}:Vault 似乎没有与此名称匹配的任何类型的模式。)