本頁說明如何為虛擬私有雲原生叢集設定額外的 Pod IPv4 位址範圍,以及如何為虛擬私有雲原生叢集的節點集區指定自訂 Pod IPv4 位址範圍。
虛擬私有雲原生叢集中的 Pod IPv4 位址範圍一律來自子網路次要 IPv4 位址範圍。建立新叢集時,您會為叢集指派預設的 Pod IPv4 位址範圍。
- 對於 Autopilot 和 Standard 叢集,您可以設定叢集使用額外的 Pod IPv4 位址範圍。GKE 會使用這些額外的 Pod IPv4 位址範圍,做為日後在節點集區中建立的節點 Pod IPv4 位址。
- 如果是標準叢集,您可以建立節點集區,每個節點集區都使用自訂子網路次要 IPv4 位址範圍做為 Pod IPv4 位址。
事前準備
開始之前,請確認你已完成下列工作:
- 啟用 Google Kubernetes Engine API。 啟用 Google Kubernetes Engine API
- 如要使用 Google Cloud CLI 執行這項工作,請安裝並初始化 gcloud CLI。如果您先前已安裝 gcloud CLI,請執行
gcloud components update
,取得最新版本。
- 請確認您具備專案的 Compute Network Admin 身分與存取權管理 (IAM) 角色,該專案包含叢集的子網路。這是建立新的子網路次要 IPv4 位址範圍的必要條件。 使用共用虛擬私有雲時,您需要與共用虛擬私有雲主專案的網路管理員協調。
- 確認 GKE 叢集是虛擬私有雲原生叢集。路徑式叢集不支援額外 Pod IPv4 位址範圍,也不支援節點集區自訂 Pod IPv4 位址範圍。
- 查看「後續步驟」部分。
建立新的子網路次要 IPv4 位址範圍
如要建立新的子網路次要 IPv4 位址範圍,請使用Google Cloud 主控台或 Google Cloud CLI。每個子網路最多可支援 30 個次要 IPv4 位址範圍。詳情請參閱虛擬私有雲端說明文件中的「編輯次要 IPv4 範圍」。
控制台
前往 Google Cloud 控制台的「VPC networks」(虛擬私有雲網路) 頁面。
在「VPC networks」(虛擬私有雲網路) 清單中,選取要展開的網路。
在「Subnets」(子網路) 清單中,選取所需的子網路。
按一下 [編輯]。
按一下 [新增 IP 範圍]。
在「Subnet range name」(子網路範圍名稱) 中,輸入新子網路次要 IPv4 位址範圍的名稱。例如:
pod-range-2
。「次要 IP 範圍」:以 CIDR 格式輸入 IPv4 位址範圍。 例如:
10.2.204.0/22
。按一下 [儲存]。
gcloud
gcloud compute networks subnets update SUBNET_NAME \
--region=REGION \
--add-secondary-ranges=SECONDARY_RANGE_NAME=SECONDARY_RANGE_CIDR
更改下列內容:
SUBNET_NAME
:叢集子網路的名稱 (與叢集建立時指派的子網路相同)。REGION
:叢集子網路的區域。 叢集子網路的地區是包含 GKE 叢集的地區。SECONDARY_RANGE_NAME
:新子網路次要 IPv4 位址範圍的名稱,做為叢集的額外 Pod IPv4 位址範圍。例如:pod-range-2
。SECONDARY_RANGE_CIDR
:新子網路次要 IPv4 位址範圍使用的 CIDR。例如:10.2.204.0/22
。
如要新增兩個以上的子網路次要 IPv4 位址範圍,請在 --add-secondary-ranges
標記後指定其他 SECONDARY_RANGE_NAME
=SECONDARY_RANGE_CIDR
配對,並以半形逗號分隔。
為叢集指派額外 Pod IPv4 範圍
您可以在叢集層級指派其他 Pod IPv4 位址範圍,適用於叢集內新節點集區中建立的新節點。如要將其他 Pod IPv4 位址範圍指派給叢集,請先建立新的子網路次要 IPv4 位址範圍。
下列項目支援將額外 Pod IPv4 位址範圍指派給叢集:
- 執行 GKE 1.26 以上版本的 Autopilot 叢集
標準叢集
控制台
前往 Google Cloud 控制台的「Google Kubernetes Engine」頁面。
按一下要編輯的叢集旁的more_vert「Actions」(動作),然後按一下edit「Edit」(編輯)。
在「網路」部分中,按一下「叢集 Pod IPv4 範圍 (額外)」旁的「編輯」圖示 edit。
在「編輯叢集的額外 Pod IPv4 範圍」對話方塊中,按一下「Pod 次要 CIDR 範圍」,然後選取叢集子網路中一或多個現有子網路次要 IPv4 位址範圍的名稱。如果沒有其他子網路次要 IPv4 位址範圍可用,請先建立新的子網路次要 IPv4 位址範圍,然後重複這些步驟。
按一下 [儲存變更]。
gcloud
使用
--additional-pod-ipv4-ranges
標記更新叢集:gcloud container clusters update CLUSTER_NAME \ --additional-pod-ipv4-ranges=SECONDARY_RANGE_NAME \ --location=COMPUTE_LOCATION
更改下列內容:
CLUSTER_NAME
:叢集名稱。SECONDARY_RANGE_NAME
:叢集子網路中一或多個現有子網路次要 IPv4 位址範圍的名稱,以半形逗號分隔。如果沒有可用的子網路次要 IPv4 位址範圍,請先建立新的子網路次要 IPv4 位址範圍。COMPUTE_LOCATION
:叢集的 Compute Engine 位置。
查詢叢集 Pod IPv4 範圍
如要查詢叢集的預設 Pod IPv4 位址範圍,以及已指派給叢集的任何額外 Pod IPv4 位址範圍,請使用下列指令:
gcloud container clusters describe CLUSTER_NAME \
--location=COMPUTE_LOCATION
更改下列內容:
CLUSTER_NAME
:叢集名稱。COMPUTE_LOCATION
:叢集的 Compute Engine 位置。
輸出結果會與下列內容相似,包括叢集的 IPAllocationPolicy:
ipAllocationPolicy:
clusterSecondaryRangeName: cluster-pods
clusterIpv4CidrBlock: 10.10.0.0/23
additionalPodRangesConfig:
podRangeNames:
- pod-range-1
- pod-range-2
其中:
clusterSecondaryRangeName
:子網路次要 IPv4 位址範圍的名稱,用做叢集的預設 Pod IPv4 位址範圍,在建立叢集時定義。clusterIpv4CidrBlock
:子網路次要 IPv4 位址範圍的 CIDR,適用於 Pod IPv4 位址,是在建立叢集時定義。additionalPodRangesConfig.podRangeNames
:任何額外指派的子網路次要 IPv4 位址範圍清單,適用於 Pod IPv4 位址。
節點集區自訂 Pod IPv4 位址範圍
如果是執行 GKE 1.20.4-gke.500 以上版本的標準叢集,您可以使用下列其中一種方法,為新的節點集區指派自訂 Pod IPv4 範圍:
由 GKE 管理的節點集區自訂 Pod IPv4 位址範圍:選取這個選項後,您會建立新的節點集區,並向 GKE 提供必要資訊,以便在叢集的子網路中建立新的子網路次要 IPv4 位址範圍。在新節點集區中建立的每個新節點,都會獲派別名 IP 位址範圍做為 Pod IPv4 位址,而每個別名 IP 位址範圍都來自 GKE 建立的新子網路次要 IPv4 位址範圍。只有在叢集和包含叢集子網路的虛擬私有雲網路位於同一個專案中時,才能使用這個選項。
使用者管理的節點集區自訂 Pod IPv4 位址範圍:使用這個選項時,您會建立新的節點集區,而 GKE 會使用現有的子網路次要 IPv4 位址範圍。系統會為新節點集區中建立的每個新節點,指派 Pod IPv4 位址的別名 IP 位址範圍,而每個別名 IP 位址範圍都來自您指示 GKE 使用的子網路次要 IPv4 位址範圍。如果叢集位於共用虛擬私有雲服務專案中,且叢集的子網路位於主專案的共用虛擬私有雲網路中,則必須使用這個選項。
節點集區的自訂 Pod IPv4 位址範圍會覆寫叢集層級定義的所有 Pod IPv4 位址範圍,包括指派給叢集的額外 Pod IPv4 位址範圍。指派給節點集區的自訂 Pod IPv4 位址範圍也稱為「不連續多 Pod CIDR」。
節點集區自訂 Pod IPv4 位址範圍範例
下圖顯示具有使用者管理 Pod IPv4 位址範圍的虛擬私有雲原生叢集:
在上圖中:
- 叢集中每個節點集區的每個節點,Pod 數量上限已設為
64
個。為容納每個節點最多 64 個 Pod,GKE 會為每個節點建立/25
別名 IP 位址範圍,每個節點提供128
個 Pod IPv4 位址。 - 叢集的預設 Pod IPv4 位址範圍為
/24
。由於每個節點都需要/25
做為 Pod IPv4 位址,因此叢集的預設 Pod IPv4 位址範圍只支援兩個節點。 - 為支援額外節點,叢集管理員已建立額外節點集區,並維持每個節點的
64
Pod 數量上限。額外節點集區使用自訂/20
Pod IPv4 位址範圍,可支援 32 個額外節點。
由 GKE 管理的節點集區自訂 Pod IPv4 位址範圍
如要建立節點集區,並使用由 GKE 管理的自訂 Pod IPv4 位址範圍,請使用 gcloud CLI 或 GKE API,如下所示:
gcloud
gcloud container node-pools create POOL_NAME \
--cluster=CLUSTER_NAME \
--location=COMPUTE_LOCATION \
--create-pod-ipv4-range=name=SECONDARY_RANGE_NAME,range=CIDR_OR_NETMASK
更改下列內容:
POOL_NAME
:新節點集區的名稱。CLUSTER_NAME
:叢集名稱。COMPUTE_LOCATION
:叢集的 Compute Engine 位置。SECONDARY_RANGE_NAME
:GKE 建立的子網路次要 IPv4 位址範圍名稱。如果您省略name=SECONDARY_RANGE_NAME
,GKE 會自動產生新子網路次要 IPv4 位址範圍的名稱。CIDR_OR_NETMASK
:以 CIDR 格式 (例如10.12.4.0/20
) 或子網路遮罩 (例如/20
) 表示的 Pod IPv4 位址範圍。- 如果只提供子網路遮罩,GKE 會嘗試建立新的子網路次要 IPv4 位址範圍,該範圍不會與含有叢集子網路的虛擬私有雲網路中現有的子網路 IPv4 位址範圍衝突。
- 如果省略
range=CIDR_OR_NETMASK
,GKE 會嘗試建立新的/14
子網路次要 IPv4 位址範圍,該範圍不會與叢集子網路所在虛擬私有雲網路中的現有子網路 IPv4 位址範圍衝突。
API
"nodePool": {
"name": "POOL_NAME",
...
"networkConfig": {
"createPodRange": true,
"podRange": "SECONDARY_RANGE_NAME",
"podIpv4CidrBlock": "CIDR_OR_NETMASK"
}
}
更改下列內容:
POOL_NAME
:新節點集區的名稱。SECONDARY_RANGE_NAME
:選用項目,GKE 建立的子網路次要 IPv4 位址範圍名稱。如果您使用""
做為networkConfig.podRange
的值,或是在要求中省略podRange
參數,GKE 會自動產生新子網路次要 IPv4 位址範圍的名稱。CIDR_OR_NETMASK
:以 CIDR 格式 (例如10.12.4.0/20
) 或子網路遮罩 (例如/20
) 表示的 Pod IPv4 位址範圍。- 如果只提供子網路遮罩,GKE 會嘗試建立新的子網路次要 IPv4 位址範圍,該範圍不會與含有叢集子網路的虛擬私有雲網路中現有的子網路 IPv4 位址範圍衝突。
- 如果使用
""
做為networkConfig.podIpv4CidrBlock
的值,GKE 會嘗試建立新的/14
子網路次要 IPv4 位址範圍,該範圍不會與含有叢集子網路的虛擬私有雲網路中現有的子網路 IPv4 位址範圍衝突。
使用者管理的節點集區自訂 Pod IPv4 位址範圍
如要建立節點集區,並使用使用者管理的自訂 Pod IPv4 位址範圍,請使用 gcloud CLI 或 GKE API,方法如下:
gcloud
gcloud container node-pools create POOL_NAME \
--cluster=CLUSTER_NAME \
--location=COMPUTE_LOCATION \
--pod-ipv4-range SECONDARY_RANGE_NAME
更改下列內容:
POOL_NAME
:新節點集區的名稱。CLUSTER_NAME
:叢集名稱。COMPUTE_LOCATION
:叢集的 Compute Engine 位置。SECONDARY_RANGE_NAME
:叢集子網路中現有子網路次要 IPv4 位址範圍的名稱。如有需要,請先建立新的子網路次要 IPv4 位址範圍。
API
"nodePool": {
"name": "POOL_NAME",
...
"networkConfig": {
"createPodRange": false,
"podRange": "SECONDARY_RANGE_NAME"
}
}
更改下列內容:
POOL_NAME
:新節點集區的名稱。SECONDARY_RANGE_NAME
:叢集子網路中現有子網路次要 IPv4 位址範圍的名稱。如有需要,請先建立新的子網路次要 IPv4 位址範圍。
查詢節點集區 Pod IPv4 範圍
如要查詢節點集區的 Pod IPv4 位址範圍,請使用下列指令:
gcloud container node-pools describe POOL_NAME \
--cluster=CLUSTER_NAME \
--location=COMPUTE_LOCATION
更改下列內容:
POOL_NAME
:節點集區的名稱。CLUSTER_NAME
:叢集名稱。COMPUTE_LOCATION
:叢集的 Compute Engine 位置。
輸出內容會與下列內容相似,包括節點集區的 NodeNetworkConfig:
networkConfig:
podRange: podrange
podIpv4CidrBlock: 192.168.0.0/18
其中:
podRange
:節點集區 Pod IPv4 位址的子網路次要 IPv4 位址範圍名稱。podIpv4CidrBlock
:節點集區 Pod IPv4 位址的子網路次要 IPv4 位址範圍 CIDR。
如果節點集使用自訂 Pod IPv4 位址範圍,podRange
和 podIpv4CidrBlock
值會與叢集的預設 Pod IPv4 位址範圍不同。
後續步驟
為叢集指派額外的 Pod IPv4 位址範圍,或設定節點集區自訂 Pod IPv4 位址範圍後,GKE 會更新自動建立的 gke-[cluster-name]-[cluster-hash]-all
虛擬私有雲防火牆規則,讓來源範圍包含所有 Pod IPv4 位址。
您可能也需要:
更新叢集的 IP 偽裝代理程式設定。 有效的不偽裝 CIDR 集必須包含叢集 (及其節點集區) 使用的所有 Pod IPv4 位址範圍。詳情請參閱「檢查
ip-masq-agent
狀態」和「設定及部署ip-masq-agent
」。檢查叢集的
NetworkPolicy
設定。您可能需要更新參照 Pod IPv4 位址範圍的ipBlock
屬性。
後續步驟
- 進一步瞭解虛擬私人雲端原生叢集。
- 閱讀 GKE 網路總覽。
- 進一步瞭解如何最佳化 IP 位址分配。
- 瞭解 GKE IP 位址使用率洞察。