错误:ErrImagePull:无法获取oauth令牌:意外状态:403在Google Cloud上创建kubernetes部署时禁止

pobjuy32  于 2023-06-21  发布在  Kubernetes
关注(0)|答案(2)|浏览(260)

案例

我正在学习Tutorial:在Google Kubernetes Engine上将Sping Boot Java应用部署到Kubernetes。当我想将我的应用程序(它的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

我正在获取事件信息:

Events:
  Type     Reason     Age                From               Message
  ----     ------     ----               ----               -------
  Normal   Scheduled  36s                default-scheduler  Successfully assigned default/questy-java-54dbd6ccd4-tmdkl to gke-questy-java-cluster-default-pool-ca7ad417-lxkw
  Normal   Pulling    23s (x2 over 35s)  kubelet            Pulling image "us-central1-docker.pkg.dev/quizdev/codelabrepo/questy-java:v1"
  Warning  Failed     23s (x2 over 35s)  kubelet            Failed to pull image "us-central1-docker.pkg.dev/quizdev/codelabrepo/questy-java:v1": rpc error: code = Unknown desc = failed to pull and unpack image "us-central1-docker.pkg.dev/quizdev/codelabrepo/questy-java:v1": failed to resolve reference "us-central1-docker.pkg.dev/quizdev/codelabrepo/questy-java:v1": failed to authorize: failed to fetch oauth token: unexpected status: 403 Forbidden
  Warning  Failed     23s (x2 over 35s)  kubelet            Error: ErrImagePull
  Normal   BackOff    8s (x2 over 35s)   kubelet            Back-off pulling image "us-central1-docker.pkg.dev/quizdev/codelabrepo/questy-java:v1"
  Warning  Failed     8s (x2 over 35s)   kubelet            Error: ImagePullBackOff

这里似乎提到了根课程:
授权失败:无法获取oauth令牌:意外状态:403禁止访问
无论如何,教程没有提到任何额外的步骤来维护身份验证或授权。

我尝试过:

1.我已经检查了VPC网络 Jmeter 板,以查看是否启用了Private Google Access,并且它看起来很好:

1.我已经按照说明安装了gke-gcloud-auth-plugin:https://cloud.google.com/blog/products/containers-kubernetes/kubectl-auth-changes-in-gke。在此更改后重新创建部署没有帮助。
1.在Artifact Registry中创建了新的存储库,并尝试在那里部署我的映像
1.构建一个全新的Docker容器,并尝试将其部署到新的存储库中
1.尝试直接从Google Cloud Console部署questy-java镜像:

1.运行命令:

gcloud auth configure-docker us-central1-docker.pkg.dev

1.彻底检查了路径。我已经直接从Console复制并粘贴了映像的路径:

我也尝试运行命令:

docker pull \
        us-central1-docker.pkg.dev/quizdev/codelabrepo/questy-java:v1

很成功。

提问

这个错误的原因可能是什么?解决这个问题的最好方法是什么?

编辑

我已经直接从控制台检查了映像的路径,它是

us-central1-docker.pkg.dev/quizdev/codelabrepo/questy-java:v1
neekobn8

neekobn81#

错误:ErrImagePull:无法获取oauth令牌:意外状态:403 Forbidden是由于Artifact注册表没有必要的权限来提取映像的授权问题。

请参阅此故障排 debugging 误4xx问题连接到GKE集群时的身份验证和授权错误。设置环境变量以打印访问令牌,并按照故障排 debugging 误4xx问题中提到的步骤验证您的访问令牌是否有效。
根据Troubleshoot doc,您还可以检查以下内容:

  • 验证您正在推送的映像的完整路径是否正确。路径必须包括注册表主机名、Google Cloud项目ID、存储库和映像。例如:us-east1-docker.pkg.dev/my-project/my-rep
  • 验证提取映像的帐户是否具有从存储库读取的必要权限。您必须将Artifact Registry Reader角色授予运行时服务帐户,只有这样才有助于提取映像。
  • 如果您使用Docker或其他第三方工具,则必须:向与存储库交互的帐户授予权限。
  • 请参阅ImagePullBackOff和ErrImagePull,它们表示容器使用的映像无法从映像注册表加载。
ghg1uchk

ghg1uchk2#

我已经遵循了@Hemanth Kumar的提示,最终解决了我的问题,为特定的存储库添加了一个Artifact Registry Reader角色到GKE中运行的服务帐户用户。
Google Cloud Console:

相关问题