目录
在 openEuler 24.03 LTS-SP1 安装 KubeSphere + K8s 集群时 kubelet 默认连接 127.0.0.1 问题分析与解决
❗ 问题现象
问题根因分析
✅ 解决方案
方案一:修改每个节点的 kubelet 配置(推荐)
方案二:预防性修改安装模板(集群安装前)
总结
在多控制节点部署 KubeSphere + Kubernetes 集群时,很多用户会遇到一个典型问题:非主控节点 kubelet 默认尝试连接本地 127.0.0.1:6443,导致节点 NotReady,API Server 无法通信。
通过 journalctl -u kubelet -f
查看日志,worker 节点会不断报错:
E0710 17:26:45.613626 kubelet Unable to write event: dial tcp 127.0.0.1:6443: connect: connection refused
W0710 17:26:47.608335 reflector failed to list *v1.CSIDriver: Get "https://127.0.0.1:6443/…": connect: connection refused
另外:
ping lb.kubesphere.local
PING lb.kubesphere.local (127.0.0.1) ...
这说明 kubelet.conf
或 hosts
配置指向了错误的 API Server 地址 127.0.0.1
,而非真正的集群 VIP 或负载均衡器。
Kubelet 在启动时会读取 /etc/kubernetes/kubelet.conf
中的 server
字段,该字段默认为:
server: https://127.0.0.1:6443
这在 master 节点可能暂时可用,但在 worker 节点会导致 kubelet 无法连接 API Server。
同时,在安装配置中设置了:
controlPlaneEndpoint:
domain: lb.kubesphere.local
address: ""
port: 6443
却没有为 lb.kubesphere.local
正确配置 DNS 或 /etc/hosts
,因此解析失败,默认指向 127.0.0.1
。
手动修改 /etc/kubernetes/kubelet.conf
文件中 server
地址:
server: https://lb.kubesphere.local:6443
或使用真实 VIP,例如:
server: https://10.130.135.145:6443
确保 lb.kubesphere.local
能被所有节点正确解析(添加 hosts):
echo "10.130.135.145 lb.kubesphere.local" >> /etc/hosts
重启 kubelet 服务:
systemctl restart kubelet
验证节点状态是否变为 Ready:
kubectl get nodes
如果你是通过 kk
工具安装的,可在安装前修改 config-sample.yaml
中:
controlPlaneEndpoint:
domain: lb.kubesphere.local
address: 10.130.135.145
确保安装时生成的 kubelet.conf 就是正确地址,避免事后再修补。
在多控制节点架构中,确保 kubelet 连接的 API Server 地址是统一、可达、负载均衡的至关重要。默认 127.0.0.1
会导致所有非 master-0 节点 kubelet 无法注册到 API Server。
如果你也遇到了节点长时间 NotReady、API Server 拒绝连接等现象,请第一时间检查:
/etc/kubernetes/kubelet.conf
的 server
字段
/etc/hosts
中 lb.kubesphere.local 的解析
kubelet 启动后的错误日志