eBPF技术应用云原生网络实践:kubernetes网络 | 凌云时刻

article/2025/8/23 10:34:19

凌云时刻 · 洞见

导读:eBPF起源于 Linux 网络子系统,由于其灵活性和高性能等特点,被迅速应用在不同领域。事实上网络领域中,eBPF由于其高性能支持更高的吞吐率、平均每GB带宽消耗更少的CPU等特性,已经逐渐成为网络领域中改变游戏规则的技术。

作者 | 侯志远 汤志敏 王炳燊 杨伟 邬宗勇

来源 | 凌云时刻(微信号:linuxpk)

kubernetes网络性能问题

kubernetes网络可分为Pod网络、服务网络、网络策略三个部分。Pod网络依据kubernetes网络模型连接集群中的Pod、Node到一个扁平的3层网络中,也是服务网络、网络策略实现的底座。服务网络在Pod网络的路径上添加负载均衡的能力支持Pod到service的访问。网络策略则通过状态防火墙功提供pod间的访问控制。

当前服务网络和网络策略多基于kernel协议栈的L3包过滤技术Netfilter框架实现,包括conntrack, iptables, nat, ipvs等。Netfilter作为2001年加入kernel的的包过滤技术,提供了灵活的框架和丰富的功能,也是Linux中应用最为广泛的包过滤技术。不过其在性能、扩展能力等方面也一直存在一些问题,例如iptables规则由于是线性结构存在更新慢、匹配慢问题,conntrack在高并发场景中性能下降快、连接表被打满的问题等等。Netfilter的这些问题也导致了服务网络、网络策略难以满足大规模的kubernetes集群和一些高性能场景的需求。

为解决服务网络、网络策略基于netfilter实现的性能问题,也有一些通过云上网络产品来实现的方法。例如由L4负载均衡实现服务网络、安全组实现网络策略。云上网络产品提供了丰富的网络功能和确定的SLA的保障,但因当前云网产品主要聚焦在IaaS层,其创建速度、配额等限制存在难以满足云原生场景的弹性、快速等需求。

Pod网络的实现依据是否经过kernel L3协议栈可分为两大类:经过L3协议栈的路由、Bridge等,bypass L3协议栈的IPVlan、 MacVlan,、直通等。经过L3协议栈的方案由于datapath中保留了完整的L3的处理,可兼容当前的服务网络、网络策略的实现,但因L3的逻辑较重这类方案性能较低。bypass L3协议栈的方案,由于datapath逻辑简单性能扩展性都较好,但存在较难实现服务网络、网络策略的问题。

综上,kubernetes网络在性能上的问题总结为如下几类:

考虑kubenetes网络当前的现状,我们需要重新实现一种不依赖于Netfilter的轻量的服务网络、网络策略实现。一方面可以应用于IPVlan、MacVlan、直通等高性能Pod网络中、补齐其对服务网络、网络策略的支持,另一方面新的实现需要有更好的性能、扩展能力。

基于eBPF的方案

 eBPF:可编程的转发面

eBPF在kernel实现了一个基于寄存器的虚拟机,并定于了自己的64bit指令集。通过系统调用,我们可以加载一段编写好的eBPF程序到kernel,并在相应的事件发生触发运行。同时kernel也提供的相关验证机制,确保加载的eBPF程序其可以被安全的执行,避免对kernel产生破坏,导致painc, 安全隐患等风险。

kernel当前在许多模块中增加了eBPF的支持,并定义了多种的eBPF程序类型。每种类型确定了其可以加载到kernel中的位置、可以调用的kernel helper函数、运行eBPF程序时传递的对象、以及对kernel对象的读写权限等。目前网络是eBPF应用较多也是发展较快的的子系统之一。从协议栈底层的网卡到上层的socket,均存在多种类型的eBPF的支持。

同时,针对当前netfilter的一些性能,社区也在基于eBPF实现一个新的名为bpfilter的包过滤技术(https://lwn.net/Articles/755919/)。 

从网络开发者的视角,eBPF相当于在kernel中提供了一种可编程的数据面,同时由kernel去保证程序的安全性。我们希望基于此实现一种高性能的服务网络和网络策略,同时应用于IPVlan, MacVlan, 直通等bypass L3的Pod网络。从而在kubernetes中提供一种综合性能较好的网络解决方案。

 tc-ebpf:一种新的服务网络&网络策略实现

tc-ebpf位于Linux协议栈的L2层,可以hook网络设备的入、出双向流量到eBPF实现的datapath,基于tc-ebpf实现网络网络&网络策略优势有:

  • hook在tc层,不依赖kernel的L3协议栈能力,可较容易的支持ipvlan、macvlan、直通等多种高性能网络模式;

  • 可以读写skb_buff,kernel提供的helper函数功能丰富,较容易实现复杂的datapath。

  • 规则的匹配、更新基于Hash,比线性操作的iptables规则性能高、扩展性好

  • datapath可编程。可在不重启、升级kernel的前提下,对datpath进行更新、优化

通过tc-ebpf构建服务网络&网络策略一般需要实现如下几个模块:

Conntrack是服务网络、网络策略的基础模块。egress, ingress流量均会先经过conntrack的处理,并生成容器流量的连接状态。

LoadBalance+ReverseNat为服务网络的模块。LoadBalance为egress流量选择可用的endpoint,并将负载均衡信息同步到连接追踪信息中;ReverseNat为ingress流量查找LoadBalance信息并执行发向nat,修改源IP为cluster ip。

Policy模块基于Conntrack的连接状态,对于新连接应用用户定义的Policy规则。

我们也调研了当前相关的社区一些实现,Cilium是基于eBPF技术构建kubernetes网络能力其中的佼佼者,使用eBPF实现了Pod网络、服务网络、网络策略等能力,但也发现cilium目前支持的网络模式没有很好的应用于公有云的场景。

  • vxlan封包模式:在封包解包过程中造成额外的性能损失,并且封包之后的UDP包不能利用tso等网卡offload性能优化

  • linux路由模式:在一些虚拟化环境中不支持2层的路由协议,比如在阿里云上没办法通过路由协议打通不同机器的Pod IP段?

  • cni chain: cilium当前支持的的cni chain的方式,可以对接veth的网络插件,但性能上的优化并不明显。

 Terway With eBPF: 我们的方案

Terway是阿里云容器服务团队开源的高性能容器网络插件,支持使用阿里云的弹性网卡来实现的容器网络。使得容器网络和虚拟机网络在同一个网络平面,在不同主机之间容器网络通信时不会有封包等损失,不依赖于分布式路由也能让集群规模不受限于路由条目限制。

我们和Terway合作,通过CNI chain的方式连接Terway和Cilium,进一步优化了Kubernetes的网络性能。


Terway作为CNI chain的第一个CNI,在阿里云VPC之上创建Pod网络连接Pod到VPC,提供高性能的容器网络通信。而Cilium作为第二个CNI,实现高性能的服务网络和网络策略。

IPVlan Based CNI Chain

综合单Node上Pod密度、性能等因素,Pod网络采用VPC的eni多ip特性,基于IPVlan L2的方式创建。

同时在Cilium中实现一种IPVlan模式的CNI chain mode,在terway创建创建的Pod网络基础上接入tc-eBPF的datapath,实现服务网络和网络策略。

性能评估

网络性能评估主要与Terway当前三种网络模式对比:

  • 策略路由模式

  • IPVlan

  • ENI

本方案实现的Terway With eBPF(下列图中简称eBPF)模式性能测试结论:

  • Pod网络性能

    • ebpf模式接近ipvlan模式,相比下降2%,相比策略路由提升11%,

    • 扩展性能

      • 当Pod的数量从3增加156时,IPVlan和eBPF下降约13%,  策略路由下降约23%

  • 服务网络性能

    • 相比kube-proxy(iptables模式)短连接提升约32%,长连接提升19%

    • 相比kube-proxy(ipvs模式)提升短连接约60%,长连接提升约50%

    • 扩展性能

      • kuberenetes服务从1增加到5000时,eBPF和kube-proxy(ipvs模式)性能都表现出较好的扩展能力持平,5000个服务性能略微下降3%;kube-proxy(iptables模式)短连接下降约60%, 长连接下降约6%左右

  • 网络策略性能

    • pod和policy为1时,eBPF模式比策略路由在短连接提升约32%,长连接提升约16%

    • pod和policy为增加到120时,短连接eBPF相比策略路由性能提升19%;长连接提升24%

 Pod网络

tcp性能测试结果

udp性能测试结果

 服务网络

service网络测试不同网络模型下的service network的转发性能和扩展能力。测试对比了pod网络,service为1,1000, 5000四种类型。测试工具采用ab、nginx,nginx配置为8核心。

 网络策略

Terway的网络模式中仅有策略路由。本测试对比了两种模式在被测pod为1配置1个policy以及被测pod为120配置120个policy下的性能数据。测试工具为ab-nginx, nginx配置为8核心。

总结 & 后续

分析当前Kubernetes中网络(Pod网络、服务网络及网络策略)中的性能、扩展能力等问题。我们调研了kenrel eBPF技术及社区开源的eBPF容器方案Cilium,最后在阿里云上结合Terway,基于ENI多IP的网络特性实现了一种高性能容器网络方案。同时我们在cilium实现的IPVlan L2的CNI chain方案也已开源到Cilium社区。

在当前方案中Host Namespace的服务网络和网络策略的实现仍然是由kube-proxy实现。目前主要考虑Host Namespace中的服务网络流量在集群流量中占比较小,且流量类型较为复杂(包括cluter ip、node port、extern ip等),由eBPF实现的优先级不高收益较小。

tc-ebpf由于在Linux的L3之前,暂无还无法支持分片报文的重组。这会导致服务网络&网络策略的实现对分片报文失效,对于此,我们设计了redirect分片到L3协议栈重组重入eBPF的方案。不过考虑到kubernets集群大都部署在同类网络中,分片报文出现的概率相对较低,未在当前版本中实现。另外,cilium当前也在eBPF中增加了服务网络&网络策略对分片报文的支持 (https://github.com/cilium/cilium/pull/10264),目前该实现还存在无法分片报文乱序到底的问题。

展望

eBPF作为新技术为kernel的网络转发面开发提供了巨大的可能性。我们目前的方案相当于在L2层实现了服务网络、网络策略,虽然在性能上相比基于netfilter的方案存在一定的提升,但实现的conntrack模块在网络上依然是一个不可忽视的开销。另一方面我们也在思考,在kubernetes的pod或node中的datapath上是否真的需要conntrack?是否可以基于socket的状态信息实现无负载开销的conntrack。

基于此我们也在探索在socket层实现服务网络、网络策略的可能性。我们希望可以借助socket层的eBPF,构建一种开销极小conntrack,进而实现一种性能、扩展性更优的服务网络、网络策略方案。

END

往期精彩文章回顾

央行数字货币,支付宝没在怕的

张献涛:虚拟化技术 40 年演进史

重磅:达摩院医疗AI团队CVPR'20论文解读

朴灵:云计算的开发者视界中,OpenAPI 是绝对主角

央行DECP开测,拉开全球货币霸权之战大幕

长按扫描二维码关注凌云时刻

每日收获前沿技术与科技洞见

 


http://chatgpt.dhexx.cn/article/ChJEdYBo.shtml

相关文章

OpenAnolis社区致Linux开发者的一封信

凌云时刻 技术 导读:OpenAnolis社区官宣。 来源|OpenAnolis 亲爱的Linux开发者朋友们: 大家新年好! 今天,我们要给大家讲讲OpenAnolis的故事,她与每个Linux开发者都息息相关。OpenAnolis社区由阿里云于202…

云原生时代,消息中间件的演进路线 | 凌云时刻

凌云时刻 技术 导读:从虚拟化技术诞生以来,IaaS/PaaS/SaaS 概念陆续被提了出来,各种容器技术层出不穷。到 2015 年, Cloud Native 概念应运而生,一时间,各种云厂商,云服务以及云应用都加上了“…

Alibaba Cloud Linux 2 LTS OS 启动优化实践 | 凌云时刻

凌云时刻 技术 导读:Alibaba Cloud Linux 2 (原Aliyun Linux 2)是阿里云操作系统团队基于社区版 4.19 LTS 内核打造的一款针对云产品优化的下一代 Linux 操作系统发行版,不仅提供 Linux 社区的最新增强功能,也提供了云上最佳用户体验并针对阿…

云原生的What、Why、How | 凌云时刻

凌云时刻 洞见 导读:毋庸置疑,云计算的未来是云原生的。但是云原生到底是什么?在这场数字化转型的浪潮中,云原生扮演着什么角色?一千个人眼中,有一千个哈姆雷特。在本文中,从过去到未来&#x…

什么技术才值得你长期投入? | 凌云时刻

凌云时刻 洞见 导读:“每个人的时间都是有限的,在有限的时间里选择一项值得投入的技术会变得尤为重要。”那么,如何去选择一个值得投入的技术?一个值得长期投入的技术又具备哪些特性? 作者 | 简锋 来源 | 凌云时刻&am…

龙蜥社区首届理事大会圆满召开!14家理事代表出席

凌云时刻 编者按:2021年7月6日,OpenAnolis龙蜥社区成功召开首届理事大会,来自阿里云、统信软件、Intel、红旗软件、万里红、联通、电信云、移动云、龙芯、兆芯、飞腾、中科方德等14位家单位的理事代表出席。本次会议由龙蜥社区运营委员会主席…

SRS为何加入木兰社区孵化?

凌云时刻 SRS正式加入木兰开源社区孵化,我想很多朋友只是大概知道木兰社区是国家级的开源社区,是一件很值得荣耀的事情,其他的事情可能就了解不多了。 这次和大家分享下我对这个事情的理解和思考,如果有疑问欢迎评论区留言&#x…

陈绪:被疫情加速的云计算 | 凌云时刻

凌云时刻 导读:"疫情是云计算腾飞的一个推动力,只是突然而来的肺炎病毒,在给所有人带来损失的同时,也为云计算的生态格局创造了一个全新的变化。" 作者 | 陈绪 来源 | 凌云时刻(微信号:linuxpk…

申通上云?技术详解! | 凌云时刻

凌云时刻 技术 导读:如果说,快递行业上半场的竞争拼的是规模、服务乃至价格,进入下半场,快递企业们还需要比拼硬核的技术实力。 作者 | 周金龙(遥方) 来源 | 凌云时刻(微信号:linux…

eBPF Internal: Instructions and Runtime | 凌云时刻

凌云时刻 技术 导读:eBPF 是最近几年异常火爆的一门内核技术,从2011年开发至今,eBPF 社区依然非常活跃。eBPF 可以通过热加载的方式动态的获取、修改内核中的关键数据和执行逻辑,避免内核模块的方式可能会引入宕机风险&#xff0…

乘风破浪的中国数据库 | 凌云时刻

凌云时刻 洞见 导读:从80年代萨师煊教授的一行板书,到今天国产数据库的百花齐放,四十年科技自研,中国数据库都经历了什么? 作者 | 丹如 来源 | 杭派工程师 前言 “科技行业已经没有什么惊心动魄的大事了!”…

harmonyos开发者社区,HarmonyOS开发者创新大赛结果公布,社区渠道参赛队伍战果斐然...

HarmonyOS开发者创新大赛是华为HarmonyOS开发者生态建设的重要一环,致力于挖掘优秀的应用创新人才及项目。参赛队伍基于HarmonyOS的创新特性,结合应用场景,开发出具有全新体验、全新交互的终端应用。对有市场前景的项目,华为不吝帮…

凌云抒志 星海航帆 | 汇佳学校MYP社区设计展隆重举办

毕业,一个带着憧憬、喜悦和不舍的复杂字眼。在那些不曾预料的挑战和困难中,拥有不寻常经历的2022届MYP毕业生,通过为期一年的社区服务与行动,为这个词增添了新的注解:毕业,还需要“勇气”与“坚毅”&#x…

YOLOv2相比于yolov1的改进

1.Batch Normalization Batch Normalization可以提升模型收敛速度,而且可以起到一定正则化效果,降低模型的过拟合。在YOLOv2中,每个卷积层后面都添加了Batch Normalization层,并且不再使用droput。使用Batch Normalization后&…

YOLOv1,YOLOv2,YOLOv3解读

本文依次讲解YOLOv1,v2,v3。博客地址https://blog.csdn.net/hancoder/article/details/87994678 文章目录 YOLOv11.1 Introduction1.2 Unified Detection1.3 网络框架1.4 Loss解读LOSS: 1.5 test附:NMS示例: 1.7 YOLOv1结语待解决问题 YOLOv22.1 Better更…

Yolov2模型——pytorch实现

论文传送门:YOLO9000: Better, Faster, Stronger Yolov2的改进: 1.批标准化(Batch Normalization):在conv后加入BN(conv不再使用bias),改善模型的收敛性,同时去掉dropout; 2.高分辨率分类器(High Resolut…

【YOLO系列】--YOLOv2超详细解读/总结

本章论文: YOLOv2论文(YOLO9000: Better, Faster, Stronger)(原文+解读/总结+翻译) YOLO系列解读直通车🚀: YOLO系列-【YOLOv1】🚀 YOLO系列-【YOLOv2】&a…

YOLOv1、YOLOv2和YOLOv3对比

YOLOv1、YOLOv2和YOLOv3对比 R-CNN系列YOLOv1结构目标输出网络训练YOLOv1的局限性和R-CNN系列的对比 YOLOv2结构目标输出网络训练关于YOLO9000 YOLOv3结构目标输出网络训练YOLOv3系统做过的不成功的尝试 未来 YOLO深度卷积神经网络已经经过原作者Joseph Redmon已经经过了3代4个…

YOLOv2 论文笔记

论文地址:YOLO9000: Better, Faster, Stronger 项目主页:YOLO: Real-Time Object Detection (最近博客下很多人请求Caffe 代码,受人所托,已经不再提供,且关闭本文评论,望请见谅) …

YOLO - v1

先理解预测阶段: 1)一个448*448*3的图像经过YOLO这个黑箱输出一个7*7*30矩阵; 2)7*7*30的矩阵中的30维是5520;5是预测的bbox的x,y,w,c;20是20个类别的条件概率; 解释c: 解释条件概率:它的意义是…