【Cilium / eBPF】数据面全景:五轴坐标系与 16 篇路线
内容提要
本文介绍Cilium eBPF数据面深度拆解系列,定位补足产品与内核实现间的缺口。核心提出五条排障坐标系:Identity、BPF挂载、Map状态、包路径、策略观测,并确立三条不变量:以Identity为策略键、map为权威状态、L3/L4尽量留在hook。文章规划16篇路线,聚焦可归因的失败模式,而非性能排名,为后续深入分析奠定框架。
延伸解读
五轴坐标系的排障价值
文章提出五条排障坐标系,强调先定位问题所在轴,再下钻模块,而非直接修改策略或重装组件。例如,滚动更新后偶发拒绝应优先检查Identity轴,而非怀疑物理网卡;新建Service不生效且CPU不高时,应怀疑LB map满或reconcile失败。这种结构化方法有助于将模糊症状转化为可核对的锚点,提升排障效率。
三条不变量的实践意义
文章确立三条不变量:策略以Identity为键、数据面状态以BPF map为权威、L3/L4尽量留在hook。理解这些不变量有助于解释为何iptables -L为空不代表无策略,以及为何标签变更会引发短暂拒绝。排障时先判断哪条不变量被触碰,可快速定位问题域,避免误判。
与iptables时代的排障差异
Cilium eBPF数据面与纯iptables CNI在排障坐标上存在显著差异。iptables时代可通过规则链直观检查,而Cilium的策略执行分散在BPF map和hook程序中,iptables -L空不代表无策略。文章提醒,若仍依赖宿主机iptables查找ClusterIP,可能误判旁路路径,需适应新的排障思维。
Q&A
Cilium eBPF数据面系列的核心目标是什么?
该系列旨在补足Cilium产品能力与eBPF内核实现之间的缺口,聚焦于数据面内核路径,帮助排障和深入理解,而非重复产品功能或性能排名。
Cilium数据面排障的五条坐标系是什么?
五条坐标系包括:Identity轴、BPF挂载轴、Map状态轴、包路径轴、策略与观测轴。每轴都有可核对的锚点,用于定位故障。
Cilium数据面的三个不变量是什么?
三个不变量是:策略匹配以Identity为键而非临时Pod IP;数据面状态主要在BPF map中,控制面只做reconcile;能在hook完成的L3/L4尽量不进netfilter或用户态。
Cilium中Identity轴的作用是什么?
Identity轴定义Endpoint如何由标签导出数字Identity,以及标签变更时策略窗口如何出现。它用于解释滚动更新或标签补丁时的偶发拒绝,因为IP变化但标签不变时Identity应保持稳定。
Cilium中BPF挂载轴涉及哪些hook?
BPF挂载轴涉及XDP、TC、cgroup socket等hook,例如bpf_xdp.c、bpf_host.c、bpf_lxc.c、bpf_sock.c。TC ingress用于东西向策略与重定向,XDP用于NodePort等早路径,cgroup用于socket层Service转换。
Cilium中Map状态轴如何影响故障表现?
Map状态轴涉及policy、service、CT、ipcache等BPF map。例如,新建Service不生效可能因LB map满或reconcile失败;突发新建连接失败可能因CT满。满表或陈旧条目会导致连通故障。
Cilium中包路径轴与kube-proxy替代的关系是什么?
包路径轴描述Pod到Pod、egress、ingress的停顿点,以及与netfilter/kube-proxy的旁路关系。Cilium通过BPF实现kube-proxy替代,但存在与iptables的互操作边界,能力不足时回退。
Cilium中策略与观测轴如何帮助排障?
策略与观测轴解释NetworkPolicy如何编译进map,以及Hubble flow字段(如verdict、identity、drop reason)对应哪一层。当Hubble显示FORWARDED但应用超时,可能涉及Service后端空洞、加密或用户态代理边界。
Cilium数据面系列规划的16篇路线中,核心阅读路径是什么?
核心路径是1→2→5→6→7→13,覆盖Overview、Endpoint Identity、East West Path、Kube Proxy Replace、Policy Compile、Troubleshoot。选型路径是1→14→16。
Cilium数据面系列与已有内容(如k8s-network/13、ebpf/)的区别是什么?
该系列补足产品与内核实现之间的缺口,聚焦数据面内核路径、失败模式和排障坐标系,不重写产品能力表或verifier算法,而是深入Cilium如何挂载和使用eBPF原语。