【Cilium / eBPF】东西向包路径:Pod→Pod 停顿点与 netfilter 旁路

💡 原文中文,约7800字,阅读约需19分钟。
📝

内容提要

本文介绍Cilium eBPF数据面东西向(Pod到Pod及经Service)的包路径停顿点。核心包括:同节点直连路径、经ClusterIP的LB/CT查找、跨节点overlay/加密、socket加速不替代策略、netfilter旁路是主路径目标但存在回退共存。排障需先查策略/身份,再查Service/CT,并区分东西向与南北向入口hook差异。

🔎

延伸解读

排障先定位停顿点,而非比较快慢

文章强调,东西向排障不应一开始就问“eBPF 是否比 iptables 快”,而应定位包在哪个停顿点被处理或丢弃。例如,同节点 Pod 直连时,需检查源/目的策略、本地 endpoint 解析、L7 重定向等;经 ClusterIP 时,需区分 socket 层转换与 TC/lxc 路径上的 LB 查找。这种“停顿点”视角有助于快速定位问题,避免笼统归因于网络慢。

socket 加速不替代策略检查

文章明确指出,启用 socket 层强制时,TCP 握手仍需穿越 endpoint policy,直到连接建立;之后同节点路径可加速,但加速路径仍要求策略对 socket/endpoint 映射有效。因此,若三次握手失败,应先查策略/身份/CT,而非归咎于加速未开启;握手成功后的异常才需怀疑 socket 加速或应用本身。

netfilter 旁路是目标,但存在回退与共存

文章解释,“旁路 netfilter”是 Cilium 主路径的设计目标,但并非机器上永远没有 iptables 规则。当内核特性不足或与 kube-proxy 共存时,仍可能安装 iptables 规则。排障时,若 iptables -L 很空但策略生效,属正常;若仍有规则,需检查是否共存模式或回退路径。此外,传统防火墙脚本若依赖 INPUT/FORWARD 链,可能对已走 BPF 路径的流量无效,需明确故障关注的是 Pod 网络命名空间路径还是 host network 路径。

跨节点路径增加身份一致性与 overlay 停顿点

跨节点 Pod 直连时,路径会叠加 overlay 封装/解封装、可选加密、远程身份解析等停顿点。文章强调,跨节点路径是 Identity 一致性的压力测试:源节点认为目的身份为 I_d,目的节点必须已允许来源身份 I_s,任一缓存滞后都会导致拒绝窗口。此外,同节点直连路径上“看不见”的税(如 overlay)在跨节点 Service 路径上可能突然出现,这是路径差异,而非 Service 实现随机变慢。

Q&A

Cilium eBPF 数据面中,同节点 Pod 到 Pod 的包路径有哪些关键停顿点?

同节点 Pod 到 Pod 的路径中,关键停顿点包括:源侧策略检查(基于身份和 Policy map)、目的侧策略检查、本地 endpoint 解析(通过 Endpoints/ipcache)、可能的 L7 重定向(Envoy)、以及 socket 层加速(在连接建立后)。

Cilium 中 socket 层加速是否替代了策略检查?

不替代。socket 层加速仅在 TCP 连接建立(ESTABLISHED)后生效,握手阶段仍需穿越 endpoint policy。加速路径仍要求策略对 socket/endpoint 映射有效,因此策略检查是必须的。

经 ClusterIP 访问 Service 时,Cilium 数据面会进行哪些额外操作?

经 ClusterIP 访问时,在 Endpoint Policy 之后会进行 Service LB map 查找,将 VIP 转换为后端 Pod IP/端口,并记录 CT 状态。之后可能进行本地投递或跨节点转发。

跨节点 Pod 到 Pod 通信时,相比同节点多了哪些停顿点?

跨节点通信额外包括:overlay 封装/解封装(如 VXLAN)、可选的 L3 加密、远程身份解析(依赖 ipcache)、以及节点策略和主机程序的协作(bpf_lxc 与 bpf_host)。

Cilium 的 eBPF 数据面是否完全绕过了 netfilter?

不是完全绕过。'旁路 netfilter' 是主路径的目标,但在内核特性不足或与 kube-proxy 共存时,可能回退到 legacy iptables 或同时安装 iptables 规则。因此机器上仍可能有 iptables 规则。

在 Cilium 中,如果 ClusterIP 不通,应该优先排查哪些方面?

应优先排查源/目的策略(Policy map)和身份,然后检查 Service LB map 和 CT 状态。如果新建连接风暴,优先检查 CT;如果策略 deny,则检查 policy map。不要将所有问题都归为网络故障。

Cilium 中东西向流量和南北向流量在入口 hook 上有何区别?

东西向(Pod→ClusterIP)可能在 cgroup connect 或 TC 路径完成 VIP 转换,而南北向(NodePort)可能在 XDP 早路径应答。两者共享 Service 对象和 CT,但入口 hook 不同,抓包时需注意区分。

🏷️

标签

➡️

继续阅读