容器網路概念

適用於:Azure Stack HCI 22H2 上的 AKS、Windows Server 上的 AKS

在容器型微服務方法中,應用程式元件必須搭配運作以處理其工作。 Kubernetes 提供各種資源,可啟用應用程式通訊,並可讓您在內部或外部連接和公開應用程式。 您可以對應用程式進行負載平衡,以建置具有高可用性的應用程式。

較複雜的應用程式可能需要設定終止 SSL/TLS 的輸入流量或多個元件的路由。 基於安全考量,您可能也需要限制進入 Pod 和節點或其間的網路流量。

本文介紹核心概念,這些概念可在 Arc 所啟用的 AKS 中提供網路功能給您的應用程式:

  • Kubernetes 服務
  • 輸入控制器
  • 網路原則

Kubernetes 服務

為了簡化應用程式工作負載的網路設定,Kubernetes 會使用服務,以邏輯方式將一組 Pod 群組在一起,並提供網路連線。 下列是可用的服務類型:

叢集IP:建立內部IP位址,以在 Kubernetes 叢集內使用。 使用內部專用應用程式的叢集 IP,這類應用程式會在叢集內支援其他工作負載。

此圖顯示 AKS 叢集中的叢集 IP 流量流程。

NodePort:在基礎節點上建立埠對應,可讓應用程式使用節點IP位址和埠直接存取。

此圖顯示 AKS 叢集中的 NodePort 流量流程。

LoadBalancer:建立 Azure 負載平衡器資源、設定外部 IP 位址,並將要求的 Pod 連線到負載平衡器後端集區。 若要允許客戶流量觸達應用程式,可對所需的連接埠建立負載平衡規則。

此圖顯示 AKS 叢集中的負載平衡器流量。

對於輸入流量的其他控制和路由,您可以使用輸入控制器。

注意

當您部署與另一個目標叢集共用網路的目標叢集時,可能會發生負載平衡器 IP 位址衝突。 如果您在共用相同 AksHciClusterNetwork 物件的目標叢集中部署兩個使用不同連接埠的工作負載,就可能會發生這種情況。 由於在 HA Proxy 內配置 IP 位址和連接埠對應的方式,這可能會導致重複的 IP 位址指派。 如果發生這種情況,在您重新部署工作負載之前,一或兩個工作負載都可能會遇到隨機網路連線問題。 當您重新部署工作負載時,可以使用會導致每個工作負載接收個別服務IP位址的相同埠,也可以在使用不同 AksHciClusterNetwork 物件的目標叢集上重新部署工作負載。

ExternalName:建立特定的 DNS 專案,以方便應用程式存取。 負載平衡器和服務的 IP 位址可以是內部或外部位址,其取決於您的整體網路設定,並可動態指派。 或者,您可以指定要使用的現有靜態 IP 位址。 現有的靜態 IP 位址通常會繫結至 DNS 項目。 由於內部負載平衡器只會指派私人 IP 位址,因此無法從網際網路加以存取。

Azure Stack HCI 上的 Kubernetes 網路基本概念

為了提供對您應用程式的存取能力,或讓應用程式元件能夠彼此通訊,Kubernetes 提供了虛擬網路的抽象層。 Kubernetes 節點會連線至虛擬網路,並且可提供 Pod 的輸入和輸出連線能力。 Kube-proxy 元件會在每個節點上執行,以提供這些網路功能。

在 Kubernetes 中,服務會以邏輯方式將 pod 分組,以允許:

  • 透過單一 IP 位址或 DNS 名稱和特定連接埠來直接存取。
  • 使用多個 pod (裝載相同服務或應用程式) 之間的負載平衡器來散發流量。

Azure Stack HCI 平台也可透過以高可用性的方式,提供「基礎」網路,協助簡化 Azure Stack HCI 叢集上的 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 Stack HCI 中建立為高可用性的虛擬機器,如需詳細資訊,請參閱節點網路概念
  • Kubernetes 服務:在 Kubernetes 中, 服務 會以邏輯方式將 Pod IP 位址分組,以允許透過特定埠上的單一 IP 位址或 DNS 名稱進行直接存取。 服務也可以使用負載平衡器來散發流量。 靜態 IP 位址一律會配置給 Kubernetes 服務,不論基礎網路模型為何。
  • HAProxy 負載平衡器HAProxy 是 TCP/HTTP 負載平衡器和 Proxy 伺服器,會將連入要求分散到多個端點。 Azure Stack HCI 部署上 AKS 中的每個工作負載叢集都已部署 HAProxy 負載平衡器,並設定為特製化虛擬機。
  • Microsoft 內部部署雲端服務:這是 Azure Stack HCI 雲端提供者,可讓您建立和管理在內部部署 Azure Stack HCI 叢集或 Windows Server 叢集上裝載 Kubernetes 的虛擬化環境。 網路模型後面接著您的 Azure Stack HCI 或 Windows Server 叢集,會決定 Microsoft 內部部署雲端服務所使用的 IP 位址配置方法。 若要深入瞭解由 Microsoft 內部部署雲端服務所實作的網路概念,請參閱節點網路概念

Kubernetes 網路

在 Azure Stack HCI 上的 AKS 中,您可以部署使用下列其中一個網路模型的叢集:

  • Flannel 重疊網路 - 在部署叢集時通常會建立並設定該網路資源。
  • Project Calico 網路 - 此模型提供額外的網路功能,例如網路原則和流量控制。

這兩種網路實作都使用重疊網路設定模型,提供與資料中心網路其餘部分中斷連線的 IP 位址指派。

若要深入瞭解重疊網路,請參閱簡介:Windows 的 Kubernetes 重疊網路

如需 Calico 網路外掛程式和原則的詳細資訊,請參閱開始使用 Calico 網路原則

比較網路模型

Flannel

Flannel 是專為容器設計的虛擬網路圖層。 Flannel 會建立一個重疊主機網路的平面網路。 所有容器/pod 會在此重疊網路中獲派一個 IP 位址,且透過直接連接彼此的 IP 位址進行通訊。

Calico

Calico 是開放原始碼網路和網路安全性解決方案,適用於容器、虛擬機器和原生主機型工作負載。 Calico 支援多個資料平面,包括:Linux eBPF 資料平面、Linux 網路資料平面,以及 Windows 的 HNS 資料平面。

功能

功能 Flannel Calico
網路原則
IPv6
使用的圖層 L2 (VxLAN) L2 (VxLAN)
在現有或新的虛擬網路中部署叢集
Windows 支援
Pod-Pod 連接
Pod-VM 連接,相同網路中的 VM
Pod-VM 連接,不同網路中的 VM
Kubernetes 服務
透過負載平衡器公開
網路 在相同叢集上具有多個精靈的多種網路 相同叢集上的多種網路
部署 Linux: DaemonSet Linux: DaemonSet
Windows:服務 Windows:服務
命令列 calicoctl

重要

目前預設選項是在重疊網路模式中使用 Calico。 若要啟用 Flannel,請使用 -primaryNetworkPlugin PowerShell 命令的 New-AksHciCluster 參數,並將 指定 flannel 為 值。 當您部署叢集之後,就無法變更此值,而且它同時適用於 Windows 和 Linux 叢集節點。

以下是範例:

New-AksHciCluster -name MyCluster -primaryNetworkPlugin 'flannel'

後續步驟

本文涵蓋 Azure Stack HCI 上 AKS 節點中容器的網路概念。 如需 Azure Stack HCI 上的 AKS 概念詳細資訊,請參閱下列文章: