使用外部子網路自備 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 命名空間中,完成下列資料網路區隔的步驟:

  1. 在終端機視窗中,說明所有資料網路區隔的根子網路,並檢查可用的 CIDR:

    kubectl --kubeconfig GLOBAL_API_SERVER_KUBECONFIG describe subnets --namespace platform \
        -l 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 不足以分配新的子網路,請先新增網路根範圍全域子網路,再繼續操作。請記下新子網路的父項子網路名稱,以供參考。

    舉例來說,如果您需要 /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:機構名稱。

    詳情請參閱全域Subnet資源的 API 參考說明文件。

  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 \
        -l 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:機構名稱。

    詳情請參閱全域 Subnet 資源的 API 參考說明文件。

  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 不得與所有現有子網路中的任何 CIDR 重疊,且這些子網路在同一個全域 API 伺服器中具有 ipam.gdc.goog/usage: network-root-range 標籤。

這個新的全域根範圍子網路可以在全域 API 伺服器中細分,或分配給特定區域

後續步驟