Kubernetes 自动将imagePullSecrets添加到ServiceAccount

Kubernetes 自动将imagePullSecrets添加到ServiceAccount,kubernetes,Kubernetes,我们正在为RBAC使用ServiceAccounts,因此有多个SA在发挥作用,使我们能够通过角色绑定适当地调整访问 我们还使用私有注册表,因此有imagePullSecrets用于从私有注册表中提取图像。我正在尝试提出一个解决方案,通过该解决方案,在一个名称空间中创建的所有SA在默认情况下都会获得应用于添加到其中的默认SA的imagePullSecrets列表,这样当我们使用服务部署POD时(通常在SA之后),serviceAccount已配置为使用imagePullSecrets检索图像 有

我们正在为RBAC使用ServiceAccounts,因此有多个SA在发挥作用,使我们能够通过角色绑定适当地调整访问

我们还使用私有注册表,因此有imagePullSecrets用于从私有注册表中提取图像。我正在尝试提出一个解决方案,通过该解决方案,在一个名称空间中创建的所有SA在默认情况下都会获得应用于添加到其中的默认SA的imagePullSecrets列表,这样当我们使用服务部署POD时(通常在SA之后),serviceAccount已配置为使用imagePullSecrets检索图像

有没有人想出一个优雅的方法来处理这个问题?我确实检查了pods是否可以应用多个serviceAccount-N来保存imageSecrets,1来映射到RBAC。和/或,有人能提出另一种看待问题的方法吗


[更新:澄清-挑战在于跨多个服务帐户共享imagePullSecrets集,最好不需要明确地将它们添加到每个ServiceAccount定义中。私有注册表应被视为类似于dockerhub:访问注册表的用户通常希望能够使用用户信息进行拉取然后用于跟踪谁在拉取图像,偶尔也用于阻止用户拉取他们本不应该访问的图像,因为“这东西只是不用于更广泛的消费”的原因。]

AFAIK。您唯一能做的就是将不同的
ImagePullSecret
s与不同的命名空间相关联,然后将用户的访问权限限制在该命名空间上。这样,这些用户就可以使用这些机密创建部署/守护程序/状态集/POD


但是您可能会遇到名称空间过多的问题。

您可以通过三个步骤来完成:

创造秘密

kubectl create secret docker-registry myregistrykey --docker-server=DOCKER_REGISTRY_SERVER --docker-username=DOCKER_USER --docker-password=DOCKER_PASSWORD --docker-email=DOCKER_EMAIL
创建服务帐户(这里您绑定了秘密)

创建角色绑定(此处绑定serviceAccount和角色)


记录似乎对我们有效的决议:

将imagePullSecrets列表的文本隐藏在变量中,然后在ServiceAccounts模板中使用该变量。如果没有专用注册表,则该变量为空字符串。如果有专用注册表,则该变量包含

imagePullSecrets:
    - name: secret1
    - name: secret2
(等等,等等) 我们在Ansible环境中工作,因此能够利用Jinja模板,但我认为这种方法通常适用。

正如我所回答的:

要轻松地将imagePullSecrets添加到serviceAccount,可以使用 补丁命令:

kubectl patch serviceaccount default -p '{"imagePullSecrets": [{"name": "mySecret"}]}'

前面已经说过,没有标准的kubernetes方法在集群级别全局定义私有注册表机密。 以上提到的解决方案几乎都很好。其他建议(即),我也不满意

所需要的是能够定义一个私有注册表密码,并将其用作每个ServiceAccount的
imagePullSecrets

可以这样做。它会在所有名称空间中填充提供的映像pull secret帐户,并修补所有ServiceAccount以将该密码用作其
imagePullSecret
。但是,它仅适用于一个私有注册表密码

在我的用例中,我有多个私有容器注册表,我希望在集群的所有名称空间中为其提供访问权限


因此,我使用了这种方法。它利用在所有名称空间中复制私有注册表机密。在此基础上,对所有服务帐户的
imagePullSecrets
进行修补,以包含已定义的私有注册表机密(感谢回复-请参阅上面发布的更新以更好地澄清问题/需求。感谢回复-请参阅上面发布的更新以更好地澄清问题/需求。明白了。更新了答案。K8s对此没有真正的解决方案。
imagePullSecrets:
    - name: secret1
    - name: secret2
kubectl patch serviceaccount default -p '{"imagePullSecrets": [{"name": "mySecret"}]}'