Kubernetes Engine无法从非私有/ GCR存储库中提取图像

Thi*_*man 5 google-cloud-platform google-kubernetes-engine

我曾经愉快地部署到Kubernetes Engine了一段时间,但是在开发集成的云容器构建器管道时,我开始遇到麻烦。

我不知道发生了什么变化。我无法再部署到kubernetes,即使以前没有Cloud Builder时也是如此。

pod展开过程给出错误,表明它无法从注册表中提取。这似乎很奇怪,因为图像存在(我可以使用cli来拉出它们),并且向我的用户和云构建器服务帐户授予了所有可能相关的权限。

我收到错误ImagePullBackOff并在pod事件中看到此错误:

无法提取图像“ gcr.io/my-project/backend:f4711979-eaab-4de1-afd8-d2e37eaeb988”:rpc错误:代码=未知desc =未授权:需要身份验证

这是怎么回事?谁需要授权,目的是什么?

Sco*_*rth 6

就我而言,我的集群没有“存储读取”权限,这是GKE从GCR提取映像所必需的。

我的集群没有适当的权限,因为我是通过terraform创建的集群,并且没有包含该node_config.oauth_scopes块。通过控制台创建群集时,默认情况下会添加“存储读取”权限。


Thi*_*man 1

我的项目中的凭据不知何故弄乱了。我通过重新初始化一些 API 解决了这个问题,包括 Kubernetes Engine、Deployment Manager 和 Container Builder。

我第一次尝试这个没有成功,因为要禁用某些东西,您必须首先禁用依赖于它的所有 API。如果您通过 GCloud Web UI 执行此操作,那么您可能会看到并非全部可在 UI 中禁用的服务列表。

我了解到,使用gcloudCLI 您可以列出项目的所有 API 并正确禁用所有内容。

之后事情就顺利了。

我之所以知道事情搞砸了,是因为我有一个与生产环境相同的副本,而这些问题并不存在。开发环境进行了大量的迭代并弄乱了凭证,因此某些地方发生了损坏。

以下是一些有用命令的示例:

gcloud projects get-iam-policy $PROJECT_ID

gcloud services disable container.googleapis.com --verbosity=debug

gcloud services enable container.googleapis.com

更多信息请参见此处,包括如何恢复服务帐户凭据。