GKE 出现错误:ImagePullBackOff 和错误:ErrImagePull 错误

问题描述 投票:0回答:2

当 kubectl 应用 .yaml 将自定义构建的 docker 映像部署到 GCP 中的集群(编辑掉敏感信息)时,我收到以下错误:

已尝试以下方法但没有成功:

  • 手动部署镜像
  • 检查以确保防火墙规则允许 443,而且也没有任何东西阻止它
  • 尝试将容器注册表设置为公开
  • 检查了服务帐户权限,并且授权拉取的秘密就在那里
  • 使用上图中给出的网址验证了拉动在我端是否有效
  • 尝试摧毁整个基础设施。并重新旋转
  • 确保控制平面与我们的其他环境一样
  • 在我们的 terraform 中,集群和节点池具有所有必需的 0authscopes

奇怪的是,我们有一个开发人员。环境完全相同(使用 terraform 启动基础设施)并使用相同的文件+图像(显然是不同的项目,因此所需的内容已更改以匹配)并且没有问题。

image google-cloud-platform containers google-kubernetes-engine pull
2个回答
4
投票

这种情况通常发生在您的集群:

  • 有私有节点(又名没有公共IP)
  • 该集群所在区域没有 Cloud NAT
  • 您没有在子网/vpc 上启用私有访问

基本上错误是节点无法从注册表中提取映像。您可能有两种情况:

  • 如果您的镜像托管在 GCR 或 AR(Google 容器注册表或 ArtifactRegistry)中。即使您的节点是私有的,也必须启用 Google Private Access 以允许节点访问注册表
  • 如果您的映像托管在外部注册表上(例如:Docker)。您必须拥有具有公共 IP 或 Cloud NAT 的节点才能访问互联网
  • 第三种情况是您在本地或其他云上有自托管注册表。您需要在 GCP 与注册表托管位置之间建立某种私有连接(VPN、互连...),并且需要配置 Cloud DNS 以将注册表解析为私有 IP

0
投票

我在尝试从 GCR 迁移到 GAR 时遇到了这个问题(由于 GCR 弃用)。

解决这个问题的方法是为 GKE 默认服务帐户 (

[email protected]
) 提供
Artifact Registry Reader
角色。这可以在 IAM & Admin -> IAM -> GRANT ACCESS 中完成

© www.soinside.com 2019 - 2024. All rights reserved.