使用 EBPF加速 ISTIO 数据平面

深入了解服务网格数据平面性能和调优 在腾讯,已经有很多产品已使用或者正在尝试使用istio来作为其微服务治理的基础平台。不过在使用istio时,也有一些对通信性能要求较高的业务会对istio的性能有一些担忧。由于envoy sidecar的引入,使两个微服务之间的通信路径变长,导致服务延时受到了一些影响,istio社区一直以来也有这方面的声音。基于这类抱怨,我们希望能够对这一通信过程进行优化,以更好的满足更多客户的需求。 首先,我们看一下istio数据面的通信模型,来分析一下为什么会对延时有这么大的影响。可以看到,相比于服务之间直接通信,在引 阅读详情


034106a306da37e4fcaeadc8c8c1bdb0.gif

新钛云服已为您服务1382

53b95d07aafaac3741f87595b31e16d5.gif

介绍:

服务网格是处理服务间通信的基础设施层。它负责构成现代云原生应用程序的复杂服务拓扑来可靠地交付请求。Istio 是迄今为止最受欢迎的服务网格,因为它有非常丰富的功能。

本文提出了一种优化默认数据平面的方法,并使用新的内核定制机制——EBPF 来加速它。这篇文章是三部曲的第一部分。它介绍了背景知识以更好地理解我们的想法,并概括了实现加速目标的一些关键步骤。


EBPF

Extended Berkeley Packet Filter (eBPF) 是 Linux 内核中一种高度灵活和高效的虚拟式构造,允许它以安全的方式在各种挂钩点执行字节码。它在很多 Linux 内核子系统中被使用,而且它是最突出的是网络、跟踪和安全的工具。

3ceb2058660af8998778764afc04610a.png

 eBPF 的工作流程图如上

PROGRAM TYPE

目前,有很不同的 Berkeley Packet Filter (BPF) 程序类型可用;下面的几个小节解释了两种主要的联网方式。

SOCK_OPS

BPF_PROG_TYPE_SOCK_OPS(简称sock_ops)允许这种类型的BPF程序访问socket的一些字段(如IP地址、端口等)。它在网络堆栈代码的不同位置被多次调用。

此外,它使用现有的 BPF cgroups 基础结构,因此程序可以附加到每个 cgroup 并具有完全继承支持。我们使用 sock_ops 来捕获满足我们要求的套接字并相应地将它们添加到映射中。

SOCK_MSG

BPF_PROG_TYPE_SK_MSG(简称sock_msg)可以附加到sockhash map上,捕获map中socket发送的每一个数据包,并根据msg的字段(如IP地址、端口等)确定其目的地。

HELPER FUNCTION

辅助函数使 BPF 程序能够查询核心内核定义的一组函数调用,以从内核检索数据或将数据推送到内核。每种 BPF 程序类型的可用辅助函数可能不同。例如,与附加到 TC 层的 BPF 程序相比,附加到套接字的 BPF 程序只允许调用帮助程序的子集。下面解释了一个辅助函数。

BPF_MSG_REDIRECT_HASH

此帮助程序用于在套接字级别实现策略的程序。如果消息 msg 被允许通过(即如果判定 eBPF 程序返回 SK_PASS),则使用哈希 key 将其重定向到 map(类型 BPF_MAP_TYPE_SOCKHASH)引用的套接字.

MAP

映射是驻留在内核空间中的高效键/值存储。可以从 BPF 程序访问它们以保持多个 BPF 程序调用之间的状态。它们也可以从用户空间通过文件描述符访问,并且可以与其他 BPF 程序或用户空间应用程序任意共享。

SOCKHASH

Sockhash 和 Sockmap 是用于存储内核打开的套接字的数据结构。Sockmap 当前由一个数组支持,并将键强制为四个字节。这适用于许多用例。但是,在 Sockhash 更合适的更大用例中,这已成为限制。当调用Sockhash上的Sock_msg程序重定向msg时,5元组查找键可以保证尽快找到对端socket。


ISTIO 中的数据平面

Istio 服务网格在逻辑上分为数据平面和控制平面。控制平面管理和配置代理以路由流量。数据平面由一组部署为边车的智能代理 (Envoy) 组成。这些代理中介和控制微服务之间的所有网络通信,这是我们优化的重点。

边车模式

在 pod 的启动阶段,一个 sidecar 容器和一个 init 容器被注入到应用程序清单中。流量从应用程序服务传入和传出这些 sidecar,开发人员无需担心。Sidecar 代理通过在 pod 命名空间中设置 iptable 规则来获取进出容器的入站和出站流量。

进入应用程序 pod 命名空间并获取配置的 iptables,如下所示。

$ nsenter -t 4215 -n iptables -t nat -S

-P PREROUTING ACCEPT

-P INPUT ACCEPT

-P OUTPUT ACCEPT

-P POSTROUTING ACCEPT

-N ISTIO_INBOUND

-N ISTIO_IN_REDIRECT

-N ISTIO_OUTPUT

-N ISTIO_REDIRECT

-A PREROUTING -p tcp -j ISTIO_INBOUND

-A OUTPUT -p tcp -j ISTIO_OUTPUT

-A ISTIO_INBOUND -p tcp -m tcp --dport 80 -j ISTIO_IN_REDIRECT

-A ISTIO_IN_REDIRECT -p tcp -j REDIRECT --to-ports 15001

-A ISTIO_OUTPUT ! -d 127.0.0.1/32 -o lo -j ISTIO_REDIRECT

-A ISTIO_OUTPUT -m owner --uid-owner 1337 -j RETURN

-A ISTIO_OUTPUT -m owner --gid-owner 1337 -j RETURN

-A ISTIO_OUTPUT -d 127.0.0.1/32 -j RETURN

-A ISTIO_OUTPUT -j ISTIO_REDIRECT

-A ISTIO_REDIRECT -p tcp -j REDIRECT --to-ports 15001


ISTIO中APP和SIDECAR之间的流量

f072e9ce30368c31c30efc109171e4a6.png

Pod 流量可以分为三类,按其方向定义:Inbound、Outbound 和 Envoy to Envoy。我们将在下面的小节中使用从客户端服务到服务器服务的请求示例来解释这三个类别。

Outbond

911aa333f75a375bb89ba060b5ed6e8a.png

当应用程序向远程服务发送请求消息时,该消息通过另一个应用程序(客户端)创建的套接字作为内核空间中的套接字缓冲区(SKB)发送。它遍历网络堆栈,直到被 iptables 规则在 netfilter 级别拦截。它使用新目的地完成网络堆栈中剩余的旅行路径。套接字在 Envoy 创建的环回接口上侦听具有静态 ip 和端口 (127.0.0.1:15001) 的出站流量。

ENVOY TO ENVOY (同一主机)

22343e1973f9e977b5e6924793a34aec.png

在 Envoy 处理完请求消息后,它会相应地向托管服务器服务的 pod 发送一条消息。SKB 通过在服务器端网络命名空间中设置的 iptables 规则拦截消息,并将其重定向到 Envoy 正在侦听的默认端口 (pod_ip:15006) 以处理入站流量。

Inbond

Envoy 处理完请求消息后,使用环回地址(127.0.0.1)访问服务器服务。SKB经过两次网络栈,最终到达服务器端。

b61c0cc9153e4598d5bd50572718abaf.png

加速的工作原理

套接字到套接字的重定向

eBPF 允许我们将 SKB 从套接字重定向到套接字,从而节省了遍历网络堆栈其余部分的成本。下图说明了加速后的交通流量。

区分套接字对并将其添加到HASHMAP

Sock_ops 允许我们根据连接信息(例如 IP 地址、端口号等)来区分套接字。要从套接字重定向到套接字,我们需要连接的套接字对,然后将它们添加到 sockhash 映射中以备下一步使用。

哈希映射中套接字的重定向

SKB_ops 附加到一个哈希映射,捕获映射中套接字发送的每个 SKB 并确定其目的地。要将 SKB 发送到对等套接字,请将目标的 4 元组信息(src ip、src 端口、dest ip、dest 端口)作为参数传递给重定向辅助函数。它在 sockhash 映射中搜索对等套接字并在它找到了。否则,它会像过去一样继续遍历网络堆栈。


概括

本文开头介绍了eBPF及其组件,包括Program Type、Helper Function、Map。然后我们介绍了 Istio 中的几个概念:控制平面和数据平面,sidecar 模式,以及它如何使用 iptables 抓取入站和出站流量。

此外,我们将从客户端到服务器的流量路径分为三类,并解释了每一类中 SKB 发生了什么。最后,我们解释了如何加速 app 和 sidecar 之间的流量。

7ab675a5e81847d2422a2f8aeaf11109.png

参考:

·揭秘Istio的Sidecar注入模型:https ://istio.io/latest/blog/2019/data-plane-setup/

· BPF 和 XDP 参考指南:https://docs.cilium.io/en/latest/bpf/

原文:

https://01.org/blogs/xuyizhou/2021/accelerate-istio-dataplane-ebpf-part-1


了解新钛云服

新钛云服荣膺第四届FMCG零售消费品行业CIO年会「年度数字化服务最值得信赖品牌奖」

新钛云服三周岁,公司月营收超600万元,定下百年新钛的发展目标

当IPFS遇见云服务|新钛云服与冰河分布式实验室达成战略协议

新钛云服正式获批工信部ISP/IDC(含互联网资源协作)牌照

深耕专业,矗立鳌头,新钛云服获千万Pre-A轮融资

新钛云服,打造最专业的Cloud MSP+,做企业业务和云之间的桥梁

新钛云服一周年,完成两轮融资,服务五十多家客户

上海某仓储物流电子商务公司混合云解决方案

往期技术干货

Kubernetes扩容到7,500节点的历程

低代码开发,全民开发,淘汰职业程序员!

国内主流公有云VPC使用对比及总结

万字长文:云架构设计原则|附PDF下载

刚刚,OpenStack 第 19 个版本来了,附28项特性详细解读!

Ceph OSD故障排除|万字经验总结

七个用于Docker和Kubernetes防护的安全工具

运维人的终身成长,从清单管理开始|万字长文!

OpenStack与ZStack深度对比:架构、部署、计算存储与网络、运维监控等

什么是云原生?

IT混合云战略:是什么、为什么,如何构建?

2c7356a60c6f0c5e2d2055473a5cfa82.gif

点👇分享

5054ed2b25b6b05de544559c3bebb3ab.gif

戳👇在看

2020云原生技术断层:eBPF、WASM与RuntimeClass重构容器本质 容器作为云原生的核心抽象,正从轻量隔离单元演进为涵盖CRI/CNI/CSI协议的动态调度契约;其底层原理已深度绑定Kubernetes运行时接口与内核态能力。eBPF凭借零拷贝、低延迟和内核原生可编程性,成为网络、安全与可观测性的新基础设施;WASM则以亚毫秒启动和确定性执行,在边缘计算与Serverless场景中解构传统容器边界。RuntimeClass等机制标志着容器语义向‘可信执行边界’迁移,推动平台稳定性从镜像优化转向协议兼容与内核协同。本文聚焦2020年这一关键转折点,解析eBPF与WASM如何重 阅读详情

相关推荐

CANoe数据回放实战:如何用Replay Block精准复现实车故障(附ECU数据处理技巧)

本文深入探讨了利用CANoe的Replay Block功能进行数据回放,以精准复现实车偶发性故障的实战方法。文章重点解析了从原始OBD日志中移除目标ECU数据、转换报文方向等核心数据处理技巧,旨在帮助工程师重构真实的网络测试环境,从而高效定位并解决复杂的ECU问题。

nnn11的博客 464

云原生之深入解析网络服务IstioeBPF和RSocket Broker

在微服务时代,一个复杂的应用程序被分解为多个组件化、协作和连接的单元,服务往往会承担越来越多的业务责任,这使得服务治理的难度前所未有,仅仅依靠微服务框架级的治理是不够的,构建一个高维深度的治理体系需要解决。治理是指建立和实施微服务如何协同工作以实现系统设计和构建的业务目标的过程,服务不要超出其上下文边界非常重要。服务治理可以通过多种方式实现:服务注册和发现:Consul、ZooKeeper服务配置:Spring Cloud Config服务保险丝:Hystrix。

╰つ栺尖篴夢ゞ 1361

电赛控制组入门到实战:从电路板到PID算法的完整路径

本文详细介绍了电赛控制组从电路板制作到PID算法实战的完整学习路径。涵盖嘉立创电路设计、Keil5开发环境搭建、STM32F103C8T6核心板外设应用,重点解析PID算法在电机速度环与位置环中的调试技巧,并探讨OpenMV视觉模块与主控制器的协同工作,为电赛参赛者提供系统化的实战指南。

oauth7security的博客 727

IstioCon 2022 报名中|使用 eBPF 代替 iptable 加速 Istio 数据平面

开源项目 Merbridge 实现了:通过一行代码开启 eBPF 代替 iptables,在服务网格场景下,完全无感知地对流量通路进行加速,减少性能损失,满足高性能的网络需求。同时,不会对现有的 Istio 做任何修改,原有的逻辑依然畅通。近期,Merbridge 也成功入选云原生全景图的服务网格 (Service Mesh ) 模块。 Merbridge 到底如何发挥奇妙作用? 快来报名 IstioCon 2022,听 Merbridge 发起人现场分享,近距离了解,掌握第一手资料。 Use e..

DaoCloud_daoke的博客 632

使用Cilium增强Istio—通过Socket感知BPF程序

使用Cilium增强Istio—通过Socket感知BPF程序

Innocence_0的博客 718

IstioeBPF 和 RSocket Broker:深入研究服务网格

在微服务时代,一个复杂的应用程序被分解为多个组件化、协作和连接的单元,服务往往会承担越来越多的业务责任,这使得服务治理的难度前所未有。仅仅依靠微服务框架级的治理是不够的,构建一个高维深度的治理体系需要解决。本文通过不同的视角讨论服务治理。通过查看传统和现代方法,您将对 Service Mesh、IstioeBPF 和 RSocket Broker 有一个很好的理解。治理是指建立和实施微服务如何协同工作以实现系统设计和构建的业务目标的过程。服务不要超出其上下文边界非常重要。服务治理可以通过多种方式实现:稍后

技术宅,专注云原生、Go、Linux、Java等技术分享,原创文章、效率工具、实战解决方案!关注我,了解互联网动态,学 IT 不迷路 970

eBPF简介

基础概念 eBPF是kernel 3.15中引入的全新设计,将原先的BPF发展成一个指令集更复杂、应用范围更广的“内核虚拟机”。 eBPF支持在用户态将C语言编写的一小段“内核代码”注入到内核中运行,注入时要先用llvm编译得到使用BPF指令集的elf文件,然后从elf文件中解析出可以注入内核的部分,最后用bpf_load_program方法完成注入。 用户态程序和注入到内核中的程序通过共用一个位于内核中map实现通信。为了防止注入的代码导致内核崩溃,eBPF会对注入的代码进行严格检查,拒绝不合格的代码的注

SenberHu的博客 2139

[serviceMesh]腾讯云对网络的优化,ebpf

转载自https://zhuanlan.zhihu.com/p/196743652 深入了解服务网格数据平面性能和调优 在腾讯,已经有很多产品已使用或者正在尝试使用istio来作为其微服务治理的基础平台。不过在使用istio时,也有一些对通信性能要求较高的业务会对istio的性能有一些担忧。由于envoy sidecar的引入,使两个微服务之间的通信路径变长,导致服务延时受到了一些影响,istio社区一直以来也有这方面的声音。基于这类抱怨,我们希望能够对这一通信过程进行优化,以更好的满足更多客户的.

小小李的博客 1143

服务网格深度解析:Istio 数据平面与控制平面的生产级实战

微服务架构从 10 个服务膨胀到 50 个服务后,团队的痛点从"怎么拆分"变成"怎么治理"。服务发现、配置管理、负载均衡、熔断限流、链路追踪……每个问题都需要专门的组件,且组件之间需要协同工作。服务网格(Service Mesh)就是这个背景下的产物:它将服务治理逻辑从业务代码中剥离,下沉到基础设施层,让开发者专注于业务逻辑。但服务网格不是银弹,它引入的复杂度往往被低估。

weixin_63764436的博客 788

Merbridge 项目开源上线 一行代码:开启 eBPF,代替 iptables,加速 Istio

Merbridge 项目开源上线,只需要在 Istio 集群执行一条命令,即可直接使用 eBPF 代替 iptables ,实现网络加速

DaoCloud_daoke的博客 1189

eBPF02 ~ eBPFIstio 与 K8s CRD:谁更像?

eBPF:从内核技术到生产级基础设施的演进之路 摘要:eBPF作为革命性的Linux内核扩展技术,实现了安全高效的内核态编程,正在重塑云原生基础设施。本文通过三大生产场景分析其价值:1)云原生网络性能加速,相比传统方案降低50%延迟和60%CPU开销;2)下一代安全防护,支持7.3Tbps级DDoS防御和微秒级响应;3)LLM异构计算可观测性,实现零侵扰的全栈性能剖析。技术对比显示,eBPF与K8s CRD同属可编程扩展机制,而与Istio形成竞合关系。文章提供了从Hello World到SSH爆破检测的实

yuezhilangniao的博客 468

终极指南:Cilium与Istio强强联合实现新一代服务网格性能优化

Cilium 是一个开源的容器网络、负载均衡和网络安全工具,通过创新的eBPF技术为云原生环境提供高性能网络解决方案。本指南将详细介绍如何将Cilium与Istio服务网格集成,实现网络性能提升和安全策略增强的双重收益。 ## 🚀 为什么选择Cilium+Istio架构? 传统服务网格面临性能损耗和运维复杂的双重挑战。Cilium的eBPF数据平面Istio的控制平面结合,形成了新一代高性

gitblog_00345的博客 477

Istio 服务网格实现加速指南(五)

原文:annas-archive.org/md5/f6bc4444c11b1da2ce15155990ff807c。

龙哥盟 786

Beyond Istio OSS——Istio服务网格的现状与未来

作者:宋净超(Jimmy Song),原文地址:https://jimmysong.io/blog/beyond-istio-oss/本文根据笔者在 GIAC 深圳 2022 年大会上的的演讲《Beyond Istio OSS —— Istio 的现状及未来》[1]整理而成,演讲幻灯片见腾讯文档[2]。本文回顾了 Istio 开源近五年来的发展,并展望了 Isti...

dotNET跨平台 788

Kmesh深度解析:高性能内核服务网格数据平面的革命性突破

前往项目官网免费下载:[https://ar.openeuler.org/ar/](https://ar.openeuler.org/ar/?utm_source=csdn_blog) Kmesh(kernel mesh)作为开源的内核级服务网格数据平面,致力于为云原生应用提供低延迟、高吞吐的服务通信基础设施,通过将服务治理能力下沉到内核层,实现了传统用户态代理方案难以企及的性能突破。本文将从技

gitblog_06817的博客 124

DigitalOcean下一代网络架构:eBPF、Cilium与BGP智能协同

现代云网络已超越传统IP路由与ACL控制,演进为具备状态感知、策略驱动和实时自适应能力的可编程系统。其核心依托eBPF实现纳秒级数据面策略执行,以Cilium为跨平台策略编排中枢,结合自研BGP控制器完成全球流量智能调度。这种融合服务网格语义、内核级可观测性与运营商级路由策略的架构,显著提升微服务通信效率、灰度发布精度与DDoS防护能力,尤其适用于Kubernetes集群、gRPC长连接及多租户SaaS等高动态业务场景。DigitalOcean的实践表明,网络正从‘连接管道’转变为‘业务逻辑参与者’。

weixin_30892763的博客 261

服务网格完全指南:从Istio到Linkerd的Awesome Cloud Native工具集

在云原生技术快速发展的今天,服务网格(Service Mesh)已成为构建微服务架构的关键组件。Awesome Cloud Native项目作为一个精心策划的云原生工具、软件和教程列表,汇集了从Istio到Linkerd等主流服务网格解决方案,帮助开发者轻松应对分布式系统的复杂性。 ## 什么是服务网格? 服务网格是一种专门处理服务间通信的基础设施层。它负责在微服务架构中实现请求的可靠传递,并

gitblog_00131的博客 443

Envoy代理在Istio中的核心功能与性能优化实践

Envoy作为云原生时代的高性能代理,通过xDS协议实现动态配置管理,在服务网格架构中扮演关键角色。其核心功能包括流量路由、负载均衡和熔断机制,基于C++14的非阻塞IO模型可处理万级QPS。在Istio中,Envoy以sidecar形式提供透明的流量劫持和策略执行,支持Wasm扩展和双向TLS等高级特性。针对生产环境,需要重点优化连接池参数、线程模型和内存管理,同时监控关键指标如请求成功率和延迟。相比传统Nginx代理,Envoy在动态配置和服务网格集成方面具有明显优势,是云原生微服务架构的理想选择。

cuanji3287的博客 346

云原生架构下的服务网格:Istio的核心价值与落地实践

业务代码无需集成SDK,支持多语言服务统一管控;:路由规则、熔断策略通过CRD下发,秒级生效;:mTLS自动证书管理,实现服务间身份认证与加密。

cyuyanzhuanxie的博客 431

基于STM32的温湿度传感器+OLED屏显示项目文件压缩包

这是一个基于STM32的温湿度传感器项目,它可以实时将环境数据显示在OLED屏上,非常适合需要实时监测环境状况的场合。项目文件包含了所有必要的源代码和资源,方便快速部署和使用。开发环境: 硬件平台:STM32F103C8微控制器 软件平台:Keil uVision5文件主要目录如下:温湿度传感器:.├─Hardware│ DHT11.c│ DHT11.h│ OLED.c│ OLED.h│ OLED_Font.h├─Library ├─Listings├─Objects├─Start│ stm32f10x.h│ ......├─System│ Delay.c│ Delay.h└─User main.c ......

上一篇: 混合云战略:企业的制胜主题
下一篇: Python 3.10发布!你应该知道这5大新特性
新钛云服
博客等级 码龄7年 501粉丝 · 477原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值