建立 VPC 原生叢集

本頁面說明如何在 Google Kubernetes Engine (GKE) 中設定 VPC 原生叢集。

如要進一步瞭解 VPC 原生叢集的優點和需求條件,請參閱 VPC 原生叢集總覽。

如果是 GKE Autopilot 叢集,系統預設會啟用虛擬私有雲原生網路,且無法覆寫。

事前準備

開始之前,請確認您已執行下列工作:

  • 啟用 Google Kubernetes Engine API。
  • 啟用 Google Kubernetes Engine API
  • 如要使用 Google Cloud CLI 執行這項工作,請安裝並初始化 gcloud CLI。如果您先前已安裝 gcloud CLI,請執行 gcloud components update 指令,取得最新版本。較舊的 gcloud CLI 版本可能不支援執行本文中的指令。

限制

  • 您無法將 VPC 原生叢集轉換為使用路由的叢集,也無法將使用路由的叢集轉換為 VPC 原生叢集。

  • VPC 原生叢集需要虛擬私有雲網路。舊版網路則不支援。

  • 與任何 GKE 叢集一樣,Service (ClusterIP) 位址只能從叢集內部存取。如要從叢集外部 (但位於叢集的虛擬私有雲網路和區域內) 的 VM 執行個體存取 Kubernetes Service,請建立內部直通式網路負載平衡器。

  • 如果用盡子網路中的所有 Pod IP 位址,就無法在不讓叢集進入不穩定狀態的情況下,更換子網路的次要 IP 位址範圍。不過,您可以使用不連續的多 Pod CIDR 建立其他 Pod IP 位址範圍。

建立叢集

本節說明如何在建立叢集時完成下列工作:

  • 同時建立叢集和子網路。
  • 在現有子網路中建立叢集。
  • 建立叢集並選取控制層 IP 位址範圍。
  • 在新子網路中建立具有雙堆疊網路的叢集 (適用於 Autopilot 叢集 1.25 以上版本,以及 Standard 叢集 1.24 以上版本)。
  • 同時建立雙協定叢集和雙協定子網路 (適用於 Autopilot 叢集 1.25 以上版本,以及 Standard 叢集 1.24 以上版本)。

您也可以建立叢集,並在叢集中啟用自動 IP 位址管理功能 (預先發布版),讓 GKE 自動建立子網路及管理 IP 位址。詳情請參閱「使用自動 IP 位址管理功能」。

建立叢集後,您可以修改叢集控制層的存取權。詳情請參閱「在 GKE 中自訂網路區隔」。

同時建立叢集和子網路

下列操作說明示範如何同時建立虛擬私有雲原生 GKE 叢集和子網路。當您使用單一指令執行這兩個步驟時,GKE 會管理次要範圍指派方法。

如果使用Shared VPC,則無法同時建立叢集和子網路。而是必須由 Shared VPC 主機專案中的網路管理員先建立子網路。接著,您可以使用使用者管理的次要範圍指派方法,在現有子網路中建立叢集。

gcloud

如要同時建立 VPC 原生叢集和子網路,請執行下列指令:

gcloud container clusters create CLUSTER_NAME \
    --location=COMPUTE_LOCATION \
    --enable-ip-alias \
    --create-subnetwork name=SUBNET_NAME,range=NODE_IP_RANGE \
    --cluster-ipv4-cidr=POD_IP_RANGE \
    --services-ipv4-cidr=SERVICES_IP_RANGE

更改下列內容:

  • CLUSTER_NAME:GKE 叢集的名稱。
  • COMPUTE_LOCATION:叢集的 Compute Engine 位置。
  • SUBNET_NAME:要建立的子網路名稱。子網路的區域與叢集相同 (或包含可用區叢集的區域)。如要讓 GKE 為您產生名稱,請使用空字串 (name="")。
  • NODE_IP_RANGE:採用 CIDR 標記法的 IP 位址範圍,例如 10.5.0.0/20,或 CIDR 區塊的子網路遮罩大小,例如 /20。這會用於建立節點的子網路主要 IP 位址範圍。如未指定,GKE 會在虛擬私有雲中選擇大小為 /20 的可用 IP 範圍。
  • POD_IP_RANGE:採用 CIDR 標記法的 IP 位址範圍,例如 10.0.0.0/14,或 CIDR 區塊的子網路遮罩大小,例如 /14。用於建立 Pod 的子網路次要 IP 位址範圍。如未指定,GKE 會隨機選擇包含 218 個位址的 /14 範圍。系統會從 10.0.0.0/8 (224 個位址的範圍) 隨機選取自動選擇的範圍,且不包含分配給 VM 的 IP 位址範圍、現有路由或分配給其他叢集的範圍。自動選擇的範圍可能會與預留 IP 位址、動態路由,或與這個叢集對接的虛擬私有雲中的路由發生衝突。如果您使用上述任一項目,請務必指定 --cluster-ipv4-cidr,以免發生衝突。
  • SERVICES_IP_RANGE:採用 CIDR 標記法的 IP 位址範圍 (例如 10.4.0.0/19),或 CIDR 區塊的子網路遮罩大小 (例如 /19)。這會用於建立 Service 的子網路次要 IP 位址範圍。如省略,GKE 會使用預設的 Service IP 位址範圍大小 /20。

控制台

您無法使用Google Cloud 控制台同時建立叢集和子網路。請先建立子網路,然後在現有子網路中建立叢集。

API

如要建立 VPC 原生叢集,請在叢集資源中定義 IPAllocationPolicy 物件:

{
  "name": CLUSTER_NAME,
  "description": DESCRIPTION,
  ...
  "ipAllocationPolicy": {
    "useIpAliases": true,
    "createSubnetwork": true,
    "subnetworkName": SUBNET_NAME
  },
  ...
}

createSubnetwork 欄位會自動為叢集建立及佈建子網路。subnetworkName 欄位為選填項目。如果留空,系統會自動為子網路選擇名稱。

建立叢集後,您可以修改叢集控制層的存取權。詳情請參閱「在 GKE 中自訂網路區隔」。

在現有子網路中建立叢集

下列操作說明示範如何在現有子網路中,建立虛擬私有雲原生 GKE 叢集,並選擇次要範圍指派方法。

gcloud

  • 如要使用由 GKE 管理的次要範圍指派方法,請執行下列指令:

    gcloud container clusters create CLUSTER_NAME \
        --location=COMPUTE_LOCATION \
        --enable-ip-alias \
        --subnetwork=SUBNET_NAME \
        --cluster-ipv4-cidr=POD_IP_RANGE \
        --services-ipv4-cidr=SERVICES_IP_RANGE
    
  • 如要使用使用者自行管理的次要範圍指派方法,請執行下列指令:

    gcloud container clusters create CLUSTER_NAME \
        --location=COMPUTE_LOCATION \
        --enable-ip-alias \
        --subnetwork=SUBNET_NAME \
        --cluster-secondary-range-name=SECONDARY_RANGE_PODS \
        --services-secondary-range-name=SECONDARY_RANGE_SERVICES
    

更改下列內容:

  • CLUSTER_NAME:GKE 叢集的名稱。
  • COMPUTE_LOCATION:叢集的 Compute Engine 位置。
  • SUBNET_NAME:現有子網路的名稱。子網路的主要 IP 位址範圍用於節點。子網路必須與叢集使用的區域相同。如果省略,GKE 會嘗試在叢集區域的 default 虛擬私有雲網路中使用子網路。
  • 如果次要範圍指派方法由 GKE 管理:
    • POD_IP_RANGE:採用 CIDR 標記法的 IP 位址範圍,例如 10.0.0.0/14,或 CIDR 區塊的子網路遮罩大小,例如 /14。這項設定會用於建立 Pod 的子網路次要 IP 位址範圍。如果省略 --cluster-ipv4-cidr 選項,GKE 會自動選擇 /14 範圍 (218 個位址)。系統會從 10.0.0.0/8 (224 個位址的範圍) 隨機選取自動選擇的範圍,且不會包含分配給 VM 的 IP 位址範圍、現有路徑或分配給其他叢集的範圍。自動選擇的範圍可能會與預留 IP 位址、動態路由,或與這個叢集對接的虛擬私有雲中的路由發生衝突。如果您使用上述任何一項,請務必指定 --cluster-ipv4-cidr,以免發生衝突。
    • SERVICES_IP_RANGE:採用 CIDR 標記法的 IP 位址範圍 (例如 10.4.0.0/19),或 CIDR 區塊的子網路遮罩大小 (例如 /19)。這會用於建立 Service 的子網路次要 IP 位址範圍。
  • 如果次要範圍指派方法為「使用者自行管理」:
    • SECONDARY_RANGE_PODS:指定 SUBNET_NAME 中現有次要 IP 位址範圍的名稱。GKE 會將整個子網路次要 IP 位址範圍用於叢集的 Pod。
    • SECONDARY_RANGE_SERVICES:SUBNET_NAME 中現有次要 IP 位址範圍的名稱。

控制台

  1. 前往 Google Cloud 控制台的「Create an Autopilot cluster」(建立 Autopilot 叢集) 頁面。

    前往「Create an Autopilot cluster」(建立 Autopilot 叢集) 頁面

    您也可以建立 Standard 叢集來完成這項工作。

  2. 在導覽窗格的「叢集」底下,按一下 [網路]。
  3. 在「控制層存取權」下方,設定控制層端點的存取權。
  4. 在「Cluster networking」(叢集網路) 區段的「Network」(網路) 下拉式選單中,選取虛擬私有雲。
  5. 在「Node subnet」(節點子網路) 下拉式選單中,選取叢集的子網路。
  6. 確認已勾選「Enable VPC-native traffic routing (uses alias IP)」(啟用虛擬私有雲原生流量轉送功能 (使用別名 IP)) 核取方塊。
  7. 如要由 GKE 管理次要範圍指派方法,請勾選「Automatically create secondary ranges」(自動建立次要範圍) 核取方塊。如果您已為所選子網路建立次要範圍,且希望次要範圍指派方法由使用者管理,請取消勾選這個核取方塊。
  8. 在「Pod address range」(Pod 位址範圍) 欄位中,輸入 Pod 範圍,例如 10.0.0.0/14。
  9. 在「Service address range」(服務位址範圍) 欄位中,輸入服務範圍,例如 10.4.0.0/19。
  10. 設定叢集。
  11. 點選「建立」。

Terraform

您可以使用 Terraform 模組,透過 Terraform 建立 VPC 原生叢集。

舉例來說,您可以在 Terraform 設定中新增下列區塊:

module "gke" {
  source  = "terraform-google-modules/kubernetes-engine/google"
  version = "~> 12.0"

  project_id        = "PROJECT_ID"
  name              = "CLUSTER_NAME"
  region            = "COMPUTE_LOCATION"
  network           = "NETWORK_NAME"
  subnetwork        = "SUBNET_NAME"
  ip_range_pods     = "SECONDARY_RANGE_PODS"
  ip_range_services = "SECONDARY_RANGE_SERVICES"
}

更改下列內容:

  • PROJECT_ID:您的專案 ID。
  • CLUSTER_NAME:GKE 叢集的名稱。
  • COMPUTE_LOCATION:叢集的 Compute Engine 位置。如果是 Terraform,則為 Compute Engine 區域。
  • NETWORK_NAME:現有網路的名稱。
  • SUBNET_NAME:現有子網路的名稱。子網路的主要 IP 位址範圍用於節點。子網路必須與叢集使用的子網路位於相同區域。
  • SECONDARY_RANGE_PODS:SUBNET_NAME 中現有次要 IP 位址範圍的名稱。
  • SECONDARY_RANGE_SERVICES:SUBNET_NAME 中現有次要 IP 位址範圍的名稱。

API

建立 VPC 原生叢集時,您會定義 IPAllocationPolicy 物件。您可以參照現有的子網路次要 IP 位址範圍,也可以指定 CIDR 區塊。參照現有子網路次要 IP 位址範圍,建立次要範圍指派方法為使用者管理的叢集。如要由 GKE 管理範圍指派方法,請提供 CIDR 區塊。

{
  "name": CLUSTER_NAME,
  "description": DESCRIPTION,
  ...
  "ipAllocationPolicy": {
    "useIpAliases": true,
    "clusterIpv4CidrBlock"      : string,
    "servicesIpv4CidrBlock"     : string,
    "clusterSecondaryRangeName" : string,
    "servicesSecondaryRangeName": string,

  },
  ...
}

這個指令包含下列值:

  • "clusterIpv4CidrBlock":Pod 的 CIDR 範圍。這會決定 Pod 的次要範圍大小,並可採用 CIDR 標記法,例如 10.0.0.0/14。系統會從虛擬私有雲的可用空間中,選擇指定大小的空白空間。如果留空,系統會找出有效範圍,並以預設大小建立。
  • "servicesIpv4CidrBlock":Service 的 CIDR 範圍。請參閱 "clusterIpv4CidrBlock" 的說明。
  • "clusterSecondaryRangeName":Pod 的次要範圍名稱。次要範圍必須已存在,且屬於與叢集相關聯的子網路。
  • "serviceSecondaryRangeName":Service 的次要範圍名稱。次要範圍必須已存在,且屬於與叢集相關聯的子網路。

建立叢集後,您可以修改叢集控制層的存取權。詳情請參閱「在 GKE 中自訂網路區隔」。

建立叢集並選取控制層 IP 位址範圍

根據預設,1.29 以上版本的叢集會使用主要子網路範圍,佈建指派給控制層端點的內部 IP 位址。如要覆寫這項預設設定,請在建立叢集時選取其他子網路範圍。

以下各節將說明如何建立叢集及覆寫子網路範圍。

gcloud

gcloud container clusters create CLUSTER_NAME \
    --enable-private-nodes \
    --enable-ip-alias \
    --private-endpoint-subnetwork=SUBNET_NAME \
    --location=COMPUTE_LOCATION

其中:

  • enable-private-nodes 旗標為選用,可指示 GKE 建立具有私人節點的叢集。
  • private-endpoint-subnetwork 旗標會定義控制層內部端點的 IP 位址範圍。您可以使用 master-ipv4-cidr 旗標,而非 private-endpoint-subnetwork 旗標,為控制層佈建內部 IP 位址。如要選擇要使用的旗標,請考量下列設定:
    • 如果您使用 enable-private-nodes 旗標建立叢集,則 master-ipv4-cidr 和 private-endpoint-subnetwork 旗標為選用。
    • 如果使用 private-endpoint-subnetwork 旗標,GKE 會使用您定義的範圍內的 IP 位址,佈建控制層內部端點。
    • 如果您使用 master-ipv4-cidr 旗標,GKE 會根據您提供的值建立新的子網路。GKE 會使用這個新範圍內的 IP 位址,佈建控制層內部端點。
    • 如果省略 private-endpoint-subnetwork 和 master-ipv4-cidr 旗標,GKE 會使用次要叢集子網路的 IP 位址,佈建控制層內部端點。

更改下列內容:

  • CLUSTER_NAME:GKE 叢集的名稱。
  • SUBNET_NAME:現有子網路的名稱,用於佈建內部 IP 位址。
  • COMPUTE_LOCATION:叢集的 Compute Engine 位置。

GKE 會使用 Private Service Connect 建立叢集。建立叢集後,您可以修改叢集控制層的存取權。詳情請參閱「在 GKE 中自訂網路隔離」。

控制台

如要將子網路指派給新叢集的控制層,您必須先新增子網路。請完成下列步驟:

  1. 前往 Google Cloud 控制台的「Create an Autopilot cluster」(建立 Autopilot 叢集) 頁面。

    前往「Create an Autopilot cluster」(建立 Autopilot 叢集) 頁面

    您也可以建立 Standard 叢集來完成這項工作。

  2. 在「Standard」或「Autopilot」部分,按一下「Configure」(設定)。
  3. 在「Name」(名稱) 部分,輸入叢集名稱。
  4. 在導覽窗格的「叢集」底下,按一下 [網路]。
  5. 在「控制層存取權」下方,設定控制層端點的存取權。
  6. 在「叢集網路」部分,勾選「覆寫控制層的預設私人端點子網路」核取方塊。
  7. 在「Private endpoint subnet」(私人端點子網路) 清單中,選取您建立的子網路。
  8. 點按「Done」(完成)。視需要新增其他授權網路。

次要 IP 位址範圍的專案中繼資料

建立或升級 GKE 叢集時,GKE 會自動新增專案層級的中繼資料項目 (例如 google_compute_project_metadata),追蹤次要 IP 位址範圍的使用情形,包括在 Shared VPC 環境中。這項中繼資料可驗證 GKE 是否正確為 Pod 和 Service 分配 IP 位址,有助於避免衝突。

GKE 會自動管理這項中繼資料。

中繼資料格式如下:

key:   gke-REGION-CLUSTER_NAME-GKE_UID-secondary-ranges
value: pods:SHARED_VPC_NETWORK:SHARED_VPC_SUBNETWORK:CLUSTER_PODS_SECONDARY_RANGE_NAME

其中:

  • REGION:叢集所在的 Google Cloud 區域。

  • CLUSTER_NAME:GKE 叢集的名稱。

  • GKE_UID:GKE 叢集的專屬 ID。

  • VPC_NETWORK:叢集使用的虛擬私有雲網路名稱。

  • VPC_SUBNETWORK:叢集所用虛擬私有雲網路中的子網路名稱。

  • CLUSTER_PODS_SECONDARY_RANGE_NAME:叢集 Pod 使用的次要 IP 位址範圍名稱。

建立雙堆疊網路叢集

您可以在新的或現有的雙協定子網路上,建立採用 IPv4/IPv6 雙協定網路的叢集。雙協定子網路適用於 Autopilot 叢集 1.25 以上版本,以及 Standard 叢集 1.24 以上版本。Windows Server 節點集區不支援雙協定子網路。

設定雙堆疊叢集之前,建議您完成下列操作:

在本節中,您會先建立雙協定子網路,然後使用這個子網路建立叢集。

  1. 如要建立雙協定子網路,請執行下列指令:

    gcloud compute networks subnets create SUBNET_NAME \
        --enable-dataplane-v2 \
        --stack-type=ipv4-ipv6 \
        --ipv6-access-type=ACCESS_TYPE \
        --network=NETWORK_NAME \
        --range=PRIMARY_RANGE \
        --region=COMPUTE_REGION
    

    更改下列內容:

    • SUBNET_NAME:您選擇的子網路名稱。
    • ACCESS_TYPE:公開網際網路的可轉送性。內部 IPv6 位址請使用 INTERNAL,外部 IPv6 位址則使用 EXTERNAL。如未指定 --ipv6-access-type,預設存取權類型為 EXTERNAL。
    • NETWORK_NAME:要包含新子網路的網路名稱。這個網路必須符合下列條件:
    • PRIMARY_RANGE:新子網路的主要 IPv4 IP 位址範圍,採用 CIDR 標記法。詳情請參閱「子網路範圍」。
    • COMPUTE_REGION:叢集的運算區域。
  2. 如要建立具有雙協定子網路的叢集,請使用gcloud CLI或 Google Cloud 控制台:

gcloud

  • 如果是 Autopilot 叢集,請執行下列指令:

      gcloud container clusters create-auto CLUSTER_NAME \
          --location=COMPUTE_LOCATION \
          --network=NETWORK_NAME \
          --subnetwork=SUBNET_NAME
    

    更改下列內容:

    • CLUSTER_NAME:新 Autopilot 叢集的名稱。
    • COMPUTE_LOCATION:叢集的 Compute Engine 位置。
    • NETWORK_NAME:包含子網路的虛擬私有雲網路名稱。這個虛擬私有雲網路必須是自訂模式虛擬私有雲網路。詳情請參閱「將虛擬私有雲網路從自動模式切換為自訂模式」。
    • SUBNET_NAME:雙協定子網路的名稱。

      使用雙協定子網路時,GKE Autopilot 叢集預設為雙協定叢集。叢集建立後,您可以將 Autopilot 叢集更新為僅限 IPv4。

  • 如果是 Standard 叢集,請執行下列指令:

    gcloud container clusters create CLUSTER_NAME \
        --enable-ip-alias \
        --enable-dataplane-v2 \
        --stack-type=ipv4-ipv6 \
        --network=NETWORK_NAME \
        --subnetwork=SUBNET_NAME \
        --location=COMPUTE_LOCATION
    

    更改下列內容:

控制台

  1. 前往 Google Cloud 控制台的「Create an Autopilot cluster」(建立 Autopilot 叢集) 頁面。

    前往「Create an Autopilot cluster」(建立 Autopilot 叢集) 頁面

    您也可以建立 Standard 叢集來完成這項工作。

  2. 在「Standard」或「Autopilot」部分,按一下「Configure」(設定)。
  3. 視需求設定叢集。
  4. 在導覽窗格的「叢集」底下,按一下 [網路]。
  5. 在「控制層存取權」下方,設定控制層端點的存取權。
  6. 在「Cluster networking」(叢集網路) 區段的「Network」(網路) 清單中,選取網路名稱。
  7. 在「Node subnet」(節點子網路) 清單中,選取雙協定子網路的名稱。
  8. 如果是 Standard 叢集,請選取「IPv4 and IPv6 (dual stack)」(IPv4 和 IPv6 (雙重堆疊)) 圓形按鈕。只有在選取雙協定子網路時,才能使用這個選項。

    使用雙協定子網路時,Autopilot 叢集預設為雙協定叢集。

  9. 點選「建立」。

同時建立雙重堆疊叢集和子網路

您可以同時建立子網路和雙重堆疊叢集。GKE 會建立 IPv6 子網路,並為子網路指派外部 IPv6 主要範圍。

如果使用Shared VPC,則無法同時建立叢集和子網路。而是必須由 Shared VPC 主專案中的網路管理員先建立雙協定子網路。

  • 如果是 Autopilot 叢集,請執行下列指令:

    gcloud container clusters create-auto CLUSTER_NAME \
        --location=COMPUTE_LOCATION \
        --network=NETWORK_NAME \
        --create-subnetwork name=SUBNET_NAME
    

    更改下列內容:

    • CLUSTER_NAME:新 Autopilot 叢集的名稱。
    • COMPUTE_LOCATION:叢集的 Compute Engine 位置。
    • NETWORK_NAME:包含子網路的虛擬私有雲網路名稱。這個虛擬私有雲網路必須是使用唯一本機 IPv6 單點傳播位址 (ULA) 的自訂模式虛擬私有雲網路。詳情請參閱如何將虛擬私有雲網路從自動模式切換為自訂模式。
    • SUBNET_NAME:新子網路的名稱。GKE 可根據組織政策建立子網路:
      • 如果組織政策允許雙協定,且網路為自訂模式,GKE 會建立雙協定子網路,並為子網路指派外部 IPv6 主要範圍。
      • 如果組織政策不允許雙重堆疊,或網路處於自動模式,GKE 會建立單一堆疊 (IPv4) 子網路。
  • 如果是 Standard 叢集,請執行下列指令:

    gcloud container clusters create CLUSTER_NAME \
        --enable-ip-alias \
        --stack-type=ipv4-ipv6 \
        --ipv6-access-type=ACCESS_TYPE \
        --network=NETWORK_NAME \
        --create-subnetwork name=SUBNET_NAME,range=PRIMARY_RANGE \
        --location=COMPUTE_LOCATION
    

    更改下列內容:

    • CLUSTER_NAME:您選擇的新叢集名稱。
    • ACCESS_TYPE:公開網際網路的可路由性。內部 IPv6 位址請使用 INTERNAL,外部 IPv6 位址則使用 EXTERNAL。如未指定 --ipv6-access-type,預設存取權類型為 EXTERNAL。
    • NETWORK_NAME:要包含新子網路的網路名稱。這個網路必須符合下列條件:
    • SUBNET_NAME:您選擇的新子網路名稱。
    • PRIMARY_RANGE:新子網路的主要 IPv4 位址範圍,採用 CIDR 標記法。詳情請參閱「子網路範圍」。
    • COMPUTE_LOCATION:叢集的 Compute Engine 位置。

建立單一堆疊 IPv6 叢集 (預先發布版)

您可以建立單一堆疊 IPv6 叢集,讓 GKE 僅將 IPv6 位址指派給 Pod、節點和 Service。單一堆疊 IPv6 叢集需要 GKE Dataplane V2、Cloud DNS,以及 Private Service Connect 專用的內部子網路。

單一堆疊 IPv6 叢集會直接分配節點和 Pod IPv6 位址子範圍,不使用 IPv4 別名 IP 位址範圍。詳情請參閱「建立及管理單一堆疊 IPv6 叢集」。

更新堆疊類型

您可以變更現有叢集的堆疊類型,或將現有子網路更新為雙協定子網路。

更新現有叢集的堆疊類型

變更現有叢集的堆疊類型前,請先考量下列限制:

  • 在執行 1.25 以上版本的新 GKE 叢集中,可以變更堆疊類型。如果 GKE 叢集是從 1.24 版升級至 1.25 或 1.26 版,啟用雙堆疊網路時可能會發生驗證錯誤。

  • 變更堆疊類型會造成干擾,因為 GKE 會重新啟動控制層和節點中的元件。

  • 重新建立節點時,GKE 會遵循您設定的維護期間。也就是說,在下一個維護期間之前,叢集堆疊類型不會在叢集上運作。如果不想等待,可以手動升級節點集區,方法是將 --cluster-version 旗標設為控制層已執行的 GKE 版本。如要使用這項解決方法,請務必使用 gcloud CLI。詳情請參閱「維護期間注意事項」。

  • 變更堆疊類型不會自動變更現有 Service 的 IP 系列。適用條件如下:

    • 如果將單一堆疊變更為雙堆疊,現有 Service 仍會維持單一堆疊。
    • 如果將雙堆疊變更為單堆疊,具有 IPv6 位址的現有 Service 會進入錯誤狀態。刪除 Service,並使用正確的 ipFamilies 建立一個。詳情請參閱設定 Deployment 的範例。

如要更新現有的 VPC 原生叢集,可以使用 gcloud CLI 或 Google Cloud 控制台:

gcloud

執行下列指令:

  gcloud container clusters update CLUSTER_NAME \
      --stack-type=STACK_TYPE \
      --location=COMPUTE_LOCATION

更改下列內容:

  • CLUSTER_NAME:要更新的叢集名稱。
  • STACK_TYPE:堆疊類型。請替換為下列其中一個值:
    • ipv4:將雙重堆疊叢集更新為僅限 IPv4 叢集。GKE 會使用叢集子網路的主要 IPv4 位址範圍。
    • ipv4-ipv6:將現有的 IPv4 叢集更新為雙重堆疊。只有在基礎子網路支援雙協定時,才能將叢集變更為雙協定。詳情請參閱「將現有子網路更新為雙協定子網路」。
  • COMPUTE_LOCATION:叢集的 Compute Engine 位置。

控制台

  1. 前往 Google Cloud 控制台的「Google Kubernetes Engine」頁面。

    前往「Google Kubernetes Engine」

  2. 按一下要編輯的叢集旁的「Actions」(動作),然後按一下「Edit」(編輯)。

  3. 在「網路」部分,按一下「堆疊類型」旁的「編輯」。

  4. 在「Edit stack type」(編輯堆疊類型) 對話方塊中,勾選所需叢集堆疊類型的核取方塊。

  5. 按一下 [儲存變更]。

將現有子網路更新為雙協定子網路 (適用於 Autopilot 叢集 1.25 以上版本,以及 Standard 叢集 1.24 以上版本)。

將現有子網路更新為雙協定子網路

如要將現有子網路更新為雙協定子網路,請執行下列指令。更新子網路不會影響子網路中任何現有的 IPv4 叢集。

gcloud compute networks subnets update SUBNET_NAME \
    --stack-type=ipv4-ipv6 \
    --ipv6-access-type=ACCESS_TYPE \
    --region=COMPUTE_REGION

更改下列內容:

  • SUBNET_NAME:子網路名稱。
  • ACCESS_TYPE:公開網際網路的可轉送性。內部 IPv6 位址請使用 INTERNAL,外部 IPv6 位址則使用 EXTERNAL。如未指定 --ipv6-access-type,預設存取權類型為 EXTERNAL。
  • COMPUTE_REGION:叢集的運算區域。

驗證堆疊類型、Pod 和 Service IP 位址範圍

建立 VPC 原生叢集後,您可以驗證其 Pod 和 Service 範圍。

gcloud

如要確認叢集,請執行下列指令:

gcloud container clusters describe CLUSTER_NAME

輸出內容包含 ipAllocationPolicy 區塊。stackType 欄位說明網路定義的類型。每種類型都會顯示下列網路資訊:

  • IPv4 網路資訊:

    • clusterIpv4Cidr 是 Pod 的次要範圍。
    • servicesIpv4Cidr 是 Service 的次要範圍。
  • IPv6 網路資訊 (如果叢集採用雙重堆疊網路):

    • ipv6AccessType:公開網際網路的可路由性。內部 IPv6 位址為 INTERNAL,外部 IPv6 位址為 EXTERNAL。
    • subnetIpv6CidrBlock:新子網路的次要 IPv6 位址範圍。
    • servicesIpv6CidrBlock:指派給雙重堆疊叢集上 IPv6 Service 的位址範圍。

控制台

如要確認叢集,請執行下列步驟:

  1. 前往 Google Cloud 控制台的「Google Kubernetes Engine」頁面。

    前往「Google Kubernetes Engine」

  2. 在叢集清單中,按一下要檢查的叢集名稱。

次要範圍會顯示在「Networking」(網路) 區段中:

  • 「Pod address range」(Pod 位址範圍) 是 Pod 的次要範圍
  • 「Service 地址範圍」是 Service 的次要範圍

刪除叢集

如要刪除叢集,請按照「刪除叢集」中的步驟操作。

刪除叢集時,GKE 會嘗試清除建立的子網路。不過,如果子網路正由其他資源使用,GKE 就不會刪除子網路,您必須自行管理子網路的生命週期。

內部 IP 位址的進階設定

下列各節說明如何使用非 RFC 1918 私人 IP 位址範圍,以及如何啟用私人使用的公開 IP 位址範圍。

使用非 RFC 1918 IP 位址範圍

GKE 叢集可為節點、Pod 和 Service 使用 RFC 1918 範圍以外的 IP 位址範圍。如需可用於子網路範圍內部 IP 位址的非 RFC 1918 私人範圍清單,請參閱虛擬私有雲網路說明文件中的有效範圍。

Windows Server 節點集區不支援這項功能。

非 RFC 1918 私人範圍是子網路範圍,您可以單獨使用,也可以與 RFC 1918 子網路範圍搭配使用。節點、Pod 和 Service 會繼續使用子網路範圍,如「VPC 原生叢集的 IP 範圍」所述。如果使用非 RFC 1918 範圍,請注意下列事項:

  • 子網路範圍 (即使是使用非 RFC 1918 範圍) 必須在建立叢集節點「之前」,由 GKE 手動或自動指派。除非更換叢集,否則無法切換或停止使用非 RFC 1918 子網路範圍,做為現有叢集的節點或 Service IP 位址。不過,您可以將其他 Pod CIDR 範圍 (包括非 RFC 1918 範圍) 新增至現有的 VPC 原生叢集。如要進一步瞭解如何新增其他 Pod CIDR 範圍,請參閱「擴充 GKE 叢集的 IP 位址範圍」。

  • 內部直通式網路負載平衡器只會使用子網路主要 IP 位址範圍中的 IP 位址。如要建立具有非 RFC 1918 位址的內部直通式網路負載平衡器,子網路的主要 IP 位址範圍必須是非 RFC 1918。

叢集外的目的地可能難以接收來自私人非 RFC 1918 範圍的流量。例如,RFC 1112 (E 類) 私人範圍通常用於多點傳播位址。如果叢集外的目的地無法處理來源為 RFC 1918 範圍「以外」私人 IP 位址的封包,您可以執行下列操作:

  • 子網路的主要 IP 位址範圍請使用 RFC 1918 範圍。這樣一來,叢集中的節點就會使用 RFC 1918 位址。

  • 確認叢集正在執行 IP 偽裝代理程式,且目的地「不在」nonMasqueradeCIDRs 清單中。這樣一來,從 Pod 傳送的封包來源就會變更 (SNAT) 為節點位址 (RFC 1918)。

啟用私人使用的外部 IP 位址範圍

GKE 叢集可以私下使用特定外部 IP 位址範圍,做為內部子網路 IP 位址範圍。您可以私下使用任何外部 IP 位址,但特定受限範圍除外,詳情請參閱虛擬私有雲網路說明文件。Windows Server 節點集區不支援這項功能。

叢集必須是 VPC 原生叢集,才能使用私用外部 IP 位址範圍。不支援使用路由的叢集。

私用外部範圍是子網路範圍。您可以單獨使用這些位址,也可以與其他使用私人位址的子網路範圍搭配使用。節點、Pod 和 Service 會繼續使用子網路範圍,如「VPC 原生叢集的 IP 範圍」所述。以私人方式重複使用外部 IP 位址時,請注意下列事項:

  • 如果使用外部 IP 位址範圍做為子網路範圍,叢集就無法再與網際網路上使用該外部範圍的系統通訊。該範圍會成為叢集虛擬私有雲網路中的內部 IP 位址範圍。

  • 子網路範圍 (即使是私下使用外部 IP 位址範圍的子網路範圍) 必須在建立叢集節點「之前」指派,無論是手動指派或由 GKE 指派皆可。除非更換叢集,否則無法切換或停止使用非 RFC 1918 子網路範圍,做為現有叢集上的節點或 Service IP 位址。不過,您可以將其他 Pod CIDR 範圍 (包括非 RFC 1918 範圍) 新增至現有的 VPC 原生叢集。如要進一步瞭解如何新增其他 Pod CIDR 範圍,請參閱「擴充 GKE 叢集的 IP 位址範圍」。

GKE 預設會在節點上,對外部 IP 目的地實作 SNAT。如果您已將 Pod CIDR 設為使用外部 IP 位址,SNAT 規則會套用至 Pod 對 Pod 流量。如要避免這種情況,可以採取下列 2 種做法:

如果是 Standard 叢集,只要叢集版本為 1.14 以上,這兩個選項都適用。如果叢集版本早於 1.14,則只能使用第二個選項 (設定 ip-masq-agent)。

後續步驟