资讯动态

解决Kubernetes ingress-nginx镜像拉取失败的3种方案

发布时间:2026/9/10 23:40:38 来源:尧图企业网站定制
1. 问题现象与背景分析最近在部署Kubernetes集群时不少用户遇到了Failed to pull image registry.k8s.io/ingress-nginx/kube-webhook-certgen:v20231011-8b53cabeo这个经典错误。这个报错通常发生在安装或升级ingress-nginx组件时系统无法从官方镜像仓库拉取指定的证书生成工具镜像。这个问题的根源在于Kubernetes官方镜像仓库的域名变更历史。2023年起Kubernetes社区逐步将镜像仓库从k8s.gcr.io迁移到registry.k8s.io但部分旧版本组件仍然引用老域名。当你的集群网络无法直接访问registry.k8s.io时就会出现这个拉取失败的错误。2. 核心解决方案对比2.1 方案一使用国内镜像源替换这是最推荐的解决方案操作简单且长期有效。国内各大云厂商都维护了Kubernetes镜像的同步仓库# 阿里云镜像源 registry.aliyuncs.com/google_containers/kube-webhook-certgen:v20231011-8b53cabeo # 华为云镜像源 swr.cn-east-2.myhuaweicloud.com/kube-webhook-certgen:v20231011-8b53cabeo修改你的ingress-nginx部署yaml文件将image字段替换为上述任一国内镜像地址即可。2.2 方案二手动拉取并重新tag如果出于安全考虑必须使用官方镜像可以先用能访问外网的机器拉取镜像再导入到集群# 在有外网访问的机器上执行 docker pull registry.k8s.io/ingress-nginx/kube-webhook-certgen:v20231011-8b53cabeo docker save -o certgen.tar ingress-nginx/kube-webhook-certgen:v20231011-8b53cabeo # 将certgen.tar传输到集群节点后 docker load -i certgen.tar2.3 方案三配置镜像仓库代理对于生产环境建议配置docker代理# /etc/docker/daemon.json { registry-mirrors: [https://your-mirror.mirror.aliyuncs.com] }3. 详细操作步骤3.1 查找并修改ingress-nginx部署文件首先确定你的ingress-nginx部署方式。如果是通过helm安装helm get values ingress-nginx -n ingress-nginx values.yaml然后在values.yaml中搜索kube-webhook-certgen找到类似这样的配置admissionWebhooks: patch: image: repository: registry.k8s.io/ingress-nginx/kube-webhook-certgen tag: v20231011-8b53cabeo将其修改为国内镜像源admissionWebhooks: patch: image: repository: registry.aliyuncs.com/google_containers/kube-webhook-certgen tag: v20231011-8b53cabeo3.2 验证镜像可用性修改前建议先测试镜像是否可用docker pull registry.aliyuncs.com/google_containers/kube-webhook-certgen:v20231011-8b53cabeo docker images | grep certgen3.3 应用变更对于helm安装方式helm upgrade ingress-nginx -n ingress-nginx -f values.yaml对于直接yaml部署方式找到对应的Deployment或DaemonSet资源修改即可。4. 常见问题排查4.1 修改后仍然报错可能原因缓存未更新尝试删除旧的Pod强制重建kubectl delete pod -n ingress-nginx -l app.kubernetes.io/nameingress-nginx使用了错误的tag确认v20231011-8b53cabeo这个tag在目标镜像仓库存在4.2 证书生成失败即使镜像拉取成功webhook证书生成仍可能失败。检查日志kubectl logs -n ingress-nginx -l app.kubernetes.io/componentadmission-webhook常见错误包括权限不足确保ServiceAccount有足够权限时间不同步节点时间必须同步4.3 长期解决方案建议将镜像地址统一管理使用镜像仓库代理通过策略引擎(如OPA)自动重写镜像路径维护内部镜像仓库同步关键镜像5. 经验分享在实际生产环境中我总结了几个关键点版本兼容性ingress-nginx的控制器版本和certgen工具版本必须匹配。使用不兼容版本会导致各种奇怪错误。镜像缓存节点上的镜像缓存有时会导致明明已经修改了yaml但还是拉取旧镜像的情况。这时候需要kubectl cordon node kubectl drain node --delete-emptydir-data --ignore-daemonsets离线环境处理对于完全离线的环境建议提前下载所有依赖镜像使用skopeo工具同步镜像仓库部署本地registry并配置集群访问监控配置即使解决了镜像问题也要监控证书自动更新的情况kubectl get certificates -n ingress-nginx kubectl describe certificate ingress-nginx-admission -n ingress-nginx这个问题的解决过程反映了Kubernetes生态中的一个常见挑战 - 镜像分发和访问的可靠性。随着Kubernetes在中国的大规模应用合理配置镜像访问策略已经成为集群管理的基本功。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价