建立 VPC 原生叢集


本頁說明如何在 Google Kubernetes Engine (GKE) 中設定虛擬私有雲原生叢集

如要進一步瞭解虛擬私有雲原生叢集的優點和需求,請參閱虛擬私有雲原生叢集總覽。

對於 GKE Autopilot 叢集,VPC 原生網路預設為啟用,且無法覆寫。

事前準備

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

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

限制

  • 您無法將虛擬私有雲原生叢集轉換為路徑導向叢集,也無法將路徑導向叢集轉換為虛擬私有雲原生叢集。

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

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

  • 如果子網路中的所有 Pod IP 位址都已使用,您就無法替換子網路的次要 IP 位址範圍,否則叢集會進入不穩定狀態。不過,您可以使用不連續的多 Pod CIDR 建立其他 Pod IP 位址範圍。

建立叢集

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

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

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

同時建立叢集和子網路

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

如果使用共用虛擬私有雲,您無法同時建立叢集和子網路。共用 VPC 主專案的網路管理員必須先建立子網路,然後,您可以在現有子網路中建立叢集,並採用使用者管理的次要範圍指派方法。

gcloud

如要同時建立虛擬私有雲原生叢集和子網路,請執行下列指令:

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 會在 VPC 中選擇大小為 /20 的可用 IP 範圍。
  • POD_IP_RANGE:以 CIDR 標記法表示的 IP 位址範圍,例如 10.0.0.0/14,或是 CIDR 區塊子網路遮罩的大小,例如 /14。這項設定用於建立 Pod 的子網路次要 IP 位址範圍。如果省略這個旗標,GKE 會使用隨機選擇的 /14 範圍,其中包含 218 個位址。系統會從 10.0.0.0/8 (224 個位址的範圍) 隨機選擇自動選取的範圍,且不包含分配給 VM、現有路由或分配給其他叢集的 IP 位址範圍。自動選擇的範圍可能會與保留的 IP 位址動態路由或與這個叢集對等互連的 VPC 內路由衝突。如果使用這些屬性,請指定 --cluster-ipv4-cidr,避免發生衝突。
  • SERVICES_IP_RANGE:以 CIDR 標記法表示的 IP 位址範圍,例如 10.4.0.0/19,或是 CIDR 區塊子網路遮罩的大小,例如 /19。這項設定用於建立服務的子網路次要 IP 位址範圍。如果省略這個旗標,GKE 會使用預設的服務 IP 位址範圍大小 /20

控制台

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

API

如要建立虛擬私有雲原生叢集,請在叢集資源中定義 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 VPC 網路中使用子網路。
  • 如果次要範圍指派方法為「由 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 位址動態路由或與這個叢集對等互連的 VPC 內路由發生衝突。如果使用這些項目,請指定 --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_SERVICESSUBNET_NAME 中現有次要 IP 位址範圍的名稱。

控制台

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

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

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

  2. 在導覽窗格的「叢集」底下,按一下 [網路]
  3. 在「控制層存取權」下方,設定控制層端點的存取權。
  4. 在「叢集網路」部分中,從「網路」下拉式清單選取虛擬私有雲。
  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_PODSSUBNET_NAME 中現有次要 IP 位址範圍的名稱。
  • SECONDARY_RANGE_SERVICESSUBNET_NAME 中現有次要 IP 位址範圍的名稱。

API

建立虛擬私人雲端原生叢集時,您會定義 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。從 VPC 的可用空間中選擇具有指定大小的空白空間。如果保留空白,則系統會找出並建立預設大小的有效範圍。
  • "servicesIpv4CidrBlock":服務的 CIDR 範圍。請參閱 "clusterIpv4CidrBlock" 的說明。
  • "clusterSecondaryRangeName":Pod 的次要範圍名稱。次要範圍必須已經存在,且屬於與叢集相關的子網路。
  • "serviceSecondaryRangeName":服務的次要範圍名稱。次要範圍必須已經存在,且屬於與叢集相關的子網路。

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

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

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

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

gcloud

gcloud container clusters create CLUSTER_NAME \
    --enable-private-nodes \
    --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-cidrprivate-endpoint-subnetwork 標記為選用。
    • 如果您使用 private-endpoint-subnetwork 標記,GKE 會使用您定義範圍內的 IP 位址,佈建控制層內部端點。
    • 如果您使用 master-ipv4-cidr 標記,GKE 會根據您提供的值建立新的子網路。GKE 會使用這個新範圍內的 IP 位址,佈建控制層內部端點。
    • 如果省略 private-endpoint-subnetworkmaster-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 叢集) 頁面

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

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

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

建立或升級 GKE 叢集時,GKE 會自動新增專案層級中繼資料項目 (例如 google_compute_project_metadata),追蹤次要 IP 位址範圍的使用情形,包括在共用 VPC 環境中。這項中繼資料會驗證 GKE 是否為 Pod 和服務正確分配 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 網路名稱。

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

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

建立具有雙堆疊網路的叢集

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

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

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

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

    gcloud compute networks subnets create SUBNET_NAME \
        --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。

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

    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 控制台的「Google Kubernetes Engine」頁面。

    前往「Google Kubernetes Engine」

  2. 按一下「 Create」(建立)

  3. 在「Standard」或「Autopilot」部分中,按一下「Configure」(設定)

  4. 視需要設定叢集。

  5. 在導覽窗格的「叢集」底下,按一下 [網路]

  6. 在「控制層存取權」下方,設定控制層端點的存取權。

  7. 在「Cluster networking」(叢集網路) 區段的「Network」(網路) 清單中,選取網路名稱。

  8. 在「Node subnet」(節點子網路) 清單中,選取雙堆疊子網路的名稱。

  9. 如果是標準叢集,請選取「IPv4 和 IPv6 (雙重堆疊)」單選按鈕。只有在選取雙堆疊子網路時,才能使用這個選項。

    使用雙堆疊子網路時,Autopilot 叢集預設為雙堆疊叢集。

  10. 點選「建立」

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

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

如果使用共用虛擬私有雲,您無法同時建立叢集和子網路。共用虛擬私有雲主專案的網路管理員必須先建立雙堆疊子網路。

  • 如果是 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) 子網路。
  • 如果是標準叢集,請執行下列指令:

    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 位置

更新堆疊類型

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

更新現有叢集的堆疊類型

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

  • 執行 1.25 以上版本的新 GKE 叢集支援變更堆疊類型。如果 GKE 叢集從 1.24 版升級至 1.25 或 1.26 版,啟用雙堆疊網路時可能會發生驗證錯誤。 如有錯誤,請與 Google Cloud 支援團隊聯絡。

  • 變更堆疊類型是中斷性作業,因為 GKE 會重新啟動控制層和節點中的元件。

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

  • 變更堆疊類型不會自動變更現有服務的 IP 系列。申請條件如下:

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

如要更新現有虛擬私有雲原生叢集,可以使用 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. 在「Networking」(網路) 區段中,按一下「Stack type」(堆疊類型) 旁邊的「Edit」(編輯) 圖示

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

  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 和服務 IP 位址範圍

建立虛擬私有雲原生叢集後,您可以驗證其 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 服務的位址範圍。

控制台

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

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

    前往「Google Kubernetes Engine」

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

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

  • 「Pod 位址範圍」是 Pod 的次要範圍
  • 「Service 地址範圍」是 Service 的次要範圍

刪除叢集

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

叢集遭到刪除時,GKE 會嘗試清除已建立的子網路。但是,如果有其他資源正在使用子網路,GKE 就不會刪除子網路,因此您必須自行管理子網路的生命週期。

內部 IP 位址進階設定

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

使用非 RFC 1918 IP 位址範圍

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

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

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

  • 即使使用非 RFC 1918 範圍,子網路範圍也必須在建立叢集節點之前,由 GKE 指派或手動指派。除非更換叢集,否則您無法在現有叢集上,切換為或停止使用節點或服務 IP 位址的非 RFC 1918 子網路範圍。不過,您可以將其他 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 節點集區不支援這項功能。

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

私用外部範圍是子網路範圍。您可以單獨使用這些範圍,也可以搭配使用採用私有位址的其他子網路範圍。節點、Pod 和服務會繼續使用子網路範圍,詳情請參閱「虛擬私有雲原生叢集的 IP 範圍」。私下重複使用外部 IP 位址時,請注意下列事項:

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

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

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

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

後續步驟