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

news2024/11/13 10:00:48

系列文章

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

📝Notes

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

Kernel < 5.10

$ 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 连接跟踪: 在无法使用 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
  • CNI Performance Benchmark — Cilium 1.13.4 documentation
  • Cilium 1.9: Maglev, Deny Policies, VM Support, OpenShift, Hubble mTLS, Bandwidth Manager, eBPF Node-Local Redirect, Datapath Optimizations, and more

三人行, 必有我师; 知识共享, 天下为公. 本文由东风微鸣技术博客 EWhisper.cn 编写.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/815985.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Godot在多边形内随机获取点

前言&#xff1a; 我做了一个随机生成器&#xff0c;可以生成游戏道具&#xff0c;之前是矩形比较好算&#xff0c;随着关卡设计我需要多边形的生成方式。 在矩形内获取随机点&#xff1a; func generateRandomCoordinateInRect(pos,size):"""根据范围生成随机…

Reinforcement-Learning

文章目录 Reinforcement-Learning1. RL方法分类汇总&#xff1a;2. Q-Learning3. SARSA算法4. SARSA&#xff08;λ&#xff09; Reinforcement-Learning 1. RL方法分类汇总&#xff1a; &#xff08;1&#xff09;不理解环境&#xff08;Model-Free RL&#xff09;&#xff…

无涯教程-jQuery - outerWidth( margin])方法函数

outerWidth([margin])方法获取第一个匹配元素的外部宽度(默认情况下包括边框和填充)。 此方法适用于可见和隐藏元素。由于父项被隐藏的元素不支持此功能。 outerWidth( [margin] ) - 语法 selector.outerWidth( [margin] ) 这是此方法使用的所有参数的描述- margin - 此…

OpenLayers实战进阶专栏目录,OpenLayers实战案例,OpenLayers6实战教程

前言 本篇作为OpenLayers实战进阶教程的目录&#xff0c;用于整理汇总专栏所有文章&#xff0c;方便查找。 OpenLayers是前端最流行的JS二维地图引擎之一。 反馈建议 OpenLayers系列-交流专区&#xff0c;建议和问题反馈 Openlayers实战进阶 Openlayers实战&#xff0c;O…

SQL-每日一题【1148. 文章浏览 I】

题目 Views 表&#xff1a; 请查询出所有浏览过自己文章的作者 结果按照 id 升序排列。 查询结果的格式如下所示&#xff1a; 示例 1&#xff1a; 解题思路 1.题目要求我们查询出所有浏览过自己文章的作者&#xff0c;结果按照 id 升序排列。 2.我们只需要筛选出 author_id …

消防应急照明设置要求在炼钢车间电气室的应用

摘 要:文章以GB51309—2018《消防应急照明和疏散指示系统技术标准》为设计依据&#xff0c;结合某炼钢车间转炉项目的设计过程&#xff0c;在炼钢车间电气室的疏散照明和备用照明的设计思路、原则和方法等方面进行阐述。通过选择合理的消防应急疏散照明控制系统及灯具供配电方案…

java 企业工程管理系统软件源码+Spring Cloud + Spring Boot +二次开发+ MybatisPlus + Redis

&#xfeff; 电子招标采购软件 解决方案 招标面向的对象为供应商库中所有符合招标要求的供应商&#xff0c;当库中的供应商有一定积累的时候&#xff0c;会节省大量引入新供应商的时间。系统自动从供应商库中筛选符合招标要求的供应商&#xff0c;改变以往邀标的业务模式。招…

独立站有流量没订单是什么原因呢?怎么解决?

和自带流量的电商平台比起来&#xff0c;外贸独立站自身是没有流量的。独立站卖家要订单&#xff0c;就必须主动去引流。 如果你是1个独立站新手卖家&#xff0c;你很可能遇到过这种问题&#xff1a;跑了一段时间广告&#xff0c;广告费花了几百上千美金&#xff0c;流量来了不…

集合简述

集合ListArrayListLinkedList SetHashSetTreeSet MapHashMapTreeMap 集合与数组的区别 集合 集合是java中的一个容器&#xff0c;可以在里面存放数据&#xff0c;容量可以发生改变 从集合框架结构可以分析得知&#xff1a; 1、集合主要分为Collection和Map两个接口 2、Collecti…

简单版本视频播放服务器V4,layui界面

简单版本视频播放服务器V4 前一个版本内容&#xff0c;可以查看 https://blog.csdn.net/wtt234/article/details/131759154 优化内容&#xff1a; 1.返回列表的优化&#xff0c;优化了原来返回空列表名称的问题 2.前端才有layui优化内容 后端&#xff1a; package mainim…

配置IPv6 over IPv4手动隧道示例

组网需求 如图1所示&#xff0c;两台IPv6主机分别通过SwitchA和SwitchC与IPv4骨干网络连接&#xff0c;客户希望两台IPv6主机能通过IPv4骨干网互通。 图1 配置IPv6 over IPv4手动隧道组网图 配置思路 配置IPv6 over IPv4手动隧道的思路如下&#xff1a; 配置IPv4网络。配置接…

【Golang 接口自动化06】微信支付md5签名计算及其优化

目录 前言 初始方式 代码说明 优化 最终方法 性能对比 参考代码 总结 资料获取方法 前言 可能看过我博客的朋友知道我主要是做的支付这一块的测试工作。而我们都知道现在比较流行的支付方式就是微信支付和支付宝支付&#xff0c;当然最近在使用低手续费大力推广的京东…

ELD透明屏在智能家居中有哪些优点展示?

ELD透明屏是一种新型的显示技术&#xff0c;它能够在不需要背光的情况下显示图像和文字。 ELD透明屏的原理是利用电致发光效应&#xff0c;通过在透明基板上涂覆一层特殊的发光材料&#xff0c;当电流通过时&#xff0c;发光材料会发出光线&#xff0c;从而实现显示效果。 ELD…

企业电子招投标采购系统java spring cloud+spring boot功能模块功能描述+数字化采购管理 采购招投标

​功能模块&#xff1a; 待办消息&#xff0c;招标公告&#xff0c;中标公告&#xff0c;信息发布 描述&#xff1a; 全过程数字化采购管理&#xff0c;打造从供应商管理到采购招投标、采购合同、采购执行的全过程数字化管理。通供应商门户具备内外协同的能力&#xff0c;为外…

【深度学习】MAT: Mask-Aware Transformer for Large Hole Image Inpainting

论文&#xff1a;https://arxiv.org/abs/2203.15270 代码&#xff1a;https://github.com/fenglinglwb/MAT 文章目录 AbstractIntroductionRelated WorkMethod总体架构卷积头Transformer主体Adjusted Transformer Block Multi-Head Contextual Attention Style Manipulation Mo…

计算机视觉实验:图像处理综合-路沿检测

目录 实验步骤与过程 1. 路沿检测方法设计 2. 路沿检测方法实现 2.1 视频图像提取 2.2 图像预处理 2.3 兴趣区域提取 2.4 边缘检测 ​​​​​​​2.5 Hough变换 ​​​​​​​2.6 线条过滤与图像输出 3. 路沿检测结果展示 4. 其他路沿检测方法 实验结论或体会 实…

防雷保护区如何划分,防雷分区概念LPZ介绍

在防雷设计中&#xff0c;很重要的一点就是防雷分区的划分&#xff0c;只有先划分好防雷区域等级&#xff0c;才好做出比较好的防雷器设计方案。 因为标准对不同区安装的防雷浪涌保护器要求是不一样的。 那么&#xff0c;防雷保护区是如何划分的呢&#xff1f; 如上图所示&…

关于led显示屏编程技术有哪些

LED显示屏编程技术主要涉及控制LED显示屏的内容、亮度、颜色等参数&#xff0c;以及与其他设备或系统的数据交互。下面列举一些常见的LED显示屏编程技术&#xff1a; 1. LED显示屏控制协议&#xff1a; 不同品牌和型号的LED显示屏通常都采用特定的控制协议&#xff0c;如DMX51…

【数据结构】_6.队列

目录 1.概念 2.队列的使用 3.队列模拟实现 4.循环队列 5.双端队列 6.OJ题 6.1 用队列实现栈 6.2 用栈实现队列 1.概念 &#xff08;1&#xff09;队列是只允许在一端进行插入数据操作&#xff0c;在另一端进行删除数据操作的特殊线性表&#xff1b; &#xff08;2&am…

Linux6.21 ansible playbook 剧本

文章目录 计算机系统5G云计算第一章 LINUX ansible playbook 剧本一、概述二、playbook应用1.示例2.运行playbook3.定义、引用变量4.指定远程主机sudo切换用户5.when条件判断6.迭代7.Templates 模块8.tags 模块 计算机系统 5G云计算 第一章 LINUX ansible playbook 剧本 一、…