K8s集群kubelet无法拉取Nexus私有镜像问题求助
问题解决方法
你的问题核心是kubelet默认使用HTTPS协议访问镜像仓库,但你的Nexus仅提供HTTP服务,导致协议不匹配报错。以下是几种可行的解决方式:
方式一:配置容器运行时允许HTTP访问该Nexus仓库
针对containerd(K8s默认容器运行时)
- 在每个集群节点(master+worker)上编辑containerd配置文件:
/etc/containerd/config.toml - 添加或修改镜像仓库的 insecure 配置(替换
NEXUS_URL:NEXUS_PORT为实际地址):
[plugins."io.containerd.grpc.v1.cri".registry] [plugins."io.containerd.grpc.v1.cri".registry.mirrors] [plugins."io.containerd.grpc.v1.cri".registry.mirrors."NEXUS_URL:NEXUS_PORT"] endpoint = ["http://NEXUS_URL:NEXUS_PORT"] [plugins."io.containerd.grpc.v1.cri".registry.configs] [plugins."io.containerd.grpc.v1.cri".registry.configs."NEXUS_URL:NEXUS_PORT".tls] insecure_skip_verify = true
- 重启containerd服务:
systemctl restart containerd
针对Docker(若集群使用Docker作为容器运行时)
- 在每个集群节点上编辑Docker daemon配置:
/etc/docker/daemon.json - 添加
insecure-registries字段(替换实际地址):
{ "insecure-registries": ["NEXUS_URL:NEXUS_PORT"] }
- 重启Docker服务:
systemctl restart docker
方式二:为Nexus配置HTTPS(生产环境推荐)
这是更规范的长期解决方案,避免HTTP带来的安全风险:
- 生成SSL证书(可使用自签证书,或从可信CA机构申请)
- 在Nexus管理界面中启用HTTPS服务,指定证书和密钥文件路径
- 若使用自签证书,需将证书添加到所有集群节点的系统信任证书库中(比如Ubuntu系统可将证书复制到
/usr/local/share/ca-certificates/后执行update-ca-certificates)
验证步骤
配置完成后,先在任意节点手动测试镜像拉取:
# containerd环境用crictl命令 crictl pull NEXUS_URL:NEXUS_PORT/image_name:tagname # Docker环境用docker命令 docker pull NEXUS_URL:NEXUS_PORT/image_name:tagname
确认拉取成功后,重新创建Deployment即可。
内容的提问来源于stack exchange,提问作者RedThor
相关产品推荐
相关产品推荐

