雲計算

阿里雲基於Cilium的高性能雲原生網絡

Cilium 創始人兼CTO Thomas Graf 近日撰文《How Alibaba Clouduses Cilium for High-Performance Cloud-Native Computing?》, 本文翻譯自作者的英文博客。感謝Thomas Graf以及其他更多的客戶,阿里雲容器服務團隊隨時歡迎聽到更多客戶反饋。

1.png

近期,阿里雲團隊在SIG Cloud-Provider-Alibaba的會議上介紹了阿里雲容器服務的新的高性能容器網絡方案並且發佈了一篇博客介紹。你知道嗎,這個方案基於Cilium & eBPF來實現。在此之前,Google的GKE和Anthos也宣佈基於Cilium+eBPF實現了新的容器網絡數據面V2方案。但阿里雲的方案會有所不同,阿里雲採用Terway IPVLAN+Cilium的eBPF結合的方式,文章下面我們會詳細分析Terway CNI(阿里雲的CNI插件)的細節實現以及在博客中的測試數據。

和其他雲廠商一樣,阿里雲也提供了ENI(彈性網卡)的產品來暴露底層IAAS層的SDN(軟件定義網絡)的能力。對於K8S的Pod來說,基於它可以實現雲原生的虛擬化網絡,而不需要再對容器網絡再做一層虛擬化來降低性能的損耗以及減少網絡複雜度。

雲廠商的IAAS層網絡已經具備虛擬化和SDN的能力,如果底層虛擬化網絡的能力直接給Pods去使用,將能顯著降低性能的損耗。

對於阿里雲,容器網絡模型如下圖所示:
2.png
(源自: https://www.alibabacloud.com/blog/how-does-alibaba-cloud-build-high-performance-cloud-native-pod-networks-in-production-environments_596590)

為了實現這個模型,CNI層面直接與阿里雲的API交互來申請Pod所需的底層ENI網絡資源。阿里雲自研了Terway的CNI插件來實現這樣的模型。在阿里雲官方的博客中有詳細的內部實現的介紹和遇到的挑戰。這裡我們重點關注在他們如何使用IPVLAN和eBPF來提升Kubernetes的Service和NetworkPolicy的性能和擴展性。

使用IPVLAN來實現更好的網絡可擴展性和性能

單個ENI可以給Pod獨佔或者給多個Pod去共享。當ENI被多個Pod共享時,就需要對包做一些路由決策來確保Pod的流量路由到其對應的ENI上面。使用共享ENI的方式,一個ENI可以虛擬化出10-20個IP,從而可以大大增加節點上的Pod的部署密度,但是缺點是需要引入bridge或者策略路由帶來額外的性能開銷。後面的性能對比中就能看到具體的開銷。

為了提升共享ENI的性能,IPVLAN就是一個很好的選擇,IPVLAN可以將ENI很輕量的虛擬化出多個子接口來連接多個Pod到單個ENI上面。Terway的CNI通過IPVLAN來降低共享ENI的開銷,並且結合Cilium在IPVLAN的網絡模式下提供了高效的NetworkPolicy和Service的實現。並且將實現向Cilium官方提了 pull request.
3.png
(源自: https://www.alibabacloud.com/blog/how-does-alibaba-cloud-build-high-performance-cloud-native-pod-networks-in-production-environments_596590)

下面是不同模式的性能對比,其中還包含了基於雲原生的ENI網絡與基於overlay的Flannel的性能優勢。
a.png
(源自: https://www.alibabacloud.com/blog/how-does-alibaba-cloud-build-high-performance-cloud-native-pod-networks-in-production-environments_596590)

你不一定要選擇其中一個模型,可以根據需要對高性能的選擇調度到獨佔ENI,對於其他的Pod使用共享ENI的模式。

**使用eBPF來解決Kubernetes Service和NetworkPolicy的擴展性問題
**
很長一段時間,Kubernetes的標準的kube-proxy的實現是採用iptables模式,由於iptables的順序匹配,導致這種解決方案的擴展性非常受限。
5.png

(源自: https://www.alibabacloud.com/blog/how-does-alibaba-cloud-build-high-performance-cloud-native-pod-networks-in-production-environments_596590)

可以看到當服務數量增加到一定閾值後,延遲就會大幅增加。更嚴重的是,由於服務表項在iptables規則鏈中匹配的順序不同,會導致服務訪問的首包的延遲會隨機的變差。

基於這些原因,所以阿里雲才會基於eBPF來優化Kubernetes的可擴展性。

效果怎麼樣呢?下面是阿里雲團隊測試的性能對比。基於eBPF的方案的網絡的性能和可擴展性優於kube-proxy的iptables和IPVS模式:
6.png

(源自: https://www.alibabacloud.com/blog/how-does-alibaba-cloud-build-high-performance-cloud-native-pod-networks-in-production-environments_596590)

通過eBPF簡化鏈路,性能顯著提升,相對iptables模式提升了32%,相對IPVS模式提升62%。

與Kubernetes Server類似,基於eBPF同樣可以優化Kubernetes的NetworkPolicy。
7.png

(源自: https://www.alibabacloud.com/blog/how-does-alibaba-cloud-build-high-performance-cloud-native-pod-networks-in-production-environments_596590)

框框中的"BPF-agent"就是獨立於Terway CNI之外運行的Cilium的agent,用於提供Kubernetes的Service和NetworkPolicy實現:

我們使用 Cilium 作為節點上的 BPF-agent 去配置容器網卡的 BPF 規則,已貢獻 Terway 相關適配:https://github.com/cilium/cilium/pull/10251
8.png

(源自: https://www.alibabacloud.com/blog/how-does-alibaba-cloud-build-high-performance-cloud-native-pod-networks-in-production-environments_596590)

遺憾的是,在這一篇文章中阿里雲沒有提供最終的優化的對比。Cilium團隊早期做過Cilium在IPVLAN和veth模式的對比博客,可以作為粗略的參考。
總結
我們非常高興和歡迎阿里雲加入和貢獻到Cilium社區,如果需要了解更多可以參考如下內容:
Cilium Overview
Cilium GitHub
How Does Alibaba Cloud Build High-Performance Cloud-Native Pod Networks in Production Environments?
What is eBPF?

作者:Thomas Graf Cilium的聯合創始人和CTO以及Isovalent(Cilium背後的公司)的聯合創始人。在此之前,他在Red Hat和思科從事Linux內核和中斷開源項目的研發工作。

Leave a Reply

Your email address will not be published. Required fields are marked *