AWS EC2实例上Kubernetes Calico网络异常问题排查求助
Calico网络异常排查方案
问题概述
- 环境:AWS EC2实例搭建的Kubernetes集群,采用Calico作为网络组件
- 核心现象:执行
kubectl get pods -n kube-system查看,calico-node Pod处于0/1 Running状态,其余K8s核心组件运行正常 - 就绪探针错误信息:
- 无法连接BIRDv4套接字
/var/run/calico/bird.ctl - BGP未与节点
172.31.6.112建立对等连接,已建立的BGP对等连接节点数为0
- 无法连接BIRDv4套接字
- 当前EC2实例IP配置:
ubuntu@ip-172-31-12-195:~$ ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc mq state UP group default qlen 1000 link/ether 0a:18:7b:c4:a6:df brd ff:ff:ff:ff:ff:ff inet 172.31.12.195/20 metric 100 brd 172.31.15.255 scope global dynamic eth0 valid_lft 2477sec preferred_lft 2477sec inet6 fe80::818:7bff:fec4:a6df/64 scope link valid_lft forever preferred_lft forever 3: tunl0@NONE: <NOARP,UP,LOWER_UP> mtu 8981 qdisc noqueue state UNKNOWN group default qlen 1000 link/ipip 0.0.0.0 brd 0.0.0.0 inet 192.168.151.128/32 scope global tunl0 valid_lft forever preferred_lft forever 6: cali1a02037d94e@if4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 8981 qdisc noqueue state UP group default link/ether ee:ee:ee:ee:ee:ee brd ff:ff:ff:ff:ff:ff link-netns cni-a7ab184a-5f77-cd6f-7063-1826716eaaf6 inet6 fe80::ecee:eeff:feee:eeee/64 scope link valid_lft forever preferred_lft forever 7: cali246cfe27aa7@if4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 8981 qdisc noqueue state UP group default link/ether ee:ee:ee:ee:ee:ee brd ff:ff:ff:ff:ff:ff link-netns cni-94919667-4b81-8940-6ae5-f978f648b597 inet6 fe80::ecee:eeff:feee:eeee/64 scope link valid_lft forever preferred_lft forever 8: cali69a17c198dd@if4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 8981 qdisc noqueue state UP group default link/ether ee:ee:ee:ee:ee:ee brd ff:ff:ff:ff:ff:ff link-netns cni-2c28adf8-00e3-467d-ff99-dea734168c41 inet6 fe80::ecee:eeff:feee:eeee/64 scope link valid_lft forever preferred_lft forever
排查步骤
1. 检查BIRD进程状态与日志
进入异常calico-node Pod,确认BIRD核心进程是否运行:
kubectl exec -n kube-system <calico-node-pod-name> -- ps aux | grep bird
- 若BIRD未启动,查看启动日志定位错误:
kubectl logs -n kube-system <calico-node-pod-name> -c bird
2. 验证BIRD套接字的存在性与权限
在Pod内部检查套接字文件状态:
kubectl exec -n kube-system <calico-node-pod-name> -- ls -l /var/run/calico/bird.ctl
- 若文件不存在:查看Calico自动生成的BIRD配置文件是否正常:
kubectl exec -n kube-system <calico-node-pod-name> -- cat /etc/calico/bird.cfg
- 若权限异常:直接重建calico-node Pod,触发配置重生成:
kubectl delete pod -n kube-system <calico-node-pod-name>
3. 排查BGP对等连接失败原因
针对无法与172.31.6.112建立BGP连接的问题:
- 连通性测试:在当前EC2实例上测试目标节点的BGP端口(默认179/TCP):
nc -zv 172.31.6.112 179
- 安全组验证:确认AWS EC2安全组允许集群节点之间的179端口TCP通信,同时放行IPIP协议(Calico默认封装方式)
- BGP配置检查:查看Calico节点的BGP状态与配置模式(全互联/路由反射器):
kubectl exec -n kube-system <calico-node-pod-name> -- calicoctl node status
4. 检查EC2实例网络模块
确认IPIP模块已加载(Calico依赖该模块实现跨节点通信):
lsmod | grep ipip
- 若未加载,手动加载并设置开机自启:
modprobe ipip echo "ipip" >> /etc/modules-load.d/ipip.conf
5. 校准Calico节点IP识别
Calico默认使用节点主网卡IP作为BGP通信地址,确认节点IP配置正确:
kubectl exec -n kube-system <calico-node-pod-name> -- calicoctl get node <node-name> -o yaml
检查spec.bgp.ipv4Address字段是否为172.31.12.195/20,若不符,强制指定节点IP:
kubectl annotate node <node-name> projectcalico.org/IPv4Address=172.31.12.195/20 --overwrite
内容的提问来源于stack exchange,提问作者Philoxopher
相关产品推荐
相关产品推荐

