Merbridge使用 eBPF 加速服務(wù)網(wǎng)格
Merbridge 旨在讓 Service Mesh 的流量攔截和轉(zhuǎn)發(fā)更加高效。借助 Merbridge,開發(fā)人員可以使用 eBPF 而不是 iptables 來加速他們的服務(wù)網(wǎng)格,而無需任何額外的操作或代碼更改。目前,Merbridge 已經(jīng)支持 Istio、Linkerd 和 Kuma。
功能:
- 處理outbound流量
- Merbridge使用eBPF的connect程序來修改user_ip和user_port,從而改變連接的目的地址,確保流量可以發(fā)送到新的接口。為了幫助Envoy識別原始目的地,應(yīng)用程序(包括Envoy)在接收連接時將調(diào)用get_sockopt函數(shù)來獲取ORIGINAL_DST。
- 處理inbound 流量
- Inbound流量的處理方式與 outbound流量的處理方式類似。eBPF 無法像 iptables 那樣在指定的命名空間中生效,因此更改將是全局的。這意味著如果將 eBPF 應(yīng)用于原本不是由 Istio 管理的 Pod,或者外部 IP,將會出現(xiàn)嚴(yán)重的問題,例如無法建立連接。為了解決這個問題,開發(fā)團(tuán)隊設(shè)計了一個小小的控制平面,作為DaemonSet部署。它可以幫助觀察并獲得節(jié)點(diǎn)上所有的Pod列表,類似于kubelet。然后,注入sidecar的Pod IP將被寫入local_pod_ips地圖中。對于目的地地址不在地圖中的流量,Merbridge將不會攔截它。
-
加速聯(lián)網(wǎng)
-
在Istio中,Envoy通過當(dāng)前的podIP和端口號訪問應(yīng)用程序。因為podIP存在于local_pod_ips地圖中,流量將被重定向到15006端口的podIP,產(chǎn)生一個無限循環(huán)。eBPF有什么方法可以獲得當(dāng)前命名空間的IP地址嗎?開發(fā)團(tuán)隊已經(jīng)設(shè)計了一個反饋機(jī)制。當(dāng)Envoy試圖建立一個連接時,會將其重定向到15006端口。當(dāng)它轉(zhuǎn)移到sockops時,將檢查源IP和目標(biāo)IP是否相同。如果是,這意味著發(fā)送了錯誤的請求,則將在sockops進(jìn)程中丟棄它。同時,當(dāng)前的ProcessID和IP將被寫入process_ip map中,使eBPF支持進(jìn)程和IP之間的對應(yīng)關(guān)系。當(dāng)下一個請求被發(fā)送時,將直接從process_ip map中檢查目的地是否與當(dāng)前IP相同。當(dāng)請求失敗時,Envoy將重試。這個重試過程只會發(fā)生一次,后續(xù)的連接會非???。
-
評論
圖片
表情
