全部產品
Search
文件中心

Container Service for Kubernetes:網路概述

更新時間:Sep 03, 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模式都支援通過Kubernetes原生的Network Policy進行存取控制,也都支援為Pod配置固定IP、獨立的安全性群組與虛擬交換器。

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概述