【问题标题】:GKE can't pull image from GCRGKE 无法从 GCR 中提取图像
【发布时间】:2021-09-19 03:15:21
【问题描述】:

这是一个真正令人头疼的问题,因为直到昨天为止,多年来一切都运行良好。我有一个谷歌云帐户,并且计费设置正确。我的 GCR 注册表中有私有图像,我可以从我的笔记本电脑(配备 Big Sur 11.4 的 MacBook Pro)上“docker pull”和“docker push”没有任何问题。

我在这里详述的问题是昨天在我删除了谷歌云控制台中的一个项目后开始发生的,然后用相同的名称从头开始重新创建它。以前的项目拉GCR图像没有问题,新的不能拉相同的图像。我现在已经使用云控制台创建了具有各种名称的新的空测试项目,新集群使用默认的 GKE 值。但这个新问题仍然存在。

当我使用 kubectl 在 GKE 上创建使用同一项目中的任何 GCR 映像的部署时,我收到 ErrImagePull 错误。当我“描述”不会加载图像的 pod 时,错误(项目 id 被遮挡)是:

无法拉取图像“gcr.io/test-xxxxxx/test:1.0.0”:rpc 错误:代码 = Unknown desc = 无法提取和解压缩图像“gcr.io/test-xxxxxx/test:1.0.0”:无法解析参考 “gcr.io/test-xxxxxx/test:1.0.0”:意外状态代码 [清单 1.0.0]: 401 未经授权。

当我在笔记本电脑上使用 kubectl 时会发生这种情况(包括在清除并使用正确的凭据创建新的 .kube/config 文件之后),但当我使用云控制台通过选择“设置部署”时发生的情况完全相同为 GCR 映像部署到 GKE'...不涉及 kubectl。

如果我 ssh 进入这些新集群中的任何一个节点并尝试“docker pull”一个 GCR 映像(在同一个项目中),我会收到类似的错误:

来自守护进程的错误响应:未授权:您没有所需的 执行此操作的权限,您可能有无效的 证书。要验证您的请求,请按照以下步骤操作: https://cloud.google.com/container-registry/docs/advanced-authentication

我从很多文章中了解到,不需要为 GKE 设置特殊授权即可从同一个项目中提取 GCR 图像,而且我过去从未遇到过这个问题。

我希望我不是这个荒岛上唯一的人。提前感谢您的帮助!

【问题讨论】:

  • 您好。您的 GKE 节点池的 SA 在您的项目中具有哪些 IAM 角色?您的理解是对的,您不需要做额外的事情,但是节点池的SA需要适当的角色才能访问GCR。您是否使用默认 SA?还是自定义 SA?
  • 感谢您的帮助!我对服务帐户与节点池的关系感到非常困惑。我从未指定过自定义 SA。在我设置的每个测试项目中,都有一个名为“Computer Engine 默认服务帐户”的 SA。当我查看它的“权限”时,在“有权访问此服务帐户的成员”下,我看到 3 个条目:它、“Google API 服务代理”和我(所有者)。还有其他地方我应该寻找吗?我很想回答“您的 GKE 节点池的 SA 对您的项目有哪些 IAM 角色”,但不知道在哪里查看
  • 我刚刚能够确认我的测试集群的节点池都在使用“默认”SA。
  • 而我的名为“Compute Engine 默认服务帐户”的 SA 具有编辑角色。

标签: docker google-cloud-platform google-kubernetes-engine google-container-registry


【解决方案1】:

我尝试实施设置,但在 GKE 集群和集群的节点上都遇到了同样的错误。这是因为集群节点上对 Cloud Storage API 的访问被“禁用”,这可以从“Cloud API 访问范围”部分下的节点(VM 实例)详细信息中进行验证。

我们可以通过将“访问范围”更改为“为每个 API 设置访问权限”并在创建集群时修改节点池 -> 默认池 -> 安全部分中对特定 API 的访问权限来纠正此问题。在我们的例子中,我们至少需要 Storage API 的“只读”访问权限,才能访问存储图像的云存储。 Changing the service account and access scopes for an instance 了解更多信息。

【讨论】:

  • 谢谢!我刚刚发现了同样的事情,尽管我能够选择“设置 API 访问权限”并且只启用“云平台”,这应该比启用对所有云 API 的完全访问权限更好。我不知道为什么现在有必要这样做。我在 GCP 上使用相同版本的 Kubernetes 已经很长时间了,以前从来没有必要这样做。
  • 可能有用:“# Google 推荐具有云平台范围和通过 IAM 角色授予的权限的自定义服务帐户。”:registry.terraform.io/providers/hashicorp/google/latest/docs/…(尽管很高兴看到来自 google 的文档说明这一点- 我还没有找到)
猜你喜欢
  • 2023-04-06
  • 2020-08-16
  • 2019-11-24
  • 2021-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-09
  • 1970-01-01
相关资源
最近更新 更多