容器網路概念
適用於:Azure Stack HCI 22H2 上的 AKS、Windows Server 上的 AKS
應用程式元件必須一起運作,才能在以容器為基礎的微服務方法中處理其工作。 Kubernetes 提供資源來啟用應用程式通訊,並可讓您在內部或外部連線及公開應用程式。 您可以平衡應用程式的負載,以建置高可用性應用程式。
更複雜的應用程式可能需要設定輸入流量,以進行 SSL/TLS 終止或多個元件的路由。 您可能也需要限制 Pod 與節點之間網路流量的流程,以取得安全性。
本文介紹在 Arc 所啟用的 AKS 中將網路功能提供給應用程式的核心概念:
- Kubernetes 服務
- 輸入控制器
- 網路原則
Kubernetes 服務
為了簡化應用程式工作負載的網路設定,Kubernetes 會使用服務,以邏輯方式將一組 Pod 群組在一起,並提供網路連線能力。 下列服務類型可供使用:
叢集IP:建立內部IP位址以用於 Kubernetes 叢集。 針對支援叢集中其他工作負載的內部專用應用程式使用叢集IP。
NodePort:在基礎節點上建立埠對應,讓應用程式能夠透過節點IP位址和埠直接存取。
LoadBalancer:建立 Azure 負載平衡器資源、設定外部 IP 位址,並將要求的 Pod 連線到負載平衡器後端集區。 若要允許客戶流量觸達應用程式,可對所需的連接埠建立負載平衡規則。
針對輸入流量的其他控制和路由,您可以使用輸入控制器。
注意
當您部署與另一個目標叢集共用網路的目標叢集時,可能會發生負載平衡器 IP 位址衝突。
如果您在共用相同 AksHciClusterNetwork
對象的目標叢集中部署兩個使用不同的埠的工作負載,就可能發生此情況。 由於IP位址和埠對應在HA Proxy內配置的方式,這可能會導致重複的IP位址指派。 如果發生這種情況,在您重新部署工作負載之前,一或兩個工作負載都可能會遇到隨機網路連線問題。 當您重新部署工作負載時,可以使用相同的埠,讓每個工作負載都會收到個別的服務IP位址,或者您可以在使用不同 AksHciClusterNetwork
對象的目標叢集上重新部署工作負載。
ExternalName:建立特定的 DNS 專案,以方便應用程式存取。 負載平衡器和服務的IP位址可以是內部或外部位址,視您的整體網路設定而定,而且可以動態指派。 或者,您可以指定要使用的現有靜態 IP 位址。 現有的靜態 IP 位址通常會系結至 DNS 專案。 內部負載平衡器只會指派私人 IP 位址,因此無法從網際網路加以存取。
Azure 本機上的 Kubernetes 網路基本概念
Kubernetes 提供虛擬網路的抽象層,以允許存取您的應用程式,或讓應用程式元件彼此通訊。 Kubernetes 節點會連線到虛擬網路,而且可以為 Pod 提供輸入和輸出連線。 在每個節點上執行的 kube-proxy 元件會提供這些網路功能。
在 Kubernetes 中, 服務 會以邏輯方式將 Pod 分組,以允許:
- 透過單一IP位址或 DNS 名稱和特定埠直接存取。
- 在裝載相同服務或應用程式的多個 Pod 之間,使用 負載平衡器 來散發流量。
Azure 本機平臺也可藉由以高可用性的方式提供「底層」網路,協助簡化 Azure 本機叢集上 AKS 的虛擬網路。
當您建立 AKS 叢集時,我們也會建立及設定基礎 HAProxy
負載平衡器資源。 當您在 Kubernetes 叢集中部署應用程式時,會將 Pod 和 Kubernetes 服務的 IP 位址設定為此負載平衡器中的端點。
IP 位址資源
為了簡化應用程式工作負載的網路設定,AKS Arc 會將IP位址指派給部署中的下列物件:
- Kubernetes 叢集 API 伺服器:API 伺服器是公開 Kubernetes API 的 Kubernetes 控制平面元件。 API 伺服器是 Kubernetes 控制平面的前端。 靜態IP位址一律會配置給 API 伺服器,而不論基礎網路模型為何。
- Kubernetes 節點 (虛擬機):Kubernetes 叢集是由一組背景工作機器所組成,稱為節點,以及裝載容器化應用程式的節點。 除了控制平面節點之外,每個叢集至少有一個背景工作節點。 針對 AKS 叢集,Kubernetes 節點會設定為虛擬機。 這些虛擬機會建立為 Azure 本機中的高可用性虛擬機,如需詳細資訊,請參閱 節點網路概念。
- Kubernetes 服務:在 Kubernetes 中, 服務 會以邏輯方式將 Pod IP 位址分組,以允許透過特定埠上的單一 IP 位址或 DNS 名稱進行直接存取。 服務也可以使用負載平衡器來分散流量。 靜態IP位址一律會配置給 Kubernetes 服務,而不論基礎網路模型為何。
- HAProxy 負載平衡器: HAProxy 是 TCP/HTTP 負載平衡器和 Proxy 伺服器,會將連入要求分散到多個端點。 Azure 本機部署上 AKS 中的每個工作負載叢集都有已部署並設定為特製化虛擬機的 HAProxy 負載平衡器。
- Microsoft內部部署雲端服務:這是 Azure 本機雲端提供者,可讓您建立和管理在內部部署 Azure 本機叢集或 Windows Server 叢集上裝載 Kubernetes 的虛擬化環境。 接著 Azure 本機或 Windows Server 叢集的網路模型會決定Microsoft內部部署雲端服務所使用的 IP 位址配置方法。 若要深入瞭解Microsoft內部部署雲端服務所實作的網路概念,請參閱 節點網路概念。
Kubernetes 網路
在 Azure 本機上的 AKS 中,您可以部署使用下列其中一個網路模型的叢集:
- Flannel 重迭網路 - 網路資源通常會建立並設定為部署叢集。
- Project Calico 網路 - 此模型提供額外的網路功能,例如網路原則和流程控制。
這兩個網路實作都會使用重迭網路組態模型,其提供與數據中心網路其餘部分中斷聯機的IP位址指派。
若要深入瞭解重迭網路功能,請參閱 簡介:Kubernetes Overlay Networking for Windows。
如需 Calico 網路外掛程式和原則的詳細資訊,請參閱 開始使用 Calico 網路原則。
比較網路模型
法蘭絨
注意
弗拉內爾CNI於2023年12月退休。
Flannel 是專為容器設計的虛擬網路層。 Flannel 會建立一個覆蓋主機網路的平面網路。 所有容器/Pod 都會在此重迭網路中指派一個IP位址,並透過連線到彼此的IP位址直接通訊。
Calico
Calico 是一種開放原始碼網路連接和網路安全性解決方案,適用於容器、虛擬機器和原生主機型的工作負載。 Calico 支援多個數據平面,包括:Linux eBPF 數據平面、Linux 網路數據平面,以及 Windows HNS 數據平面。
Capabilities
功能 | 法蘭絨 | Calico |
---|---|---|
網路原則 | No | Yes |
IPv6 | No | Yes |
使用的層次 | L2 (VxLAN) | L2 (VxLAN) |
在現有或新的虛擬網路中部署叢集 | Yes | Yes |
Windows 支援 | Yes | Yes |
Pod-Pod 連線 | Yes | Yes |
Pod-VM 連線、相同網路中 VM | No | Yes |
Pod-VM 連線、不同網路中 VM | Yes | Yes |
Kubernetes 服務 | Yes | Yes |
透過負載平衡器公開 | Yes | Yes |
網路 | 具有相同精靈的相同叢集上的許多網路 | 相同叢集上的許多網路 |
部署 | Linux:DaemonSet | Linux:DaemonSet |
Windows:服務 | Windows:服務 | |
命令列 | none | calicoctl |
重要
目前,預設選取專案是在重迭網路模式中使用 Calico。 若要啟用 Flannel,請使用 -primaryNetworkPlugin
PowerShell 命令的 New-AksHciCluster
參數,並將 指定 flannel
為 值。 部署叢集之後,就無法變更這個值,而且會同時套用至 Windows 和 Linux 叢集節點。
例如:
New-AksHciCluster -name MyCluster -primaryNetworkPlugin 'flannel'
下一步
本文涵蓋 Azure 本機上 AKS 節點上容器的網路概念。 如需 Azure 本機概念上的 AKS 詳細資訊,請參閱下列文章:
- AKS 節點的網路概念
- 叢集與工作負載 (部分機器翻譯)