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