安装calico网络插件后K8s集群节点间通信找不到主机路由(no route to host)

背景:k8s安装calico网络插件后master节点ping不通其它node节点,但可以ping通外网,同时calico有一个pod启动异常,日志报错信息calico/node is not ready: BIRD is not ready: BGP not established with 192.168.8.xxx,192.168.8.xxx

[root@master1 ~]# ping 192.168.8.131
connect: No route to host
[root@master1 ~]# ping 192.168.8.132
connect: No route to host

节点一会处于Ready状态,一会处于NotReady状态

[root@master1 ~]# kubectl get nodes
NAME      STATUS     ROLES                  AGE    VERSION
master1   Ready    control-plane,master      22d   v1.23.4
node1     NotReady    <none>                 22d   v1.23.4
node2     NotReady    <none>                 22d   v1.23.4

最后排查到的原因

Pod CIDR与节点IP冲突,Calico的Pod CIDR--pod-network-cidr默认使用的是192.168.0.0/16,而当集群节点的IP段也为192.168.0.0/16时,必然导致IP段冲突

当Pod子网和主机网络出现冲突的情况下就会出现问题。节点与节点,Pod与Pod之间通信会因为路由问题被中断。仔细检查网络设置,确保Pod CIDRVLANVPC之间不会有重叠。如果有冲突的,我们可以在CNI插件或kubelet的pod-cidr参数中指定 IP 地址范围,避免冲突。

解决方案

重新配置Calico的Pod CIDR

 vim calico.yaml
..............
- name: CALICO_IPV4POOL_CIDR
  #value: "192.168.0.0/16"
  value: "172.16.0.0/16"
..............
kubectl delete -f calico.yaml
kubectl apply -f calico.yaml

到此,calico所有pod成功启动,节点间可以相互ping通,问题解决

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐