使用外部子網路自備 IP 位址

本頁說明如何在機構的資料網路區隔中建立額外的子網路,以支援外部網路需求。您必須新增子網路,確保外部服務 (例如輸出網路位址轉譯 (NAT) 和外部負載平衡器) 有足夠的 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 中,完成資料網路區隔的下列步驟:

  1. 在終端機視窗中,描述所有資料網路區隔的根子網路,並檢查其可用的 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/1510.253.0.0/16。視根子網路的數量而定,輸出內容中可能有多個子網路,因此請記下所有可用的 CIDR,並記下可用 CIDR 來自哪個子網路。

  2. 比較您在上一個步驟中記下的最大可用 CIDR 與您需要分配給區域的 CIDR 大小。如果最大的可用 CIDR 不足以分配新的子網路,請先新增網路根範圍全域子網路,再繼續操作。請記下您決定要從哪個父項子網路取得新子網路的 CIDR。

    舉例來說,如果您需要 /13 CIDR,但可用的 CIDR 只包含 /15/16,就必須建立新的網路根範圍全域子網路。如需 /15 子網路,您可以從現有的 /15 CIDR 分配新的區域子網路。

  3. 在全域 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 資源。

  4. 檢查子網路的狀態 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
    
  5. 確認區域子網路是在區域管理 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 命名空間中完成下列步驟,即可僅在全域範圍內分割全域根子網路:

  1. 在終端機視窗中,描述所有資料網路區隔的根子網路,並檢查其可用的 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/1510.253.0.0/16。視根子網路的數量而定,輸出內容中可能有多個子網路,因此請記下所有可用的 CIDR,並記下可用 CIDR 來自哪個子網路。

  2. 比較您在上一個步驟中記下的最大可用 CIDR,以及需要分配給新全域子網路的 CIDR 大小。如果最大的可用 CIDR 不夠大,無法分配新的子網路,請先新增網路根範圍全域子網路,再繼續操作。請記下您決定要從哪個父項子網路取得新子網路的 CIDR。

    舉例來說,如果您需要 /13 CIDR,但可用的 CIDR 只包含 /15/16,就必須建立新的網路根範圍全域子網路。如需 /15 子網路,可以從現有的 /15 CIDR 分配新的全域子網路。

  3. 在全域 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 資源。

  4. 檢查子網路的狀態 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 伺服器中細分,也可以分配給特定區域

後續步驟