kubernetes 无法将容器映像从私有Artifact Registry拉到GKE Autopilot,即使这些映像位于同一项目中

ffscu2ro  于 2023-02-11  发布在  Kubernetes
关注(0)|答案(1)|浏览(127)

根据下面的文章,我们似乎可以将容器图像从Artifact Registry拉到GKE,而不需要任何额外的身份验证,当它们在同一个项目中时。
https://cloud.google.com/artifact-registry/docs/integrate-gke
https://www.youtube.com/watch?v=BfS7mvPA-og
Error: ImagePullBackOff and Error: ErrImagePull errors with GKE
但是当我尝试它的时候,我面临着ImagePullBackOff错误。
是否有任何错误?误解?或者我需要使用另一个身份验证?

重现

https://console.cloud.google.com上的某个项目中使用Google Cloud Shell非常方便。

创建工件注册表

gcloud artifacts repositories create test \
    --repository-format=docker \
    --location=asia-northeast2

推送示例图像

gcloud auth configure-docker asia-northeast2-docker.pkg.dev
docker pull nginx
docker tag nginx asia-northeast2-docker.pkg.dev/${PROJECT_NAME}/test/sample-nginx-image
docker push asia-northeast2-docker.pkg.dev/${PROJECT_NAME}/test/sample-nginx-image

创建GKE自动驾驶群集

使用GUI控制台创建GKE Autopilot群集。
几乎所有的选项都是默认的,但我改变了这2.

  • 将群集名称设置为test。
  • 将区域设置为与注册表中的区域相同。(在本例中为亚洲-东北2)
  • 已启用Anthos服务网格。

将容器映像从工件注册表部署到GKE

gcloud container clusters get-credentials test --zone asia-northeast2
kubectl run test --image asia-northeast2-docker.pkg.dev/${PROJECT_NAME}/test/sample-nginx-image

检查Pod状态

一个三个三个一个
然后得到ImagePullBackOff

gwo2fgha

gwo2fgha1#

这可能是因为GKE Autopilot服务帐户没有访问项目注册表所需的权限。你可以通过将roles/artifactregistry.reader角色添加到GKE Autopilot节点池配置为使用的服务帐户来授予所需的权限。此外,你可能需要调整服务帐户的IAM权限,以便它可以访问专用项目注册表。

gcloud artifacts repositories add-iam-policy-binding <repository-name> \
  --location=<location> \
  --member=serviceAccount:<nnn>-compute@developer.gserviceaccount.com \
  --role="roles/artifactregistry.reader"

您是否可以尝试创建一个新的服务帐户并授予其拉入映像所需的权限,然后尝试拉入映像一次。
简单的故障排除步骤包括:
1.您应该确保您的GKE群集已配置为允许访问工件注册表。2您可以通过转到GKE Jmeter 板并确保启用“允许访问工件注册表”选项来完成此操作。
1.项目注册表中不存在您尝试提取的容器映像。您应检查注册表以确保容器映像已正确上载并且可以访问。
1.您可以查看错误日志以获取有关导致此问题的原因的详细信息。2另外,您可以查看GKE文档以获取有关解决此问题的详细信息。

相关问题