自动将 imagePullSecrets 添加到 ServiceAccount

Tin*_*naC 5 kubernetes

我们正在为 RBAC 使用 ServiceAccounts,因此有多个 SA 在起作用,以允许我们通过 RoleBindings 适当地调整访问。

我们还使用私有注册表,因此有 imagePullSecrets 用于从私有注册表中提取图像。我正在尝试提出一个解决方案,通过该解决方案,在命名空间内创建的所有 SA 将默认获取应用于添加到它们的默认 SA 的 imagePullSecrets 列表,以便当我们部署使用该服务的 Pod 时(通常是正确的)在 SA 之后),serviceAccount 已经配置为使用 imagePullSecrets 来检索图像。

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

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

vic*_*rtv 11

正如我在另一个帖子中回答的:

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

kubectl patch serviceaccount default -p '{"imagePullSecrets": [{"name": "mySecret"}]}'
Run Code Online (Sandbox Code Playgroud)


Tho*_*ten 6

之前已经说过,没有标准的 kubernetes 方法可以在集群级别全局定义私有注册表机密。仅上面提到的解决方案就已经很棒了。其他建议(即这里),我也觉得不满意。

我们需要的是定义一次私有注册表秘密并将其用于imagePullSecrets每个 ServiceAccount 的可能性。

Titansoft 的 magepullsecret-patcher就可以做到这一点。它会在所有命名空间中填充提供的图像拉取机密,并修补所有 ServiceAccounts 以使用该机密作为其imagePullSecret. 然而,Titansoft 的 magepullsecret-patcher仅适用于一个私有注册表机密。

在我的用例中,我有多个私有容器注册表,我想在所有集群的命名空间中授予它们访问权限。

因此,我使用neutryno 的 imagepullsecret-serviceaccount-patcher方法。它利用 mittwald 的 kubernetes-replicator在所有命名空间中复制私有注册表机密。最重要的是,neutryno 的 imagepullsecret-serviceaccount-patcher修补所有服务帐户imagePullSecrets以包含定义的私有注册表机密(<- 如果您愿意,可以是多个)。


Tin*_*naC 3

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

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

imagePullSecrets:
    - name: secret1
    - name: secret2
Run Code Online (Sandbox Code Playgroud)

(等等)我们在 Ansible 环境中工作,因此能够利用 Jinja 模板,但我认为该方法通常适用。