【发布时间】: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