将Vault与Kubernetes中的多个动态名称空间配合使用

时间:2018-10-29 22:22:54

标签: kubernetes hashicorp-vault

是否可以在命名空间之间共享ServiceAccount或以其他方式从其他命名空间使用ServiceAccount启动Pod?

我们正在寻求使用保管库在动态开发环境之间存储公共机密数据。经过HERE的良好散步之后,我们能够验证和提取单个名称空间的秘密。但是,在我们的用例中,我们将在生命周期中为每个开发环境创建一个新的命名空间。

如果可能的话,我们希望避免同时为每个名称空间配置具有新auth后端的保管库。

2 个答案:

答案 0 :(得分:1)

创建保险柜角色时,您可以configure bound_service_account_namespaces to be the special value *,并允许来自任何名称空间的固定服务帐户名。适应“创建角色” example from the documentation

vault write auth/kubernetes/role/demo \
    bound_service_account_names=vault-auth \
    bound_service_account_namespaces='*' \
    policies=default \
    ttl=1h

您必须在每个名称空间中重新创建Kubernetes服务帐户,并且该帐户必须具有在角色中指定的确切名称。但是,Kubernetes服务帐户是单个k8s对象,它不比您已经拥有的Deployments,Services,ConfigMap和Secrets难。此模式不需要重新配置保险柜。

(如果您使用的是Helm之类的模板工具,则该服务帐户将无法遵循{{ .Release.Name }}-{{ .Chart.Name }}这样的命名约定:此名称似乎与保险柜没有任何模式匹配。)< / p>

答案 1 :(得分:0)

服务帐户具有命名空间,因此不能共享,因此您可以将令牌从一个帐户复制到另一个帐户,但这不是推荐的方式。

C02W84XMHTD5:kubernetes-gitlab iahmad$ kubectl api-resources --namespaced | grep service
serviceaccounts             sa                                       true         ServiceAccount
services                    svc                                      true         Service
C02W84XMHTD5:kubernetes-gitlab iahmad$

如果要以尝试的方式共享机密或帐户,则根本不需要使用保管库。

您可能只需要自动执行此过程,而不是共享帐户。