calico排错思路

以下内容由deepseek生成

以下是针对 Calico 网络问题的系统性排错思路,涵盖 基础检查、通信路径分析、BGP 控制平面排查、网络策略验证 等关键环节,结合常见场景和工具命令:


一、基础环境检查

1. 节点与组件状态
# 查看所有节点状态(确保所有节点 Ready)
kubectl get nodes

# 检查 Calico 组件运行状态(DaemonSet 必须所有节点运行)
kubectl get pods -n kube-system -l k8s-app=calico-node
kubectl get pods -n kube-system -l k8s-app=calico-typha  # 如果启用了 Typha

# 查看 Felix 日志(关注错误或警告)
kubectl logs -n kube-system <calico-node-pod-name> -c calico-node
2. IP 地址分配
# 检查 Pod 是否分配到 IP
kubectl get pods -o wide | grep <pod-name>

# 查看 Calico IP 池使用情况
calicoctl ipam show --show-blocks

# 验证 IP 池是否耗尽(常见于频繁创建/删除 Pod 的场景)
calicoctl get ippool -o yaml

二、Pod 间通信问题

1. 同节点 Pod 通信失败
  • 检查点

    • Pod 的 veth pair 是否正常(宿主机端的 caliXXXX 接口是否存在)。
    • 宿主机 iptables/nftables 规则是否被篡改。
    • 宿主机内核是否开启路由转发(net.ipv4.ip_forward=1)。
    • 是否启用了 NetworkPolicy 默认拒绝规则。
  • 命令示例

    # 检查 veth 接口
    ip link show | grep cali
    
    # 确认路由转发已开启
    sysctl net.ipv4.ip_forward
    
    # 查看 caliXXXX 接口 ARP 表
    arp -n -i caliXXXX
    
2. 跨节点 Pod 通信失败
  • 检查点

    • 节点间网络连通性(检查节点 IP 是否能互通)。
    • 节点路由表是否包含目标 Pod 子网的路由。
    • BGP 邻居是否建立成功(关键!)。
    • 是否启用 IPIP/VXLAN 但配置错误(如 MTU 不匹配)。
  • 命令示例

    # 查看宿主机路由表(关键!)
    ip route show | grep bird
    
    # 测试节点间网络连通性(ICMP/TCP)
    ping <目标节点IP>
    nc -zv <目标节点IP> 179  # BGP 端口
    
    # 检查 BGP 邻居状态(必须 Established)
    calicoctl node status
    

三、BGP 控制平面排查

1. BGP 邻居未建立
  • 常见原因

    • 防火墙阻止 TCP 179 端口。
    • 节点 IP 配置错误(BGP 对端地址不匹配)。
    • BGP 配置错误(AS 号冲突或认证失败)。
  • 排查步骤

    # 查看 BIRD 配置
    kubectl exec -n kube-system <calico-node-pod> -- cat /etc/calico/confd/config/bird.cfg
    
    # 检查 BIRD 日志(位于容器内 /var/log/calico/bird.log)
    kubectl exec -n kube-system <calico-node-pod> -- tail -f /var/log/calico/bird.log
    
    # 手动验证 BGP 端口可访问性
    telnet <目标节点IP> 179
    
2. 路由未正确广播
  • 检查点

    • 节点是否广播了其 Pod CIDR。
    • 路由反射器(Route Reflector)配置是否正确(大规模集群)。
    • 是否启用了 nodeToNodeMesh(全互联模式)但集群规模过大。
  • 命令示例

    # 查看节点宣告的路由(需安装 bird 工具)
    birdc show route  # 在宿主机上执行(如果安装了 BIRD CLI)
    
    # 查看 Calico 节点配置
    calicoctl get node <node-name> -o yaml
    

四、网络策略(NetworkPolicy)问题

1. 策略未生效
  • 检查点

    • 策略是否正确定义了 podSelectornamespaceSelector
    • 策略是否被其他策略覆盖(规则优先级)。
    • Felix 是否成功将策略转换为 iptables/eBPF 规则。
  • 排查步骤

    # 查看已生效的策略(确认策略已同步到节点)
    calicoctl get networkpolicy -o yaml --all-namespaces
    
    # 检查 iptables 规则(策略链通常以 cali- 开头)
    iptables-save | grep cali-
    
    # 检查 eBPF 模式策略(如果启用)
    calicoctl bpf policy dump <node-name> <interface>  # 例如 eth0
    
2. 策略日志追踪
  • 启用策略日志

    apiVersion: projectcalico.org/v3
    kind: NetworkPolicy
    metadata:
      name: log-demo
    spec:
      ingress:
        - action: Log  # 记录匹配的流量
          source: {}
        - action: Allow
          source:
            selector: app=trusted
      selector: app=critical
    

五、高级工具与技巧

1. 数据包捕获
# 在源 Pod 所在节点捕获 eth0 流量
tcpdump -i eth0 host <目标PodIP> -w capture.pcap

# 在 Pod 的 veth 接口捕获(需找到对应的 caliXXXX)
tcpdump -i caliXXXX -nn -vv
2. eBPF 深度分析(若启用 eBPF 模式)
# 查看 eBPF 程序加载状态
bpftool prog show

# 追踪策略执行过程
calicoctl bpf conntrack dump <node-name>
3. WireGuard 加密问题(若启用)
# 检查 WireGuard 接口状态
wg show

# 验证隧道两端公钥是否匹配
calicoctl get felixconfiguration -o yaml | grep wireguard

六、常见故障场景与解决

1. 跨子网通信失败(IPIP/VXLAN 模式)
  • 症状:跨子网 Pod 无法互通,但同子网正常。
  • 检查点
    • 确认启用 IPIP 或 VXLAN(calicoctl get ippool -o yaml 查看配置)。
    • MTU 设置是否合理(通常 Pod MTU = 物理 MTU - 20/50)。
    • 节点防火墙是否放行 IPIP(协议号 4)或 VXLAN(UDP 4789)。
2. BGP 路由震荡(Flapping)
  • 症状:路由表频繁变化,导致部分流量中断。
  • 排查方向
    • 检查节点网络接口是否不稳定(丢包/延迟)。
    • BGP Keepalive 时间配置是否过短(默认 30 秒)。
    • 路由反射器(Route Reflector)负载过高。
3. Pod 启动失败(IPAM 问题)
  • 症状:Pod 停滞在 ContainerCreating,事件提示 IP 分配失败。
  • 解决步骤
    • 检查 Calico IP 池是否已满:calicoctl ipam show
    • 清理泄漏的 IP 地址:calicoctl ipam release --ip=<IP>
    • 确认 IP 池 CIDR 与集群规划匹配。

七、总结:排错流程图

  1. 定位问题范围:同节点/跨节点?是否涉及策略?
  2. 验证基础环境:Pod IP 分配、节点状态、组件日志。
  3. 检查路由与 BGPip routecalicoctl node status
  4. 分析网络策略:iptables/eBPF 规则、策略匹配逻辑。
  5. 高级工具辅助:tcpdump、eBPF 工具链、WireGuard 诊断。
  6. 参考文档Calico 官方排错指南

通过以上步骤,可覆盖 90% 的 Calico 网络问题。对于复杂场景(如多云混合网络),需结合具体底层网络拓扑分析。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值