环境:
节点 1 :192.168.60.100
节点 2 :192.168.60.101
节点 3 :192.168.60.102
虚拟机自建了一套kubeadm集群,刚开始好好的,最近安装了一套prometheus监控,发现报错“Get "https://192.168.60.100:6443/metrics": context deadline exceeded”,有两个节点找不到,只有一个节点是正常的,通过kubectl get pod -n monitoring -o wide命令发现prometheus所在的node节点正好是正常的node上,怀疑是pod无法连通其他node节点ip。
随便找了个pod进行网络测试
# kubectl exec -it -n
确实不通,只能ping通pod所在节点的node ip
往上搜了一下,最后安装这个文章的方法进行修复后恢复正常
k8s 问题排查Pod内无法ping通集群外部的网络IP - wswind - 博客园自己使用一台master两台worker搭建了一个k8s集群。把服务部署上去后,发现服务无法访问到部署在集群外部的数据库。 在宿主机上直接ping是能够ping通的,但是pod中不行。 pod能pinhttps://www.cnblogs.com/wswind/p/14808756.html
我这里根据我的环境也写一下
查看iptables找到类似如下这四条,这四条就是flannel创建后生成的规则
[root@k8s-master01 ~]# iptables -t nat -S |grep POSTROUTING-A POSTROUTING -s 10.244.0.0/16 -d 10.244.0.0/16 -j RETURN-A POSTROUTING -s 10.244.0.0/16 ! -d 224.0.0.0/4 -j MASQUERADE-A POSTROUTING ! -s 10.244.0.0/16 -d 172.160.0.0/24 -j RETURN-A POSTROUTING ! -s 10.244.0.0/16 -d 10.244.0.0/16 -j MASQUERADE
注意这里的ip 10.244.0.0/16
再看一下自己node信息中的CIDR
[root@k8s-master01 ~]# kubectl describe node |grep CIDRPodCIDR: 172.160.0.0/24PodCIDRs: 172.160.0.0/24PodCIDR: 172.160.1.0/24PodCIDRs: 172.160.1.0/24PodCIDR: 172.160.2.0/24PodCIDRs: 172.160.2.0/24
会发现这里的ip段不在iptables的网断中,这是有问题的
我先是根据文章把flannel yaml文件拉下来进行修改
# kubectl get configmap -n kube-system -o yaml kube-flannel-cfg > flannel.yaml将: net-conf.json: | { "Network": "10.244.0.0/16", "Backend": { "Type": "vxlan" } }修改为: net-conf.json: | { "Network": "172.160.0.0/16", "Backend": { "Type": "vxlan" } }配置生效# kubectl apply -f flannel.yaml
最后的检查结果如下:
[root@k8s-master01 ~]# kubectl describe node |grep CIDRPodCIDR: 172.160.0.0/24PodCIDRs: 172.160.0.0/24PodCIDR: 172.160.1.0/24PodCIDRs: 172.160.1.0/24PodCIDR: 172.160.2.0/24PodCIDRs: 172.160.2.0/24[root@k8s-master01 ~]# iptables -t nat -S |grep POSTROUTING-A POSTROUTING -s 172.160.0.0/16 -d 172.160.0.0/16 -j RETURN-A POSTROUTING -s 172.160.0.0/16 ! -d 224.0.0.0/4 -j MASQUERADE-A POSTROUTING ! -s 172.160.0.0/16 -d 172.160.0.0/24 -j RETURN-A POSTROUTING ! -s 172.160.0.0/16 -d 172.160.0.0/16 -j MASQUERADE
再次ping其他node ip也正常了
# kubectl exec -it -n
prometheus也恢复正常