中国区K8s集群Helm安装4.0.0版本ingress-nginx失败咨询
问题根因
Ingress-Nginx 4.0.0版本默认依赖的容器镜像托管在registry.k8s.io域名下,中国大陆网络环境无法正常连通该域名,导致安装流程pre-install阶段运行的kube-webhook-certgen作业拉取镜像超时,最终触发安装失败报错。3.0.0全系列版本未依赖该域名下的镜像资源,因此可以正常完成安装。
可行解决方法
- 方法1:安装时通过Helm参数覆盖默认镜像地址(最简便)
执行安装命令时追加参数,将默认的境外镜像地址替换为国内可正常访问的镜像源对应镜像,参考命令如下:
执行前确认镜像tag与4.0.0版本Chart要求的版本一致,避免出现版本兼容问题。helm install [自定义发布名] ingress-nginx/ingress-nginx --version 4.0.0 \ --set controller.image.registry=registry.cn-hangzhou.aliyuncs.com \ --set controller.image.image=google_containers/nginx-ingress-controller \ --set controller.image.tag=v1.0.0 \ --set admissionWebhooks.patch.image.registry=registry.cn-hangzhou.aliyuncs.com \ --set admissionWebhooks.patch.image.image=google_containers/kube-webhook-certgen \ --set admissionWebhooks.patch.image.tag=v1.0@sha256:64d8c73dca93a6e47da8e9e73d67c8908d9b709207e03b0949d94d37827b2e1c - 方法2:离线环境提前导入镜像
如果集群无法连通公网,可先在可访问registry.k8s.io的网络环境下拉取对应镜像,导出为tar包后传输到所有集群节点,通过容器运行时导入本地镜像库,安装时追加参数--set imagePullPolicy=IfNotPresent即可跳过远程拉取流程。
镜像拉取导出参考命令(以containerd运行时为例):ctr pull registry.k8s.io/ingress-nginx/kube-webhook-certgen@sha256:64d8c73dca9 ctr export kube-webhook-certgen.tar registry.k8s.io/ingress-nginx/kube-webhook-certgen@sha256:64d8c73dca9 - 方法3:配置容器运行时镜像加速
在所有集群节点的容器运行时(docker/containerd)配置中,为registry.k8s.io仓库添加可用的国内镜像加速规则,配置完成后重启对应容器运行时服务,再重新执行Helm安装命令即可。
注意:执行安装操作前先运行
helm repo update更新本地ingress-nginx仓库的索引缓存,避免本地缓存的旧版本Chart信息导致参数覆盖不生效。
内容的提问来源于stack exchange,提问作者Rick
相关产品推荐
相关产品推荐

