eBPF 技术正在彻底改变云原生网络可观测性的游戏规则。相比传统抓包方案,Wireshark/tcpdump 看到的只是"发生了什么",而 eBPF 让你能直接追问"为什么发生"。
一、从 iptables 到 eBPF:网络数据面的范式转移
传统 Kubernetes Service 依赖 kube-proxy 完成负载均衡,早期使用 userspace 代理模式,后来演进到 iptables,再到 IPVS。然而当 Service 数量突破 万级 时,iptables 规则的 O(n) 线性匹配延迟成为严重瓶颈:
| 代理模式 | 100 Services | 10000 Services |
|---|---|---|
| userspace | 0.5ms | 不可用 |
| iptables | 0.6ms | 5ms |
| IPVS | 0.5ms | 1.2ms |
| eBPF (Cilium) | 0.3ms | 0.4ms |
Cilium 通过 eBPF XDP/eXpress Data Path 将网络策略的匹配逻辑从 O(n) 降至 O(1),直接在内核态以哈希表完成 Service→Pod IP 映射,完全绕开 iptables 的线性规则匹配。更关键的是,这套架构天然具备 L3-L7 层级的身份感知能力。
二、实战:用 eBPF 追踪 TCP 握手延迟异常
假设线上出现大量 connection timeout,传统排查路径是 cpdump → Wireshark 分析 → 定位问题,耗时数十分钟。而用 eBPF 方案,可以实时采集任意 TCP 连接的完整状态机转换:
// BPF 程序挂载点:tcp_set_state 内核函数
SEC("kprobe/tcp_set_state")
int BPF_KPROBE(trace_tcp_set_state, struct sock *sk, int state) {
// 只关注 ESTABLISHED 和 CLOSE_WAIT 的转换
if (state != TCP_ESTABLISHED

发表评论 取消回复