kubeadm flannel 网络问题

环境:

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

PodCIDR:                      172.160.0.0/24
PodCIDRs:                     172.160.0.0/24
PodCIDR:                      172.160.1.0/24
PodCIDRs:                     172.160.1.0/24
PodCIDR:                      172.160.2.0/24
PodCIDRs:                     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 CIDR

PodCIDR:                      172.160.0.0/24
PodCIDRs:                     172.160.0.0/24
PodCIDR:                      172.160.1.0/24
PodCIDRs:                     172.160.1.0/24
PodCIDR:                      172.160.2.0/24
PodCIDRs:                     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也恢复正常

kubeadm flannel 网络问题_第1张图片

你可能感兴趣的:(kubernetes学习专栏,k8s故障解决,kubernetes,flannel)