GCP上新创建的GKE节点池无法从Container Registry拉取镜像
GKE新节点池无法拉取GCR镜像问题处理
问题现象
- 现有GKE集群包含2个正常运行的节点池,可正常从Container Registry拉取镜像
- 新建节点池时,仅修改机器类型,其余配置(含服务账号)与现有节点池完全一致,但所有新节点均无法拉取镜像
- 节点镜像拉取报错日志(已翻译):
E0128 06:44:03.656599 1763 remote_image.go:242] "从镜像服务拉取镜像失败" err="rpc错误: 代码 = NotFound 描述 = 拉取并解压镜像 \"eu.gcr.io/{PROJECT}/{IMAGE}@sha256:***\" 失败: 复制失败: httpReadSeeker: 打开失败: 无法从远程获取内容描述符 sha256:*** (application/vnd.docker.container.image.v1+json): 未找到" image="eu.gcr.io/{PROJECT}/{IMAGE}@sha256:*****"
排查与解决步骤
1. 验证镜像存在性
先确认目标镜像eu.gcr.io/{PROJECT}/{IMAGE}@sha256:*****确实存在于GCR中:
- 执行命令直接拉取测试:
gcloud container images pull eu.gcr.io/{PROJECT}/{IMAGE}@sha256:***** - 登录GCR控制台,手动核对镜像的摘要值是否与部署使用的完全匹配
2. 检查节点网络访问权限
即便配置与现有节点池一致,仍需确认新节点的网络连通性:
- 确认节点所在子网的出站防火墙规则允许访问GCR的IP范围
- 在新节点上执行
nslookup eu.gcr.io,验证GCR域名解析是否正常
3. 确认服务账号权限
检查新节点池使用的服务账号是否拥有拉取GCR镜像的必要权限:
- 确认服务账号已绑定
roles/storage.objectViewer角色 - 执行命令核查权限:
gcloud projects get-iam-policy {PROJECT} --filter="bindings.members:serviceAccount:{NODE_SA}" --format="value(bindings.role)"
4. 核对镜像摘要正确性
报错提示无法找到内容描述符,大概率是镜像摘要不匹配:
- 确认部署文件中使用的镜像sha256摘要与GCR中实际存在的完全一致
- 临时改用镜像标签(如
:latest)测试拉取,排除摘要错误问题
5. 检查节点镜像版本
新节点若使用了较旧的节点镜像,可能存在GCR API兼容性问题:
- 尝试使用与现有节点池相同的节点镜像版本创建新节点池
- 检查节点上的containerd/docker配置,排查镜像缓存相关异常
内容的提问来源于stack exchange,提问作者glv19
相关产品推荐
相关产品推荐

