建立私人叢集

本頁說明如何建立私人 Google Kubernetes Engine (GKE) 叢集,這是一種 VPC 原生叢集。在私人叢集中,節點只會有內部 IP 位址,這表示節點和 Pod 預設會與網際網路隔離。您可以選擇不開放用戶端存取控制平面、開放有限存取權,或開放無限制存取權。

規定與限制

私人叢集必須是虛擬私有雲原生叢集。虛擬私有雲原生叢集不支援舊版網路。

節點集區層級的 Pod 次要範圍:建立 GKE 叢集時,如果您使用 UI 指定的 Pod 次要範圍小於每個節點集區的 /24,可能會遇到下列錯誤:

Getting Pod secondary range 'pod' must have a CIDR block larger or equal to /24

GKE 不支援在節點集區層級指定小於 /24 的範圍。不過,系統支援在叢集層級指定較小的範圍。如要執行這項操作,請使用 Google Cloud CLI 和 --cluster-ipv4-cidr 引數。詳情請參閱「使用特定 CIDR 範圍建立叢集」。

展開下列各節,查看建立叢集時的 IP 位址範圍和流量相關規則。

事前準備

開始之前,請務必先完成下列工作:

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

建立無法透過用戶端存取公開端點的私人叢集

在本節中,您將建立下列資源:

  • 名為 private-cluster-0 的私人叢集,其中包含私人節點,且用戶端無法存取公開端點。
  • 名為 my-net-0 的網路。
  • 名為 my-subnet-0 的子網路。

控制台

建立網路和子網路

  1. 前往 Google Cloud 控制台的「VPC networks」(虛擬私有雲網路) 頁面。

    前往虛擬私有雲網路

  2. 按一下「建立虛擬私有雲網路」。

  3. 在「Name」(名稱) 中輸入 my-net-0。

  4. 在「子網路建立模式」部分,選取「自訂」。

  5. 在「New subnet」(新的子網路) 區段中,為「Name」(名稱) 輸入 my-subnet-0。

  6. 在「Region」(區域) 清單中選取所需區域。

  7. 在「IP address range」(IP 位址範圍) 中,輸入 10.2.204.0/22。

  8. 將「Private Google Access」設為「On」。

  9. 按一下「完成」。

  10. 按一下 [Create] (建立)。

建立私人叢集

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

    前往「Google Kubernetes Engine」

  2. 按一下「建立」,然後在「標準」或「Autopilot」部分中,按一下「設定」。

  3. 在「Name」(名稱) 部分指定 private-cluster-0。

  4. 在導覽窗格中,按一下「Networking」(網路)。

  5. 在「Network」(網路) 清單中,選取「my-net-0」。

  6. 在「節點子網路」清單中,選取「my-subnet-0」。

  7. 選取「私人叢集」圓形按鈕。

  8. 取消勾選「使用外部 IP 位址存取控制層」核取方塊。

  9. (Autopilot 模式為選用):將「控制層 IP 範圍」設為 172.16.0.32/28。

  10. 點選「建立」。

gcloud

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

    gcloud container clusters create-auto private-cluster-0 \
        --create-subnetwork name=my-subnet-0 \
        --enable-master-authorized-networks \
        --enable-private-nodes \
        --enable-private-endpoint
    
  • 如果是標準叢集,請執行下列指令:

    gcloud container clusters create private-cluster-0 \
        --create-subnetwork name=my-subnet-0 \
        --enable-master-authorized-networks \
        --enable-ip-alias \
        --enable-private-nodes \
        --enable-private-endpoint \
        --master-ipv4-cidr 172.16.0.32/28
    

其中:

  • --create-subnetwork name=my-subnet-0 會使 GKE 自動建立一個名為 my-subnet-0 的子網路。
  • --enable-master-authorized-networks 表示僅有您授權的 IP 位址範圍可以存取公開端點。
  • --enable-ip-alias 可讓叢集成為 VPC 原生叢集 (Autopilot 不需要)。
  • --enable-private-nodes 表示叢集節點沒有外部 IP 位址。
  • --enable-private-endpoint 表示叢集是透過控制層 API 端點的內部 IP 位址進行管理。
  • --master-ipv4-cidr 172.16.0.32/28 指定控制層的內部 IP 位址範圍 (Autopilot 叢集為選用)。這項設定一經套用至叢集,就無法變更,且在 VPC 內不得重複。系統支援使用非 RFC 1918 內部 IP 位址。

API

如要建立叢集,但不提供可公開存取的控制層,請在 privateClusterConfig 資源中指定 enablePrivateEndpoint: true 欄位。

此時,只有以下 IP 位址可存取控制層:

  • my-subnet-0 的主要範圍。
  • Pod 所用的次要範圍。

舉例來說,假設您在 my-subnet-0 的主要範圍內建立了一個 VM,然後在該 VM 上,您可以設定 kubectl 使用控制層的內部 IP 位址。

如要從 my-subnet-0 外部存取控制層,您必須授權至少一個位址範圍存取私人端點。

假設您有一個 VM 位於預設網路,與叢集位於相同區域,但不在 my-subnet-0 中。

例如:

  • my-subnet-0:10.0.0.0/22
  • Pod 次要範圍:10.52.0.0/14
  • VM 位址:10.128.0.3

您可以使用下列指令,授權 VM 存取控制層:

gcloud container clusters update private-cluster-0 \
    --enable-master-authorized-networks \
    --master-authorized-networks 10.128.0.3/32

建立私人叢集並授予有限的公開端點存取權

使用這項設定建立私人叢集時,您可以選擇使用自動產生的子網路或自訂子網路。

使用系統自動產生的子網路

在本節中,您會建立名為 private-cluster-1 的私人叢集,GKE 會自動為叢集節點產生子網路。 子網路會啟用私人 Google 存取權。在子網路中,GKE 將自動建立兩個次要範圍:一個為 Pod 專用,另一個為 Service 專用。

您可以使用 Google Cloud CLI 或 GKE API。

gcloud

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

    gcloud container clusters create-auto private-cluster-1 \
        --create-subnetwork name=my-subnet-1 \
        --enable-master-authorized-networks \
        --enable-private-nodes
    
  • 如果是標準叢集,請執行下列指令:

    gcloud container clusters create private-cluster-1 \
        --create-subnetwork name=my-subnet-1 \
        --enable-master-authorized-networks \
        --enable-ip-alias \
        --enable-private-nodes \
        --master-ipv4-cidr 172.16.0.0/28
    

其中:

  • --create-subnetwork name=my-subnet-1 會使 GKE 自動建立一個名為 my-subnet-1 的子網路。
  • --enable-master-authorized-networks 表示僅有您授權的 IP 位址範圍可以存取公開端點。
  • --enable-ip-alias 可讓叢集成為 VPC 原生叢集 (Autopilot 不需要)。
  • --enable-private-nodes 表示叢集節點沒有外部 IP 位址。
  • --master-ipv4-cidr 172.16.0.0/28 指定控制層的內部 IP 位址範圍 (Autopilot 叢集為選用)。這項設定一經套用,就無法變更,且在 VPC 內不得重複。系統支援使用非 RFC 1918 內部 IP 位址。

API

在 Cluster API 資源中指定 privateClusterConfig 欄位:

{
  "name": "private-cluster-1",
  ...
  "ipAllocationPolicy": {
    "createSubnetwork": true,
  },
  ...
    "privateClusterConfig" {
      "enablePrivateNodes": boolean # Creates nodes with internal IP addresses only
      "enablePrivateEndpoint": boolean # false creates a cluster control plane with a publicly-reachable endpoint
      "masterIpv4CidrBlock": string # CIDR block for the cluster control plane
      "privateEndpoint": string # Output only
      "publicEndpoint": string # Output only
  }
}

此時,只有以下 IP 位址可存取叢集控制層:

  • my-subnet-1 的主要範圍。
  • Pod 所用的次要範圍。

假設您有一組機器位於虛擬私有雲網路外部,且位址範圍為 203.0.113.0/29。您可以輸入下列指令,授權這些機器存取公開端點:

gcloud container clusters update private-cluster-1 \
    --enable-master-authorized-networks \
    --master-authorized-networks 203.0.113.0/29

現在只有這些 IP 位址可以存取控制層:

  • my-subnet-1 的主要範圍。
  • Pod 所用的次要範圍。
  • 您授權的地址範圍,例如 203.0.113.0/29。

使用自訂子網路

在本節中,您將建立下列資源:

  • 名為 private-cluster-2 的私人叢集。
  • 名為 my-net-2 的網路。
  • 名為 my-subnet-2 的子網路,主要範圍為 192.168.0.0/20,適用於叢集節點。您的子網路有下列次要位址範圍:
    • my-pods 做為 Pod IP 位址。
    • my-services 服務 IP 位址。

控制台

建立網路、子網路和次要範圍

  1. 前往 Google Cloud 控制台的「VPC networks」(虛擬私有雲網路) 頁面。

    前往虛擬私有雲網路

  2. 按一下「建立虛擬私有雲網路」。

  3. 在「Name」(名稱) 中輸入 my-net-2。

  4. 在「子網路建立模式」部分,選取「自訂」。

  5. 在「New subnet」(新的子網路) 區段中,為「Name」(名稱) 輸入 my-subnet-2。

  6. 在「Region」(區域) 清單中選取所需區域。

  7. 在「IP address range」(IP 位址範圍) 中,輸入 192.168.0.0/20。

  8. 按一下 [Create secondary IP range] (建立次要 IP 範圍)。針對「Subnet range name」(子網路範圍名稱) 輸入 my-services,並針對「Secondary IP range」(次要 IP 範圍) 輸入 10.0.32.0/20。

  9. 按一下 [Add IP range] (新增 IP 範圍)。針對「Subnet range name」(子網路範圍名稱) 輸入 my-pods,並針對「Secondary IP range」(次要 IP 範圍) 輸入 10.4.0.0/14。

  10. 將「Private Google Access」設為「On」。

  11. 按一下「完成」。

  12. 按一下 [Create] (建立)。

建立私人叢集

建立使用子網路的私人叢集:

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

    前往「Google Kubernetes Engine」

  2. 按一下「建立」,然後在「標準」或「Autopilot」部分中,按一下「設定」。

  3. 在「Name」(名稱) 中輸入 private-cluster-2。

  4. 按一下導覽窗格中的「Networking」(網路)。

  5. 選取「私人叢集」圓形按鈕。

  6. 如要建立可從授權外部 IP 範圍存取的控制層,請保持選取「透過外部 IP 位址存取控制層」核取方塊。

  7. (Autopilot 選用) 將「控制層 IP 範圍」設為 172.16.0.16/28。

  8. 在「Network」(網路) 清單中,選取「my-net-2」。

  9. 在「節點子網路」清單中,選取「my-subnet-2」。

  10. 取消勾選「Automatically create secondary ranges」(自動建立次要範圍) 核取方塊。

  11. 在「Pod secondary CIDR range」(Pod 次要 CIDR 範圍) 清單中,選取「my-pods」。

  12. 在「Services secondary CIDR range」(服務次要 CIDR 範圍) 清單中,選取「my-services」(我的服務)。

  13. 選取「啟用控制層授權網路」核取方塊。

  14. 點選「建立」。

gcloud

建立網路

首先,為您的叢集建立一個網路。以下指令會建立名為 my-net-2 的網路:

gcloud compute networks create my-net-2 \
    --subnet-mode custom

建立子網路和次要範圍

接下來,在 my-net-2 網路中建立名為 my-subnet-2 的子網路,並分別為 Pod 及 Service 設定次要範圍 my-pods 和 my-services:

gcloud compute networks subnets create my-subnet-2 \
    --network my-net-2 \
    --range 192.168.0.0/20 \
    --secondary-range my-pods=10.4.0.0/14,my-services=10.0.32.0/20 \
    --enable-private-ip-google-access

建立私人叢集

現在,使用建好的網路、子網路和次要範圍來建立一個名為 private-cluster-2 的私人叢集。

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

    gcloud container clusters create-auto private-cluster-2 \
        --enable-master-authorized-networks \
        --network my-net-2 \
        --subnetwork my-subnet-2 \
        --cluster-secondary-range-name my-pods \
        --services-secondary-range-name my-services \
        --enable-private-nodes
    
  • 如果是標準叢集,請執行下列指令:

    gcloud container clusters create private-cluster-2 \
        --enable-master-authorized-networks \
        --network my-net-2 \
        --subnetwork my-subnet-2 \
        --cluster-secondary-range-name my-pods \
        --services-secondary-range-name my-services \
        --enable-private-nodes \
        --enable-ip-alias \
        --master-ipv4-cidr 172.16.0.16/28 \
        --no-enable-basic-auth \
        --no-issue-client-certificate
    

此時,只有以下 IP 位址可存取控制層:

  • my-subnet-2 的主要範圍。
  • 次要範圍 my-pods。

假設您有一組機器在 my-net-2 範圍之外,其位址範圍是 203.0.113.0/29。您可以輸入以下指令以授權這些機器存取公開端點:

gcloud container clusters update private-cluster-2 \
    --enable-master-authorized-networks \
    --master-authorized-networks 203.0.113.0/29

此時,只有以下 IP 位址可存取控制層:

  • my-subnet-2 的主要範圍。
  • 次要範圍 my-pods。
  • 您授權的地址範圍,例如 203.0.113.0/29。

使用 Cloud Shell 存取私人叢集

如果已啟用私人端點,您就無法透過 Cloud Shell 存取 GKE 控制層。

如要使用 Cloud Shell 存取叢集,請將 Cloud Shell 的外部 IP 位址新增至叢集的授權網路清單。

現在說明一下操作方式:

  1. 使用 dig,在 Cloud Shell 指令列視窗中找出 Cloud Shell 的外部 IP 位址。

    dig +short myip.opendns.com @resolver1.opendns.com
    
  2. 將 Cloud Shell 的外部位址新增至叢集的授權網路清單:

    gcloud container clusters update CLUSTER_NAME \
        --enable-master-authorized-networks \
        --master-authorized-networks EXISTING_AUTH_NETS,SHELL_IP/32
    

    更改下列內容:

    • CLUSTER_NAME:叢集名稱。
    • EXISTING_AUTH_NETS:現有授權網路清單的 IP 位址。您可以在控制台中找到授權網路,也可以執行下列指令:

      gcloud container clusters describe CLUSTER_NAME --format "flattened(masterAuthorizedNetworksConfig.cidrBlocks[])"
      
    • SHELL_IP:Cloud Shell 的外部 IP 位址。

  3. 取得憑證,以便使用 kubectl 存取叢集:

    gcloud container clusters get-credentials CLUSTER_NAME \
        --project=PROJECT_ID \
        --internal-ip
    

    將 PROJECT_ID 替換為專案 ID。

  4. 在 Cloud Shell 中使用 kubectl 存取叢集:

    kubectl get nodes
    

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

    NAME                                               STATUS   ROLES    AGE    VERSION
    gke-cluster-1-default-pool-7d914212-18jv   Ready    <none>   104m   v1.21.5-gke.1302
    gke-cluster-1-default-pool-7d914212-3d9p   Ready    <none>   104m   v1.21.5-gke.1302
    gke-cluster-1-default-pool-7d914212-wgqf   Ready    <none>   104m   v1.21.5-gke.1302
    

建立可無限制存取公開端點的私人叢集

在本節中,您將建立私人叢集,讓任何 IP 位址都能存取控制層。

控制台

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

    前往「Google Kubernetes Engine」

  2. 按一下「建立」,然後在「標準」或「Autopilot」部分中,按一下「設定」。

  3. 在「Name」(名稱) 中輸入 private-cluster-3。

  4. 在導覽窗格中,按一下「Networking」(網路)。

  5. 選取「私人叢集」選項。

  6. 請勾選「使用外部 IP 位址存取控制層」核取方塊。

  7. (Autopilot 選用) 將「控制層 IP 範圍」設為 172.16.0.32/28。

  8. 將「網路」和「節點子網路」設為 default。這會讓 GKE 為您的叢集產生子網路。

  9. 取消勾選「Enable control plane authorized networks」(啟用控制層授權網路) 核取方塊。

  10. 點選「建立」。

gcloud

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

    gcloud container clusters create-auto private-cluster-3 \
        --create-subnetwork name=my-subnet-3 \
        --no-enable-master-authorized-networks \
        --enable-private-nodes
    
  • 如果是標準叢集,請執行下列指令:

    gcloud container clusters create private-cluster-3 \
        --create-subnetwork name=my-subnet-3 \
        --no-enable-master-authorized-networks \
        --enable-ip-alias \
        --enable-private-nodes \
        --master-ipv4-cidr 172.16.0.32/28
    

其中:

  • --create-subnetwork name=my-subnet-3 會使 GKE 自動建立一個名為 my-subnet-3 的子網路。
  • --no-enable-master-authorized-networks 會停用叢集的授權網路。
  • --enable-ip-alias 可讓叢集成為 VPC 原生叢集 (Autopilot 不需要)。
  • --enable-private-nodes 表示叢集節點沒有外部 IP 位址。
  • --master-ipv4-cidr 172.16.0.32/28 指定控制層的內部 IP 位址範圍 (Autopilot 叢集為選用)。這項設定一經套用,就無法變更,且在 VPC 內不得重複。系統支援使用非 RFC 1918 內部 IP 位址。

根據特定用途新增防火牆規則

本節說明如何為叢集新增防火牆規則。根據預設,防火牆規則會限制叢集控制層,僅能透過通訊埠 443 (HTTPS) 和 10250 (kubelet) 對節點和 Pod 發起 TCP 連線。如要使用部分 Kubernetes 功能,可能需要新增防火牆規則,允許存取其他通訊埠。請勿建立優先順序高於自動建立的防火牆規則的防火牆規則或階層式防火牆政策規則。

需要額外防火牆規則的 Kubernetes 功能包括:

新增防火牆規則後,叢集控制層的流量就能連線至下列所有項目:

  • 每個節點的指定通訊埠 (hostPort)。
  • 在這些節點上執行的每個 Pod 的指定通訊埠。
  • 在這些節點上執行的每個 Service 的指定通訊埠。

如要瞭解防火牆規則,請參閱 Cloud Load Balancing 說明文件中的「防火牆規則」。

如要在叢集中新增防火牆規則,請記錄叢集控制層的 CIDR 區塊和使用的目標。錄製完畢後,即可建立規則。

查看控制層的 CIDR 區塊

您需要叢集控制層的 CIDR 區塊,才能新增防火牆規則。

控制台

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

    前往「Google Kubernetes Engine」

  2. 在叢集清單中,按一下叢集名稱。

在「詳細資料」分頁的「網路」下方,記下「控制平面位址範圍」欄位中的值。

gcloud

執行下列指令:

gcloud container clusters describe CLUSTER_NAME

將 CLUSTER_NAME 替換為叢集名稱。

在指令輸出內容中,記下 masterIpv4CidrBlock 欄位中的值。

查看現有的防火牆規則

您需要指定叢集現有防火牆規則使用的目標 (在本例中為目的地節點)。

控制台

  1. 前往 Google Cloud 控制台的「Firewall policies」(防火牆政策) 頁面。

    前往「Firewall policies」(防火牆政策) 頁面

  2. 在「虛擬私有雲防火牆規則」的「篩選器資料表」中,輸入 gke-CLUSTER_NAME。

請記下「Targets」(目標) 欄位中的值。

gcloud

請執行下列指令:

gcloud compute firewall-rules list \
    --filter 'name~^gke-CLUSTER_NAME' \
    --format 'table(
        name,
        network,
        direction,
        sourceRanges.list():label=SRC_RANGES,
        allowed[].map().firewall_rule().list():label=ALLOW,
        targetTags.list():label=TARGET_TAGS
    )'

請記下指令輸出中,「Targets」(目標) 欄位中的值。

如要查看 Shared VPC 的防火牆規則,請在指令中加入 --project HOST_PROJECT_ID 旗標。

新增防火牆規則

控制台

  1. 前往 Google Cloud 控制台的「Firewall policies」(防火牆政策) 頁面。

    前往「Firewall policies」(防火牆政策) 頁面

  2. 按一下 「建立防火牆規則」。

  3. 在「名稱」欄位中輸入防火牆規則的名稱。

  4. 在「Network」(網路) 清單中,選取相關網路。

  5. 在「流量方向」部分,按一下「輸入」。

  6. 在「相符時執行的動作」中,按一下「允許」。

  7. 在「Targets」(目標) 清單中,選取「Specified target tags」(指定的目標標記)。

  8. 在「目標標記」部分輸入先前記下的目標值。

  9. 在「來源篩選器」清單中,選取「IPv4 範圍」。

  10. 在「來源 IPv4 範圍」中,輸入叢集控制層的 CIDR 區塊。

  11. 在「通訊協定和通訊埠」中,按一下「指定的通訊協定和通訊埠」,選取相關通訊協定 (「tcp」或「udp」) 的核取方塊,然後在通訊協定欄位中輸入通訊埠號碼。

  12. 點選「建立」。

gcloud

執行下列指令:

gcloud compute firewall-rules create FIREWALL_RULE_NAME \
    --action ALLOW \
    --direction INGRESS \
    --source-ranges CONTROL_PLANE_RANGE \
    --rules PROTOCOL:PORT \
    --target-tags TARGET

更改下列內容:

  • FIREWALL_RULE_NAME:您為防火牆規則選擇的名稱。
  • CONTROL_PLANE_RANGE:先前收集的叢集控制平面 IP 位址範圍 (masterIpv4CidrBlock)。
  • PROTOCOL:PORT:通訊埠及其通訊協定,tcp 或 udp。
  • TARGET:先前收集的目標 (Targets) 值。

如要為 Shared VPC 新增防火牆規則,請在指令中加入下列旗標:

--project HOST_PROJECT_ID
--network NETWORK_ID

確認節點沒有外部 IP 位址

建立私人叢集後,請確認叢集的節點沒有外部 IP 位址。

控制台

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

    前往「Google Kubernetes Engine」

  2. 在叢集清單中,按一下叢集名稱。

  3. 如為 Autopilot 叢集,請在「Cluster basics」(叢集基本資訊) 區段中,查看「External endpoint」(外部端點) 欄位。值為「已停用」。

如果是 Standard 叢集,請按照下列步驟操作:

  1. 在「Clusters」(叢集) 頁面中,按一下「Nodes」(節點) 分頁標籤。
  2. 在「Node Pools」(節點集區) 下方,按一下節點集區名稱。
  3. 在「Node pool details」(節點集區詳細資料) 頁面的「Instance groups」(執行個體群組) 下方,按一下執行個體群組的名稱。例如 `gke-private-cluster-0-default-pool-5c5add1f-grp`。
  4. 在執行個體清單中,確認執行個體沒有外部 IP 位址。

gcloud

執行下列指令:

kubectl get nodes --output wide

輸出的 EXTERNAL-IP 資料欄為空白:

STATUS ... VERSION        EXTERNAL-IP  OS-IMAGE ...
Ready      v.8.7-gke.1                 Container-Optimized OS
Ready      v1.8.7-gke.1                Container-Optimized OS
Ready      v1.8.7-gke.1                Container-Optimized OS

驗證叢集是否重複使用虛擬私有雲對等互連

在 2020 年 1 月 15 日之後建立的任何具有私有節點的 GKE 叢集,都會重複使用虛擬私有雲網路對等互連連線。

您可以使用 gcloud CLI 或 Google Cloud 控制台,檢查私人叢集是否重複使用虛擬私有雲網路對等互連連線。

控制台

在「Cluster details」(叢集詳細資料) 頁面中,查看「VPC peering」(虛擬私有雲對等互連) 資料列。如果叢集重複使用虛擬私有雲對等互連連線,輸出內容會以 gke-n 開頭。例如:gke-n34a117b968dee3b2221-93c6-40af-peer。

gcloud

gcloud container clusters describe CLUSTER_NAME \
    --format="value(privateClusterConfig.peeringName)"

如果叢集重複使用 VPC 對等互連連線,輸出內容會以 gke-n 開頭。例如:gke-n34a117b968dee3b2221-93c6-40af-peer。

進階叢集設定

本節說明建立私人叢集時可能需要的進階設定。

授予私人節點連出網際網路存取權

如要為私人節點提供對外網際網路存取權 (例如從外部登錄檔提取映像檔),請使用 Cloud NAT 建立及設定 Cloud Router。Cloud NAT 可讓私人節點透過網際網路建立傳出連線,傳送及接收封包。

Cloud Router 可讓區域中的所有節點,針對所有主要和別名 IP 範圍使用 Cloud NAT。系統也會自動為 NAT 閘道分配外部 IP 位址。

如需建立及設定 Cloud Router 的操作說明,請參閱 Cloud NAT 說明文件中的「使用 Cloud Router 建立 Cloud NAT 設定」。

在 Shared VPC 虛擬私有雲網路中建立私人叢集

如要瞭解如何在 Shared VPC 虛擬私有雲網路中建立私人叢集,請參閱「在 Shared VPC 中建立私人叢集」。

部署 Windows Server 容器應用程式

如要瞭解如何將 Windows Server 伺服器容器應用程式部署至具有私人節點的叢集,請參閱 Windows 節點集區說明文件。

從全球各地存取控制層的私人端點

控制層的私人端點是由控制層虛擬私有雲網路中的內部直通式網路負載平衡器實作。內部用戶端或透過 Cloud VPN 通道和 Cloud Interconnect VLAN 連結連線的用戶端,可以存取內部直通式網路負載平衡器。

根據預設,這些用戶端必須與負載平衡器位於相同區域。

啟用控制層全域存取權後,內部直通式網路負載平衡器就會開放全域存取:用戶端 VM 和地端部署系統可從任何區域連線至控制層的私人端點,但須遵守授權網路設定。

如要進一步瞭解內部直通式網路負載平衡器和全域存取權,請參閱「內部負載平衡器和連線網路」。

啟用控制層私人端點全域存取權

建立私人叢集時,控制層私人端點預設不會啟用全域存取權。如要啟用控制層全域存取權,請根據叢集模式使用下列工具:

  • 如果是 Standard 叢集,可以使用 Google Cloud CLI 或 Google Cloud 控制台。
  • 如果是 Autopilot 叢集,可以使用 google_container_cluster Terraform 資源。

控制台

如要建立啟用控制層全域存取權的新私人叢集,請完成下列步驟:

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

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

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

  2. 輸入名稱。

  3. 在導覽窗格中,按一下「Networking」(網路)。

  4. 選取「私人叢集」。

  5. 選取「啟用控制層全域存取權」核取方塊。

  6. 視需要設定其他欄位。

  7. 點選「建立」。

如要為現有私人叢集啟用控制層全域存取權,請執行下列步驟:

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

    前往「Google Kubernetes Engine」

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

  3. 在「Networking」(網路) 區段中,按一下「Control plane global access」(控制層全域存取權) 旁邊的 「Edit」(編輯)。

  4. 在「編輯控制層全域存取權」對話方塊中,選取「啟用控制層全域存取權」核取方塊。

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

gcloud

加入 --enable-master-global-access 旗標,建立已啟用控制層私人端點全域存取權的私人叢集:

gcloud container clusters create CLUSTER_NAME \
    --enable-private-nodes \
    --enable-master-global-access

您也可以為現有的私人叢集啟用控制層私人端點的全域存取權:

gcloud container clusters update CLUSTER_NAME \
    --enable-master-global-access

驗證控制層私人端點全域存取權

執行下列指令並查看輸出內容,即可確認是否已啟用控制層私人端點的全域存取權。

gcloud container clusters describe CLUSTER_NAME

輸出內容會包含 privateClusterConfig 區段,您可以在其中查看 masterGlobalAccessConfig 的狀態。

privateClusterConfig:
  enablePrivateNodes: true
  masterIpv4CidrBlock: 172.16.1.0/28
  peeringName: gke-1921aee31283146cdde5-9bae-9cf1-peer
  privateEndpoint: 172.16.1.2
  publicEndpoint: 34.68.128.12
  masterGlobalAccessConfig:
    enabled: true

從其他網路存取控制層的私人端點

建立 GKE 私人叢集並停用控制層的公開端點後,您必須使用控制層的私人端點,透過 kubectl 等工具管理叢集。您可以從其他網路存取叢集控制層的私人端點,包括:

  • 使用 Cloud VPN 通道或 Cloud Interconnect VLAN 連結,連線至叢集 VPC 網路的地端部署網路
  • 使用 Cloud VPN 通道連線至叢集虛擬私有雲網路的其他虛擬私有雲網路

下圖顯示地端部署網路與 GKE 控制層節點之間的轉送路徑:

這張圖表顯示地端部署虛擬私有雲與叢集控制層之間的路由

如要允許其他網路中的系統連線至叢集的控制層私有端點,請完成下列必要條件:

  1. 找出並記錄叢集和控制層私人端點的相關網路資訊。

    gcloud container clusters describe CLUSTER_NAME \
       --location=COMPUTE_LOCATION \
       --format="yaml(network, privateClusterConfig)"
    

    更改下列內容:

    從指令輸出內容中找出並記錄下列資訊,以供後續步驟使用:

    • network:叢集虛擬私有雲網路的名稱或 URI。
    • privateEndpoint:控制層私有端點的 IPv4 位址,或封閉的 IPv4 CIDR 範圍 (masterIpv4CidrBlock)。
    • peeringName:用於將叢集的虛擬私有雲網路連線至控制層的虛擬私有雲網路的虛擬私有雲網路對等互連連線名稱。

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

    network: cluster-network
    privateClusterConfig:
      enablePrivateNodes: true
      masterGlobalAccessConfig:
        enabled: true
      masterIpv4CidrBlock: 172.16.1.0/28
      peeringName: gke-1921aee31283146cdde5-9bae-9cf1-peer
      privateEndpoint: 172.16.1.2
      publicEndpoint: 34.68.128.12
    
  2. 請考慮啟用控制層私人端點全域存取權,允許封包從叢集虛擬私有雲網路的任何區域進入。啟用控制層私人端點全域存取權後,您就能使用任何區域的 Cloud VPN 通道或 Cloud Interconnect VLAN 連結,連線至私人端點,不限於叢集所在區域。

  3. 在其他網路中,為 privateEndpoint IP 位址或 masterIpv4CidrBlock IP 位址範圍建立路由。由於控制平面的私人端點 IP 位址一律位於 masterIpv4CidrBlock IPv4 位址範圍內,因此為 privateEndpoint IP 位址或其封閉範圍建立路由,可為封包從其他網路傳輸至控制平面的私人端點提供路徑,前提是:

    • 其他網路使用 Cloud Interconnect VLAN 連結或 Cloud VPN 通道 (使用動態 (BGP) 路由) 連線至叢集的 VPC 網路:使用 Cloud Router 自訂通告路由。詳情請參閱 Cloud Router 說明文件中的「Advertise custom address ranges」。

    • 其他網路使用不使用動態路徑的傳統版 VPN 通道,連線至叢集的虛擬私有雲網路:您必須在其他網路中設定靜態路徑。

  4. 設定叢集的虛擬私有雲網路,在對等互連關係中將自訂路徑匯出至控制層的虛擬私有雲網路。 Google Cloud 一律會設定控制層的虛擬私有雲網路,從叢集的虛擬私有雲網路匯入自訂路徑。這個步驟會提供路徑,讓封包從控制層的私人端點傳回其他網路。

    如要從叢集的虛擬私有雲網路匯出自訂路徑,請使用下列指令:

    gcloud compute networks peerings update PEERING_NAME \
        --network=CLUSTER_VPC_NETWORK \
        --export-custom-routes
    

    更改下列內容:

    • PEERING_NAME:用於連結叢集虛擬私有雲網路與控制層虛擬私有雲網路的對等互連名稱
    • CLUSTER_VPC_NETWORK:叢集虛擬私有雲網路的名稱或 URI

    如果為虛擬私有雲啟用自訂路由匯出功能,建立與 Google Cloud IP 範圍重疊的路由可能會導致叢集故障。

    如要進一步瞭解如何更新現有虛擬私有雲網路對接連線的路由交換,請參閱「更新對接連線」。

    叢集虛擬私有雲網路中的自訂路由包括目的地為其他網路 (例如地端部署網路) 中 IP 位址範圍的路由。如要確保這些路徑在控制層的虛擬私有雲網路中成為有效的對等互連自訂路徑,請參閱「其他網路支援的目的地」。

其他聯播網支援的目的地

其他網路傳送至叢集虛擬私有雲網路中 Cloud Router 的位址範圍,必須符合下列條件:

  • 雖然叢集的虛擬私有雲可能會接受預設路由 (0.0.0.0/0),但控制平面的虛擬私有雲網路一律會拒絕預設路由,因為該網路已有本機預設路由。如果其他網路將預設路由傳送至您的虛擬私有雲網路,其他網路也必須傳送需要連線至控制層私人端點的系統特定目的地。詳情請參閱「轉送順序」。

  • 如果控制層的虛擬私有雲網路接受的路由有效取代預設路由,這些路由會中斷與Google Cloud API 和服務的連線,導致叢集控制層中斷。舉例來說,其他聯播網不得宣傳目的地為 0.0.0.0/1 和 128.0.0.0/1 的路線。如需替代方案,請參閱前一點。

監控 Cloud Router 限制,尤其是已知路由的不重複目的地數量上限。

使用 VPC Service Controls 對私人叢集進行防護

為了進一步提升您 GKE 私人叢集的安全性,您可以使用 VPC Service Control 對其進行防護。

VPC Service Controls 為您的 GKE 私人叢集提供額外的安全性,以降低資料遭到竊取的風險。您可以透過 VPC Service Controls 將專案加入 service perimeter 內,如此一來,源自 perimeter 外部的要求就無法保護資源及服務。

如要進一步瞭解 service perimeter,請參閱「Service perimeter 詳細資料和設定」。

如果您在 VPC Service Controls service perimeter 內,搭配 GKE 私人叢集使用 Artifact Registry,請務必設定路由至受限的虛擬 IP,防止資料遭竊。

清除所用資源

完成本頁面的工作之後,為避免您的帳戶中產生不必要的費用,請按照下列步驟移除資源:

刪除叢集

控制台

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

    前往「Google Kubernetes Engine」

  2. 選取每個叢集。

  3. 按一下「刪除」圖示 。

gcloud

gcloud container clusters delete -q private-cluster-0 private-cluster-1 private-cluster-2 private-cluster-3

刪除網路

控制台

  1. 前往 Google Cloud 控制台的「VPC networks」(虛擬私有雲網路) 頁面。

    前往虛擬私有雲網路

  2. 在網路清單中,按一下 my-net-0。

  3. 在「虛擬私有雲網路詳細資料」頁面,點選「 刪除虛擬私有雲網路」。

  4. 在「刪除網路」對話方塊中,按一下「刪除」。

gcloud

gcloud compute networks delete my-net-0

後續步驟