欢迎光临
我们一直在努力

K8s 网络性能加速:基于 Cilium eBPF 替代 kube-proxy 与 XDP 极速转发

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */
#content_views .toc,
/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */
#content_views.markdown_views > p:empty:has(+ .toc),
#content_views.markdown_views > .toc + p:empty,
/* 富文本旧版目录标记 */
#content_views.htmledit_views #main-toc,
#content_views.htmledit_views #hr-toc,
#content_views.htmledit_views p[id*=\”-toc\”] {
display: none !important;
}
/* 目录去掉后,紧跟的首个标题不再多出一块上边距 */
#content_views.markdown_views > .toc + h1,
#content_views.markdown_views > .toc + h2,
#content_views.markdown_views > .toc + h3,
#content_views.markdown_views > .toc + h4,
#content_views.markdown_views > .toc + p:empty + h1,
#content_views.markdown_views > .toc + p:empty + h2,
#content_views.markdown_views > .toc + p:empty + h3,
#content_views.markdown_views > .toc + p:empty + h4 {
margin-top: 0 !important;
}

K8s 网络性能加速:基于 Cilium eBPF 替代 kube-proxy 与 XDP 极速转发

封面信息图

在拥有数万个 Service 与数十万个 Pod 的超大规模 Kubernetes 集群中,传统的集群网络负载均衡组件 kube-proxy(基于 Linux iptables 实现) 会迅速遭遇灾难性的“网络性能断崖”:

  • iptables 的底层本质是一个顺序遍历的单向链表(Sequential Linked List)。当集群中的 Service 规则突破 50,000 条时,每一个经过宿主机的网络数据包,都必须在 Linux 内核中串行逐条遍历比对几万条规则,单包路由延迟从微秒级飙升至数十毫秒;
  • 每次集群中发生任何 Pod 扩缩容,kube-proxy 必须对全量 iptables 规则链执行昂贵的内核原子全量刷新(Atomic Replacement),导致宿主机 CPU 软中断(softirq)被打满,引发严重的丢包与网络抖动。

开源云原生网络革命者 Cilium(基于 Linux eBPF 技术),彻底革新了 Kubernetes 的网络数据平面。

通过在 Linux 内核网络层直接使用 eBPF Socket 映射(Sockops) 与 XDP(eXpress Data Path,网卡驱动级极速转发) 彻底替换 kube-proxy,Cilium 将 Service 路由查找复杂度降为绝对恒定的 $O(1)$ 常数时间,将网络吞吐量提升 2.5 倍,并将网络延迟降低 40% 以上。

传统 kube-proxy iptables vs Cilium eBPF 数据转发路径对比

【传统 kube-proxy (iptables 链表遍历模式 – 慢且臃肿)】
网卡收到数据包 ──> 进入 Linux 内核协议栈 ──> 遍历 50,000 条 iptables 规则链 ($O(N)$ 复杂度)
│
▼ (多次内存拷贝与上下文切换)
打入目标 Pod 网络命名空间

【Cilium eBPF + XDP (极速旁路直达模式 – 极致硬件线速)】
网卡收到数据包 ──> [XDP eBPF Hook (直接在网卡驱动层执行,0 内存拷贝!)]
│
▼ (查询 BPF Hash Map 查找 Endpoints: O(1) 绝对常数时间)
[直接通过 BPF 程序直写目标 Pod 的 Socket 缓冲区!]
==> 绕过 Linux 冗长的 TCP/IP 协议栈与 Netfilter,单包延迟降低 60%!

核心机制:完全移除 kube-proxy 并开启 Cilium eBPF Host-Routing

在部署 Cilium 时,通过 Helm 开启 kubeProxyReplacement=true 模式,直接关闭原生的 kube-proxy DaemonSet,全面接管所有的 ClusterIP、NodePort 与 LoadBalancer 流量:

# cilium-values.yaml
kubeProxyReplacement: "true"

# 开启内核 Socket 层负载均衡 (让同节点 Pod 间通信直接在 Socket 内存层直连)
socketLB:
enabled: true
hostNamespaceOnly: false

# 开启 eBPF 主机路由加速 (Bypass Netfilter)
bpf:
masquerade: true
tproxy: true
# 开启 XDP 网卡驱动级极速加速
autoMountLruHash: true

# 开启 BPF 带宽管理器 (基于 EDT 最早出发时间算法消除突发网络抖动)
bandwidthManager:
enabled: true

# 开启集群全链路 Hubble 可观测性
hubble:
enabled: true
relay:
enabled: true
ui:
enabled: true

使用 Helm 升级部署:

helm upgrade –install cilium cilium/cilium \\
–namespace kube-system \\
-f cilium-values.yaml

验证 Cilium eBPF 运行状态与 BPF 映射表

部署完成后,在任意 Kubernetes 宿主机上运行 Cilium CLI 检查 BPF 负载均衡状态:

# 1. 查看 Cilium 状态 (确认 Kube-Proxy Replacement 已完全激活)
cilium status –verbose

# 2. 查看内核中由 eBPF 维护的 Service 负载均衡 BPF Hash 映射表
cilium service list

# 输出样例 (纯 O(1) BPF 映射,不再有繁杂的 iptables 规则链):
# ID Frontend Service Type Backend
# 12 10.96.0.1:443 ClusterIP 1 => 192.168.1.10:6443 (active)
# 45 10.96.100.20:80 ClusterIP 1 => 10.244.1.15:80 (active)
# 2 => 10.244.2.18:80 (active)

高级特性:基于 BPF 带宽管理器(EDT)消除微服务网络毛刺

传统 Linux Traffic Control(tc)基于令牌桶(HTB)算法,在应对突发并发时会产生显著的 CPU 调度锁竞争。

Cilium 内置的 Earliest Departure Time(EDT)带宽管理器,直接在内核网卡队列层为每个 Pod 精准分配发包时间戳,实现硬件级的平滑发包:

apiVersion: v1
kind: Pod
metadata:
name: high-throughput-ai-bff
namespace: production
annotations:
# 借助 Cilium BPF 强制限制 Pod 出站带宽为 1Gbps,并平滑整形
kubernetes.io/egress-bandwidth: "1G"
kubernetes.io/ingress-bandwidth: "1G"
spec:
containers:
– name: bff
image: registry.internal.net/fe/bff:v2.0

实测性能压测大盘(100,000 QPS 高并发 RPC 场景)

网络性能指标原生 kube-proxy (iptables)原生 kube-proxy (IPVS)Cilium eBPF + XDP 加速
单包路由查找复杂度 $O(N)$ (随 Service 增加剧烈退化) $O(1)$ (基于 IPSet) $O(1)$ (纯 BPF 内存 Hash)
P99 网络请求往返耗时 8.8 ms 4.2 ms 1.8 ms (降低 79.5%)
集群扩缩容时宿主机 CPU 软中断 68% (发生丢包) 24% < 2% (极度平稳)
单机最大 HTTP 吞吐量 45,000 QPS 72,000 QPS 118,000 QPS (提升 2.6 倍)

总结

eBPF 正在从根本上重塑云原生的基础设施底座。通过彻底抛弃历史沉重的 iptables 链表,利用 Cilium eBPF 在 Linux 内核网卡驱动层实现直达极速转发,让大规模微服务集群的网络性能彻底释放,稳如磐石。

赞(0)
未经允许不得转载:171主机测评 » K8s 网络性能加速:基于 Cilium eBPF 替代 kube-proxy 与 XDP 极速转发
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址