前提
架构:keepalived+haproxy+kubernetes
问题说明
kubernetes集群好久不用了,今天打开集群执行一个kubectl get nodes
命令,报错如下:
Unable to connect to the server: dial tcp 192.168.2.XXX:16443: connect: no route to host
分析原因
出现这个问题几种原因,
- 集群坏了:如果报错的IP是master1的节点IP或虚拟IP(vip)加16443端口号,执行kubectl命令还报上面的错误,说明集群坏了,需要逐步排查原因。
/root/.kube/config
中的IP地址错误:如果错误中的IP地址不是master1的节点IP或虚拟IP(vip)加16443端口号,需要修改配置文件中的IP。一般改为虚拟IP(vip)+16443端口号。- haproxy:由于haproxy配置的是监听16443端口,也是集群的入口。因为报错的端口号是16443,所以要检查是否是haproxy的IP问题,如果是的话要修改haproxy配置文件,然后重启haproxy
systemctl restart haproxy
解决问题
经排查,我的问题属于第二种,因为报错的意思是没有找不到192.168.2.XXX:16443这个路由,于是检查config文件:
vim /root/.kube/config
查看IP是否正确,经检查,我虚拟IP为:192.168.2.249
,而这里显然不是,将IP修改为192.168.2.249:16443
保存退出后再次查看节点状态,kubectl命令就可以正常使用了。
另一中错误:Unable to connect to the server: dial tcp 123.56.91.155:6443: i/o timeout
Unable to connect to the server: dial tcp 123.56.91.155:6443: i/o timeout
刚开始爆出的错误是这个,一看这个IP就不是我当初创建集群时的IP,而是一个阿里云公网IP,其实进入config文件中修改成自己集群的IP就可以了。