K8s创建Pod拉取镜像失败:HTTP响应被HTTPS客户端接收
Kubernetes拉取私有HTTP镜像失败的解决方案
问题核心
kubelet尝试用HTTPS请求你的私有HTTP镜像仓库,导致拉取失败——虽然工作节点单独用docker pull能正常拉取,但Kubernetes的容器运行时配置未同步允许该不安全仓库。
分步解决
1. 重启节点服务确保Docker配置生效
即使工作节点docker pull正常,也要确保Docker和kubelet服务重启让配置完全生效,在每个工作节点执行:
sudo systemctl restart docker sudo systemctl restart kubelet
2. 给kubelet添加不安全仓库配置
Kubelet可能未自动读取Docker的insecure-registries配置,需要直接在kubelet配置中声明:
- 编辑工作节点的kubelet配置文件(通常路径为
/var/lib/kubelet/config.yaml),添加以下内容:
insecureRegistries: - "192.168.56.2:5000"
- 重启kubelet:
sudo systemctl restart kubelet
3. 若使用containerd作为运行时(跳过Docker相关步骤)
如果集群用的是containerd而非Docker,修改containerd配置:
- 编辑
/etc/containerd/config.toml,找到[plugins."io.containerd.grpc.v1.cri".registry]区块,添加镜像仓库的HTTP端点配置:
[plugins."io.containerd.grpc.v1.cri".registry.mirrors] [plugins."io.containerd.grpc.v1.cri".registry.mirrors."192.168.56.2:5000"] endpoint = ["http://192.168.56.2:5000"]
- 重启containerd和kubelet:
sudo systemctl restart containerd sudo systemctl restart kubelet
4. 验证修复
创建测试Pod验证镜像拉取:
apiVersion: v1 kind: Pod metadata: name: test-mysql-pod spec: containers: - name: mysql-container image: 192.168.56.2:5000/ubn_mysql:latest
应用后查看状态:
kubectl apply -f test-pod.yaml kubectl get pods test-mysql-pod
内容的提问来源于stack exchange,提问作者Arvind Gupta
相关产品推荐
相关产品推荐

