Calico-node 进入 CrashLoopBackOff 且日志显示 "BGP not established",说明 BGP 网络连接失败,需排查对等体状态、TCP 179 端口连通性、IP 自动发现配置及 BIRD 日志。

Calico-node 进入 CrashLoopBackOff 且日志显示 "BGP not established",说明 Calico 的 BGP 网络连接失败,节点无法加入集群网络拓扑。这不是单纯重启能解决的问题,需系统排查 BGP 配置与底层连通性。
检查 calico-node 是否能与其他节点建立 BGP 对等体
Calico 默认使用 Node-to-Node Mesh 模式,每个节点应与集群内其他所有节点建立 BGP 连接。执行以下命令确认对等体状态:
- 进入任一正常运行的 calico-node 容器:
kubectl exec -it -n kube-system calico-node-xxxxx -- sh - 运行:
calicoctl node status(需容器内有 calicoctl)或更通用的:birdc show protocols - 观察输出中各 peer 的状态是否为
Established;若大量显示Connect、Active或Idle,说明 BGP 握手卡在 TCP 连接或 OPEN 协商阶段
验证节点间 TCP 179 端口是否可达
BGP 依赖 TCP 179 端口通信。常见原因包括防火墙拦截、安全组限制、云厂商网络策略或主机 iptables 规则屏蔽。
- 在问题节点上执行:
nc -vz 179,测试能否连通任意一个正常节点 - 如不通,检查:
• 云服务器安全组是否放行 179 端口(入+出)
• 主机 firewalld/iptables/nftables 是否 DROP 了 179 端口
• 内核参数net.ipv4.ip_forward=1是否启用(部分环境必须)
确认 calico 配置中的 IP 地址是否正确
Calico 使用 IP_AUTODETECTION_METHOD 自动发现本机 IP。若选错网卡(比如选到 docker0、lo 或内网管理网卡),会导致 BGP 对端地址错误,连接失败。
- 查看当前配置:
kubectl get pod -n kube-system calico-node-xxxx -o yaml | grep -A5 "IP_AUTODETECTION_METHOD\|IP" - 推荐显式指定:在 calico-node DaemonSet 的 env 中设置
- name: IP
(替换 eth0 为实际业务网卡名)
value: "autodetect"
- name: IP_AUTODETECTION_METHOD
value: "interface=eth0" - 也可用 CIDR 匹配:
value: "can-reach=8.8.8.8"或"first-found",但不如 interface 明确
检查 BIRD 日志定位具体失败原因
calico-node 底层使用 BIRD 路由守护进程。直接看其日志比只看 Kubernetes 事件更精准:
- 获取实时 BIRD 日志:
kubectl logs -n kube-system calico-node-xxxxx | grep -i "bird\|bgp\|179" - 典型错误示例:
"Can't bind socket to 0.0.0.0:179: Address already in use" → 其他进程占用了 179 端口
"Network is unreachable" → 本地路由缺失,无法到达对端 IP
"Peer x.x.x.x:179, state Idle, reason: No route to host" → 网络层不通或 ARP 失败










