是否可以在命名空间之间共享ServiceAccount或以其他方式从其他命名空间使用ServiceAccount启动Pod?
我们正在寻求使用保管库在动态开发环境之间存储公共机密数据。经过HERE的良好散步之后,我们能够验证和提取单个名称空间的秘密。但是,在我们的用例中,我们将在生命周期中为每个开发环境创建一个新的命名空间。
如果可能的话,我们希望避免同时为每个名称空间配置具有新auth后端的保管库。
答案 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$
如果要以尝试的方式共享机密或帐户,则根本不需要使用保管库。
您可能只需要自动执行此过程,而不是共享帐户。