共用方式為


AKS 舊版容器網路介面 (CNI)

在 Azure Kubernetes Service (AKS) 中,雖然 Azure CNI 重疊Azure CNI Pod 子網路在大部分情況下都建議使用,但 Azure CNI 節點子網路和 kubenet 等舊版網路模型仍可供使用和支援。 這些舊版模型提供 Pod IP 位址管理和網路功能的不同方法,每一種方法都有自己的功能和考量。 本文提供這些舊版網路選項的概觀,詳細說明其必要條件、部署參數和重要特性,以協助您了解其角色,以及如何在 AKS 叢集中有效地使用。

必要條件

Azure CNI 節點子網路和 kubenet 需要下列必要條件:

  • 適用於 AKS 叢集的虛擬網路必須允許輸出網際網路連線.

  • AKS 叢集不能將 169.254.0.0/16172.30.0.0/16172.31.0.0/16192.0.2.0/24 用於 Kubernetes 服務位址範圍、Pod 位址範圍或叢集虛擬網路位址範圍。

  • AKS 叢集使用的叢集身分識別在虛擬網路內的子網路上,至少必須包含 Network Contributor 權限。 如果您要定義自訂角色,而不使用內建的網路參與者角色,則需要下列權限:

    • Microsoft.Network/virtualNetworks/subnets/join/action
    • Microsoft.Network/virtualNetworks/subnets/read
    • Microsoft.Authorization/roleAssignments/write
  • 指派給 AKS 節點集區的子網路不得為委派子網路

  • AKS 不會將網路安全性群組 (NSG) 套用至其子網路,也不會修改與該子網路相關聯的任何 NSG。 如果您有自己的子網路並新增與該子網路相關聯的 NSG,請確保 NSG 中的安全性規則允許節點 CIDR 範圍內的流量。 如需詳細資訊,請參閱網路安全性群組

注意

Kubenet 不適用於 Windows Server 容器。 若要使用 Windows 伺服器節點集區,您必須使用 Azure CNI。

Azure CNI 節點子網路

使用 Azure 容器網路介面 (CNI),每個 Pod 都會從子網路取得 IP 位址,並且可以直接存取。 與 AKS 叢集位於同一虛擬網路中的系統會將 Pod IP 視為任何 Pod 流量的來源位址。 AKS 叢集虛擬網路外的系統會將節點 IP 視為任何 Pod 流量的來源位址。 這些 IP 位址在您的網路空間中必須是唯一的,且必須事先規劃。 每個節點都有一個組態參數,用於所支援的最大 Pod 數目。 然後,為該節點預先保留每個節點的相同 IP 位址數目。 此方法需要更多規劃,並且通常會導致 IP 位址耗盡,或者隨著應用程式需求增加,需要在更大型子網路中重建叢集。

使用 Azure CNI 節點子網路,每個 Pod 都會接收 IP 子網路中的 IP 位址,且可直接與其他 Pod 和服務進行通訊。 您的叢集大小可以多達您指定的 IP 位址範圍。 不過,您必須事先規劃 IP 位址範圍,而 AKS 節點會根據其可支援的最大 Pod 數目來取用所有 IP 位址。 Azure CNI 支援進階網路功能和案例,例如虛擬節點或網路原則 (Azure 或 Calico)。

部署參數

當您建立 AKS 叢集時,可針對 Azure CNI 網路設定下列參數:

虛擬網路:要作為 Kubernetes 叢集部署目的地的虛擬網路。 您可以建立新的虛擬網路,或使用現有的虛擬網路。 如果您想要使用現有的虛擬網路,則請確定其位於與 Kubernetes 叢集相同的位置和 Azure 訂用帳戶中。 如需有關 Azure 虛擬網路限制和配額的資訊,請參閱 Azure 訂用帳戶和服務限制、配額及條件約束

子網路:虛擬網路內要用來部署叢集的子網路。 您可以在叢集建立程序期間,將新的子網路新增至虛擬網路。 混合式連線的位址範圍不應該與您環境中的任何其他虛擬網路重疊。

Azure 網路外掛程式:使用 Azure 網路外掛程式時,您無法透過 clusterCIDR 中不屬於 AKS 叢集的 IP 從 VM 存取含有「externalTrafficPolicy=Local」的內部 LoadBalancer 服務。

Kubernetes 服務位址範圍:此參數是 Kubernetes 指派給叢集內部服務的虛擬 IP 集合。 建立叢集之後就無法更新此範圍。 您可以使用任何符合下列需求的私人位址範圍:

  • 不得在叢集的虛擬網路 IP 位址範圍內。
  • 不得與叢集虛擬網路對等的任何其他虛擬網路重疊。
  • 不得與任何內部部署 IP 重疊。
  • 不得在 169.254.0.0/16172.30.0.0/16172.31.0.0/16192.0.2.0/24 範圍內。

雖然您可以在與叢集相同的虛擬網路內指定服務位址範圍,但我們不建議這麼做。 重疊的 IP 範圍可能會導致無法預期的行為。 如需詳細資訊,請參閱常見問題集。 如需有關 Kubernetes 服務的詳細資訊,請參閱 Kubernetes 文件中的服務

Kubernetes DNS 服務 IP 位址:叢集 DNS 服務的 IP 位址。 此位址必須位於 Kubernetes 服務位址範圍中。 請勿使用您位址範圍中的第一個 IP 位址。 您子網路範圍內的第一個位址會用於 kubernetes.default.svc.cluster.local 位址。

Kubenet

AKS 叢集使用 kubenet (英文),而且預設會為您建立 Azure 虛擬網路和子網路。 使用 kubenet,節點會從 Azure 虛擬網路子網路取得 IP 位址。 Pod 會接收到 IP 位址,從邏輯上不同位址空間到節點的 Azure 虛擬網路子網路。 接著設定網路位址轉譯 (NAT),使 Pod 能夠連線到 Azure 虛擬網路上的資源。 流量的來源 IP 位址會被轉譯為節點的主要 IP 位址。 此方法可大幅減少您需要在網路空間中保留以供 Pod 使用的 IP 位址數目。

您可以在叢集建立期間或建立新的節點集區時,設定可部署到節點的最大 Pod 數目。 如果您在建立新的節點集區時未指定 maxPods,就會收到 kubenet 的預設值 110

使用您自己的子網路的 Kubenet 網路概觀

在許多環境中,您已使用配置的 IP 位址範圍來定義虛擬網路和子網路,並使用這些資源來支援多個服務和應用程式。 若要提供網路連線,AKS 叢集可以使用 kubenet (基本網路) 或 Azure CNI (進階網路)。

使用 kubenet,只有節點在虛擬網路子網路中接收 IP 位址。 Pod 無法彼此直接通訊。 相反地,使用者定義的路由 (UDR) 和 IP 轉送會跨節點處理 Pod 之間的連線。 UDR 和 IP 轉送設定預設會由 AKS 服務建立並維護,但您可以視需要自備路由表以進行自訂路由管理 (部分機器翻譯)。 您也可以在接收已指派 IP 位址的服務後面部署 Pod,並為應用程式的流量進行負載平衡。 下圖顯示 AKS 節點如何在虛擬網路子網路中 (而不是 Pod 中) 接收 IP 位址:

此圖顯示兩個節點,其中有三個 Pod 分別在重疊網路中執行。叢集外部端點的 Pod 流量會透過 NAT 路由傳送。

Azure 在 UDR 中最多支援 400 個路由,因此,您 AKS 叢集中的節點不能超過 400 個。 kubenet 不支援 AKS 虛擬節點 (部分機器翻譯) 和 Azure 網路原則。 不支援 Calico 網路原則 (英文)。

Kubenet 限制與考量

注意

叢集中的某些系統 Pod (例如 konnectivity) 會使用主機節點 IP 位址,而不會使用重疊位址空間中的 IP。 系統 Pod 將只會使用節點 IP,而不會使用虛擬網路中的 IP 位址。

IP 位址可用性與耗盡

Azure CNI 的常見問題是指派的 IP 位址範圍太小,而無法在調整或升級叢集時新增更多節點。 網路小組可能也無法發出夠大的 IP 位址範圍來支援您預期的應用程式需求。 作為折衷方案,您可以建立使用 kubenet 並連接到現有虛擬網路子網路的 AKS 叢集。 此方法可讓節點接收定義的 IP 位址,而無需事先為叢集中可能執行的所有潛在 Pod 保留大量 IP 位址。

使用 kubenet,您可以使用更小的 IP 位址範圍,並支援大型叢集和應用程式需求。 例如,在子網路上使用 /27 IP 位址範圍,您就能執行具有足夠調整或升級空間的 20-25 節點叢集。 此叢集大小最多可支援 2,200-2,750 個 Pod (每個節點預設最多 110 個 Pod)。 您可以在 AKS 中使用 kubenet 設定的每個節點 Pod 數目上限為 250。

下列基本計算會比較網路模型中的差異:

  • kubenet:簡單的 /24 IP 位址範圍最多可在叢集中支援 251 個節點。 每個 Azure 虛擬網路子網路都會保留前三個 IP 位址來進行管理作業。 此節點計數最多可支援 27,610 個 Pod (每個節點預設最多 110 個 Pod)。
  • Azure CNI:相同的基本 /24 子網路範圍只能支援叢集中最多 8 個節點。 此節點計數最多只能支援 240 個 Pod,每個節點預設最多 30 個 Pod。

注意

這些最大值不列入帳戶升級,或調整規模作業。 實際上,您無法執行子網路 IP 位址範圍所支援的節點數目上限。 您必須在調整或升級作業期間保留一些可用的 IP 位址。

虛擬網路對等互連和 ExpressRoute 連線

您可以使用 Azure 虛擬網路對等互連ExpressRoute 連線搭配 Azure CNIkubenet,以提供內部部署連線能力。 請務必仔細規劃您的 IP 位址範圍,以避免重疊和不正確的流量路由。 例如,許多內部部署網路都會使用透過 ExpressRoute 連線公告的 10.0.0.0/8 位址範圍。 建議您將 AKS 叢集建立到此位址範圍之外 (例如 172.16.0.0/16) 的 Azure 虛擬網路子網路中。

如需詳細資訊,請參閱比較網路模型及其支援範圍

Azure CNI Pod 子網路常見問題

  • 是否可以在叢集子網路中部署 VM?

    是,適用於 Azure CNI 節點子網路,VM 可以部署在與 AKS 叢集相同的子網路中。

  • 對於源自支援 Azure CNI 之 Pod 的流量,外部系統會如何解讀來源 IP?

    與 AKS 叢集位於同一虛擬網路中的系統會將 Pod IP 視為任何 Pod 流量的來源位址。 AKS 叢集虛擬網路外的系統會將節點 IP 視為任何 Pod 流量的來源位址。 但是針對適用於動態 IP 配置的 Azure CNI,無論連線是位於相同虛擬網路內或跨虛擬網路,Pod IP 一律是任何來自 Pod 流量的來源位址。 這是因為適用於動態 IP 配置的 Azure CNI 會實作 Microsoft Azure 容器網路基礎結構,提供端對端體驗。 因此,會排除使用 ip-masq-agent,這仍由傳統 Azure CNI 使用。

  • 是否可以針對個別 Pod 設定網路原則?

    是,您可以在 AKS 中使用 Kubernetes 網路原則。 若要開始使用,請參閱使用 AKS 中的網路原則保護 Pod 之間的流量

  • 是否可以設定可部署到節點的 Pod 數目上限?

    根據預設,AKS 叢集會使用 kubenet,並建立虛擬網路和子網路。 使用 kubenet,節點會從虛擬網路子網路取得 IP 位址。 接著會在節點上設定網路位址轉譯 (NAT),而 Pod 會接收「隱藏」於節點 IP 後面的 IP 位址。 此方法可減少您需要在網路空間中保留,以供 Pod 使用的 IP 位址數目。

    使用 Azure 容器網路介面 (CNI),每個 Pod 都會從子網路取得 IP 位址,並且可以直接存取。 與 AKS 叢集位於同一虛擬網路中的系統會將 Pod IP 視為任何 Pod 流量的來源位址。 AKS 叢集虛擬網路外的系統會將節點 IP 視為任何 Pod 流量的來源位址。 這些 IP 位址在您的網路空間中必須是唯一的,且必須事先規劃。 每個節點都有一個組態參數,用於所支援的最大 Pod 數目。 然後,為該節點預先保留每個節點的相同 IP 位址數目。 此方法需要更多規劃,並且通常會導致 IP 位址耗盡,或者隨著應用程式需求增加,需要在更大型子網路中重建叢集。

  • 是否可以在叢集子網路中部署 VM?

    是。 但是針對適用於動態 IP 配置的 Azure CNI,VM 無法部署在 Pod 的子網路中。

  • 對於源自支援 Azure CNI 之 Pod 的流量,外部系統會如何解讀來源 IP?

    與 AKS 叢集位於同一虛擬網路中的系統會將 Pod IP 視為任何 Pod 流量的來源位址。 AKS 叢集虛擬網路外的系統會將節點 IP 視為任何 Pod 流量的來源位址。

    但是針對適用於動態 IP 配置的 Azure CNI,無論連線是位於相同虛擬網路內或跨虛擬網路,Pod IP 一律是任何來自 Pod 流量的來源位址。 這是因為適用於動態 IP 配置的 Azure CNI 會實作 Microsoft Azure 容器網路基礎結構,提供端對端體驗。 因此,會排除使用 ip-masq-agent,這仍由傳統 Azure CNI 使用。

  • 可以使用叢集虛擬網路內的不同子網路作為Kubernetes 服務位址範圍嗎?

    不建議,但此組態是可行的。 服務位址範圍是 Kubernetes 指派給您叢集中內部服務的一組虛擬 IP (VIP)。 Azure 網路功能無法查看 Kubernetes 叢集的服務 IP 範圍。 無法看到叢集的服務位址範圍可能會造成問題。 稍後可能會在與服務位址範圍重疊的叢集虛擬網路中建立新的子網路。 如果發生這類重疊,Kubernetes 可能會將子網路中另一項資源已經使用的 IP 指派給服務,因而造成無法預期的行為或失敗。 您可藉由確保您使用叢集虛擬網路外部的位址範圍,避免此重疊風險。 是,當您使用 Azure CLI 或 Resource Manager 範本部署叢集時。 請參閱每個節點的最大 Pod 數目

  • 可以使用叢集虛擬網路內的不同子網路作為Kubernetes 服務位址範圍嗎?

    不建議,但此組態是可行的。 服務位址範圍是 Kubernetes 指派給您叢集中內部服務的一組虛擬 IP (VIP)。 Azure 網路功能無法查看 Kubernetes 叢集的服務 IP 範圍。 無法看到叢集的服務位址範圍可能會造成問題。 稍後可能會在與服務位址範圍重疊的叢集虛擬網路中建立新的子網路。 如果發生這類重疊,Kubernetes 可能會將子網路中另一項資源已經使用的 IP 指派給服務,因而造成無法預期的行為或失敗。 您可藉由確保您使用叢集虛擬網路外部的位址範圍,避免此重疊風險。