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

时间:2018-04-27 11:56:13

标签: google-cloud-platform google-kubernetes-engine

我很高兴部署到Kubernetes Engine一段时间了,但是在开发集成的云容器构建器管道时,我开始陷入困境。

我不知道发生了什么变化。我不能再部署到kubernetes了,即使我以前没有云构建器的方式也是如此。

pods rollout进程发出错误,指示无法从注册表中提取。这看起来很奇怪,因为图像存在(我可以使用cli来提取它们)并且我向用户和云构建器服务帐户授予了所有可能相关的权限。

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

  

无法拉取图片   " gcr.io/my-project/backend:f4711979-eaab-4de1-afd8-d2e37eaeb988&#34 ;:   rpc error:code = Unknown desc = unauthorized:需要验证

发生了什么?谁需要授权,为什么?

2 个答案:

答案 0 :(得分:5)

在我的情况下,我的集群没有“存储读取”权限,这是GKE从GCR提取映像所必需的。

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

答案 1 :(得分:1)

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

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

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

事情发生之后。

我知道事情搞得一团糟的原因是因为我有一份与生产环境相同的东西,并且这些问题并不存在。开发环境有很多迭代,并且使用凭据搞乱,所以某些地方的东西都被破坏了。

这些是有用命令的一些示例:

gcloud projects get-iam-policy $PROJECT_ID

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

gcloud services enable container.googleapis.com

更多信息here,包括如何恢复服务帐户凭据。