我在将图像从工件注册表拉到kubernetes pod时遇到问题。
我已经在工件注册表中创建了存储库,并推送了带有标签的docker图像。
当我试图在kubernetes中部署映像时,我遇到了ErrImagePull问题。
我已尝试在下执行命令
gcloud describe pod {podname}
在事件中,我看到以下问题
Failed to pull image: rpc error: failed to resolve image: unexpected status: 403 Forbidden
使用默认服务帐户的群集pod。我尝试在gcp控制台中为默认服务帐户提供工件读取器权限。
但不起作用。有人能帮我吗?
提前谢谢。
第一步是验证附加到GKE的节点池的服务帐户-->https://cloud.google.com/kubernetes-engine/docs/tutorials/authenticating-to-cloud-platform?_ga=2.108247426.-1476124671.1589389489
该服务帐户需要此角色-->工件注册表读取器角色/artifactregistry.Reader.
最后,验证deployment.yaml->
--image=LOCATION docker.pkg/dev/PROJECT-ID/REPOSTORY/image:TAG
首先在您的机器中设置gcloud CLI,并使用gcloud在GCP中对您的项目进行身份验证。
gcloud auth login
gcloud auth activate-service-account ACCOUNT --key-file=KEY-FILE
gcloud auth activate-service-account <svc-accnt-email> --key-file=serviceaccount.json
gcloud auth configure-docker
当您尝试配置专用存储库时,需要在pod/部署中配置imagePullSecretGKE不使用服务帐户直接向GCR进行身份验证,您需要配置imagePullSecret
kubectl create secret docker-registry gcr-auth-secret --docker-server=https://gcr.io --docker-username=oauth2accesstoken --docker-password=$(gcloud auth configure-docker) --docker-email=<service-account-email> --docker-server=us.gcr.io
这将在默认命名空间中创建一个秘密。基于您的名称空间,您可以添加-n <namespace>
来在您的名称中创建机密。您可以使用以下命令获得机密的值
kubectl get secret gcr-auth-secret -n <namespace> -o yaml
现在,您需要配置您的pod/deployment以使用此机密向GCE进行身份验证。你可以通过在你的yaml 中添加以下内容来做到这一点
containers:
- name: <cont_name>
image: <image>:<tag>
imagePullSecrets:
- name: gcr-auth-secret