Cilium創(chuàng)始人兼CTO Thomas Graf近日撰文《How Alibaba Clouduses Cilium for High-Performance Cloud-Native Computing?》,本文翻譯自作者的英文博客。感謝Thomas Graf以及其他更多的客戶,阿里云容器服務(wù)團(tuán)隊隨時歡迎聽到更多客戶反饋。
近期,阿里云團(tuán)隊在SIG Cloud-Provider-Alibaba的會議上介紹了阿里云容器服務(wù)的新的高性能容器網(wǎng)絡(luò)方案并且發(fā)布了一篇博客介紹。你知道嗎,這個方案基于Cilium&eBPF來實(shí)現(xiàn)。在此之前,Google的GKE和Anthos也宣布基于Cilium+eBPF實(shí)現(xiàn)了新的容器網(wǎng)絡(luò)數(shù)據(jù)面V2方案。但阿里云的方案會有所不同,阿里云采用Terway IPVLAN+Cilium的eBPF結(jié)合的方式,文章下面我們會詳細(xì)分析Terway CNI(阿里云的CNI插件)的細(xì)節(jié)實(shí)現(xiàn)以及在博客中的測試數(shù)據(jù)。
和其他云廠商一樣,阿里云也提供了ENI(彈性網(wǎng)卡)的產(chǎn)品來暴露底層IAAS層的SDN(軟件定義網(wǎng)絡(luò))的能力。對于K8S的Pod來說,基于它可以實(shí)現(xiàn)云原生的虛擬化網(wǎng)絡(luò),而不需要再對容器網(wǎng)絡(luò)再做一層虛擬化來降低性能的損耗以及減少網(wǎng)絡(luò)復(fù)雜度。
云廠商的IAAS層網(wǎng)絡(luò)已經(jīng)具備虛擬化和SDN的能力,如果底層虛擬化網(wǎng)絡(luò)的能力直接給Pods去使用,將能顯著降低性能的損耗。
對于阿里云,容器網(wǎng)絡(luò)模型如下圖所示:
(源自:https://www.alibabacloud.com/blog/how-does-alibaba-cloud-build-high-performance-cloud-native-pod-networks-in-production-environments_596590)
為了實(shí)現(xiàn)這個模型,CNI層面直接與阿里云的API交互來申請Pod所需的底層ENI網(wǎng)絡(luò)資源。阿里云自研了Terway的CNI插件來實(shí)現(xiàn)這樣的模型。在阿里云官方的博客中有詳細(xì)的內(nèi)部實(shí)現(xiàn)的介紹和遇到的挑戰(zhàn)。這里我們重點(diǎn)關(guān)注在他們?nèi)绾问褂肐PVLAN和eBPF來提升Kubernetes的Service和NetworkPolicy的性能和擴(kuò)展性。
使用IPVLAN來實(shí)現(xiàn)更好的網(wǎng)絡(luò)可擴(kuò)展性和性能
單個ENI可以給Pod獨(dú)占或者給多個Pod去共享。當(dāng)ENI被多個Pod共享時,就需要對包做一些路由決策來確保Pod的流量路由到其對應(yīng)的ENI上面。使用共享ENI的方式,一個ENI可以虛擬化出10-20個IP,從而可以大大增加節(jié)點(diǎn)上的Pod的部署密度,但是缺點(diǎn)是需要引入bridge或者策略路由帶來額外的性能開銷。后面的性能對比中就能看到具體的開銷。
為了提升共享ENI的性能,IPVLAN就是一個很好的選擇,IPVLAN可以將ENI很輕量的虛擬化出多個子接口來連接多個Pod到單個ENI上面。Terway的CNI通過IPVLAN來降低共享ENI的開銷,并且結(jié)合Cilium在IPVLAN的網(wǎng)絡(luò)模式下提供了高效的NetworkPolicy和Service的實(shí)現(xiàn)。并且將實(shí)現(xiàn)向Cilium官方提了pull request.
(源自:https://www.alibabacloud.com/blog/how-does-alibaba-cloud-build-high-performance-cloud-native-pod-networks-in-production-environments_596590)
下面是不同模式的性能對比,其中還包含了基于云原生的ENI網(wǎng)絡(luò)與基于overlay的Flannel的性能優(yōu)勢。
(源自:https://www.alibabacloud.com/blog/how-does-alibaba-cloud-build-high-performance-cloud-native-pod-networks-in-production-environments_596590)
你不一定要選擇其中一個模型,可以根據(jù)需要對高性能的選擇調(diào)度到獨(dú)占ENI,對于其他的Pod使用共享ENI的模式。
**使用eBPF來解決Kubernetes Service和NetworkPolicy的擴(kuò)展性問題**很長一段時間,Kubernetes的標(biāo)準(zhǔn)的kube-proxy的實(shí)現(xiàn)是采用iptables模式,由于iptables的順序匹配,導(dǎo)致這種解決方案的擴(kuò)展性非常受限。
(源自:https://www.alibabacloud.com/blog/how-does-alibaba-cloud-build-high-performance-cloud-native-pod-networks-in-production-environments_596590)
可以看到當(dāng)服務(wù)數(shù)量增加到一定閾值后,延遲就會大幅增加。更嚴(yán)重的是,由于服務(wù)表項在iptables規(guī)則鏈中匹配的順序不同,會導(dǎo)致服務(wù)訪問的首包的延遲會隨機(jī)的變差。
基于這些原因,所以阿里云才會基于eBPF來優(yōu)化Kubernetes的可擴(kuò)展性。
效果怎么樣呢?下面是阿里云團(tuán)隊測試的性能對比?;趀BPF的方案的網(wǎng)絡(luò)的性能和可擴(kuò)展性優(yōu)于kube-proxy的iptables和IPVS模式:
(源自: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同樣可以優(yōu)化Kubernetes的NetworkPolicy。
(源自:https://www.alibabacloud.com/blog/how-does-alibaba-cloud-build-high-performance-cloud-native-pod-networks-in-production-environments_596590)
框框中的"BPF-agent"就是獨(dú)立于Terway CNI之外運(yùn)行的Cilium的agent,用于提供Kubernetes的Service和NetworkPolicy實(shí)現(xiàn):
我們使用Cilium作為節(jié)點(diǎn)上的BPF-agent去配置容器網(wǎng)卡的BPF規(guī)則,已貢獻(xiàn)Terway相關(guān)適配:https://github.com/cilium/cilium/pull/10251
(源自:https://www.alibabacloud.com/blog/how-does-alibaba-cloud-build-high-performance-cloud-native-pod-networks-in-production-environments_596590)
遺憾的是,在這一篇文章中阿里云沒有提供最終的優(yōu)化的對比。Cilium團(tuán)隊早期做過Cilium在IPVLAN和veth模式的對比博客,可以作為粗略的參考??偨Y(jié)我們非常高興和歡迎阿里云加入和貢獻(xiàn)到Cilium社區(qū),如果需要了解更多可以參考如下內(nèi)容:Cilium Overview Cilium GitHub How Does Alibaba Cloud Build High-Performance Cloud-Native Pod Networks in Production Environments?What is eBPF?
作者:Thomas Graf Cilium的聯(lián)合創(chuàng)始人和CTO以及Isovalent(Cilium背后的公司)的聯(lián)合創(chuàng)始人。在此之前,他在Red Hat和思科從事Linux內(nèi)核和中斷開源項目的研發(fā)工作。