Jenkins Helm Chart – 解决 Kubernetes 插件从私有 GCR 仓库拉取镜像的权限问题

37次阅读
没有评论

问题描述

在使用 Helm 部署 Jenkins 到私有的 Kubernetes 仓库时,遇到了从私有 Google Container Registry (GCR) 仓库拉取镜像的权限问题。在 Jenkins 中,拉取镜像失败,显示错误信息为 “unauthorized: You don’t have the needed permissions to perform this operation, and you may have invalid credentials.” 用户希望找到解决此错误的方法,而不是在管道层面上明确指定凭据信息。

解决方案

请注意以下操作可能受到 Kubernetes 版本或配置差异的影响,请谨慎操作,并确保备份重要数据。

用户在 Helm 部署的 Jenkins 中出现拉取镜像权限问题,通常是由于服务账户(ServiceAccount)没有正确的镜像拉取凭据。以下是解决该问题的两种常见方法。

方案1: 为 Jenkins 服务账户添加镜像拉取凭据

在 Kubernetes 中,可以为服务账户指定镜像拉取凭据(imagePullSecrets),让其可以访问私有的 GCR 仓库。以下是具体的步骤:

  1. 使用 kubectl 命令更新 Jenkins 服务账户的镜像拉取凭据。在下面的命令中,将 gcr-json-key 替换为你的凭据密钥的名称,jenkins 替换为正确的服务账户名称,namespace 替换为 Jenkins 所在的命名空间:
kubectl -n namespace patch serviceaccount jenkins -p '{"imagePullSecrets": [{"name": "gcr-json-key"}]}'

确保将 namespace 替换为 Jenkins 实际所在的命名空间,而不是字面值 “namespace”。

方案2: 确保正确应用凭据

用户在回复中提到之前应用了凭据但是出现了问题,这可能是凭据没有正确应用到 Jenkins 服务账户上。如果之前已经创建了正确的凭据,但在默认的 default 服务账户上应用了而不是 Jenkins 的服务账户,那么可以尝试以下步骤来修复问题:

  1. 使用 kubectl 命令更新 Jenkins 服务账户的镜像拉取凭据。确保将 jenkins 替换为正确的服务账户名称,namespace 替换为 Jenkins 所在的命名空间:
kubectl -n namespace patch serviceaccount jenkins -p '{"imagePullSecrets": [{"name": "gcr-json-key"}]}'

确保将 namespace 替换为 Jenkins 实际所在的命名空间,而不是字面值 “namespace”。

这两种方法都是为 Jenkins 服务账户添加正确的镜像拉取凭据,以便其可以从私有 GCR 仓库拉取镜像。如果您已经尝试了以上方法,但仍然无法解决问题,请确保凭据的正确性并确保 GCR 仓库的访问权限设置正确。

正文完