共用方式為


Azure Kubernetes Service (AKS) 中的 Azure CNI 網路概觀

根據預設,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 位址耗盡,或者隨著應用程式需求增加,需要在更大型子網路中重建叢集。

注意

本文僅介紹傳統的 Azure CNI。 針對 Azure CNI 重疊適用於動態 IP 配置的 Azure CNI VNet 和 Azure CNI VNet - 靜態區塊配置 (預覽版) 。 請改為參閱其檔。

必要條件

  • 適用於 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 範圍內的流量。 如需詳細資訊,請參閱網路安全性群組

部署參數

當您建立 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 位址。

常見問題集

  • 是否可以在叢集子網路中部署 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 Container Networking 基礎結構,以提供端對端體驗。 因此,它會排除使用 ip-masq-agent,這仍由傳統 Azure CNI 使用。

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

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

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

    是,當您使用 Azure CLI 或 Resource Manager 範本部署叢集時。 請參閱每個節點的最大 Pod 數目

    您無法在現叢集上變更每個節點的 Pod 數目上限。

  • 如何針對在 AKS 叢集建立期間所建立的子網路設定其他屬性? 例如,服務端點。

    在 AKS 叢集建立期間所建立的虛擬網路和子網路屬性完整清單,均可在 Azure 入口網站的標準虛擬網路組態頁面中進行設定。

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

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

後續步驟

在下列文章中深入了解 AKS 的網路功能: