当前位置:首页 > 报告详情

8.基于eBPF的服务网格应用加速器.pptx

上传人: 张** 编号:161277 2024-05-05 15页 13.86MB

1、首届中国首届中国eBPFeBPF研讨会研讨会使用 eBPF 代替 iptables 加速服务务网格主讲讲人:刘齐齐均2022-11-12首届中国首届中国eBPFeBPF研讨会研讨会目录录01Merbridge 项项目介绍绍02Merbridge 部分原理03Merbridge 未来发发展04演示首届中国首届中国eBPFeBPF研讨会研讨会Merbridge 项项目介绍绍01首届中国首届中国eBPFeBPF研讨会研讨会使用 eBPF 优优化数据路径Istio 原有流量转发逻辑转发逻辑使用 Merbridge 之后的转发逻辑转发逻辑首届中国首届中国eBPFeBPF研讨会研讨会主要能力介绍绍 1.使

2、用 eBPF 代替 iptables 的 REDIRECT 能力,实现流量拦截;2.使用 sockmap 加速 app 和 sidecar 之间的通讯;3.通过 cni plugin 实现 eBPF 程序中获取当前 Pod 的 IP 地址;4.同时支持多种网格实现(Istio、Kuma、Linkerd2);首届中国首届中国eBPFeBPF研讨会研讨会部分原理介绍绍02首届中国首届中国eBPFeBPF研讨会研讨会使用 eBPF 拦拦截流量 什么流量需要拦截?App 发出的流量(通过 UID 判断)拦截到哪里?怎么拦截?通过 connect 程序修改发起连接的目的地址为 127.0.0.1:150

3、01 如何获取原地址?通过 get_sockopt 程序返回原始目的地址。首届中国首届中国eBPFeBPF研讨会研讨会解决四元组组冲突 Q:eBPF 是内核级别的,但是在网格场景中确实共享内核,在流量转发的路径中可能存在四元组冲突。如果要解决四元组冲突,那么需要能够打破其中任何一个变量(sip,sport,dip,dport)1.Solution 1:修改 dip,将其从 127.0.0.1 修改为 127.128.x.y,其中 x,y 随着每次连接的建立而增加,这样可以保证不出现重复的四元组。2.Solution 2:修改 sip,将 127.0.0.1 改为 Pod IP,这样也可以避免冲

4、突。3.引入 socket cookie,为每个连接加上唯一标志,这样也可以避免冲突。有什么问题?对于 Solution 1,Merbridge 早期就采用这个方案,但是其没法在 ipv6 下很好的工作。对于 Solution 2,有个困难,就是 eBPF 没法直接获取当前 Pod 的 IP 地址信息。对于 Solution 3,其对内核版本要求较高,需要 5.15 及以上版本才支持。首届中国首届中国eBPFeBPF研讨会研讨会在 eBPF 中获获取当前 Pod IP 方案 我们通过 CNI,在 Pod 创建的时候在当前 Pod 的 NetNS 里面监听一个特殊的端口 39807,将 Key

5、使用setsockopt写入这个端口 socket 的 mark。在 eBPF 中,我们通过bpf_sk_lookup_tcp取得端口 39807 的 Mark 信息,然后从mark_pod_ips_map中即可取得当前 NetNS(也是当期 Pod)的 IP。有了当前 Pod IP 之后,我们可以根据这个 Pod 的配置,确认流量处理路径(比如excludeOutboundPorts)。https:/merbridge.io/zh/blog/2022/05/18/cni-mode/首届中国首届中国eBPFeBPF研讨会研讨会Merbridge 未来发发展03首届中国首届中国eBPFeBPF研讨会研讨会RoadMap 1.节点之间加速 2.双栈支持 3.Ambient mesh 模式支持 4.更低的版本要求、更好的性能 5.首届中国首届中国eBPFeBPF研讨会研讨会Demo04首届中国首届中国eBPFeBPF研讨会研讨会Demo 视频视频首届中国首届中国eBPFeBPF研讨会研讨会社区信息 网址:https:/merbridge.io/zh/项目地址:https:/ Slack 交流:https:/ 首届中国首届中国eBPFeBPF研讨会研讨会Thanks!2024-5-

word格式文档无特别注明外均可编辑修改,预览文件经过压缩,下载原文更清晰!
三个皮匠报告文库所有资源均是客户上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作商用。
本文主要介绍了使用 eBPF 代替 iptables 加速服务网格的 Merbridge 项目。Merbridge 能够优化数据路径,使用 eBPF 实现流量拦截,并通过 sockmap 加速 app 和 sidecar 之间的通讯。它通过 cni plugin 获取当前 Pod 的 IP 地址,并支持多种网格实现,如 Istio、Kuma 和 Linkerd2。 Merbridge 利用 eBPF 拦截流量,修改连接的目的地址,解决四元组冲突,并为每个连接引入 socket cookie 作为唯一标志。然而,解决方案存在一些问题,如在 ipv6 下不能很好工作,eBPF 不能直接获取当前 Pod 的 IP 地址,且对内核版本要求较高。 Merbridge 通过 CNI 在 Pod 创建时监听特殊端口 39807,并将 Key 使用 setsockopt 写入这个端口 socket 的 mark。在 eBPF 中,通过 bpf_sk_lookup_tcp 取得端口 39807 的 Mark 信息,从而获取当前 Pod 的 IP。 未来的发展计划包括节点之间加速、双栈支持、Ambient mesh 模式支持、降低版本要求和提高性能等。 综上所述,Merbridge 是一个利用 eBPF 技术优化服务网格性能的项目,能够代替 iptables 实现流量拦截和加速 app 与 sidecar 之间的通讯,并通过 CNI 获取 Pod IP 地址,支持多种网格实现。
"eBPF如何替代iptables加速服务网格?" "Merbridge如何解决iptables无法解决的四元组冲突问题?" "Merbridge未来有哪些发展规划和性能提升?"
客服
商务合作
小程序
服务号
折叠