本頁說明如何在 Google Kubernetes Engine (GKE) 中設定 VPC 原生叢集。
如要進一步瞭解 VPC 原生叢集的優點和需求,請參閱「VPC 原生叢集」總覽。
對於 GKE Autopilot 叢集,VPC 原生網路預設為啟用,且無法覆寫。
事前準備
開始之前,請務必先完成下列工作:
- 啟用 Google Kubernetes Engine API。 啟用 Google Kubernetes Engine API
- 如要使用 Google Cloud CLI 執行這項工作,請安裝並初始化 gcloud CLI。如果您先前已安裝 gcloud CLI,請執行
gcloud components update指令,取得最新版本。較舊的 gcloud CLI 版本可能不支援執行本文件中的指令。
限制
您無法將 VPC 原生叢集轉換為使用路由的叢集,也無法將使用路由的叢集轉換為 VPC 原生叢集。
虛擬私有雲原生叢集需要虛擬私有雲網路。舊版網路則不支援。
與任何 GKE 叢集一樣,Service (ClusterIP) 位址只能從叢集內部存取。如要從叢集外部的 VM 執行個體存取 Kubernetes Service,但該執行個體位於叢集的虛擬私有雲網路和區域內,請建立內部直通式網路負載平衡器。
如果子網路中的所有 Pod IP 位址都已使用,您就無法替換子網路的次要 IP 位址範圍,否則叢集會進入不穩定狀態。不過,您可以使用不連續的多 Pod CIDR 建立額外的 Pod IP 位址範圍。
建立叢集
本節說明如何在建立叢集時完成下列工作:
- 同時建立叢集和子網路。
- 在現有子網路中建立叢集。
- 建立叢集並選取控制層 IP 位址範圍。
- 在新子網路中建立具有雙堆疊網路的叢集 (適用於 Autopilot 叢集 1.25 以上版本,以及 Standard 叢集 1.24 以上版本)。
- 同時建立雙堆疊叢集和雙堆疊子網路 (適用於 1.25 以上版本的 Autopilot 叢集,以及 1.24 以上版本的 Standard 叢集)。
您也可以建立叢集,並在叢集 (預先發布版) 中啟用自動 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 會使用隨機選擇的/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 會使用預設的 Services 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 位址、動態路由或與這個叢集對等互連的 VPC 內路由發生衝突。如果使用這些項目,請務必指定--cluster-ipv4-cidr,以免發生衝突。SERVICES_IP_RANGE:採用 CIDR 標記法的 IP 位址範圍 (例如10.4.0.0/19),或是 CIDR 區塊子網路遮罩的大小 (例如/19)。這項資訊用於建立子網路的次要 IP 位址範圍,以供服務使用。
- 如果次要範圍指派方法為使用者管理:
SECONDARY_RANGE_PODS:指定SUBNET_NAME中現有次要 IP 位址範圍的名稱。GKE 會將整個子網路次要 IP 位址範圍用於叢集的 Pod。SECONDARY_RANGE_SERVICES:SUBNET_NAME中現有次要 IP 位址範圍的名稱。
控制台
-
前往 Google Cloud 控制台的「Create an Autopilot cluster」(建立 Autopilot 叢集) 頁面。
前往「Create an Autopilot cluster」(建立 Autopilot 叢集) 頁面
您也可以建立標準叢集來完成這項工作。
- 在導覽窗格的「叢集」底下,按一下 [網路]。
- 在「控制層存取權」下方,設定控制層端點的存取權。
- 在「叢集網路」部分,從「網路」下拉式清單中選取虛擬私有雲。
- 在「節點子網路」下拉式清單中,選取叢集的子網路。
- 確認已勾選「Enable VPC-native traffic routing (uses alias IP)」(啟用虛擬私有雲原生流量轉送功能 (使用別名 IP)) 核取方塊。
- 如要讓 GKE 管理次要範圍指派方法,請選取「自動建立次要範圍」核取方塊。如果您已為所選子網路建立次要範圍,且希望次要範圍指派方法由使用者管理,請取消勾選這個核取方塊。
- 在「Pod address range」(Pod 位址範圍) 欄位中輸入 Pod 範圍,例如
10.0.0.0/14。 - 在「服務地址範圍」欄位中,輸入服務範圍,例如
10.4.0.0/19。 - 設定叢集。
- 點選「建立」。
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":服務的 CIDR 範圍。請參閱"clusterIpv4CidrBlock"的說明。"clusterSecondaryRangeName":Pod 的次要範圍名稱。 次要範圍必須已存在,且屬於與叢集相關聯的子網路。"serviceSecondaryRangeName":服務的次要範圍名稱。次要範圍必須已存在,且屬於與叢集相關聯的子網路。
建立叢集後,您可以修改叢集控制層的存取權。詳情請參閱「在 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旗標,為控制層佈建內部 IP 位址,而不使用private-endpoint-subnetwork旗標。如要選擇要使用的旗標,請考慮下列設定:- 如果使用
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 中自訂網路隔離」。
控制台
如要將子網路指派給新叢集的控制層,請先新增子網路。請完成下列步驟:
-
前往 Google Cloud 控制台的「Create an Autopilot cluster」(建立 Autopilot 叢集) 頁面。
前往「Create an Autopilot cluster」(建立 Autopilot 叢集) 頁面
您也可以建立標準叢集來完成這項工作。
- 在「Standard」或「Autopilot」部分中,按一下「Configure」(設定)。
- 在「Name」(名稱) 中輸入叢集名稱。
- 在導覽窗格的「叢集」底下,按一下 [網路]。
- 在「控制層存取權」下方,設定控制層端點的存取權。
- 在「叢集網路」部分中,選取「覆寫控制層的預設私人端點子網路」核取方塊。
- 在「Private endpoint subnet」(私有端點子網路) 清單中,選取您建立的子網路。
- 點按「Done」(完成)。視需要新增其他授權網路。
次要 IP 位址範圍的專案中繼資料
建立或升級 GKE 叢集時,GKE 會自動新增專案層級的中繼資料項目 (例如 google_compute_project_metadata),追蹤次要 IP 位址範圍的使用情形,包括 Shared 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_SUBNETWORK:叢集使用的虛擬私有雲網路中的子網路名稱。CLUSTER_PODS_SECONDARY_RANGE_NAME:用於叢集 Pod 的次要 IP 位址範圍名稱。
建立具有雙堆疊網路的叢集
您可以在新的或現有的雙協定子網路上,建立具有 IPv4/IPv6 雙協定網路的叢集。雙協定子網路適用於 1.25 以上版本的 Autopilot 叢集,以及 1.24 以上版本的 Standard 叢集。Windows Server 節點集區不支援雙協定子網路。
設定雙堆疊叢集前,建議您完成下列動作:
在本節中,您會先建立雙協定子網路,然後使用這個子網路建立叢集。
如要建立雙協定子網路,請執行下列指令:
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:將包含新子網路的網路名稱。這個網路必須符合下列條件:- 必須是自訂模式的虛擬私有雲網路。詳情請參閱「將虛擬私有雲網路從自動模式切換為自訂模式」。
- 如果將
ACCESS_TYPE換成INTERNAL,網路必須使用專屬本機 IPv6 單點傳播位址 (ULA)。
PRIMARY_RANGE:新子網路的主要 IPv4 IP 位址範圍,採用 CIDR 標記法。詳情請參閱「子網路範圍」。COMPUTE_REGION:叢集的運算區域。
如要建立具有雙協定子網路的叢集,請使用
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更改下列內容:
CLUSTER_NAME:新叢集的名稱。NETWORK_NAME:包含子網路的虛擬私有雲網路名稱。這個虛擬私有雲網路必須是使用專屬本機 IPv6 單點播送位址 (ULA) 的自訂模式虛擬私有雲網路。詳情請參閱「將虛擬私有雲網路從自動模式切換為自訂模式」。SUBNET_NAME:子網路名稱。COMPUTE_LOCATION:叢集的 Compute Engine 位置。
控制台
-
前往 Google Cloud 控制台的「Create an Autopilot cluster」(建立 Autopilot 叢集) 頁面。
前往「Create an Autopilot cluster」(建立 Autopilot 叢集) 頁面
您也可以建立標準叢集來完成這項工作。
- 在「Standard」或「Autopilot」部分中,按一下「Configure」(設定)。
- 視需要設定叢集。
- 在導覽窗格的「叢集」底下,按一下 [網路]。
- 在「控制層存取權」下方,設定控制層端點的存取權。
- 在「Cluster networking」(叢集網路) 部分的「Network」(網路) 清單中,選取網路名稱。
- 在「節點子網路」清單中,選取雙協定子網路的名稱。
如果是 Standard 叢集,請選取「IPv4 和 IPv6 (雙重堆疊)」圓形按鈕。只有在選取雙堆疊子網路時,才能使用這個選項。
使用雙堆疊子網路時,Autopilot 叢集預設為雙堆疊叢集。
點選「建立」。
同時建立雙重堆疊叢集和子網路
您可以同時建立子網路和雙重堆疊叢集。 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) 子網路。
如果是標準叢集,請執行下列指令:
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:將包含新子網路的網路名稱。這個網路必須符合下列條件:- 必須是自訂模式的虛擬私有雲網路。詳情請參閱「將虛擬私有雲網路從自動模式切換為自訂模式」。
- 如果將
ACCESS_TYPE替換為INTERNAL,網路必須使用專屬本機 IPv6 單點傳播位址 (ULA)。
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 位址的服務會進入錯誤狀態。刪除 Service,然後使用正確的
ipFamilies建立 Service。詳情請參閱設定 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 位置。
控制台
前往 Google Cloud 控制台的「Google Kubernetes Engine」頁面。
按一下要編輯的叢集旁的more_vert「Actions」(動作),然後按一下edit「Edit」(編輯)。
在「Networking」(網路) 部分,按一下「Stack type」(堆疊類型) 旁的「Edit」(編輯)edit。
在「編輯堆疊類型」對話方塊中,選取所需叢集堆疊類型的核取方塊。
按一下 [儲存變更]。
將現有子網路更新為雙協定子網路 (適用於 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 和服務範圍。
gcloud
如要確認叢集,請執行下列指令:
gcloud container clusters describe CLUSTER_NAME
輸出內容包含 ipAllocationPolicy 區塊。stackType 欄位說明網路定義的類型。每種型別都會顯示下列網路資訊:
IPv4 網路資訊:
clusterIpv4Cidr是 Pod 的次要範圍。servicesIpv4Cidr是服務的次要範圍。
IPv6 網路資訊 (如果叢集具有雙重堆疊網路):
ipv6AccessType:可連線至公開網際網路。內部 IPv6 位址為INTERNAL,外部 IPv6 位址為EXTERNAL。subnetIpv6CidrBlock:新子網路的次要 IPv6 位址範圍。servicesIpv6CidrBlock:指派給雙重堆疊叢集上 IPv6 服務的位址範圍。
控制台
如要確認叢集,請執行下列步驟:
前往 Google Cloud 控制台的「Google Kubernetes Engine」頁面。
在叢集清單中,按一下要檢查的叢集名稱。
次要範圍會顯示在「網路」部分:
- Pod 位址範圍是 Pod 的次要範圍
- 服務位址範圍是服務的次要範圍
刪除叢集
如要刪除叢集,請按照「刪除叢集」一文中的步驟操作。
刪除叢集時,GKE 會嘗試清理建立的子網路。但如果子網路正在供其他資源使用,GKE 就不會刪除子網路,您必須自行管理子網路的生命週期。
內部 IP 位址的進階設定
下列各節說明如何使用非 RFC 1918 私人 IP 位址範圍,以及如何啟用私用公開 IP 位址範圍。
使用非 RFC 1918 IP 位址範圍
GKE 叢集可使用 RFC 1918 範圍以外的 IP 位址範圍,用於節點、Pod 和服務。如需可用於子網路範圍內部 IP 位址的非 RFC 1918 私人範圍清單,請參閱虛擬私有雲網路文件中的有效範圍。
Windows Server 節點集區不支援這項功能。
非 RFC 1918 私人範圍是子網路範圍,您可以單獨使用,也可以與 RFC 1918 子網路範圍搭配使用。節點、Pod 和服務會繼續使用子網路範圍,如「VPC 原生叢集的 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 節點集區不支援這項功能。
叢集必須是 VPC 原生叢集,才能使用私用外部 IP 位址範圍。系統不支援使用路由的叢集。
私用外部範圍是子網路範圍。您可以單獨使用這些範圍,也可以與使用私有位址的其他子網路範圍搭配使用。節點、Pod 和服務會繼續使用子網路範圍,如「VPC 原生叢集的 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 種做法:
- 使用
--disable-default-snat旗標建立叢集。如要進一步瞭解這個標記,請參閱「GKE 中的 IP 位址偽裝」。 - 設定 configMap
ip-masq-agent,包括在nonMasqueradeCIDRs清單中至少加入 Pod CIDR、服務 CIDR 和節點子網路。
如果是 Standard 叢集,只要叢集版本為 1.14 以上,兩種選項都適用。如果叢集版本低於 1.14,您只能使用第二個選項 (設定 ip-masq-agent)。