提供意見
瞭解 ClusterCIDRConfig 自訂資源
透過集合功能整理內容
你可以依據偏好儲存及分類內容。
總覽
ClusterCIDRConfig 是自訂 CIDR 分配器資源,可讓您動態分配更多 Pod 的 IP 位址範圍。
IP 位址管理 (IPAM) 可有效運用 IP 子網路,並避免位址範圍重疊,防止網路衝突和中斷。Kubernetes 會為每個節點指派 Pod CIDR,做為在該節點上執行的 Pod 的 IP 位址。
目前的 Kubernetes NodeIPAM 有以下限制:
所有 Pod CIDR 都會從一個叢集 CIDR 分配。建立叢集時,您必須指定整個 IP 位址範圍,以容納最大的叢集。這項限制可能會浪費 IP 位址。
如果增加叢集大小,就難以新增更多 IP 位址。
叢集 CIDR 是一個大型範圍。可能難以找到滿足叢集需求的連續 IP 位址區塊。
每個節點都會在叢集內取得固定大小的 IP 範圍。如果節點大小和容量不同,您無法為容量較大的節點分配較大的 Pod 範圍,為容量較小的節點分配較小的範圍。這會浪費大量 IP 位址。如果叢集很大且節點眾多,所有節點加總起來的浪費量就會非常驚人。
透過 ClusterCIDRConfig 功能,您可以避免將大型 CIDR 區塊指派給叢集、將叢集大小對應至 Pod 的規模,進而保留 IP 位址。您可以搭配使用 ClusterCIDRConfigs 和不同組合的 CIDR 和 perNodeMaskSize,節省 IP 位址。ClusterCIDRConfig
資源支援下列項目:
Google Distributed Cloud 在下列功能中使用 ClusterCIDRConfig 功能:
Cluster.spec.clusterNetwork.pods.cidrBlocks
是選用欄位,預設不會定義。如果上述清單中的任何功能未定義此值,您就必須定義。舉例來說,在以 IPv4 島嶼模式建立叢集時,就必須指定這個值,因為系統會將其做為原生路由 CIDR。
下表列出不同網路模式的 ClusterCIDRConfig Cluster.spec.clusterNetwork.pods.cidrBlocks
欄位行為。
網路模式
ClusterCIDRConfig 值
IPv4 Island (預設)
(必填欄位) 指定
Cluster.spec.clusterNetwork.pods.cidrBlocks
。
IPv4 Flat (預設)
Cluster.spec.clusterNetwork.pods.cidrBlocks
會完全遭到忽略,而且可以略過。使用者必須明確定義 ClusterCIDRConfigs (每個節點、每個節點集區和/或每個叢集)。
雙重堆疊 (IPv4 Island、IPv4 Flat)
指定 IPv4 CIDR。
請勿在 Cluster.spec.clusterNetwork.pods.cidrBlocks
中指定 IPv6 CIDR。
指定同時包含 IPv4 和 IPv6 CIDR 的 ClusterCIDRConfigs。所有 ClusterCIDRConfig 中設定的 IPv4 CIDR,都必須與 Cluster.spec.clusterNetwork.pods.cidrBlocks
中的 IPv4 CIDR 相同,包括 IPv4 的 PerNodeMask 值。如要進一步瞭解 ClusterCIDRConfig,以及如何使用這項設定的範例,請參閱「範例:雙重堆疊 (IPv4 島狀、IPv6 平面) 」
雙重堆疊 (扁平 IPv4、扁平 IPv6)
您可以略過 Cluster.spec.clusterNetwork.pods.cidrBlocks
,因為系統會完全忽略這些內容。您必須明確定義 ClusterCIDRConfigs (每個節點、每個節點集區和/或每個叢集),並同時使用 IPv4 和 IPv6 CIDR。
設定 ClusterCIDRConfig 自訂 CIDR 分配器資源
ClusterCIDRConfig
設定 ClusterCIDRConfig 自訂 CIDR 分配器資源時,請考量以下幾點:
系統會根據標籤選取器,將特定 ClusterCIDRConfig 的 Pod CIDR 指派給節點。這與用於在節點上排程 Pod 的 nodeSelector 機制類似。
您必須在叢集設定 YAML 檔案中,於叢集建立程序期間設定 ClusterCIDRConfig。指定 ClusterCIDRConfigs 後,即無法修改這些值。
您可以指定多個 ClusterCIDRConfig,其中包含重疊的 CIDR。
如果找不到節點的相符 ClusterCIDRConfig,節點會維持 NotReady 狀態,直到建立具有相符標籤的 ClusterCIDRConfig 為止。
如果最相符的 ClusterCIDRConfig 沒有更多可供分配的 CIDR,系統會選擇次佳的 CIDR,並從可用 CIDR 分配 Pod CIDR。
如果是雙堆疊模型 ,如要將雙堆疊 Pod CIDR 指派給節點,請執行下列操作:
在 ClusterCIDRConfig 中設定 IPv4 和 IPv6 CIDR。
如果設定了多個 ClusterCIDRConfig,請確保所有 ClusterCIDRConfig 都具有 DualStack CIDR。
確認設定的 IPv4 和 IPv6 CIDR,每個節點可分配的 IP 位址數量相同。
例如 32 - spec.IPv4.PerNodeMaskSize == 128 -
spec.IPv6.PerNodeMaskSize
。
spec.IPv4.PerNodeMaskSize = 24
spec.IPv6.PerNodeMaskSize = 120
因此,32 - 24 == 128 - 120,因為兩者的差都是 8。
多個 ClusterCIDRConfig 可以比對 nodeSelector 中的標籤與節點標籤。
ClusterCIDRConfig 指派規則
如要判斷哪個 ClusterCIDRConfig 用於將 Pod CIDR 指派給目前的節點,請使用下列打破僵局的規則。請依指定順序實作這些規則。只有在先前的規則無法打破平手局面時,才需要導入下一個規則。
選取 NodeSelector 與節點上標籤最相符的 ClusterCIDRConfig。舉例來說,{'node.kubernetes.io/instance-type':'medium', 'rack':
'rack1'} (Match Count: 2)
會在 {'node.kubernetes.io/instance-type': 'medium'}. (Match Count: 1)
之前挑選。
挑選可分配的 Pod CIDR 最少的 ClusterCIDRConfig。例如,{CIDR: "10.0.0.0/16", PerNodeMaskSize: "16"} (1 possible Pod
CIDR)
會在 {CIDR: "192.168.0.0/20", PerNodeMaskSize: "22"} (4
possible Pod CIDRs)
之前挑選。
選取 PerNodeMaskSize 擁有的 IP 位址最少的 ClusterCIDRConfig。舉例來說,先前選取的 27 (2^(32-27)= 32 個 IP 位址) 小於 25 (2^(32-25)=128 個 IP 位址)。
選取相符 NodeSelector 標籤的英數字值較低的 ClusterCIDRConfig。舉例來說,{'kubernetes.io/hostname': 'node-1'}
會優先於 {'node.kubernetes.io/instance-type':'medium'}
。
選取 CIDR IP 值較低的 ClusterCIDRConfig。無論設定是 IPv4 設定還是 DualStack 設定,系統只會比較 IPv4 CIDR。例如 {CIDR: "10.0.0.0/16"} is picked over
{CIDR: "192.168.0.0/16"}
。
設定範例
本節列出所有網路模式的叢集和 ClusterCIDRConfig 設定範例。
注意: 請勿直接使用這些範例,請將位址範圍替換為適合您網路的值。
範例:IPv4 Island 模式 (預設)
叢集設定 (預設)
apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
metadata:
name: bm-cluster
namespace: cluster-default
spec:
...
clusterNetwork:
# Pods specify the IP ranges from which pod networks are allocated.
pods:
cidrBlocks:
- 192.168.0.0/16
services:
cidrBlocks:
- 10.96.0.0/12
... (other cluster config omitted)
例如:IPv4 平面模式
叢集設定
apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
metadata:
name: bm-cluster
namespace: cluster-default
spec:
...
clusterNetwork:
flatIPv4: true
services:
cidrBlocks:
- 10.96.0.0/12
... (other cluster config omitted)
ClusterCIDRConfig
範例 1:設定每個節點的 ClusterCIDRConfig
---
apiVersion: baremetal.cluster.gke.io/v1alpha1
kind: ClusterCIDRConfig
metadata:
name: range-node1
namespace: cluster-default # Cluster namespace
spec:
ipv4:
cidr: "222.1.0.0/24"
perNodeMaskSize: 24
nodeSelector:
matchLabels:
kubernetes.io/hostname: node-1
—
apiVersion: baremetal.cluster.gke.io/v1alpha1
kind: ClusterCIDRConfig
metadata:
name: range-node2
namespace: cluster-default
spec:
ipv4:
cidr: "222.1.1.0/24"
perNodeMaskSize: 24
nodeSelector:
matchLabels:
kubernetes.io/hostname: node-2
—
apiVersion: baremetal.cluster.gke.io/v1alpha1
kind: ClusterCIDRConfig
metadata:
name: range-node3
namespace: cluster-default
spec:
ipv4:
cidr: "222.1.2.0/24"
perNodeMaskSize: 24
nodeSelector:
matchLabels:
kubernetes.io/hostname: node-3
範例 2:指定 NodePool 範圍 PodCIDR 的範例
注意: 這兩種扁平 IP 模式的限制不同:
靜態固定 IP (不含 BGP):只有在所有節點都位於同一第 2 層網域時,才能使用。
動態固定 IP (搭配 BGP):即使節點跨越多個子網域,也能使用這項功能。
apiVersion: baremetal.cluster.gke.io/v1alpha1
kind: ClusterCIDRConfig
metadata:
name: nodepool-wide-1
namespace: cluster-default
spec:
ipv4:
cidr: "222.2.0.0/18"
perNodeMaskSize: 24
nodeSelector:
matchLabels:
baremetal.cluster.gke.io/node-pool: workers
範例 3:設定叢集範圍的 PodCIDR - 未設定 nodeSelector
注意: 這兩種扁平 IP 模式的限制不同:
靜態固定 IP (不含 BGP):只有在所有節點都位於同一第 2 層網域時,才能使用。
動態固定 IP (搭配 BGP):即使節點跨越多個子網域,也能使用這項功能。
apiVersion: baremetal.cluster.gke.io/v1alpha1
kind: ClusterCIDRConfig
metadata:
name: cluster-wide-1
namespace: cluster-default
spec:
ipv4:
cidr: "222.3.0.0/16"
perNodeMaskSize: 24
例如:雙重堆疊 (IPv4 Island、IPv6 Flat)
叢集設定
apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
metadata:
name: bm-cluster
namespace: cluster-default
spec:
...
clusterNetwork:
# Pods specify the IP ranges from which pod networks are allocated.
pods:
cidrBlocks:
- 192.168.0.0/16
services:
cidrBlocks:
- 10.96.0.0/12
# Additional IPv6 cidrBlock, determines if the cluster is DualStack
- 2620:0:1000:2630:5:2::/112
... (other cluster config omitted)
ClusterCIDRConfig
範例 1:設定每個節點的 ClusterCIDRConfig
---
apiVersion: baremetal.cluster.gke.io/v1alpha1
kind: ClusterCIDRConfig
metadata:
name: range-node1
namespace: cluster-default # Cluster namespace
spec:
ipv4:
cidr: "192.168.0.0/16"
perNodeMaskSize: 24
ipv6:
cidr: "2222:1::/120"
perNodeMaskSize: 120
nodeSelector:
matchLabels:
kubernetes.io/hostname: node-1
—
apiVersion: baremetal.cluster.gke.io/v1alpha1
kind: ClusterCIDRConfig
metadata:
name: range-node2
namespace: cluster-default
spec:
ipv4:
cidr: "192.168.0.0/16"
perNodeMaskSize: 24
ipv6:
cidr: "2222:2::/120"
perNodeMaskSize: 120
nodeSelector:
matchLabels:
kubernetes.io/hostname: node-2
—
apiVersion: baremetal.cluster.gke.io/v1alpha1
kind: ClusterCIDRConfig
metadata:
name: range-node3
namespace: cluster-default
spec:
ipv4:
cidr: "192.168.0.0/16"
perNodeMaskSize: 24
ipv6:
cidr: "2222:3::/120"
perNodeMaskSize: 120
nodeSelector:
matchLabels:
kubernetes.io/hostname: node-3
範例 2:指定 NodePool 範圍 PodCIDR 的範例
注意: 這兩種扁平 IP 模式的限制不同:
靜態固定 IP (不含 BGP):只有在所有節點都位於同一第 2 層網域時,才能使用。
動態固定 IP (搭配 BGP):即使節點跨越多個子網域,也能使用這項功能。
apiVersion: baremetal.cluster.gke.io/v1alpha1
kind: ClusterCIDRConfig
metadata:
name: nodepool-wide-1
namespace: cluster-default
spec:
ipv4:
cidr: "192.168.0.0/16"
perNodeMaskSize: 24
ipv6:
cidr: "2222:3::/112"
perNodeMaskSize: 118
nodeSelector:
matchLabels:
baremetal.cluster.gke.io/node-pool: workers
範例 3:設定叢集範圍的 PodCIDR - 未設定 nodeSelector
注意: 這兩種扁平 IP 模式的限制不同:
靜態固定 IP (不含 BGP):只有在所有節點都位於同一第 2 層網域時,才能使用。
動態固定 IP (搭配 BGP):即使節點跨越多個子網域,也能使用。
apiVersion: baremetal.cluster.gke.io/v1alpha1
kind: ClusterCIDRConfig
metadata:
name: cluster-wide-1
namespace: cluster-default
spec:
ipv4:
cidr: "192.168.0.0/16"
perNodeMaskSize: 24
ipv6:
cidr: "2222:3::/112"
perNodeMaskSize: 120
例如:雙重堆疊 (IPv4 平面、IPv6 平面)
叢集設定
apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
metadata:
name: bm-cluster
namespace: cluster-default
spec:
...
clusterNetwork:
flatIPv4: true
services:
cidrBlocks:
- 10.96.0.0/12
# Additional IPv6 cidrBlock, determines if the cluster is DualStack
- 2620:0:1000:2630:5:2::/112
... (other cluster config omitted)
ClusterCIDRConfig
範例 1:設定每個節點的 ClusterCIDRConfig
注意: 這兩種扁平 IP 模式的限制不同:
靜態固定 IP (不含 BGP):只有在所有節點都位於同一第 2 層網域時,才能使用。
動態固定 IP (搭配 BGP):即使節點跨越多個子網域,也能使用這項功能。
---
apiVersion: baremetal.cluster.gke.io/v1alpha1
kind: ClusterCIDRConfig
metadata:
name: range-node1
namespace: cluster-default # Cluster namespace
spec:
ipv4:
cidr: "222.1.0.0/24"
perNodeMaskSize: 24
ipv6:
cidr: "2222:1::/120"
perNodeMaskSize: 120
nodeSelector:
matchLabels:
kubernetes.io/hostname: node-1
—
apiVersion: baremetal.cluster.gke.io/v1alpha1
kind: ClusterCIDRConfig
metadata:
name: range-node2
namespace: cluster-default
spec:
ipv4:
cidr: "222.1.1.0/24"
perNodeMaskSize: 24
ipv6:
cidr: "2222:2::/120"
perNodeMaskSize: 120
nodeSelector:
matchLabels:
kubernetes.io/hostname: node-2
—
apiVersion: baremetal.cluster.gke.io/v1alpha1
kind: ClusterCIDRConfig
metadata:
name: range-node3
namespace: cluster-default
spec:
ipv4:
cidr: "222.1.2.0/24"
perNodeMaskSize: 24
ipv6:
cidr: "2222:3::/120"
perNodeMaskSize: 120
nodeSelector:
matchLabels:
kubernetes.io/hostname: node-3
範例 2:指定 NodePool 範圍 PodCIDR 的範例
注意: 這兩種扁平 IP 模式的限制不同:
靜態固定 IP (不含 BGP):只有在所有節點都位於同一第 2 層網域時,才能使用。
動態固定 IP (搭配 BGP):即使節點跨越多個子網域,也能使用這項功能。
apiVersion: baremetal.cluster.gke.io/v1alpha1
kind: ClusterCIDRConfig
metadata:
name: nodepool-wide-1
namespace: cluster-default
spec:
ipv4:
cidr: "222.2.0.0/18"
perNodeMaskSize: 24
ipv6:
cidr: "2222:3::/112"
perNodeMaskSize: 118
nodeSelector:
matchLabels:
baremetal.cluster.gke.io/node-pool: workers
範例 3:設定叢集範圍的 PodCIDR - 未設定 nodeSelector
apiVersion: baremetal.cluster.gke.io/v1alpha1
kind: ClusterCIDRConfig
metadata:
name: cluster-wide-1
namespace: cluster-default
spec:
ipv4:
cidr: "222.3.0.0/16"
perNodeMaskSize: 24
ipv6:
cidr: "2222:3::/112"
perNodeMaskSize: 120
提供意見
除非另有註明,否則本頁面中的內容是採用創用 CC 姓名標示 4.0 授權 ,程式碼範例則為阿帕契 2.0 授權 。詳情請參閱《Google Developers 網站政策 》。Java 是 Oracle 和/或其關聯企業的註冊商標。
上次更新時間:2025-07-10 (世界標準時間)。
想進一步說明嗎?
[[["容易理解","easyToUnderstand","thumb-up"],["確實解決了我的問題","solvedMyProblem","thumb-up"],["其他","otherUp","thumb-up"]],[["難以理解","hardToUnderstand","thumb-down"],["資訊或程式碼範例有誤","incorrectInformationOrSampleCode","thumb-down"],["缺少我需要的資訊/範例","missingTheInformationSamplesINeed","thumb-down"],["翻譯問題","translationIssue","thumb-down"],["其他","otherDown","thumb-down"]],["上次更新時間:2025-07-10 (世界標準時間)。"],[],[]]