《8.基于eBPF的服務網格應用加速器.pptx》由會員分享,可在線閱讀,更多相關《8.基于eBPF的服務網格應用加速器.pptx(15頁珍藏版)》請在三個皮匠報告上搜索。
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-