4、Cilium数据平面:eBPF数据路径、网络策略执行、负载均衡、安全身份标识
Cilium 的数据平面完全构建在 eBPF(extended Berkeley Packet Filter)之上,绕过了传统的 iptables 和内核网络栈的复杂路径。本章深入解析 Cilium 数据平面的四大核心机制:eBPF 数据路径、网络策略执行、负载均衡以及安全身份标识(Security Identity)。理解这些机制是掌握 Cilium 通信原理和进行接口测试设计的基础。
4.1 eBPF 数据路径:从 Pod 到网络的加速通道
Cilium 通过 eBPF 程序直接挂载到网络设备(如 veth、eth0)和内核钩子点(如 XDP、TC、cgroup),实现数据包的快速转发与处理。相比 iptables,eBPF 数据路径具有更低的延迟和更高的吞吐量。
下图展示了 Cilium 中一个数据包从源 Pod 到目标 Pod 的 eBPF 数据路径概览:
4.2 网络策略执行:基于 eBPF 的 L3/L4/L7 过滤
Cilium 的网络策略(NetworkPolicy)不再依赖 iptables 规则链,而是通过 eBPF 的 BPF_PROG_TYPE_SCHED_CLS 或 BPF_PROG_TYPE_XDP 程序直接在内核网络栈中执行。策略规则被编译为 eBPF 映射(Map),查找效率极高。
| 策略层级 | eBPF 实现方式 | 性能特征 |
|---|---|---|
| L3/L4 策略 | 基于 IP 地址、端口、协议在 eBPF Map 中查找,决定允许/丢弃 | O(1) 哈希查找,纳秒级延迟 |
| L7 HTTP/gRPC 策略 | eBPF 程序解析应用层协议头(如 HTTP Method、Path),匹配规则 | 微秒级解析,支持正则匹配 |
| DNS 策略 | eBPF 程序拦截 DNS 请求,基于域名进行访问控制 | 避免 DNS 重绑定攻击,低开销 |
curl 或 grpcurl 工具,并配合 cilium monitor 观察策略命中日志。
4.3 负载均衡:eBPF 实现的 Maglev 一致性哈希
Cilium 使用 eBPF 实现高性能的负载均衡,替代了传统的 kube-proxy 和 iptables。其核心是基于 Maglev 一致性哈希算法的后端选择器,所有逻辑都在内核 eBPF 程序中完成。
- Maglev 哈希表: 在 eBPF Map 中预计算一个大小为 65537 的查找表,将源 IP/端口哈希到具体的后端 Pod。
- DSR(Direct Server Return): 支持直接服务器返回模式,回程流量绕过负载均衡节点,直接返回客户端,减少路径跳数。
- 会话保持: 通过 eBPF Map 记录会话状态,确保同一客户端的请求始终转发到同一后端。
4.4 安全身份标识:基于 Label 的 Security Identity
Cilium 不使用传统的 Kubernetes NetworkPolicy 中的 IP 地址作为身份标识,而是引入 Security Identity(安全身份标识)。每个 Pod 或端点根据其 Kubernetes Label 被分配一个 24 位的数字标识(Numeric Identity),该标识在 eBPF Map 中与策略规则关联。
- 标识生成: Cilium Agent 通过
cilium identity命令或 API 为 Label 组合生成唯一 ID。例如,app=frontend,env=prod可能对应 ID 1678。 - 标识传递: 数据包在源节点被 eBPF 程序打上 Security Identity 标记(通过
skb->mark或cilium_capture元数据),目标节点根据该标识执行策略。 - 优势: 避免 IP 地址变化带来的策略失效问题,实现基于身份的零信任网络。
| 概念 | 传统 iptables 方式 | Cilium eBPF 方式 |
|---|---|---|
| 身份标识 | 源/目标 IP 地址 | Security Identity(数字 ID) |
| 策略查找 | 遍历 iptables 规则链 | eBPF Map 哈希查找 |
| IP 变化影响 | 策略需重新匹配,可能中断 | 身份 ID 不变,策略持续生效 |
| 性能 | 随规则数线性下降 | O(1) 常数级,规则数无影响 |
cilium identity list 查看当前标识,通过 cilium monitor --type policy-verdict 验证策略决策是否基于正确的身份 ID。
4.5 数据平面关键组件总结
下表汇总了 Cilium 数据平面各核心组件及其在 eBPF 中的实现角色:
| 组件 | eBPF 程序类型 | 主要功能 | 相关 Map |
|---|---|---|---|
| 数据路径 | BPF_PROG_TYPE_SCHED_CLS / XDP | 数据包转发、封装/解封装 | cilium_lxc, cilium_ipcache |
| 网络策略 | BPF_PROG_TYPE_SCHED_CLS | L3/L4/L7 策略执行 | cilium_policy, cilium_ct4 |
| 负载均衡 | BPF_PROG_TYPE_SCHED_CLS | Maglev 哈希、DSR、会话保持 | cilium_lb4, cilium_lb6 |
| 安全身份标识 | BPF_PROG_TYPE_SCHED_CLS | 身份标记、基于 ID 的策略查找 | cilium_identity, cilium_ipcache |