K8s集群无法从Nexus私有仓库拉取镜像问题求助
解决Kubernetes从Nexus私有仓库拉取镜像失败(HTTP响应给HTTPS客户端)
核心问题分析
报错http: server gave HTTP response to HTTPS client说明Kubernetes使用的容器运行时没有将你的Nexus仓库标记为不安全仓库——你仅在Docker daemon中配置了insecure-registries,但如果K8s集群使用的是containerd(当前主流集群默认容器运行时),Docker的配置不会生效。
分步解决方案
1. 确认Kubernetes使用的容器运行时
执行命令查看节点的容器运行时:
kubectl get nodes -o wide
关注CONTAINER-RUNTIME列,比如containerd://1.6.20或docker://24.0.2,对应不同的配置方式。
2. 针对容器运行时配置不安全仓库
情况A:使用containerd
每个集群节点上执行以下操作:
- 编辑containerd配置文件:
vi /etc/containerd/config.toml - 找到并修改
[plugins."io.containerd.grpc.v1.cri".registry]段,添加你的Nexus仓库配置:[plugins."io.containerd.grpc.v1.cri".registry] [plugins."io.containerd.grpc.v1.cri".registry.mirrors] # 配置镜像仓库地址映射 [plugins."io.containerd.grpc.v1.cri".registry.mirrors."34.125.222.46:8083"] endpoint = ["http://34.125.222.46:8083"] [plugins."io.containerd.grpc.v1.cri".registry.configs] # 跳过TLS验证 [plugins."io.containerd.grpc.v1.cri".registry.configs."34.125.222.46:8083".tls] insecure_skip_verify = true - 重启containerd服务:
systemctl restart containerd
情况B:使用Docker作为容器运行时
确保每个节点都完成了以下操作:
- 确认
/etc/docker/daemon.json中已添加:{ "insecure-registries": ["34.125.222.46:8083"] } - 重启Docker和kubelet服务:
systemctl restart docker systemctl restart kubelet
3. 验证镜像拉取密钥配置
- 检查Deployment清单中
imagePullSecrets是否正确引用:apiVersion: apps/v1 kind: Deployment metadata: name: springapp-deployment spec: replicas: 1 selector: matchLabels: app: springapp template: metadata: labels: app: springapp spec: containers: - name: springapp image: 34.125.222.46:8083/springapp:69 # 确认这里引用了正确的密钥 imagePullSecrets: - name: registry-secret - 确认密钥是用正确命令创建的:
kubectl create secret docker-registry registry-secret \ --docker-server=34.125.222.46:8083 \ --docker-username=你的Nexus用户名 \ --docker-password=你的Nexus密码 \ --docker-email=你的邮箱 - 可解码密钥验证内容:
输出中应包含你的Nexus仓库地址、用户名和加密后的密码。kubectl get secret registry-secret -o jsonpath='{.data.\.dockerconfigjson}' | base64 -d
4. 额外排查点
- 节点网络连通性:在每个集群节点上执行
curl http://34.125.222.46:8083/v2/,确认能正常返回{}或仓库相关响应 - Nexus镜像存在性:登录Nexus管理界面,确认
springapp仓库下确实存在69标签的镜像 - 本地集群特殊配置:如果是minikube/kind等本地集群,启动时需指定不安全仓库,比如:
minikube start --insecure-registry=34.125.222.46:8083
内容的提问来源于stack exchange,提问作者krishnanshu tyagi
相关产品推荐
相关产品推荐

