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

ter*_*ftw 5 containers pull image google-cloud-platform google-kubernetes-engine

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

在此输入图像描述

已尝试以下但没有运气:

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

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

小智 4

当您的集群出现以下情况时,通常会发生这种情况:

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

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

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