记一次kubernetes flannel/coredns pod异常

某一集群,双网卡,突然很多业务POD异常,排查发现DNS无法解析,进而怀疑coredns出现了问题。。。

查看coredns pod日志
1 reflector.go:134] github.com/coredns/coredns/plugin/kubernetes/controller.go:317: Failed to list *v1.Endpoints: Get https://172.30.0.1:443/api/v1/endpoints?limit=500&resourceVersion=0: dial tcp 172.30.0.1:443: connect: no route to host

问题来了,172.30.0.1 是谁 ?

想起 Kuberntes svc的cidr是 172.30.0.0/16, pod的cidr是 172.20.0.0/16

由刚才那个url,判断该url为Kubeapi 的地址

1
2
#kubectl get svc 
kubernetes ClusterIP 172.30.0.1 <none> 443/TCP 32d

发现172.30.0.1 是kubernetes svc的地址

1
2
3
#kubectl describe svc kubernetes 
发现该svc指向了三个endpoint
10.19.114.110:6443,10.19.114.111:6443,10.19.114.112:6443

才发现这三个endpoint不对, (服务器IP已经改为 192.168.**了。。。。)

原因是 什么呢?

想起 eth0 换IP地址了,所以肯定和换IP地址有关。

解决办法:

1
2
3
#systemctl restart kube-controller-manager.service 
#systemctl restart kube-scheduler.service
#systemctl restart kube-apiserver.service

改进方法:

内群内部通信走 eth0网卡,不再改变eth0的IP,如需改变IP,只改eth1不改eth0