全部產品
Search
文件中心

Container Service for Kubernetes:網路概述

更新時間:Oct 30, 2024

Container Service for Kubernetes (ACK)將Kubernetes網路設計應用到了阿里雲的資源上,提供了穩定高效能的容器網路。本文介紹ACK中容器網路的重要概念,例如容器網路外掛程式CNI、Service、Ingress、提供服務發現能力的DNS等。您可以通過瞭解這些概念,更合理地設計應用部署模型和網路訪問的方式。

容器網路外掛程式(CNI Plugin)

Kubernetes本身並未實現容器間的網路互聯能力,但是它通過容器網路介面(CNI)對容器間的網路做出了標準化的定義:

  • Pod在容器網路中的狀態隨著Pod生命週期而變化。例如,Pod建立後需要加入網路,銷毀後需要退出網路。

  • Pod在容器網路中擁有唯一的IP地址,以便於識別身份。

  • Pod可以與叢集內的端點與叢集外的端點互相訪問。

容器網路外掛程式(CNI Plugins)負責容器網路的具體實現。容器網路外掛程式決定了Pod IP地址分配的機制、是否使用Overlay網路、叢集內流量的轉寄鏈路、對Pod的存取控制機制等容器網路特性。目前已經有很多知名的開源容器網路外掛程式,如Calico、Flannel、Cilium等。

Container Service Kubernetes 版支援兩種容器網路外掛程式:Terway與Flannel。這兩種外掛程式擁有不同的特性,請參照下方的介紹以及Terway與Flannel的對比文檔,在建立叢集前完成容器網路外掛程式的選型。

重要

叢集建立完成後,不支援Terway與Flannel之間的變更切換。

Terway容器網路外掛程式

Terway網路外掛程式是阿里雲自研的容器網路外掛程式。在Container Service Kubernetes 版中作為節點的ECS執行個體使用ENI(彈性網卡)進行網路通訊,Terway將節點的ENI分配給Pod,為Pod提供了網路互聯能力。因此,在使用Terway時,Pod直接接入VPC網路。由於不需要使用VXLAN等隧道技術封裝報文,Terway模式網路具有較高的通訊效能。Terway適用於大規模叢集以及對網路效能和存取控制能力有較高需求的情境。

在建立叢集並安裝Terway網路外掛程式時,可以為Terway配置不同的工作模式。這些工作模式的區別主要在以下三個維度:

  • Pod IP地址分配:Terway擁有兩種IP地址分配模式:獨佔ENI模式與共用ENI模式。獨佔ENI模式中,Pod獨佔節點的ENI,擁有極致的網路效能;而共用ENI模式中,Pod共用節點的ENI,擁有更高的部署密度。

  • 網路加速能力:共用ENI模式支援DataPathv2加速模式。選擇加速模式後,Terway會採取不同於共用ENI常規模式的流量轉寄鏈路,實現更快的網路通訊。

  • 存取控制能力:共用ENI模式與獨佔ENI模式都支援為Pod配置固定IP、獨立的安全性群組與虛擬交換器,獨佔ENI模式支援通過Kubernetes原生的Network Policy進行存取控制。

Flannel容器網路外掛程式

Flannel是一個經典的開源容器網路外掛程式,它使用VXLAN等虛擬化網路技術為Pod構建了一個Overlay網路。Flannel的配置簡單、便於使用,但是網路效能會受到NAT損失的影響,存取控制能力相較於Terway也更弱,並且叢集的節點數量上限較低。Flannel適用於節點數量不超過1000的小規模叢集,以及對網路效能和存取控制能力需求較低,希望快速搭建、使用叢集的情境。

重要

關於Terway和Flannel外掛程式的詳細能力對比,請參見Terway與Flannel的對比

服務(Service)

由於雲原生應用通常需要敏捷的迭代和快速的彈性,Pod在Kubernetes中被認為是臨時性的、隨時可替換的資源。當Pod被銷毀、替換時,與其相關的網路資源也會發生變化,因此需要為Pod提供固定的訪問方式。Kubernetes採用Service方式為一組擁有相同功能的容器提供固定的訪問入口,並對這一組容器進行負載平衡。實現原理如下:

  • 通過Selector關聯一組容器,以將這個Service的IP地址和連接埠負載平衡到這一組容器IP和連接埠上。

  • 在Pod發生變化時,Service會自動更新後端的轉寄規則,以保證通過Service能訪問到最新的Pod。

ACK叢集中的Service目前支援ClusterIP、NodePort、LoadBalancer、Headless Service、ExternalName模式,適用於叢集內訪問、叢集外訪問、公網訪問等情境,詳細資料請參見Service快速入門

路由(Ingress)

在ACK叢集中,與Service的4層負載平衡不同,Ingress是叢集內Service對外暴露7層的訪問存取點,用於為叢集中的多個Service提供統一的入口。您可以通過Ingress資源來配置不同的7層的轉寄規則,例如通過網域名稱或者訪問路徑來路由到不同的Service上,從而達到7層的負載平衡作用。更多資訊,請參見Ingress概述

服務發現DNS

ACK使用DNS來實現應用的服務發現能力,例如用戶端應用可以通過Service的服務名解析出它的ClusterIP訪問,再通過Service訪問後端Pod。採用DNS服務發現的能力讓叢集中應用間的調用與IP地址和部署環境解耦。關於叢集DNS組件的詳細資料,請參見DNS概述