You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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
  • 当前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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 05:10:20