天天看點

阿裡雲基于Cilium的高性能雲原生網絡

Cilium 創始人兼CTO Thomas Graf 近日撰文《 How Alibaba Clouduses Cilium for High-Performance Cloud-Native Computing? 》, 本文翻譯自作者的英文 部落格 。感謝Thomas Graf以及其他更多的客戶,阿裡雲容器服務團隊随時歡迎聽到更多客戶回報。
阿裡雲基于Cilium的高性能雲原生網絡

近期,阿裡雲團隊在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去使用,将能顯著降低性能的損耗。

對于阿裡雲,容器網絡模型如下圖所示:

阿裡雲基于Cilium的高性能雲原生網絡

(源自:

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

.

阿裡雲基于Cilium的高性能雲原生網絡

下面是不同模式的性能對比,其中還包含了基于雲原生的ENI網絡與基于overlay的Flannel的性能優勢。

阿裡雲基于Cilium的高性能雲原生網絡

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

**使用eBPF來解決Kubernetes Service和NetworkPolicy的擴充性問題

**

很長一段時間,Kubernetes的标準的kube-proxy的實作是采用iptables模式,由于iptables的順序比對,導緻這種解決方案的擴充性非常受限。

阿裡雲基于Cilium的高性能雲原生網絡

可以看到當服務數量增加到一定門檻值後,延遲就會大幅增加。更嚴重的是,由于服務表項在iptables規則鍊中比對的順序不同,會導緻服務通路的首包的延遲會随機的變差。

基于這些原因,是以阿裡雲才會基于eBPF來優化Kubernetes的可擴充性。

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

阿裡雲基于Cilium的高性能雲原生網絡
通過eBPF簡化鍊路,性能顯著提升,相對iptables模式提升了32%,相對IPVS模式提升62%。

與Kubernetes Server類似,基于eBPF同樣可以優化Kubernetes的NetworkPolicy。

阿裡雲基于Cilium的高性能雲原生網絡

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

我們使用 Cilium 作為節點上的 BPF-agent 去配置容器網卡的 BPF 規則,已貢獻 Terway 相關适配:

https://github.com/cilium/cilium/pull/10251
阿裡雲基于Cilium的高性能雲原生網絡

遺憾的是,在這一篇文章中阿裡雲沒有提供最終的優化的對比。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核心和中斷開源項目的研發工作。

繼續閱讀