【Cilium / eBPF】L7 与 Mesh 边界:节点 Envoy、sidecar 与 Ambient
内容提要
Cilium的L7服务网格能力基于BPF处理L3/L4,按需将流量重定向至节点Envoy处理L7语义,与sidecar和Istio Ambient模式不同。它适合以身份和L3/L4策略为主、L7规则较少的场景,但节点Envoy是共享故障域,且不覆盖完整Istio流量管理功能。开启时应渐进验证,避免“假网格”承诺。
延伸解读
L7 与 L3/L4 的路径差异
Cilium 的 L7 能力并非默认全开,只有命中 L7 规则或开启 L7 可见性的流量才会被重定向到节点 Envoy,其余 L3/L4 流量仍在内核 BPF 路径处理。这意味着路径选择取决于策略配置,而非固定拓扑。理解这一点有助于评估性能影响:若 L7 规则较少,大部分流量可绕过用户态代理,降低路径开销。
节点 Envoy 的共享故障域风险
与 sidecar 模式相比,节点级 Envoy 是共享故障域:单节点代理过载会影响该节点上所有依赖 L7 强制的负载,而 sidecar 过载通常只影响单个 Pod。这种设计以资源效率换取更大的爆炸半径。在规划容量和故障演练时,需将节点代理热点纳入考量,避免因少数节点过载导致局部服务大面积变慢。
渐进开启与可见性先行
文章建议采用渐进式验证:先仅启用 L3/L4 策略,再对单个命名空间添加窄 L7 规则,观察 REDIRECTED 与节点 Envoy CPU 变化。特别强调,L7 可见性与 L7 强制的失败后果不同:可见性故障不影响业务,而强制故障直接导致请求失败。因此,先开启可见性观察一周,可降低首次强制变更的风险。
避免“假网格”承诺
Cilium 的 L7 能力并不等同于完整 Istio 流量管理,如金丝雀发布、复杂 VirtualService 路由等。若仅以 L3/L4 策略为主,却向业务承诺全功能网格体验,容易导致承诺与机制脱节,引发后续工单混乱。建议在架构评审中明确 L3/L4 与 L7 的职责边界,避免重叠 API 多权威。
Q&A
Cilium 的 L7 服务网格功能是如何实现的?
Cilium 的 L7 服务网格功能基于 BPF 处理 L3/L4 流量,当需要 HTTP 路径、方法、头匹配等 L7 语义时,通过 BPF 将流量重定向到节点上的 Envoy 代理进行处理。纯 L3/L4 流量则直接在内核中处理,不经过 Envoy。
Cilium 的节点 Envoy 模型与 sidecar 模式有何不同?
Cilium 的节点 Envoy 模型是每个节点部署一个 Envoy,通过 BPF 重定向需要 L7 处理的流量;而 sidecar 模式是每个 Pod 注入一个代理,拦截所有流量。Cilium 的模型升级时主要滚动节点代理,而 sidecar 模式需要滚动所有工作负载。
Cilium 的 L7 能力与 Istio 的流量管理有何区别?
Cilium 的 L7 能力主要覆盖官方文档列出的协议和规则面(如 HTTP),但不自动等于全功能 Istio 流量管理,例如金丝雀发布、复杂 VirtualService 图等。Cilium 的 L7 策略更侧重于身份和 L3/L4 策略,L7 规则较少。
在什么情况下适合使用 Cilium 的 L7 服务网格?
适合使用 Cilium L7 服务网格的情况包括:策略以身份和 L3/L4 为主,L7 规则较少;希望避免 sidecar 注入和每 Pod 内存开销;已选用 Cilium 作为 CNI,希望减少第二数据面。
Cilium 的节点 Envoy 作为共享故障域有哪些风险?
节点 Envoy 是共享故障域,如果节点代理过载,会影响该节点上所有需要 L7 强制的工作负载,而 sidecar 过载通常只影响单个 Pod。这是用内存节省换来的相关故障模式。
Cilium 与 Istio Ambient 模式在架构上有何异同?
Cilium 和 Istio Ambient 都旨在去掉默认 sidecar,但实现不同:Cilium 使用 eBPF 处理 L4,L7 由节点 Envoy 处理;Ambient 使用 ztunnel 处理 L4,L7 由可选的 waypoint 处理。两者在 CNI/身份、L4 强制、L7 处理和多集群支持上均有差异。
如何渐进式地开启 Cilium 的 L7 服务网格功能?
渐进式开启步骤:1. 只开启 CNI 和 NetworkPolicy(L3/L4),确认 Identity 和 Hubble 归因可用;2. 在单个命名空间增加一条窄 L7 规则,观察是否出现 REDIRECTED 和节点 Envoy CPU 变化;3. 再评估是否引入完整流量管理对象。若已有 Istio,可停止在 Cilium 侧重做平行金丝雀。
什么是“假网格”?如何避免?
“假网格”指声明了 Mesh,但绝大多数规则仍是 L3/L4,却按“全功能网格”向业务承诺超时注入、按头路由、全链路 mTLS 等产品体验。避免方法:确保承诺与机制对齐,明确所有权,L3/L4 归网络平面,复杂 L7 流量管理归网格平面,重叠 API 只允许一个权威。