technology

iptables、IPVS、eBPF 完整深度对比

·11 分钟阅读·4226 字
📋 目录

iptables、IPVS、eBPF 完整深度对比

核心概念 iptables、IPVS、eBPF 是 K8s 网络数据面的三种核心技术方案,在性能、功能、可扩展性上有显著差异。

三者均运行在Linux内核处理网络数据包,但设计定位、底层数据结构、执行链路、能力边界完全不同,也是K8s网络三层数据平面演进路线:iptables → IPVS → eBPF(Cilium)

1. 基础定位与内核底层框架总览

1.1. iptables

  • 底层框架:Netfilter 通用包过滤框架
  • 定位:通用四层防火墙、NAT、流量管控工具,不是专门负载均衡
  • 数据结构:线性规则链表,数据包逐条顺序匹配(O(n)复杂度)
  • 工作钩子:PREROUTING/INPUT/FORWARD/OUTPUT/POSTROUTING 五大钩子

1.2. IPVS(LVS内核模块)

  • 底层框架:依然基于Netfilter,但独立专用四层负载均衡子模块
  • 定位:纯粹四层TCP/UDP负载均衡,专门做流量分发
  • 数据结构:内核哈希表存储VS/RS映射,O(1)常量时间查找
  • 执行位置:PREROUTING/LOCAL_OUT之后、INPUT/FORWARD之前,优先拦截VIP流量

1.3. eBPF(扩展伯克利包过滤器)

  • 底层框架:独立可编程内核虚拟机,脱离传统Netfilter链式规则体系

  • 定位:通用内核可编程平台,可实现防火墙、四层LB、七层解析、观测、追踪全套能力

  • 数据结构:自定义哈希Map/数组,JIT即时编译字节码执行

  • 挂载点位:

  • XDP:网卡驱动层,数据包未进入内核协议栈(极致高性能)

  • TC:流量控制钩子,协议栈内部任意出入口

  • tracepoint/kprobe:系统调用、socket追踪

2. 核心原理分层拆解

2.1. (一)iptables 详细原理

  1. 四表五链分层匹配
    raw → mangle → nat → filter;数据包按顺序遍历整条链所有规则,匹配到即执行动作(ACCEPT/DROP/DNAT)。
  2. 致命性能缺陷
    每新增一条Service/安全策略就追加一条规则;集群数千Service时,单包需要遍历上万条规则,延迟、CPU线性上涨。
  3. 依赖nf_conntrack连接跟踪
    所有DNAT/SNAT都要写入连接跟踪表,高并发短连接场景容易conntrack table full丢包。
  4. 负载均衡能力极弱
    仅支持简单随机转发,无加权轮询、最少连接、会话保持等成熟调度算法;K8s早期kube-proxy默认模式,小集群可用。
  5. 依赖配套工具
    ipsets用来批量存放IP减少规则数量,但无法根治线性遍历性能问题。

2.2. (二)IPVS 详细原理

  1. 专为四层LB设计,哈希表存储映射
    每条Service对应一个VS虚拟服务器,后端Pod为RS;通过VIP+Port哈希直接定位后端,无论多少服务查找耗时不变。
  2. 十种成熟调度算法
    RR、WRR、LC、WLC、SH源IP会话保持、DH等,满足高并发流量分发需求。
  3. 与iptables协作关系(关键)
    IPVS只做DNAT流量转发,缺少SNAT、包过滤能力,必须依赖iptables完成:
  • 出站流量源地址MASQUERADE伪装
  • 端口黑名单、基础防火墙拦截规则
  1. 独立连接表
    IPVS拥有独立连接跟踪,不完全依赖nf_conntrack,但跨节点转发仍会触发conntrack开销。
  2. 局限性
  • 仅四层,无法解析HTTP/HTTPS七层协议;
  • 架构割裂:kube-proxy同时维护iptables+ipvs两套规则,逻辑复杂;
  • 无法自定义流量处理逻辑,只能固定LB转发。

2.3. (三)eBPF 详细原理(新一代通用方案)

  1. 内核安全可编程虚拟机
    用户态编写C程序,编译为字节码;内核加载前做安全校验,防止崩溃、内存越界,JIT编译原生执行。
  2. 彻底摆脱Netfilter链式规则
    不用逐条遍历规则,通过自定义Map哈希表直接查找路由、安全策略,性能远超前两者。
  3. 双执行链路,性能覆盖全场景
  • XDP(驱动层):包刚到达网卡,未分配skb、未进入TCP/IP协议栈,百万PPS无压力;
  • TC(传输控制):协议栈内部,支持完整四层/七层解析、NAT、负载均衡、网络策略。
  1. 一体化能力,一套组件替代多套内核模块
    同时实现:
  2. 替代kube-proxy Service四层负载均衡(Maglev加权算法)
  3. 高性能NetworkPolicy网络防火墙(无需iptables)
  4. 流量观测、时延统计、流日志、socket追踪
  5. 透明加密、七层协议解析(HTTP路径、Header)
  6. 无nf_conntrack瓶颈
    使用eBPF自定义连接Map,可按需关闭传统连接跟踪,解决conntrack表满丢包痛点。

3. 七大核心维度横向对比表

对比维度iptablesIPVSeBPF(XDP/TC)
核心定位通用防火墙/NAT专用四层负载均衡内核可编程通用平台(LB+防火墙+观测)
数据结构线性链表 O(n)哈希表 O(1)自定义哈希Map O(1)
执行链路完整Netfilter五链遍历提前拦截VIP,仅处理LB流量XDP跳过协议栈;TC协议栈内直接处理
四层调度算法仅简单随机转发10种成熟加权/会话算法自定义Maglev/WRR/源哈希,可扩展
七层能力完全不支持完全不支持原生解析HTTP/DNS,支持URL/Header分流
连接跟踪强依赖nf_conntrack,易满丢包部分依赖conntrack自定义eBPF map,可关闭原生conntrack
性能上限千级服务性能衰减,数十万PPS万级服务稳定,百万PPS千万级PPS,网卡线速转发
依赖其他组件无,独立完整必须搭配iptables做SNAT/过滤可完全脱离iptables、IPVS
内核版本要求所有Linux通用2.4+内置ipvs模块5.3+完整生产特性,5.8推荐
典型落地小规模K8s kube-proxy、宿主机防火墙LVS四层网关、中大规模kube-proxyCilium/Calico eBPF CNI、云原生高性能集群

4. 关键优缺点拆解

4.1. iptables

✅ 优点:

  1. 兼容性拉满,所有Linux系统自带;
  2. 调试工具成熟 iptables-save/iptables -L,运维上手简单;
  3. 灵活精细的包过滤、黑白名单、端口管控。
    ❌ 缺点:
  4. 规则线性遍历,集群Service上千后CPU、延迟暴涨;
  5. 高并发短连接容易打满nf_conntrack表丢包;
  6. 无专业负载均衡调度能力,仅适合小型集群。

4.2. IPVS

✅ 优点:

  1. 哈希表查找,大规模Service性能稳定;
  2. 丰富四层负载均衡调度算法,支持会话保持;
  3. 内核转发开销低,适合四层网关、K8s中等规模集群。
    ❌ 缺点:
  4. 功能单一,只能做四层转发,必须依赖iptables补充NAT/防火墙;
  5. 两套内核规则并存,架构复杂,bug修复、升级成本高;
  6. 无法解析七层流量,不能做灰度、域名/URL分流;
  7. 仍受nf_conntrack连接跟踪开销拖累。

4.3. eBPF

✅ 优点:

  1. 性能天花板,XDP驱动层处理数据包,几乎无协议栈开销;
  2. 一体化:同时替代kube-proxy、iptables网络策略、流量监控;
  3. 可编程,可自定义七层解析、加密、限流、观测逻辑;
  4. 摆脱nf_conntrack瓶颈,消除连接跟踪丢包问题;
  5. 无线性规则遍历,十万级Pod/Service性能稳定。
    ❌ 缺点:
  6. 内核门槛高,低于5.3版本特性残缺;
  7. Windows节点不支持,混合集群无法使用;
  8. 运维门槛高,传统iptables调试命令失效,需专用eBPF工具;
  9. 现有传统系统改造成本较高。

5. K8s场景落地与演进路线

5.1. 阶段1:小规模集群 — iptables kube-proxy

集群Service < 100,业务量小,运维简单优先,缺点是集群扩容后性能雪崩。

5.2. 阶段2:中大规模集群 — IPVS kube-proxy

Service几百~几千,追求稳定四层转发性能;
痛点:依然依赖iptables,无法实现七层网络策略、流量观测一体化。

5.3. 阶段3:大型/高性能云原生集群 — eBPF Cilium/Calico eBPF

完全替代kube-proxy、iptables,一套数据平面完成:

  1. Service四层负载均衡(无IPVS/iptables)
  2. 高性能Pod网络策略
  3. 全链路流量观测、流日志、时延监控
  4. 七层HTTP安全管控、灰度路由
    互联网大厂、大规模微服务标准方案。

6. 传统机房落地场景区分

  1. 宿主机防火墙、单机安全策略:iptables
  2. IDC四层流量入口网关LVS:IPVS(DR模式)+ Keepalived
  3. 高性能网关、百万并发、需要流量可视化:eBPF XDP做四层转发+观测
  4. Web七层分流、SSL卸载:HAProxy七层,搭配eBPF做底层流量加速

7. 面试核心速记总结

  1. iptables:Netfilter通用防火墙,线性规则O(n),小集群简单易用,大规模性能瓶颈;
  2. IPVS:专用四层LB内核模块,哈希O(1)查找,调度算法丰富,但依赖iptables、仅四层;
  3. eBPF:内核可编程虚拟机,XDP/TC双点位,性能最强,一体化实现LB+防火墙+观测,支持七层;
  4. 三者演进顺序:小规模iptables → 中型IPVS → 大型云原生eBPF;
  5. 核心性能分水岭:iptables线性遍历、IPVS哈希四层专用、eBPF可编程脱离Netfilter链式架构。

关联文档