將子網路新增至叢集


本頁說明如何為 VPC 原生叢集指派其他子網路。指派給叢集的額外子網路可讓您建立新的節點集區,其中節點 Pod 的 IPv4 位址都來自額外子網路範圍。

本頁面適用於負責為機構設計和建構網路的網路專家。如要進一步瞭解 Google Cloud 內容中提及的常見角色和範例工作,請參閱「常見的 GKE Enterprise 使用者角色和工作」。

總覽

建立新的虛擬私人雲端原生 GKE 叢集時,請選取叢集的預設子網路。如「虛擬私有雲原生叢集的 IP 位址範圍」一文所述,叢集的預設子網路會為節點、Pod 和 Service 提供 IPv4 位址。

您最多可以為虛擬私有雲原生叢集指派八個額外子網路,大幅擴充叢集。每個新指派的額外子網路都稱為「非預設子網路」

事前準備

開始之前,請確認您已完成下列工作:

  • 啟用 Google Kubernetes Engine API。
  • 啟用 Google Kubernetes Engine API
  • 如要使用 Google Cloud CLI 執行這項工作,請安裝初始化 gcloud CLI。如果您先前已安裝 gcloud CLI,請執行 gcloud components update,取得最新版本。

需求條件和限制

本節說明為叢集指派及使用額外子網路時的相關規定和限制。您必須符合所有規定,才能指派其他子網路。

  • 請確認您的 GKE 叢集是 VPC 原生叢集,且執行 GKE 1.30.3-gke.1211000 以上版本。使用路由的叢集和舊版網路上的叢集不支援額外子網路。
  • 每個叢集最多可指派八個額外子網路。
  • 額外子網路只會為節點和 Pod 提供 IPv4 位址。額外的子網路無法用於為節點或 Pod 提供 IPv6 位址。
  • 只有新的節點集區可以使用額外子網路,現有節點集區則無法使用。 建立新的節點集區時,如果有多個非預設子網路可用,GKE 會根據 IP 位址需求,以及所有叢集子網路中 IP 位址的可用性,為節點集區選取最佳子網路。
  • 非預設子網路中的子網路次要 IPv4 位址範圍,只能供單一叢集使用。
  • 如果您使用 Pod 的多重網路支援,額外子網路的主要和 Pod IPv4 位址範圍不得與多重網路設定中設定的任何 CIDR 範圍重疊。您設定的額外子網路只會套用至 default 網路。這項限制表示節點和 Pod 上的任何額外網路介面,都無法使用這些額外子網路提供的 IP 位址。
  • 如果預設子網路中的 IP 位址集區已用盡,即使使用其他子網路,也無法自動調度叢集資源

具有額外子網路的叢集負載平衡器需求

本節說明在叢集上使用額外子網路時,適用的負載平衡器需求。每次建立外部 Ingress、外部 Gateway 或外部 LoadBalancer 服務時,都必須符合這些規定。

  • 如要在具有額外子網路的叢集中使用外部 Ingress、Gateway 或 LoadBalancer 服務,叢集必須執行 GKE 1.33.2-gke.4780000 以上版本。
  • 使用 GKE Ingress 控制器的外部 Ingress 物件必須使用容器原生負載平衡
  • 啟用 GKE 子設定,適用於內部 LoadBalancer 服務。GKE 子設定只會影響的內部 LoadBalancer Service。因此,啟用 GKE 子集化後,您必須刪除叢集中的所有現有服務,然後重新建立。
  • 如要建立以後端服務為基礎的外部直通式網路負載平衡器,新的外部 LoadBalancer 服務必須包含 cloud.google.com/l4-rbs: "enabled" 註解。這項註解只會影響新的外部 LoadBalancer 服務,不會套用至現有的外部 LoadBalancer 服務。刪除並重新建立所有使用 cloud.google.com/l4-rbs: "enabled" 註解建立的外部 LoadBalancer 服務。

    使用的後端類型 (GCE_VM_IP NEG 後端或執行個體群組後端) 取決於您建立外部 LoadBalancer 服務時的 GKE 版本。詳情請參閱「節點分組」。

新增一個子網路,並包含一個 Pod IPv4 位址範圍

  1. 建立新的子網路,並新增子網路次要 IPv4 位址範圍。子網路必須與叢集位於相同區域和 VPC 網路:

       gcloud compute networks subnets create SUBNET_NAME \
         --network=NETWORK \
         --region=REGION \
         --range=PRIMARY_RANGE \
         --add-secondary-ranges=POD_RANGE_NAME=SECONDARY_RANGE
    

    更改下列內容:

    • SUBNET_NAME:新子網路的名稱。
    • NETWORK:包含新子網路的虛擬私有雲網路名稱。
    • REGION:子網路所在的地區。
    • PRIMARY_RANGE:新子網路的主要 IPv4 範圍,採用 CIDR 標記法。詳情請參閱「IPv4 子網路範圍」。
    • POD_RANGE_NAME:次要範圍的名稱。
    • SECONDARY_RANGE:次要 IPv4 範圍,採用 CIDR 標記法。如需有效範圍,請參閱「IPv4 子網路範圍」。

    詳情請參閱「使用子網路」。

  2. 使用 gcloud CLI 更新叢集,改用額外的子網路:

       gcloud container clusters update CLUSTER_NAME \
         --additional-ip-ranges=subnetwork=SUBNET_NAME,pod-ipv4-range=POD_RANGE_NAME
    

    更改下列內容:

    • CLUSTER_NAME:現有叢集的名稱。
    • SUBNET_NAME:您建立的新子網路名稱。
    • POD_RANGE_NAME:您要用於 Pod IPv4 位址範圍的子網路次要 IPv4 位址範圍名稱。

新增具有多個 Pod IPv4 位址範圍的子網路

  1. 在與叢集相同的地區和虛擬私有雲網路中建立新的子網路。將子網路主要 IPv4 位址範圍設為節點的額外 IPv4 位址範圍。

  2. 針對您需要的每個額外 Pod IPv4 位址範圍,請將新的子網路次要 IPv4 位址範圍新增至您在上一個步驟中建立的子網路。

  3. 使用 gcloud CLI 更新叢集,改用額外的子網路。以下範例新增一個子網路,其中包含兩個 Pod 子網路次要 IPv4 位址範圍。

       gcloud container clusters update CLUSTER_NAME \
         --additional-ip-ranges=subnetwork=SUBNET_NAME,pod-ipv4-range=POD_RANGE_NAME_1 \
         --additional-ip-ranges=subnetwork=SUBNET_NAME,pod-ipv4-range=POD_RANGE_NAME_2
    

    更改下列內容:

    • CLUSTER_NAME:現有叢集的名稱。
    • SUBNET_NAME:您建立的新子網路名稱。
    • POD_RANGE_NAME_1POD_RANGE_NAME_2:您要用於 Pod IPv4 位址範圍的子網路次要 IPv4 位址範圍名稱。

驗證子網路

依叢集:如要查看與叢集相關聯的所有子網路詳細資料,請執行下列指令:

   gcloud container clusters describe CLUSTER_NAME

CLUSTER_NAME 替換為叢集名稱。

輸出結果會與下列內容相似:

ipAllocationPolicy:
  additionalIPRangesConfig:
  - podIpv4RangeNames:
    - pod-range-1
    subnetwork: projects/user-gke-dev-2/regions/us-central1/subnetworks/shared-msc-subnets

依節點集區:如要查看與節點集區相關聯的所有子網路詳細資料,請執行下列指令:

gcloud container node-pools describe POOL_NAME \
    --cluster=CLUSTER_NAME \

更改下列內容:

  • POOL_NAME:節點集區的名稱。
  • CLUSTER_NAME:叢集名稱。

輸出結果會與下列內容相似:

name: pool-1
networkConfig:
  podRange: pod-range-1
  subnetwork: projects/user-gke-dev-2/regions/us-central1/subnetworks/shared-msc-subnets

移除非預設子網路

從叢集中移除非預設子網路後,叢集就不會再於任何叢集節點集區中使用該子網路的範圍。移除後會產生下列影響:

  • 非預設子網路的主要 IPv4 位址範圍無法用於節點 IPv4 位址範圍。
  • 非預設子網路中的子網路次要 IPv4 範圍,無法用於 Pod IPv4 範圍。

如要移除非預設子網路,必須先刪除使用該子網路的所有節點集區。

如要從叢集中移除非預設子網路,請執行下列指令:

   gcloud container clusters update CLUSTER_NAME \
     --remove-additional-ip-ranges= subnetwork=SUBNET_NAME

更改下列內容:

  • CLUSTER_NAME:叢集名稱。
  • SUBNET_NAME:要從叢集移除的子網路名稱。

從叢集移除非預設子網路後,即可刪除非預設子網路

移除非預設子網路的次要 IPv4 範圍

從叢集移除非預設子網路次要 IPv4 範圍時,GKE 會指示叢集不要在任何節點集區中,將該範圍用於 Pod IPv4 範圍。如果移除的非預設子網路次要 IPv4 範圍是叢集使用的唯一非預設子網路範圍,GKE 也會指示叢集停止使用該子網路的主要 IPv4 位址做為節點 IPv4 位址。

移除非預設子網路的次要 IPv4 範圍前,請務必刪除所有使用該範圍做為 Pod IPv4 位址的節點集區。

如要從叢集移除非預設子網路次要 IPv4 範圍,請執行下列指令:

   gcloud container clusters update CLUSTER_NAME \
     --remove-additional-ip-ranges=\
       subnetwork=SUBNET_NAME,pod-ipv4-range=POD_RANGE_NAME

更改下列內容:

  • CLUSTER_NAME:叢集名稱。
  • SUBNET_NAME:非預設子網路的名稱。
  • POD_RANGE_NAME:要從叢集移除的非預設子網路次要 IPv4 範圍名稱。

從叢集移除非預設子網路次要 IPv4 範圍後,即可刪除非預設子網路次要 IPv4 範圍

後續步驟