首页 > 其他分享 >Cilium系列-9-主机路由切换为基于 BPF 的模式

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

时间:2023-07-31 16:45:20浏览次数:42  
标签:Kernel BPF 主机 Host Routing Cilium 路由

系列文章

前言

将 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),并比较 "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

$ 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 的功能

标签:Kernel,BPF,主机,Host,Routing,Cilium,路由
From: https://www.cnblogs.com/east4ming/p/17593824.html

相关文章

  • url函数的使用,无名分组和有名分组,反向解析,django2中5种转换器,路由分发,伪静态的概
    url函数的使用(支持正则表达式)#django1中使用的是urlurl('test',views.test),url函数的第一个参数是支持正则表达式的如果匹配到一个路由,就不在往下匹配,直接执行路由对应的视图函数#http://127.0.0.1:8000/test/是django默认设置的,django会先拿着test去匹配,如果匹配不......
  • 【9.0】DRF之路由
    【一】路由的写法【1】原始写法介绍是指手动编写路由规则的方式。使用path()函数或re_path()函数来定义路由规则,并将其与对应的视图函数或类关联起来。例如假设有一个名为book的应用,它包含了一个处理图书列表的视图函数book_list,以及一个处理单个图书详情的视图函数book_......
  • 【七】DRF之路由组件
    【一】路由Routers对于视图集ViewSet我们除了可以自己手动指明请求方式与动作action之间的对应关系外还可以使用Routers来帮助我们快速实现路由信息。RESTframework提供了两个routerSimpleRouterDefaultRouter【二】使用方法【1】创建router对象,并注册视图集......
  • Centos 7安装k8s 报hostPath type check failed:/sys/fs/bpf is not a direcctory错误
    原创文档编写不易,未经许可请勿转载。文档中有疑问的可以邮件联系我。邮箱:[email protected]说明Centos7系列操作系统在安装k8s时可能会遇到hostPathtypecheckfailed:/sys/fs/bpfisnotadirecctory错误,该问题为内核版本过低导致的。/sys/fs/bpf在4.4版本中的内核中才有,对......
  • 【vue】vue路由传参的三种方式
    【vue】vue路由传参的三种方式原文链接:https://blog.csdn.net/liyunkun888/article/details/83269343前言vue路由传参的使用场景一般都是应用在父路由跳转到子路由时,携带参数跳转。传参方式可划分为params传参和query传参,而params传参又可分为在url中显示参数和不......
  • 从0开发属于自己的nestjs框架的mini 版 —— koa-decorator路由篇
    这篇主要是实现路由注解,用过nestjs的都知道,其路由都是通过注解来实现的,如有控制器@Controller(),@Get()...等等,nestjs底层框架可选是expres或者是Fastify,在这里我选择koa2。话不多说,直接上代码src/koa-decorator.ts引入相关库import"reflect-metadata";importpathfro......
  • - 通过结合前端页面实现ORM对数据的增删改查 - Django中如何创建表关系 - 一对一
    通过结合前端页面实现ORM对数据的增删改查案例:写一个页面,就是把数据库中的数据以表格的形式展示出来,然后在每一行的后面加两个按钮,分别是修改、删除的按钮1.首先在数据库创建一个表格1.在model.py中创建表格 2.pythonmanage.pymakemigratins迁移记录   3.......
  • Cilium系列-8-绕过 IPTables 连接跟踪
    系列文章Cilium系列文章前言将Kubernetes的CNI从其他组件切换为Cilium,已经可以有效地提升网络的性能.但是通过对Cilium不同模式的切换/功能的启用,可以进一步提升Cilium的网络性能.具体调优项包括不限于:启用本地路由(NativeRouting)完全替换KubeProxyIP......
  • Cilium系列-8-绕过 IPTables 连接跟踪
    系列文章Cilium系列文章前言将Kubernetes的CNI从其他组件切换为Cilium,已经可以有效地提升网络的性能.但是通过对Cilium不同模式的切换/功能的启用,可以进一步提升Cilium的网络性能.具体调优项包括不限于:启用本地路由(NativeRouting)完全替换KubeProxyI......
  • OpenHarmony/HarmonyOS路由跳转并传值
    OpenHarmony/HarmonyOS路由跳转并传值作者:坚果团队:坚果派公众号:“大前端之旅”润开鸿技术专家,华为HDE,InfoQ签约作者,OpenHarmony布道师,擅长HarmonyOS应用开发、熟悉服务卡片开发,在“战码先锋”活动中作为大队长,累计培养三个小队长,带领100+队员完成Pr的提交合入。欢迎通过主页或......