You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GKE部署Spring Boot应用遇ErrImagePull:403禁止获取OAuth令牌

问题

按照《在Google Kubernetes Engine上部署Spring Boot Java应用》教程操作时,部署Docker镜像到Kubernetes后Pod无法启动,出现ErrImagePull错误。

部署命令:

kubectl create deployment questy-java --image=us-central1-docker.pkg.dev/quizdev/codelabrepo/questy-java:v1

执行kubectl describe pod questy-java-54dbd6ccd4-5cb94查看事件,核心错误:

failed to authorize: failed to fetch oauth token: unexpected status: 403 Forbidden

已尝试操作:

  • 确认VPC网络的Private Google Access已启用
  • 安装gke-gcloud-auth-plugin后重新部署
  • 创建新的Artifact Registry仓库并重新部署
  • 重新构建Docker镜像并部署到新仓库
  • 通过Google Cloud Console直接部署镜像
  • 执行gcloud auth configure-docker us-central1-docker.pkg.dev
  • 确认镜像路径正确,本地可成功执行docker pull us-central1-docker.pkg.dev/quizdev/codelabrepo/questy-java:v1拉取镜像

原因分析

问题核心是GKE集群的节点服务账号没有权限访问Artifact Registry镜像仓库。本地能拉取镜像是因为使用了个人Google账号的权限,但GKE节点默认使用的是Compute Engine默认服务账号(或自定义节点服务账号),该账号缺少Artifact Registry Reader角色,导致节点尝试拉取镜像时无法通过授权,返回403 Forbidden错误。

最优解决方法

给GKE节点使用的服务账号添加Artifact Registry Reader角色,这是符合GCP最佳实践的优雅方案,无需手动管理镜像拉取密钥:

  1. 获取节点服务账号
    执行以下命令查看集群使用的节点服务账号:

    gcloud container clusters describe [你的集群名称] --zone [集群所在区域] | grep serviceAccount
    

    默认情况下,这个账号格式为[项目编号]-compute@developer.gserviceaccount.com。

  2. 添加权限
    执行以下命令给该服务账号添加Artifact Registry读取权限:

    gcloud projects add-iam-policy-binding [你的项目ID] \
      --member="serviceAccount:[节点服务账号完整名称]" \
      --role="roles/artifactregistry.reader"
    

权限生效后,删除现有Pod让Kubernetes重新创建,新Pod即可正常拉取镜像:

kubectl delete pod questy-java-54dbd6ccd4-5cb94

内容的提问来源于stack exchange,提问作者fascynacja

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 19:37:17