私有 Google Kubernetes 集群无法从 Google Container Engine 下载镜像

私有 Google Kubernetes 集群无法从 Google Container Engine 下载镜像

我正在尝试在 Google Cloud 中设置我们的私有 Kubernetes 集群以连接到 Google Container Engine。我能够毫无问题地在集群中部署示例映像,例如 gcr.io/google-samples/hello-app:2.0。但是当我尝试部署我们自己的映像之一(即 gcr.io/[OUR_PROJECT_ID]/test-image:1.0)时,Kubernetes 中出现了 ImagePullBackOff 错误。

ImagePullBackOff 从未显示任何有关导致错误的详细信息。我尝试直接登录到集群的某个节点(如 Google 文档的故障排除部分所建议的那样),但我也无法从那里下载图像,尽管从公共集群提取图像可以正常工作。该节点似乎不是一个现实的故障排除环境,因为虽然我知道演示图像可以正常工作,但即使从节点内部也会出现故障:

$ docker pull gcr.io/google-samples/hello-app:2.0
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post http://%2Fvar%2Frun%2Fdocker.sock/v1.40/images/create?fromImage=gcr.io%2Fgoogle-samples%2Fhello-app&tag=2.0: dial unix /var/run/docker.sock: connect: permission denied

它在本地也能正常工作。因此,私有集群的某些方面阻碍了它。

如何获取有关图像拉取失败原因的更多详细信息?如果能看到 Docker 实际返回的错误,那就太好了。

当然,如果有人知道这里可能存在的问题以及如何解决它,我愿意倾听。网络上已启用 Private Google Access,并且集群的服务帐户已可以访问 GCE 使用的存储桶,因此我认为这些不是问题所在。

答案1

问题解决了:这是一个权限问题,并不是因为它是一个私有集群,而是因为我们的私有集群使用了不同的服务帐户。

问题的另一部分是,Google 实际上为容器注册表创建了两个存储桶 - 一个全局存储桶,一个特定于您的位置的存储桶(例如,如果您在美国,则第二个存储桶名称将以 开头us.artifacts.)。

我仍在学习这两个存储桶如何工作,但至少默认情况下,全局存储桶似乎是用于身份验证的存储桶......无论如何,我只是storage.objectAdmin在两个存储桶中都授予了服务帐户权限,它现在可以成功提取图像。

相关内容