前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Cilium系列-9-主机路由切换为基于 BPF 的模式

Cilium系列-9-主机路由切换为基于 BPF 的模式

作者头像
东风微鸣
发布2023-09-01 16:28:48
2700
发布2023-09-01 16:28:48
举报
文章被收录于专栏:东风微鸣技术博客

系列文章

•Cilium 系列文章[1]

前言

将 Kubernetes 的 CNI 从其他组件切换为 Cilium, 已经可以有效地提升网络的性能. 但是通过对 Cilium 不同模式的切换/功能的启用, 可以进一步提升 Cilium 的网络性能. 具体调优项包括不限于:

•启用本地路由(Native Routing)•完全替换 KubeProxy•IP 地址伪装(Masquerading)切换为基于 eBPF 的模式•Kubernetes NodePort 实现在 DSR(Direct Server Return) 模式下运行•绕过 iptables 连接跟踪(Bypass iptables Connection Tracking)•主机路由(Host Routing)切换为基于 BPF 的模式 (需要 Linux Kernel >= 5.10)•启用 IPv6 BIG TCP (需要 Linux Kernel >= 5.19)•禁用 Hubble(但是不建议, 可观察性比一点点的性能提升更重要)•修改 MTU 为巨型帧(jumbo frames) (需要网络条件允许)•启用带宽管理器(Bandwidth Manager) (需要 Kernel >= 5.1)•启用 Pod 的 BBR 拥塞控制 (需要 Kernel >= 5.18)•启用 XDP 加速 (需要 支持本地 XDP 驱动程序)•(高级用户可选)调整 eBPF Map Size•Linux Kernel 优化和升级•CONFIG_PREEMPT_NONE=y•其他:•tuned network-* profiles, 如: tuned-adm profile network-latencynetwork-throughput•CPU 调为性能模式•停止 irqbalance,将网卡中断引脚指向特定 CPU

在网络/网卡设备/OS等条件满足的情况下, 我们尽可能多地启用这些调优选项, 相关优化项会在后续文章逐一更新. 敬请期待.

今天我们来调优 Cilium, 启用 Host-Routing(主机路由) 以完全绕过 iptables 和上层主机堆栈,并实现比常规 veth 设备操作更快的网络命名空间切换。

测试环境

•Cilium 1.13.4•K3s v1.26.6+k3s1•OS•3 台 Ubuntu 23.04 VM, Kernel 6.2, x86•3 台 Debian 10 开发板, Kernel 4.19, arm64

eBPF Host-Routing

即使 Cilium 使用 eBPF 执行网络路由,默认情况下,网络数据包仍会穿越节点常规网络堆栈的某些部分。这就导致了所有数据包仍能通过所有 iptables 钩子。不过,这些钩子会增加大量开销。有关测试环境的确切数据,请参阅 TCP 吞吐量 (TCP_STREAM)[2],并比较 "Cilium "和 "Cilium(传统主机路由)"的结果。

具体如下:

Single-Stream:

TCP Throuthput(Single-Stream)

TCP Throuthput(Single-Stream) - CPU

Multi-Stream:

TCP Throughput(32 Streams)

TCP Throughput(32 Streams) - CPU

在 Cilium 1.9 中引入了基于 eBPF 的主机路由,以完全绕过 iptables 和上层主机堆栈,并实现比常规 veth 设备操作更快的网络命名空间切换。如果内核支持该选项,它将自动启用。要验证您的安装是否使用了 eBPF 主机路由,请在任何 Cilium pod 中运行 cilium status,并查找报告 "Host Routing(主机路由)"状态的行,其中应显示 "BPF"。

如下, 在 Cilium 1.9 中引入了基于 eBPF 的主机路由后的性能提升:

Pod to Pod Performance, Kernel 5.10, Cilium 1.9

从初始结果可以看出,当在 v5.10 内核上使用 Cilium 1.9(及更新版本) 的 eBPF 扩展时,直接路由下 Pod 到远程 Pod 会话的单流 TCP 吞吐量会翻倍,而不是由主机堆栈转发处理两个方向。同样,在避开主机堆栈时,测试中的 Pod 的 TCP 请求/响应事务性能提高了近 3 倍。

要求

•Kernel >= 5.10•直接路由(Direct-routing)配置或隧道•基于 eBPF 的 kube-proxy 替换•基于 eBPF 的伪装(masquerading)

实施

如上所述, "如果内核支持该选项,它将自动启用".

我们查看 Kernel >= 5.10 的情况:

Kernel >= 5.10

代码语言:javascript
复制
$ kubectl -n kube-system exec ds/cilium -- cilium status |grep "Host Routing"
Host Routing:            BPF

如上所示, 在 Kernel >= 5.10 的环境: "3 台 Ubuntu 23.04 VM, Kernel 6.2, x86" 中, 已经自动启用 Host-Routing 基于 BPF 的功能

📝Notes 根据上一篇文章 - 绕过 IPTables 连接跟踪[3]: 在无法使用 eBPF 主机路由 (Host-Routing) 的情况下,网络数据包仍需在主机命名空间中穿越常规网络堆栈,iptables 会增加大量成本。 所以, 在"3 台 Ubuntu 23.04 VM, Kernel 6.2, x86" 中, 其实是没必要设置"绕过 IPTables 连接跟踪" 的.

Kernel < 5.10

代码语言:javascript
复制
$ kubectl -n kube-system exec ds/cilium -- cilium status |grep "Host Routing"
Host Routing:            Legacy

如上所示, 在 Kernel < 5.10 的环境: "3 台 Debian 10 开发板, Kernel 4.19, arm64" 中, Host-Routing 功能为 Legacy.

📝Notes 根据上一篇文章 - 绕过 IPTables 连接跟踪[4]: 在无法使用 eBPF 主机路由 (Host-Routing) 的情况下,网络数据包仍需在主机命名空间中穿越常规网络堆栈,iptables 会增加大量成本。通过禁用所有 Pod 流量的连接跟踪 (connection tracking) 要求,从而绕过 iptables 连接跟踪器(iptables connection tracker),可将这种遍历成本降至最低。 所以, 在"3 台 Debian 10 开发板, Kernel 4.19, arm64" 中, 是有必要设置"绕过 IPTables 连接跟踪" 的.

总结

本文调优 Cilium, 启用 Host Routing(主机路由) 以完全绕过 iptables 和上层主机堆栈,并实现比常规 veth 设备操作更快的网络命名空间切换。

但是前提条件是 Kernel >= 5.10. (在没有条件启用 Host-Routing 的环境中, 可以设置"绕过 iptables 连接跟踪"以提升性能.)

至此,性能调优已完成:

•✔️ 启用本地路由 (Native Routing)•✔️ 完全替换 KubeProxy•✔️ IP 地址伪装 (Masquerading) 切换为基于 eBPF 的模式•✔️ Kubernetes NodePort 实现在 DSR(Direct Server Return) 模式下运行•✔️ 绕过 iptables 连接跟踪 (Bypass iptables Connection Tracking)•✔️ 主机路由 (Host Routing) 切换为基于 BPF 的模式 (需要 Linux Kernel >= 5.10)•启用 IPv6 BIG TCP (需要 Linux Kernel >= 5.19)•修改 MTU 为巨型帧 (jumbo frames) (需要网络条件允许)•启用带宽管理器 (Bandwidth Manager) (需要 Kernel >= 5.1)•启用 Pod 的 BBR 拥塞控制 (需要 Kernel >= 5.18)•启用 XDP 加速 (需要 支持本地 XDP 驱动程序)

📚️参考文档

•Host-Routing - Tuning Guide — Cilium 1.13.4 documentation[5]•CNI Performance Benchmark — Cilium 1.13.4 documentation[6]•Cilium 1.9: Maglev, Deny Policies, VM Support, OpenShift, Hubble mTLS, Bandwidth Manager, eBPF Node-Local Redirect, Datapath Optimizations, and more[7]

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-07-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 东风微鸣技术博客 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 系列文章
  • 前言
    • 测试环境
    • eBPF Host-Routing
      • 要求
      • 实施
        • Kernel >= 5.10
          • Kernel < 5.10
          • 总结
          • 📚️参考文档
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档