K8S网络异常 calico/node is not ready: BIRD is not ready: BGP not established异常解决

本文解决k8s集群中Calico服务异常导致的服务无响应问题,通过调整IP_AUTODETECTION_METHOD配置,确保各节点正确选择网络流量地址,恢复集群正常运行。

同事反应k8s集群中的服务不太好使,经常无响应。发现calico服务异常
在这里插入图片描述
登陆master1节点 使用calicoclt 查看calico集群节点状态

export ETCD_ENDPOINTS=http://*.*.*.*:2379
calicoctl node status

集群各节点状态都为passive
在这里插入图片描述
更换其他节点检查calico状态,发现master1节点IP地址并非网络流量地址,且状态不正常。
在这里插入图片描述
修改calico的yaml文件,添加配置项

 # Specify interface
            - name: IP_AUTODETECTION_METHOD
              value: ""

IP_AUTODETECTION_METHOD 配置项默认为first-found,这种模式中calico会使用第一获取到的有效网卡,虽然会排除docker网络,localhost啥的,但是在复杂网络环境下还是有出错的可能。在这次异常中master1上的calico选择了一个bridge网卡。

为了解决这种情况,IP_AUTODETECTION_METHOD还提供了两种配置can-reach=DESTINATION,interface=INTERFACE-REGEX。

can-reach=DESTINATION配置可以理解为calico会从部署节点路由中获取到达目的ip或者域名的源ip地址。例如

# Using IP addresses
IP_AUTODETECTION_METHOD=can-reach=8.8.8.8
IP6_AUTODETECTION_METHOD=can-reach=2001:4860:4860::8888

# Using domain names
IP_AUTODETECTION_METHOD=can-reach=www.google.com
IP6_AUTODETECTION_METHOD=can-reach=www.google.com

interface=INTERFACE-REGEX配置可以指定calico使用匹配的网卡上的第一个IP地址。列出网卡和IP地址的顺序取决于系统。匹配支持goalong的正则语法。例如:

# Valid IP address on interface eth0, eth1, eth2 etc.
IP_AUTODETECTION_METHOD=interface=eth.*
IP6_AUTODETECTION_METHOD=interface=eth.*

环境中节点网卡名称并没有统一,我正则写的很烂。而集群网络环境还算简单只是跨了两个网段,使用can-reach,目的地址为DNS服务器地址,可以统一各节点的ip选择。

配置完成后kubectl apply -f calico.yaml 更新配置。再次查看calico节点状态,集群节点状态正常,集群恢复。
在这里插入图片描述

参考文档
https://docs.projectcalico.org/maintenance/troubleshooting#error-caliconode-is-not-ready-bird-is-not-ready-bgp-not-established-with-10001
https://github.com/projectcalico/calico/issues/2561
https://docs.projectcalico.org/v2.6/reference/node/configuration#ip-autodetection-methods

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值