6

有一段时间我很高兴地部署到 Kubernetes Engine,但是在开发集成的云容器构建器管道时,我开始遇到麻烦。

我不知道发生了什么变化。我无法再部署到 kubernetes,即使是在没有云构建器的情况下也是如此。

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

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

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

这是怎么回事?谁需要授权,为了什么?

4

2 回答 2

8

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

我的集群没有适当的权限,因为我通过 terraform 创建了集群并且没有包含该node_config.oauth_scopes块。通过控制台创建集群时,默认添加Storage读取权限。

于 2018-09-05T17:54:34.443 回答
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

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

于 2018-05-04T14:04:59.723 回答