如何解决Rancher部署K8s时“server gave HTTP response to HTTPS client”错误?
解决Rancher部署时HTTP私有镜像仓库拉取失败问题
问题原因
你的私有镜像仓库使用HTTP协议,但K8s集群的容器运行时(如containerd、Docker)默认会对非官方镜像仓库发起HTTPS请求,导致出现http: server gave HTTP response to HTTPS client错误。
解决方案
根据集群使用的容器运行时,选择对应配置方式:
1. 集群使用Docker作为容器运行时
在所有K8s节点(master和node)上完成以下操作:
- 编辑
/etc/docker/daemon.json文件,添加私有仓库的HTTP信任配置:{ "insecure-registries": ["192.168.1.132:5000"] } - 重启Docker服务:
systemctl restart docker - 重启K8s kubelet服务:
systemctl restart kubelet
2. 集群使用containerd作为容器运行时
在所有K8s节点上完成以下操作:
- 编辑
/etc/containerd/config.toml文件,找到[plugins."io.containerd.grpc.v1.cri".registry]节点,添加私有仓库的HTTP配置:[plugins."io.containerd.grpc.v1.cri".registry] [plugins."io.containerd.grpc.v1.cri".registry.mirrors] [plugins."io.containerd.grpc.v1.cri".registry.mirrors."192.168.1.132:5000"] endpoint = ["http://192.168.1.132:5000"] [plugins."io.containerd.grpc.v1.cri".registry.configs] [plugins."io.containerd.grpc.v1.cri".registry.configs."192.168.1.132:5000".tls] insecure_skip_verify = true - 重启containerd服务:
systemctl restart containerd - 重启K8s kubelet服务:
systemctl restart kubelet
3. 验证配置
配置完成后,在任意K8s节点上测试拉取镜像:
# 若使用containerd运行时 crictl pull 192.168.1.132:5000/test-demo:latest # 若使用Docker运行时 docker pull 192.168.1.132:5000/test-demo:latest
确认拉取成功后,再通过Rancher重新部署应用即可。
内容的提问来源于stack exchange,提问作者Trần văn Toàn
相关产品推荐
相关产品推荐

