欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

kubeadmflannel网络问题

时间:2023-05-14

环境:

节点 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 192.168.60.100

确实不通,只能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 -- ping 192.168.60.100

prometheus也恢复正常

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。