為工作負載佈建 IP 位址

本頁說明如何在貴機構的內部虛擬私有雲 (VPC) 或預設 VPC 中建立額外的子網路,以支援內部網路需求。您必須建立虛擬私有雲子網路,確保虛擬機器 (VM) 和容器等內部工作負載有足夠的 IP 位址,可支援貴機構的內部網路需求。

本頁列出多項工作,但無須依序完成:

如要先瞭解子網路和相關概念,再完成本頁面的工作,請參閱「子網路和 IP 位址」。

本頁面適用於平台管理員群組中的網路管理員,以及應用程式運算子群組中的應用程式開發人員,他們負責管理所屬機構的網路流量。詳情請參閱 GDC air-gapped 說明文件適用對象

事前準備

如要取得建立子網路所需的權限,請要求機構 IAM 管理員授予您子網路機構管理員 (subnet-org-admin) IAM 角色。這個角色不會繫結至命名空間。

為工作負載建立可用區分支子網路

您可以從區域的現有區域根子網路建立區域內部子網路,進一步細分區域預設 VPC 中的 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/vpc: default-vpc
      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:新子網路的前置字串長度,例如 27。這個欄位會從父項子網路動態分配下一個可用 IP 位址範圍,大小與您輸入的相同。如果您只關心子網路的大小,而非特定 IP 位址範圍,請使用 prefixLength 欄位。

      如要改為指派特定 IP 範圍,請按照下列步驟操作:

      1. 移除 prefixLength: CIDR_PREFIX_LENGTH 行。
      2. 在該位置新增 cidr: "YOUR_CIDR_BLOCK" 符號,例如 cidr: "10.0.10.0/27"

      如果您遵循嚴格的 IP 計畫,且需要指派精確、可預測的 IP 位址範圍,請使用 cidr 欄位。這個範圍必須是父項子網路內有效且可用的子網路。

    • PARENT_SUBNET_NAME:父項子網路的名稱,例如 default-vpc-zone0-cidr。父項子網路通常是 Default VPC 中的區域根子網路。

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

    您可以繼續細分區域子網路,或建立葉子子網路,直接將個別 IP 位址分配給內部工作負載。

為個別工作負載建立葉子子網路

您必須建立葉子子網路,才能為工作負載分配單一 IP 位址。這個葉子子網路必須具有 type: Leaf 欄位值,且必須與工作負載資源 (例如 VM 或容器) 位於相同的專案命名空間。

葉子子網路必須設定 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/vpc: default-vpc
      name: SUBNET_NAME
      namespace: PROJECT_NAMESPACE
    spec:
      ipv4Request:
        prefixLength: 32
      parentReference:
        name: PARENT_SUBNET
        namespace: PARENT_NAMESPACE
      type: Leaf
    EOF
    

    更改下列內容:

    • MANAGEMENT_API_SERVER_KUBECONFIG:管理 API 伺服器的 kubeconfig 檔案路徑。詳情請參閱「區域管理 API 伺服器資源」。
    • SUBNET_NAME:葉子子網路的名稱。
    • PROJECT_NAMESPACE:與工作負載所在專案對應的專案命名空間。
    • PARENT_SUBNET:父項子網路的名稱,這個葉子子網路會從該子網路取得 IP 位址。
    • PARENT_NAMESPACE:可以是 PROJECT_NAMESPACE 或平台命名空間。

現在,您的個別 IP 位址可供內部工作負載 (例如 VM 和容器) 使用。如要進一步瞭解如何為工作負載設定 IP 位址,請參閱「建立具有靜態或動態 IP 位址的 VM」或「為容器工作負載設定內部負載平衡器」。

從全域 IP 位址範圍分配區域子網路

如果現有區域根子網路 IP 位址範圍無法為工作負載提供足夠的 IP 位址,您可以從全域 IP 位址根範圍分配額外的 IP 位址。

platform 命名空間中,完成下列 Default VPC 網路的步驟:

  1. 在終端機視窗中,說明所有預設 VPC 的根子網路,並檢查可用的 CIDR:

    kubectl --kubeconfig GLOBAL_API_SERVER_KUBECONFIG describe subnets --namespace platform \
        -l ipam.gdc.goog/vpc=default-vpc,ipam.gdc.goog/usage=network-root-range
    

    GLOBAL_API_SERVER_KUBECONFIG 替換為全域 API 伺服器的 kubeconfig 檔案路徑。詳情請參閱「全球 API 伺服器資源」。標籤是常數,且必須保持不變。

    輸出結果會與下列內容相似:

    Name:         default-vpc-root-cidr
    Namespace:    platform
    Labels:       ipam.gdc.goog/allocation-preference=default
                  ipam.gdc.goog/subnet-group=default-vpc-root-group
                  ipam.gdc.goog/usage=network-root-range
                  ipam.gdc.goog/vpc=default-vpc
    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:       default-vpc-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 和來源子網路。

  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/vpc: default-vpc
        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:父項子網路的名稱,例如 default-vpc-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 位址分配給內部工作負載。

分割根全球子網路,但不分配可用區

如要進一步劃分全域子網路,但不要將其分配給可用區,請建立全域子網路,並在 Subnet 自訂資源中省略傳播策略。如果您想繼續從全域根子網路整理可從全球存取的 IP 位址範圍,但不想將 IP 位址分配給區域,這種做法就很有用。

platform 命名空間中完成下列步驟,即可在全域範圍內分割全域根子網路:

  1. 在終端機視窗中,說明所有預設 VPC 的根子網路,並檢查可用的 CIDR:

    kubectl --kubeconfig GLOBAL_API_SERVER_KUBECONFIG describe subnets --namespace platform \
        -l ipam.gdc.goog/vpc=default-vpc,ipam.gdc.goog/usage=network-root-range
    

    GLOBAL_API_SERVER_KUBECONFIG 替換為全域 API 伺服器的 kubeconfig 檔案路徑。詳情請參閱「全球 API 伺服器資源」。標籤是常數,且必須保持不變。

    輸出結果會與下列內容相似:

    Name:         default-vpc-root-cidr
    Namespace:    platform
    Labels:       ipam.gdc.goog/allocation-preference=default
                  ipam.gdc.goog/subnet-group=default-vpc-root-group
                  ipam.gdc.goog/usage=network-root-range
                  ipam.gdc.goog/vpc=default-vpc
    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:       default-vpc-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/vpc: default-vpc
        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:父項子網路的名稱,例如 default-vpc-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/vpc: default-vpc
        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 伺服器中細分,或分配給特定區域

後續步驟