本頁說明如何建立私人 Google Kubernetes Engine (GKE) 叢集,這類叢集為虛擬私有雲原生叢集中的一種。在私人叢集中,節點只會有內部 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
,取得最新版本。
請確認您具備建立叢集的適當權限。您至少應具備 Kubernetes Engine 叢集管理員角色。
確認您有通往預設網際網路閘道的路徑。
建立無法透過用戶端存取公開端點的私人叢集
在本節中,您將建立下列資源:
- 名為
private-cluster-0
的私人叢集,具有私人節點,且用戶端無法存取公開端點。 - 名為
my-net-0
的網路。 - 名為
my-subnet-0
的子網路。
控制台
建立網路和子網路
前往 Google Cloud 控制台的「VPC networks」(VPC 網路) 頁面。
按一下「建立虛擬私有雲網路」add_box。
在「Name」(名稱) 中輸入
my-net-0
。在「子網路建立模式」部分,選取「自訂」。
在「New subnet」(新的子網路) 區段的「Name」(名稱) 中,輸入
my-subnet-0
。在「Region」(區域) 清單中選取所需區域。
在「IP address range」(IP 位址範圍) 中,輸入
10.2.204.0/22
。將「私人 Google 存取權」設為「啟用」。
按一下 [完成]。
按一下 [Create] (建立)。
建立私人叢集
前往 Google Cloud 控制台的「Google Kubernetes Engine」頁面。
依序點按「建立」
,然後在「標準」或「Autopilot」部分中,點按「設定」。將「Name」(名稱) 指定為
private-cluster-0
。在導覽窗格中,按一下「Networking」(網路)。
在「Network」(網路) 清單中,選取「my-net-0」。
在「Node subnet」(節點子網路) 清單中,選取「my-subnet-0」。
選取「私人叢集」圓形按鈕。
取消勾選「使用外部 IP 位址存取控制層」核取方塊。
(Autopilot 選用):將「控制層 IP 範圍」設為
172.16.0.32/28
。點選「建立」。
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
會將叢集類型設為虛擬私有雲原生 (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
會將叢集類型設為虛擬私有雲原生 (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 位址。
控制台
建立網路、子網路和次要範圍
前往 Google Cloud 控制台的「VPC networks」(VPC 網路) 頁面。
按一下「建立虛擬私有雲網路」add_box。
在「Name」(名稱) 中輸入
my-net-2
。在「子網路建立模式」部分,選取「自訂」。
在「New subnet」(新的子網路) 區段的「Name」(名稱) 中,輸入
my-subnet-2
。在「Region」(區域) 清單中選取所需區域。
在「IP address range」(IP 位址範圍) 中,輸入
192.168.0.0/20
。按一下 [Create secondary IP range] (建立次要 IP 範圍)。針對「Subnet range name」(子網路範圍名稱) 輸入
my-services
,並針對「Secondary IP range」(次要 IP 範圍) 輸入10.0.32.0/20
。按一下 [Add IP range] (新增 IP 範圍)。針對「Subnet range name」(子網路範圍名稱) 輸入
my-pods
,並針對「Secondary IP range」(次要 IP 範圍) 輸入10.4.0.0/14
。將「私人 Google 存取權」設為「啟用」。
按一下 [完成]。
按一下 [Create] (建立)。
建立私人叢集
建立使用子網路的私人叢集:
前往 Google Cloud 控制台的「Google Kubernetes Engine」頁面。
依序點按「建立」
,然後在「標準」或「Autopilot」部分中,點按「設定」。在「Name」中輸入
private-cluster-2
。按一下導覽窗格中的「Networking」(網路)。
選取「私人叢集」圓形按鈕。
如要建立可從授權的外部 IP 範圍存取的控制層,請將「使用外部 IP 位址存取控制層」核取方塊保持在選取的狀態。
(Autopilot 選用) 將「控制層 IP 範圍」設為
172.16.0.16/28
。在「Network」(網路) 清單中,選取「my-net-2」。
在「Node subnet」(節點子網路) 清單中,選取「my-subnet-2」。
取消勾選「Automatically create secondary ranges」(自動建立次要範圍) 核取方塊。
在「Pod secondary CIDR range」(Pod 次要 CIDR 範圍) 清單中,選取「my-pods」。
在「Services secondary CIDR range」(服務次要 CIDR 範圍) 清單中,選取「my-services」。
選取「啟用控制層授權網路」核取方塊。
點選「建立」。
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 位址新增到叢集的授權網路清單中。
現在說明一下操作方式:
使用
dig
,在 Cloud Shell 指令列視窗中找出 Cloud Shell 的外部 IP 位址。dig +short myip.opendns.com @resolver1.opendns.com
將 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 位址。
取得憑證,以便使用
kubectl
存取叢集:gcloud container clusters get-credentials CLUSTER_NAME \ --project=PROJECT_ID \ --internal-ip
將
PROJECT_ID
替換為您的專案 ID。在 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 位址都能存取控制層。
控制台
前往 Google Cloud 控制台的「Google Kubernetes Engine」頁面。
依序點按「建立」
,然後在「標準」或「Autopilot」部分中,點按「設定」。在「Name」中輸入
private-cluster-3
。在導覽窗格中,按一下「Networking」(網路)。
選取「私人叢集」選項。
將「使用外部 IP 位址存取控制層」核取方塊保持在選取的狀態。
(Autopilot 選用) 將「控制層 IP 範圍」設為
172.16.0.32/28
。將「網路」和「節點子網路」保留為
default
。這會讓 GKE 為您的叢集產生子網路。取消勾選「Enable control plane authorized networks」(啟用控制層授權網路) 核取方塊。
點選「建立」。
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
會將叢集類型設為虛擬私有雲原生 (Autopilot 叢集不需要)。--enable-private-nodes
代表叢集節點沒有外部 IP 位址。--master-ipv4-cidr 172.16.0.32/28
指定控制層的內部 IP 位址範圍 (Autopilot 叢集為選用)。指定之後,就無法在這個叢集中變更這項設定,且在 VPC 中不得重複。系統支援使用非 RFC 1918 的內部 IP 位址。
新增特定用途的防火牆規則
本節說明如何將防火牆規則新增至叢集。根據預設,防火牆規則會限制叢集控制平面,使其只能發起 TCP 連線到通訊埠 443
(HTTPS) 和 10250
(kubelet) 上的節點和 Pod。針對某些 Kubernetes 功能,您可能需要新增防火牆規則,以允許其他通訊埠進行存取。請勿建立優先順序高於自動建立防火牆規則的防火牆規則或階層式防火牆政策規則。
需要額外防火牆規則的 Kubernetes 功能包括:
- 准入 Webhook
- 匯總 API 伺服器
- Webhook 轉換
- 動態稽核設定
- 一般來說,凡是具有 ServiceReference 欄位的 API,都需要額外的防火牆規則。
新增防火牆規則,允許從叢集控制層到下列所有位置的流量:
- 每個節點的指定通訊埠 (hostPort)。
- 在這些節點上執行的每個 Pod 的指定通訊埠。
- 在這些節點上執行的每個 Service 的指定通訊埠。
如要瞭解防火牆規則,請參閱 Cloud Load Balancing 說明文件中的防火牆規則。
如要在叢集中新增防火牆規則,您需要記錄叢集控制平面的 CIDR 區塊和使用的目標。記錄完畢後,即可建立規則。
查看控制層的 CIDR 區塊
您需要叢集控制層的 CIDR 區塊才能新增防火牆規則。
控制台
前往 Google Cloud 控制台的「Google Kubernetes Engine」頁面。
在叢集清單中,按一下叢集名稱。
在「詳細資料」分頁的「網路」下方,記下「控制層位址範圍」欄位的值。
gcloud
執行下列指令:
gcloud container clusters describe CLUSTER_NAME
將 CLUSTER_NAME
替換為叢集名稱。
請記下指令列輸出中,「masterIpv4CidrBlock」欄位中的值。
查看現有的防火牆規則
您必須指定叢集的現有防火牆規則使用的目標 (這裡指的是目的地節點)。
控制台
前往 Google Cloud 控制台的「Firewall policies」(防火牆政策) 頁面。
在「VPC firewall rules」(虛擬私有雲防火牆規則) 的「Filter table」(篩選資料表) 中,輸入
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」(目標) 欄位中的值。
如要查看共用虛擬私有雲的防火牆規則,請在指令中加入 --project HOST_PROJECT_ID
旗標。
新增防火牆規則
控制台
前往 Google Cloud 控制台的「Firewall policies」(防火牆政策) 頁面。
按一下「建立防火牆規則」add_box。
在「Name」(名稱) 欄位中,輸入防火牆規則的名稱。
在「Network」(網路) 清單中,選取相關的網路。
在「Direction of traffic」(流量方向) 中,按一下「Ingress」(輸入)。
在「Action on match」(相符時執行的動作) 中,按一下「Allow」(允許)。
在「Targets」(目標) 清單中,選取「Specified target tags」(指定的目標標記)。
在「目標標記」中,輸入您先前記下的目標值。
在「來源篩選器」清單中,選取「IPv4 範圍」。
在「來源 IPv4 範圍」中,輸入叢集控制層的 CIDR 區塊。
在「Protocols and ports」(通訊協定和通訊埠) 中,按一下「Specified protocols and ports」(指定的通訊協定和通訊埠),選取相關通訊協定 (tcp 或 udp) 的核取方塊,然後在通訊協定欄位中輸入通訊埠號碼。
點選「建立」。
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
) 值。
如要為共用虛擬私有雲新增防火牆規則,請在指令中加入下列旗標:
--project HOST_PROJECT_ID
--network NETWORK_ID
確認節點沒有外部 IP 位址
建立私人叢集後,請確認叢集節點沒有外部 IP 位址。
控制台
前往 Google Cloud 控制台的「Google Kubernetes Engine」頁面。
在叢集清單中,按一下叢集名稱。
如果是 Autopilot 叢集,請在「Cluster basics」(叢集基本資訊) 區段中,查看「External endpoint」(外部端點) 欄位。值為「已停用」。
如果是 Standard 叢集,請執行下列操作:
- 在「Clusters」(叢集) 頁面中,按一下「Nodes」(節點) 分頁標籤。
- 在「Node Pools」(節點集區) 下方,按一下節點集區名稱。
- 在「節點集區詳細資料」頁面的「執行個體群組」下方,按一下執行個體群組的名稱。例如 `gke-private-cluster-0-default-pool-5c5add1f-grp`。
- 在執行個體清單中,確認執行個體沒有外部 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 日之後建立的私人叢集會重複使用虛擬私有雲網路對等互連連線。
您可以使用 gcloud CLI 或 Google Cloud 主控台,檢查私人叢集是否重複使用虛擬私有雲網路對等互連連線。
控制台
在「叢集詳細資料」頁面中,查看「虛擬私有雲對等互連」列。如果叢集重複使用 VPC 對等互連連線,輸出內容會以 gke-n
開頭。例如:gke-n34a117b968dee3b2221-93c6-40af-peer
。
gcloud
gcloud container clusters describe CLUSTER_NAME \
--format="value(privateClusterConfig.peeringName)"
如果叢集重複使用虛擬私有雲對等互連連線,輸出內容會以 gke-n
開頭。例如:gke-n34a117b968dee3b2221-93c6-40af-peer
。
進階叢集設定
本節說明建立私人叢集時可能需要的進階設定。
將連出網際網路的權限授予私人節點
如要為私人節點提供連出網際網路的權限 (例如從外部登錄檔提取映像檔),請使用 Cloud NAT 建立及設定 Cloud Router。有了 Cloud NAT,私人節點就能透過網際網路建立傳出連線,傳送及接收封包。
Cloud Router 可讓區域中的所有節點,將 Cloud NAT 用於所有主要和別名 IP 範圍。還能自動為 NAT 閘道分配外部 IP 位址。
如需建立及設定 Cloud Router 的操作說明,請參閱 Cloud NAT 說明文件中的「使用 Cloud Router 建立 Cloud NAT 設定」。
在共用虛擬私有雲網路中建立私人叢集
如要瞭解如何在共用虛擬私有雲網路中建立私人叢集,請參閱「在共用虛擬私有雲中建立私人叢集」。
部署 Windows Server 容器應用程式
如要瞭解如何將 Windows Server 容器應用程式部署至具有私人節點的叢集,請參閱 Windows 節點集區說明文件。
從全域存取控制層的私人端點
控制層的私人端點是由控制層虛擬私有雲網路中的內部直通式網路負載平衡器實作。內部用戶端或透過 Cloud VPN 通道和 Cloud Interconnect VLAN 連結連線的用戶端,可以存取內部直通式網路負載平衡器。
根據預設,這些用戶端必須與負載平衡器位於相同地區。
啟用控制層全域存取權後,內部直通式網路負載平衡器就會開放全域存取:用戶端 VM 和地端部署系統可從任何區域連線至控制層的私人端點,但須遵守授權網路設定。
如要進一步瞭解內部直通網路負載平衡器和全域存取權,請參閱「內部負載平衡器和已連結的網路」。
啟用控制層私人端點全域存取權
建立私人叢集時,系統預設不會為控制層的私人端點啟用全域存取權。如要啟用控制層全域存取權,請根據叢集模式使用下列工具:
- 如果是標準叢集,可以使用
Google Cloud CLI
或 Google Cloud 控制台。 - 如果是 Autopilot 叢集,可以使用
google_container_cluster
Terraform 資源。
控制台
如要建立已啟用控制層全域存取權的新私人叢集,請執行下列步驟:
在 Google Cloud 控制台中,前往「Create an Autopilot cluster」(建立 Autopilot 叢集) 頁面。
前往「Create an Autopilot cluster」(建立 Autopilot 叢集) 頁面
您也可以建立標準叢集來完成這項工作。
輸入名稱。
在導覽窗格中,按一下「Networking」(網路)。
選取「私人叢集」。
選取「啟用控制層全域存取權」核取方塊。
視需要設定其他欄位。
點選「建立」。
如要為現有私有叢集啟用控制層全域存取權,請執行下列步驟:
前往 Google Cloud 控制台的「Google Kubernetes Engine」頁面。
按一下要編輯的叢集旁的more_vert「Actions」(動作),然後按一下edit「Edit」(編輯)。
在「Networking」(網路) 區段中,按一下「Control plane global access」(控制層全域存取權) 旁邊的 edit「Edit」(編輯)。
在「編輯控制層全域存取權」對話方塊中,選取「啟用控制層全域存取權」核取方塊。
按一下 [儲存變更]。
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 控制平面節點之間的轉送路徑:
如要允許其他網路中的系統連線至叢集的控制平面私有端點,請完成下列必要條件:
找出並記錄叢集及其控制層私人端點的相關網路資訊。
gcloud container clusters describe CLUSTER_NAME \ --location=COMPUTE_LOCATION \ --format="yaml(network, privateClusterConfig)"
更改下列內容:
CLUSTER_NAME
:叢集的名稱。COMPUTE_LOCATION
:叢集的 Compute Engine 位置
從指令輸出中找出並記錄下列資訊,以供後續步驟使用:
network
:叢集 VPC 網路的名稱或 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
請考慮啟用控制層私人端點全域存取權,允許封包從叢集虛擬私有雲網路中的任何區域進入。啟用控制層私人端點全域存取權後,您就能使用位於任何區域的 Cloud VPN 通道或 Cloud Interconnect VLAN 連結,連線至私人端點,而不僅限於叢集所在的區域。
為其他網路中的
privateEndpoint
IP 位址或masterIpv4CidrBlock
IP 位址範圍建立路徑。由於控制層的私人端點 IP 位址一律位於masterIpv4CidrBlock
IPv4 位址範圍內,因此如果符合下列條件,為privateEndpoint
IP 位址或其封閉範圍建立路徑,即可提供從其他網路到控制層私人端點的封包路徑:其他網路使用 Cloud Interconnect VLAN 連結或採用動態 (BGP) 路徑的 Cloud VPN 通道,連線至叢集的虛擬私有雲網路:使用 Cloud Router 自訂通告路徑。詳情請參閱 Cloud Router 說明文件中的通告自訂位址範圍。
其他網路使用不使用動態路徑的傳統版 VPN 通道,連線至叢集的虛擬私有雲網路:您必須在其他網路中設定靜態路徑。
設定叢集的虛擬私有雲網路,在對等互連關係中將自訂路徑匯出至控制層的虛擬私有雲網路。 Google Cloud 一律會設定控制層的虛擬私有雲網路,從叢集的虛擬私有雲網路匯入自訂路徑。這個步驟會提供路徑,讓封包從控制層的私人端點返回其他網路。
如要從叢集的虛擬私有雲網路匯出自訂路徑,請使用下列指令:
gcloud compute networks peerings update PEERING_NAME \ --network=CLUSTER_VPC_NETWORK \ --export-custom-routes
更改下列內容:
PEERING_NAME
:用於連結叢集虛擬私有雲網路與控制平面虛擬私有雲網路的對等互連名稱CLUSTER_VPC_NETWORK
:叢集 VPC 網路的名稱或 URI
如果虛擬私有雲已啟用自訂路徑匯出功能,建立與 Google Cloud IP 範圍重疊的路徑可能會導致叢集故障。
如要進一步瞭解如何更新現有虛擬私有雲網路對等互連連線的路徑交換,請參閱「更新對等互連連線」。
叢集虛擬私有雲網路中的自訂路徑包括目的地為其他網路 (例如內部部署網路) 中 IP 位址範圍的路徑。如要確保這些路徑在控制層的虛擬私有雲網路中成為有效的對等互連自訂路徑,請參閱「其他網路支援的目的地」。
其他聯播網支援的目的地
其他網路傳送至叢集 VPC 網路中 Cloud Router 的位址範圍必須符合下列條件:
雖然叢集的 VPC 可能會接受預設路徑 (
0.0.0.0/0
),但控制層的 VPC 網路一律會拒絕預設路徑,因為該網路已有本機預設路徑。如果其他網路將預設路徑傳送至您的虛擬私有雲網路,其他網路也必須傳送需要連線至控制層私人端點的系統特定目的地。詳情請參閱「轉送順序」。如果控制層的 VPC 網路接受的路徑有效取代預設路徑,這些路徑會中斷與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 將專案加入服務範圍內,如此一來,源自服務範圍外的要求就無法存取相關資源及服務。
如要進一步瞭解服務範圍,請參閱「服務範圍詳細資料與設定」。
如果您在 VPC Service Controls 服務範圍內,將 Artifact Registry 與 GKE 私人叢集搭配使用,則必須設定受限制的虛擬 IP 的路由,以防資料遭到竊取。
正在清除所用資源
完成本頁面的工作之後,為避免您的帳戶中產生不必要的費用,請按照下列步驟移除資源:
刪除叢集
控制台
前往 Google Cloud 控制台的「Google Kubernetes Engine」頁面。
選取每個叢集。
按一下「刪除」圖示 delete。
gcloud
gcloud container clusters delete -q private-cluster-0 private-cluster-1 private-cluster-2 private-cluster-3
刪除網路
控制台
前往 Google Cloud 控制台的「VPC networks」(虛擬私有雲網路) 頁面。
在網路清單中,按一下
my-net-0
。在「虛擬私有雲網路詳細資料」頁面,按一下 delete「刪除虛擬私有雲網路」。
在「刪除網路」對話方塊中,按一下「刪除」。
gcloud
gcloud compute networks delete my-net-0