本頁說明如何在機構的資料網路區隔中建立額外的子網路,以支援外部網路需求。您必須新增子網路,確保外部服務 (例如輸出網路位址轉譯 (NAT) 和外部負載平衡器) 有足夠的 IP 位址,可支援連線至貴機構外部網路的網路需求。
本頁列出多項工作,但這些工作並非依序完成:
- 為外部服務建立區域分支子網路: 這項工作有助於進一步整理或將區域現有的外部 IP 位址分配給服務。
- 為個別服務建立葉子子網路:如果您有尚未使用 IP 位址的新服務,這項工作就非常實用。
- 從全域 IP 位址範圍分配區域子網路:如果區域的外部 IP 位址空間不足,這項工作就很有用。
- 分割根全域子網路,但不分配區域:這項工作有助於進一步整理全域 API 伺服器中的外部 IP 位址,再將這些位址分配給區域。
- 新增網路根範圍全域子網路:如果資料網路區隔沒有足夠的全域外部 IP 位址空間可分配給區域,這項工作就很有用。
如要先瞭解子網路及其概念,再完成本頁面的工作,請參閱「子網路和 IP 位址」。
本頁內容適用於平台管理員群組中的網路管理員,以及應用程式運算子群組中的應用程式開發人員,他們負責管理所屬機構的網路流量。詳情請參閱 GDC air-gapped 說明文件適用對象。
事前準備
如要取得建立子網路所需的權限,請要求機構 IAM 管理員授予子網路機構管理員 (subnet-org-admin
) IAM 角色。這個角色不會繫結至命名空間。
為外部服務建立可用區分支子網路
您可以從區域的現有區域根子網路建立區域外部子網路,進一步細分區域資料網路區隔中的 IP 位址。您必須在 platform
命名空間中建立這類子網路。如果父項區域根子網路沒有足夠的可用 IP 位址,請先從全域 IP 位址範圍分配另一個區域子網路,然後返回這個程序。
在終端機視窗中,於區域管理 API 伺服器中建立新的外部子網路:
kubectl -kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG apply -f - <<EOF apiVersion: ipam.gdc.goog/v1 kind: Subnet metadata: labels: ipam.gdc.goog/network-segment: data name: SUBNET_NAME namespace: platform spec: ipv4Request: prefixLength: CIDR_PREFIX_LENGTH networkSpec: enableGateway: true enableVLANID: false parentReference: name: PARENT_SUBNET_NAME namespace: platform type: Branch EOF
更改下列內容:
MANAGEMENT_API_SERVER_KUBECONFIG
:管理 API 伺服器的 kubeconfig 檔案路徑。詳情請參閱區域管理 API 伺服器資源。SUBNET_NAME
:新網路子網路的名稱。CIDR_PREFIX_LENGTH
:動態分配的新子網路 CIDR 前置字串長度,例如20
。如要靜態設定 CIDR,請將prefixLength
欄位替換為cidr
欄位,然後設定 CIDR 區塊,例如10.0.10.0/27
。PARENT_SUBNET_NAME
:父項子網路的名稱,例如data-external-zone0-cidr
。父項子網路通常是資料網路區隔中的區域根子網路。
詳情請參閱
Subnet
資源的 API 參考說明文件。您可以繼續細分區域子網路,或建立葉子子網路,直接將個別 IP 位址分配給外部服務。
為個別服務建立葉子子網路
您必須建立葉子子網路,為服務分配單一 IP 位址。這個葉子子網路必須有 type: Leaf
欄位值,且必須與外部服務 (例如外部負載平衡器或輸出 NAT) 位於相同的專案命名空間。
葉子子網路必須設定 prefixLength
值為 32
,因為這是為了分配單一 IP 位址。parentReference
值會參照先前分配的子網路,例如您在「為工作負載建立區域分支子網路」中建立的父項區域子網路。
在終端機視窗中,於管理 API 伺服器中建立葉子子網路:
kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG apply -f - <<EOF apiVersion: ipam.gdc.goog/v1 kind: Subnet metadata: labels: ipam.gdc.goog/allocation-preference: default ipam.gdc.goog/network-segment: data name: SUBNET_NAME namespace: PROJECT_NAMESPACE spec: ipv4Request: prefixLength: 32 parentReference: name: PARENT_SUBNET namespace: platform type: Leaf EOF
更改下列內容:
MANAGEMENT_API_SERVER_KUBECONFIG
:管理 API 伺服器的 kubeconfig 檔案路徑。詳情請參閱區域管理 API 伺服器資源。SUBNET_NAME
:葉子網路的名稱。PROJECT_NAMESPACE
:專案命名空間,對應於服務所在的專案。PARENT_SUBNET
:父項子網路的名稱,這個葉子子網路會從該子網路取得 IP 位址。
現在,外部服務可以使用您的個別 IP 位址。如要進一步瞭解如何設定服務的 IP 位址,請參閱對應的服務說明文件,例如「設定外部負載平衡器」。
從全域 IP 位址範圍分配區域子網路
如果現有區域根子網路 IP 位址範圍無法為外部服務提供足夠的 IP 位址,您可以從全域 IP 位址根範圍分配額外的 IP 位址。
請在 platform
namespace 中,完成資料網路區隔的下列步驟:
在終端機視窗中,描述所有資料網路區隔的根子網路,並檢查其可用的 CIDR:
kubectl --kubeconfig GLOBAL_API_SERVER_KUBECONFIG describe subnets --namespace platform \ --label ipam.gdc.goog/network-segment=data,ipam.gdc.goog/usage=network-root-range
將
GLOBAL_API_SERVER_KUBECONFIG
替換為全域 API 伺服器的 kubeconfig 檔案路徑。詳情請參閱全球 API 伺服器資源。標籤是常數,且必須保持不變。輸出結果會與下列內容相似:
Name: data-external-root-cidr Namespace: platform Labels: ipam.gdc.goog/allocation-preference=default ipam.gdc.goog/subnet-group=data-external-root-group ipam.gdc.goog/usage=network-root-range ipam.gdc.goog/network-segment=data Annotations: <none> API Version: ipam.global.gdc.goog/v1 Kind: Subnet Metadata: Creation Timestamp: 2025-06-18T23:05:38Z Finalizers: global-subnet-finalizer Generation: 1 Resource Version: 439434 UID: 5ed1c51a-b5ee-473e-a185-8e065a87ae8f Spec: ipv4Request: Cidr: 10.252.0.0/14 Propagation Strategy: None Type: Root Status: Children Refs: Name: data-external-zone1-root-cidr Namespace: platform Type: SingleSubnet Conditions: Last Transition Time: 2025-06-18T23:05:38Z Message: IP allocation finished successfully Observed Generation: 1 Reason: AllocationSucceeded Status: True Type: Ready ipv4Allocation: Available CIDRs: 10.254.0.0/15 10.253.0.0/16 Cidr: 10.252.0.0/14 Events: <none>
請記下
Status.ipv4Allocation.Available CIDRs
值,做為可用的 CIDR,下一個步驟會參考這些值。在上述輸出內容中,您會看到 CIDR 範圍10.254.0.0/15
和10.253.0.0/16
。視根子網路的數量而定,輸出內容中可能有多個子網路,因此請記下所有可用的 CIDR,並記下可用 CIDR 來自哪個子網路。比較您在上一個步驟中記下的最大可用 CIDR 與您需要分配給區域的 CIDR 大小。如果最大的可用 CIDR 不足以分配新的子網路,請先新增網路根範圍全域子網路,再繼續操作。請記下您決定要從哪個父項子網路取得新子網路的 CIDR。
舉例來說,如果您需要
/13
CIDR,但可用的 CIDR 只包含/15
和/16
,就必須建立新的網路根範圍全域子網路。如需/15
子網路,您可以從現有的/15
CIDR 分配新的區域子網路。在全域 API 伺服器中建立新的子網路:
kubectl --kubeconfig GLOBAL_API_SERVER_KUBECONFIG apply -f - <<EOF apiVersion: ipam.global.gdc.goog/v1 kind: Subnet metadata: labels: ipam.gdc.goog/network-segment: data ipam.gdc.goog/usage: zone-network-root-range name: SUBNET_NAME namespace: platform spec: ipv4Request: prefixLength: CIDR_PREFIX_LENGTH zone: ZONE_NAME propagationStrategy: SingleZone type: Branch parentReference: name: PARENT_SUBNET_NAME namespace: ORG_NAME EOF
更改下列內容:
GLOBAL_API_SERVER_KUBECONFIG
:全域 API 伺服器的 kubeconfig 檔案路徑。詳情請參閱全球 API 伺服器資源。SUBNET_NAME
:新子網路的名稱。CIDR_PREFIX_LENGTH
:動態分配的新子網路 CIDR 前置字串長度,例如20
。如要靜態設定 CIDR,請將prefixLength
欄位替換為cidr
欄位,然後設定 CIDR 區塊,例如10.0.10.0/27
。ZONE_NAME
:要分配子網路的可用區,例如zone1
。PARENT_SUBNET_NAME
:父項子網路的名稱,例如data-external-root-cidr
,或是您建立的新網路根範圍全域子網路。ORG_NAME
:機構名稱。
詳情請參閱 API 參考說明文件中的全域
Subnet
資源。檢查子網路的狀態
Ready
類型是否為true
,確認子網路已準備就緒,且可在全域 API 伺服器中使用:kubectl --kubeconfig GLOBAL_API_SERVER_KUBECONFIG get subnet --namespace platform \ SUBNET_NAME --output jsonpath='{.status.conditions[?(@.type=="Ready")].status}'
輸出結果會與下列內容相似:
status: conditions: - lastTransitionTime: "2025-06-06T07:28:48Z" message: IP allocation finished successfully observedGeneration: 1 reason: AllocationSucceeded status: "True" type: Ready
確認區域子網路是在區域管理 API 伺服器中建立,且狀態
Ready
類型為true
:kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG get subnet --namespace platform \ SUBNET_NAME --output jsonpath='{.status.conditions[?(@.type=="Ready")].status}'
將
MANAGEMENT_API_SERVER_KUBECONFIG
替換為管理 API 伺服器的 kubeconfig 檔案路徑。詳情請參閱區域管理 API 伺服器資源。輸出結果會與下列內容相似:
status: conditions: - lastTransitionTime: "2025-06-06T07:29:34Z" message: IP allocation finished successfully observedGeneration: 1 reason: AllocationSucceeded status: "True" type: Ready
您可以從這個新的區域子網路建立更多區域子網路,或直接將個別 IP 位址分配給外部服務。
分割根全球子網路,但不分配可用區
如要繼續從全域根子網路整理可從全球存取的 IP 位址範圍,但不要將 IP 位址分配給區域外部服務,請建立全域子網路,且不要在 Subnet
自訂資源中定義傳播策略。
在 platform
命名空間中完成下列步驟,即可僅在全域範圍內分割全域根子網路:
在終端機視窗中,描述所有資料網路區隔的根子網路,並檢查其可用的 CIDR:
kubectl --kubeconfig GLOBAL_API_SERVER_KUBECONFIG describe subnets --namespace platform \ --label ipam.gdc.goog/network-segment=data,ipam.gdc.goog/usage=network-root-range
將
GLOBAL_API_SERVER_KUBECONFIG
替換為全域 API 伺服器的 kubeconfig 檔案路徑。詳情請參閱全球 API 伺服器資源。標籤是常數,且必須保持不變。輸出結果會與下列內容相似:
Name: data-external-root-cidr Namespace: platform Labels: ipam.gdc.goog/allocation-preference=default ipam.gdc.goog/subnet-group=data-external-root-group ipam.gdc.goog/usage=network-root-range ipam.gdc.goog/network-segment=data Annotations: <none> API Version: ipam.global.gdc.goog/v1 Kind: Subnet Metadata: Creation Timestamp: 2025-06-18T23:05:38Z Finalizers: global-subnet-finalizer Generation: 1 Resource Version: 439434 UID: 5ed1c51a-b5ee-473e-a185-8e065a87ae8f Spec: ipv4Request: Cidr: 10.252.0.0/14 Propagation Strategy: None Type: Root Status: Children Refs: Name: data-external-zone1-root-cidr Namespace: platform Type: SingleSubnet Conditions: Last Transition Time: 2025-06-18T23:05:38Z Message: IP allocation finished successfully Observed Generation: 1 Reason: AllocationSucceeded Status: True Type: Ready ipv4Allocation: Available CIDRs: 10.254.0.0/15 10.253.0.0/16 Cidr: 10.252.0.0/14 Events: <none>
請記下
Status.ipv4Allocation.Available CIDRs
值,做為可用的 CIDR,下一個步驟會參考這些值。在上述輸出內容中,您會看到 CIDR 範圍10.254.0.0/15
和10.253.0.0/16
。視根子網路的數量而定,輸出內容中可能有多個子網路,因此請記下所有可用的 CIDR,並記下可用 CIDR 來自哪個子網路。比較您在上一個步驟中記下的最大可用 CIDR,以及需要分配給新全域子網路的 CIDR 大小。如果最大的可用 CIDR 不夠大,無法分配新的子網路,請先新增網路根範圍全域子網路,再繼續操作。請記下您決定要從哪個父項子網路取得新子網路的 CIDR。
舉例來說,如果您需要
/13
CIDR,但可用的 CIDR 只包含/15
和/16
,就必須建立新的網路根範圍全域子網路。如需/15
子網路,可以從現有的/15
CIDR 分配新的全域子網路。在全域 API 伺服器中建立新的子網路:
kubectl --kubeconfig GLOBAL_API_SERVER_KUBECONFIG apply -f - <<EOF apiVersion: ipam.global.gdc.goog/v1 kind: Subnet metadata: labels: ipam.gdc.goog/network-segment: data ipam.gdc.goog/usage: zone-network-root-range name: SUBNET_NAME namespace: platform spec: ipv4Request: prefixLength: CIDR_PREFIX_LENGTH propagationStrategy: None type: Branch parentReference: name: PARENT_SUBNET_NAME namespace: ORG_NAME EOF
更改下列內容:
GLOBAL_API_SERVER_KUBECONFIG
:全域 API 伺服器的 kubeconfig 檔案路徑。詳情請參閱全球 API 伺服器資源。SUBNET_NAME
:新子網路的名稱。CIDR_PREFIX_LENGTH
:動態分配的新子網路 CIDR 前置字串長度,例如20
。如要靜態設定 CIDR,請將prefixLength
欄位替換為cidr
欄位,然後設定 CIDR 區塊,例如10.0.10.0/27
。PARENT_SUBNET_NAME
:父項子網路的名稱,例如data-external-root-cidr
,或是您建立的新網路根範圍全域子網路。ORG_NAME
:機構名稱。
詳情請參閱 API 參考說明文件中的全域
Subnet
資源。檢查子網路的狀態
Ready
類型是否為true
,確認子網路已準備就緒,且可在全域 API 伺服器中使用:kubectl --kubeconfig GLOBAL_API_SERVER_KUBECONFIG get subnet --namespace platform \ SUBNET_NAME --output jsonpath='{.status.conditions[?(@.type=="Ready")].status}'
輸出結果會與下列內容相似:
status: conditions: - lastTransitionTime: "2025-06-06T07:28:48Z" message: IP allocation finished successfully observedGeneration: 1 reason: AllocationSucceeded status: "True" type: Ready
貴機構在資料網路區隔中的新全域子網路已可使用。您可以從這個新的全域父項子網路為特定區域建立子網路。
新增網路根範圍全域子網路
標有 ipam.gdc.goog/usage: network-root-range
標籤的全域子網路會代管網路中所有區域的 CIDR。如果 CIDR 用盡,您必須在全域 API 伺服器中建立新的網路根範圍子網路。如有需要,您可以建立多個根層級的全球子網路。
如要建立新的網路根範圍子網路,請完成下列步驟:
在終端機視窗中,為
platform
命名空間中的資料網路區隔建立新的網路根範圍全域子網路:kubectl --kubeconfig GLOBAL_API_SERVER_KUBECONFIG apply -f - <<EOF apiVersion: ipam.global.gdc.goog/v1 kind: Subnet metadata: labels: ipam.gdc.goog/network-segment: data ipam.gdc.goog/usage: network-root-range name: SUBNET_NAME namespace: platform spec: ipv4Request: cidr: NEW_CIDR type: Root EOF
更改下列內容:
GLOBAL_API_SERVER_KUBECONFIG
:全域 API 伺服器的 kubeconfig 檔案路徑。詳情請參閱全球 API 伺服器資源。SUBNET_NAME
:新子網路的名稱。NEW_CIDR
:子網路的新 CIDR。這個 CIDR 不得與相同全域 API 伺服器中,所有現有子網路的ipam.gdc.goog/usage: network-root-range
標籤 CIDR 重疊。
這個新的全域根範圍子網路可以在全域 API 伺服器中細分,也可以分配給特定區域。