K8s 容器網路 Tanzu Container Open vSwitch

詳解架構特性及源流演變 比較社群/商用版本異同

VMware主力K8S構件 細說Antrea容器網路(一)

2023-08-22
本系列文章將介紹目前VMware主要支援的容器網路方案Antrea,並說明Antrea的安裝方法。現今,VMware Tanzu使用的主要底層網路構件預設已經都是Antrea,VMware也提供對應Antrea的企業支援,以及與VMware NSX(NSX Data Center)的整合機制。

本系列文章將介紹目前VMware主要支援的容器網路方案:Antrea。在寫作時間點,VMware Tanzu使用的主要底層網路構件預設已經都是Antrea,VMware也提供對應Antrea的企業支援,以及與VMware NSX(NSX Data Center)的整合機制。也因此,在規劃與執行不同的Kubernetes專案時,Antrea本身的功能、配置方式、相關產品整合機制、在網路與安全上的架構設計等,當然也都會是容器客戶會關注的重點。

先與大家就Kubernetes的底層網路構件「Container Network Interface(CNI)」功能進行回顧。通常在一個Kubernetes方案內,會考慮部署的網路相關構件包含了CNI、LoadBalancer-Ingress、Service Mesh這三大部分,如圖1所示。

圖1  K8S環境內需求的網路功能分成三大部分。

本系列文章要討論的是最基礎、每個Kubernetes環境內必須具備的Container Network Interface,它主要用來提供Pod之間的網路連接以及需求的安全區隔。其幾個主要的功能條列如下:

‧提供Pod啟動時的IP地址,以及Pod與Pod之間不需要做NAT的直接網路連接。CNI須處理Pod之間連線時,底層如何跨越實體網路的封裝或路由機制。

‧提供Pod間的連線安全控制,也就是在K8S內被稱為Network Policy的功能,大家可以想像這就是Pod之間的微分段。

‧提供各個Pod到外部實體網路間的網路連線與轉址(Egress)。

‧在沒有Ingress/LoadBalancer構件的情況下,搭配Kube-Proxy提供最基礎方式的外對內服務接口,也就是K8S內NodePort的機制。

當然上述的功能在Antrea內全都有支援,並且不僅僅支援Kubernetes原生需求的基礎功能,包含在企業環境需求的安全及相關網路功能上都有進一步強化的特殊優勢。因此在本系列文章想陸續與大家討論下列議題:

‧Antrea組件、架構以及特性簡述。

‧Antrea開源版本以及VMware企業支援版本之比對。

‧Antrea如何與VMware NSX整合,進行Namespace、Service、Pod之間之微分段安全防護。

‧Antrea Egress網路功能簡述。

Antrea目前已經是CNCF(Cloud Native Computing Foundation)支援的Sandbox Project,主要的支援者除了VMware外,還包含Intel、NVIDIA、IBM、AWS、Azure等。若大家對社群版本的Antrea相關資訊想進一步了解,幾個常用的鏈結在此:

‧Antrea專案主頁:https://antrea.io/ 

‧Antrea GitHub:https://github.com/antrea-io/antrea

‧Antrea文件與主要功能介紹頁面:https://antrea.io/docs/main/

接下來,簡單討論Antrea作為VMware主要支援的Container Network Interface,相關的構件以及與其他競爭方案的差異。

近幾年,隨著Kubernetes技術的發展,與Container Network Interface相關的專案也百花齊放,從早期的Flannel、Weave、OVN到目前主流的Calico、Cilium,包含VMware本身NSBU之前也在NSX開發了NCP(NSX Container Platform),各有各的特長。目前VMware/Tanzu在商用支援上主要採用Antrea,是因為Antrea有哪些優勢呢?首先來看一下Antrea的架構,如圖2所示,分成以下幾個重點進行討論。

圖2  Antrea架構示意圖。

Antrea採用Open-vSwitch作為核心網路構件

如圖2所示,在架構圖中可以看到每個Kubernetes Node內都有大大的OVS(Open-vSwitch)三個字,這是Antrea與其他方案最主要的差別:Antrea使用Open vSwitch做為底層的核心構件。Open vSwitch是一個開發長久、穩定、可程式化的開源方案,具有下列特性:

‧方案成熟,Open vSwitch早在NSX前身Nicira時代就完整商用化,目前也已經是Linux Kernel的內建模組。

‧作為開源SDN(Software Define Network)的核心構件,開發者可以很輕易地透過Open vSwitch(藉由OVSDB、OpenFlow)啟用多種企業需要的安全及網路功能,遠多於原生Kubernetes基礎定義的需求。

‧可以運作在Linux和Windows作業系統,因此具備完整可攜性。在客戶要將Kubernetes Cluster部署於不同公私有雲、不同作業系統上時,Antrea均能輕易支援。

Antrea具備Controller-agent的控制/轉發設計

同樣在圖2中,可以看到每個Kubernetes Node內都有一個Antrea Agent。這個Antrea Agent主要的工作是接收來自Kubernetes API Server和Antrea Controller的指示,編寫相關的網路與安全需求,再透過本地OVS進行功能實現,例如Pod與Pod間要透過Geneve Tunnel進行跨Node網路連線,每個Pod本身的Network Policy等等。

此外,由於Antrea的一個重要功能是進行各個Pod之間的進階安全控制,此時需要一個構件能夠完成以下的工作:

‧透過Kubernetes API收集Pod、Namespace、Service的狀態。

‧提供API讓外部系統可呼叫來配置進階安全策略。

‧於此構件將進階安全策略配送到需求Kubernetes Node上的Antrea Agent,呼叫各自的OVS進行安全政策實現。

因此,在Antrea部署時,除了每個K8S Node上都會有Antrea Agent外,還會於Master Nodes上安裝一個Controller Pod。圖3是在Lab內建置,具有一個Master Node、三個Worker Nodes的Kubernetes Cluster。可以發現,當Antrea安裝完成時,每個Node上面都有一個Antrea Agent(共四個)。除此之外,還有一個Antrea-controller Pod配置,負責上述討論提供進階的安全控制與外部系統接取功能。

圖3  在Lab內建置Kubernetes Cluster。

如果對細部的Antrea/Kubernetes構件間關係有興趣,可以參考圖4,包含了Antrea各構件、Kubernetes各構件,甚至包含到外部系統間的完整關聯。

圖4  Antrea/Kubernetes構件之間的關係圖。

架構面就簡單談到這邊,如果大家對相關細節想進一步了解,可以參考下列文章(https://antrea.io/docs/main/docs/design/architecture/),其中有詳盡討論。這裡主要想要強調下面這幾點:

‧透過採用Open vSwitch成熟技術作為核心骨幹,Antrea能夠容易地做到跨作業系統,甚至在不同公私有雲平台的快速支援。

‧由於之前在Open vSwitch上已經累積的大量經驗,Antrea專案能夠快速地應用Open vSwitch本身已支援的功能,呼應企業需求,在短期內就能夠透過Open vSwitch現有機制將新功能實現出來。

‧藉由Antrea Controller的設計,能夠實作出較傳統Network Policy遠為複雜的安全政策機制,同時也能夠很簡單地提供外部系統(如後面所要討論的NSX,或整合另一個著名的開源維運工具OCTANT)來進行政策配置與資訊查找。

雖然不同的Container Network Interface方案各有千秋,但Antrea具備上述談到的特性,包含構件成熟且功能完整、易於開發、易於整合外部系統,也就成為了VMware支援容器方案的首選。尤其VMware本身在之前維護Open vSwitch開源專案上原本就有投資大量的開發團隊與相關經驗,繼續進行Antrea的開發與維護也是水到渠成的。

Antrea安裝說明

接著說明一下Antrea的安裝,很直接很簡單。如果是自行建立Native Kubernetes,在做完kubeadm init後,用kubeadm join把各台Worker Nodes加入到這個K8S Cluster的步驟,在有Internet的狀況下,只要一行指令就可以安裝好Antrea。可參考來自Antrea官網(https://antrea.io/docs/main/docs/getting-started/)的動畫,使用以下的指令直接進行Antrea安裝:

# kubectl apply -f https://github. com/antrea-io/antrea/releases/ download//antrea.yml    

上述指令中的,可以指定所要安裝的社群版本號。而如果確定就是要安裝最新穩定版本,也可以直接使用下列的指令:

# kubectl apply -f https://raw. githubusercontent.com/antrea-io/ antrea/main/build/yamls/antrea.yml

很直接吧!上面就是對應到原生的Kubernetes與社群版本的Antrea之手動安裝方式。這裡要特別說明一下,由於Antrea底層會使用到Open vSwitch,務必確認Linux Kernel內是否已經包含,或是需要特別手動安裝OVS。倘若採用的Linux Kernel已經在4.6版以上,那預設就有包含OVS功能。如果低於此版本,請預先查詢相關的文件,安裝OVS到2.6.0版以上。

但如果要裝的是Antrea商業版本,像是運作在vSphere with Tanzu或是Tanzu Kubernetes Grid,環境內也可能沒有Internet連線,此時是不是就很麻煩了呢?

反過來,其實更單純。在Tanzu各方案內管理者產出的Kubernetes叢集(Tanzu Kubernetes Cluster,TKC),預設內建就是使用Antrea的商用版本(VMware Container Networking with Antrea)。例如在vSphere with Tanzu建立一個新的TKC後,在kube-system namespaces內可以直接看到Antrea相關構件已經配置完成(圖5)。

圖5  在kube-system namespaces內可以發現Antrea相關構件已經配置完成。

同時以「kubectl describe pod」指令查看antrea-controller的內容,可以看到對應到這個TKC版本(安裝的是v1.21.6),Antrea是0.13.5版,如圖6所示,這是社群功能版本,對應到的是VMware Container Networking with Antrea的1.2.0-0.13.1企業版本。

圖6  以「kubectl describe pod」指令查看antrea-controller內容。

這裡大家可能有注意到,在談Antrea時,除了開源社群版本外,還有提到VMware支援的「商用版本」。VMware基於Antrea的商用版本,叫做VMware Container Networking with Antrea。當客戶要運用Antrea在VMware Tanzu產品或是開源的Kubernetes,同時也要有VMware企業支援時,需要購買商用版本授權。VMware Container Networking with Antrea相關的產品文件可以參考:

‧中文產品專頁:https://www.vmware.com/tw/products/antrea-container-networking.html

‧Release Note:https://docs.vmware.com/en/VMware-Container-Networking-with-Antrea/1.4.0/rn/VMware-Container-Networking-with-Antrea-Version-140-Release-Notes.html(以1.4版為例)

‧安裝手冊:https://docs.vmware.com/en/VMware-Container-Networking-with-Antrea/1.x/vmware_antrea_install/GUID-17BCC160-A7CF-4F65-BDA1-73AC82ECF457.html

很快地,就Antrea社群版本與VMware支援商業版本間的差異進行比較。倘若企業使用的是Antrea社群版本,可以直接透過Internet由Antrea Github下載使用,但是VMware「沒有」提供技術支援服務,此外,它具備除了與NSX和Wavefront等VMware產品整合外的Antrea絕大部分功能。

因此,如果是在測試環境嘗新,確認Antrea的新功能,使用社群版本當然是沒有問題的。而VMware支援的Antrea商用版本正式名稱叫做VMware Container Networking with Antrea。

當客戶購買或由其他產品取得VMware Container Networking with Antrea時,VMware有提供技術支援服務;客戶可透過VMware官網進行下載,或已經內含於Tanzu建置的TKC(Tanzu Kubernetes Cluster)內;若客戶採用VMware Container Networking with Antrea的Enterprise版本(在客戶購買NSX Advanced/Enterprise Plus版本時提供),可增加與NSX整合進行Pod間的微分段控管,並提供於OpenShift環境的安裝機制。

這裡提到以NSX搭配商用版本Antrea提供Pod間的微分段控管是本系列投稿文內的重點,後續文章內會再繼續說明。

另外,也要讓大家知道的是,VMware Container Networking with Antrea有自己的產品版號,而且與Antrea社群版本不同。舉例子來說,在VMware Container Networking with Antrea的Release Notes內(https://docs.vmware.com/en/VMware-Container-Networking-with-Antrea/1.4.0/rn/VMware-Container-Networking-with-Antrea-Version-140-Release-Notes.html),可以看到VMware Container Networking with Antrea的1.4版是對應到社群的1.5.2版,如圖7所示。

圖7  VMware Container Networking with Antrea的產品版號,與Antrea社群版本的對應。

商用版本與社群版本是一對一的對應。舉個例子:當用戶配置Tanzu Kubernetes Cluster 1.23.8的版本,使用的商用版本是VMware Container Networking with Antrea的1.4.0(對應到開源Antrea 1.5.2版)。

此時,在VMware Container Networking with Antrea的1.4.0的Release Note內,會明確列出這裡CNI有支援的各項新功能。對於這些新功能,若想要了解細節,可以到Antrea網站找1.5.2版本內的各項功能描述。

結語

本文介紹了Antrea作為VMware主要支援的Kubernetes CNI方案,其方案架構特性、安裝方式,以及社群及商用版本間的比較。下篇文章想和大家討論Antrea搭配VMware NSX方案,提供Pod間微分段安全防護的功能。

<本文作者:饒康立,VMware資深技術顧問,主要負責VMware NSX產品線,目前致力於網路虛擬化、軟體定義網路、微分段安全防護技術,以及新應用遞送方案的介紹與推廣。>


追蹤我們Featrue us

本站使用cookie及相關技術分析來改善使用者體驗。瞭解更多

我知道了!