案例
我正在学习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
2条答案
按热度按时间neekobn81#
错误:ErrImagePull:无法获取oauth令牌:意外状态:403 Forbidden是由于Artifact注册表没有必要的权限来提取映像的授权问题。
请参阅此故障排 debugging 误4xx问题连接到GKE集群时的身份验证和授权错误。设置环境变量以打印访问令牌,并按照故障排 debugging 误4xx问题中提到的步骤验证您的访问令牌是否有效。
根据Troubleshoot doc,您还可以检查以下内容:
ghg1uchk2#
我已经遵循了@Hemanth Kumar的提示,最终解决了我的问题,为特定的存储库添加了一个Artifact Registry Reader角色到GKE中运行的服务帐户用户。
Google Cloud Console: