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

ArgoCD Image Updater无法拉取GCP Artifact Registry镜像问题求助

权限排查方案

问题背景

已完成以下配置:

  • 拥有具备artifactregistry.reader权限的ServiceAccount(argocd-gcr-secret@XXX.iam.gserviceaccount.com)
  • 通过Workload Identity绑定到ArgoCD的argocd-image-updater服务账号:
    gcloud iam service-accounts add-iam-policy-binding argocd-gcr-secret@XXX.iam.gserviceaccount.com --role roles/iam.workloadIdentityUser --member "serviceAccount:XXX.svc.id.goog[argocd/argocd-image-updater]"
    
  • 为argocd-image-updater服务账号添加GSA注解:
    kubectl -n argocd annotate serviceaccount argocd-image-updater iam.gke.io/gcp-service-account=argocd-gcr-secret@XXX.iam.gserviceaccount.com
    
  • 在argocd-image-updater的Pod内可以成功获取访问令牌并登录Artifact Registry:
    ACCESS_TOKEN=$(wget --header 'Metadata-Flavor: Google' http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token -q -O - | grep -Eo '"access_token":.*?[^\]",' | cut -d '"' -f 4)
    echo "oauth2accesstoken:$ACCESS_TOKEN"
    docker login -u oauth2accesstoken -p $ACCESS_TOKEN us-east1-docker.pkg.dev
    

但ArgoCD Image Updater运行时仍报错:

time="2023-10-16T23:03:38Z" level=debug msg="Considering this image for update" alias=myimage application=my-dev1-core image_name=XXX/dev1/core image_tag=3f7282a08ec3199505eaf72ed1109b67813a44 registry=us-east1-docker.pkg.dev
time="2023-10-16T23:03:38Z" level=debug msg="Using no version constraint when looking for a new tag" alias=myimage application=my-dev1-core image_name=XXX/dev1/core image_tag=3f7282a08ec319950560eaf72ed1109b67813a44 registry=us-east1-docker.pkg.dev
time="2023-10-16T23:03:38Z" level=error msg="Could not get tags from registry: Get \"https://us-east1-docker.pkg.dev/v2/XXX/dev1/core/tags/list\": denied: Permission \"artifactregistry.repositories.downloadArtifacts\" denied on resource \"projects/XXX/locations/us-east1/repositories/dev1\" (or it may not exist)" alias=myimage application=my-dev1-core image_name=XXX/dev1/core image_tag=3f7282a08ec319950560eaf72ed1109b67813a44 registry=us-east1-docker.pkg.dev
time="2023-10-16T23:03:38Z" level=info msg="Processing results: applications=1 images_considered=1 images_skipped=0 images_updated=0 errors=1"

排查步骤

1. 验证ServiceAccount的权限绑定范围

artifactregistry.reader角色确实包含artifactregistry.repositories.downloadArtifacts权限,但需确认该角色绑定在目标Artifact Registry仓库上,而非仅项目层级且仓库存在权限覆盖。执行命令查看SA在目标仓库的权限:

gcloud artifacts repositories get-iam-policy dev1 --location=us-east1 --project=XXX

检查输出中是否存在argocd-gcr-secret@XXX.iam.gserviceaccount.com的条目,且角色为roles/artifactregistry.reader。

2. 确认Pod使用的ServiceAccount

验证argocd-image-updater Pod实际使用的服务账号是否正确:

kubectl -n argocd get pod <argocd-image-updater-pod-name> -o jsonpath='{.spec.serviceAccountName}'

确保输出为argocd-image-updater。

3. 检查Workload Identity绑定的正确性

确认绑定命令中的成员格式无误,应为serviceAccount:[GKE_PROJECT_ID].svc.id.goog[argocd/argocd-image-updater],确保GKE_PROJECT_ID、命名空间、服务账号名完全匹配。

4. 验证令牌的权限与身份

在Pod内获取令牌后,解码查看其权限范围与身份:

echo $ACCESS_TOKEN | cut -d '.' -f 2 | base64 -d | jq

检查scope字段是否包含https://www.googleapis.com/auth/cloud-platform或https://www.googleapis.com/auth/devstorage.read_only,同时确认email字段为argocd-gcr-secret@XXX.iam.gserviceaccount.com。

5. 排查ArgoCD Image Updater的凭据配置

检查是否存在覆盖Workload Identity的自定义注册表凭据:

kubectl -n argocd get secrets | grep us-east1-docker.pkg.dev

若存在相关Secret,需删除或调整,让Image Updater使用Workload Identity的自动认证。

6. 重启Pod使配置生效

配置变更可能需要重启Pod才能生效:

kubectl -n argocd rollout restart deployment argocd-image-updater

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 11:35:23