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

GCP跨项目部署无法拉取Artifact Registry镜像的排查求助

镜像拉取失败的原因及解决方法

核心问题:权限授予的项目错误

你在项目A中给节点默认服务账号配置了Artifact Registry Reader角色,但镜像存储在项目B的Artifact Registry中。GCP的IAM权限是项目级别的,项目A的服务账号需要在项目B中被授予读取权限,才能访问项目B的资源。

解决步骤

  1. 获取项目A的节点默认服务账号邮箱
    节点默认服务账号格式为:[项目A的编号]-compute@developer.gserviceaccount.com
    可以通过GCP控制台项目A的「IAM与管理」→「服务账号」找到,或者用命令:

    gcloud projects describe [项目A ID] --format='value(projectNumber)'
    

    拼接成完整邮箱。

  2. 在项目B中授予服务账号权限
    登录GCP控制台的项目B,进入「Artifact Registry」→ 选择对应的仓库 → 点击「权限」→ 添加成员:

    • 输入项目A的服务账号邮箱
    • 授予Artifact Registry Reader角色
    • 保存配置
  3. 验证节点池访问范围
    确认节点池的cloud-platform范围已正确配置,节点能通过该范围获取完整的云平台权限:

    gcloud container node-pools describe [节点池名称] --cluster=[集群名称] --zone=[区域] --format='value(config.oauthScopes)'
    

    输出中需包含https://www.googleapis.com/auth/cloud-platform

额外排查点

  • 检查Artifact Registry的访问模式:如果仓库是私有模式,确保项目A的集群节点网络能访问Artifact Registry的端点,必要时配置VPC私有访问或防火墙规则。
  • 查看节点日志:登录节点执行journalctl -u kubelet,查看镜像拉取时的详细认证日志,确认是否有其他权限限制。
  • 临时测试:用kubectl run直接创建Pod测试拉取,排除Deployment配置问题:
    kubectl run test-ubuntu --image=europe-west1-docker.pkg.dev/B/docker-repo/ubuntu:latest --command -- sleep 123456 -n customnamespace
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 10:27:41