為工作負載佈建 IP 位址

在貴組織的內部虛擬私有雲 (VPC) 或預設 VPC 中建立其他子網路,以支援內部網路需求。例如,新增虛擬私有雲子網路,確保虛擬機器 (VM) 和容器等內部工作負載有足夠的 IP 位址。

本頁列出多項工作,不一定要按照順序完成:

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

本文適用於負責管理組織網路流量的平台管理員和應用程式操作員。詳情請參閱「GDC 實體隔離方案說明文件的目標對象」。

事前準備

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

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

如要進一步細分可用區預設虛擬私有雲中的 IP 位址,您可以從可用區現有的可用區根子網路,建立可用區內部子網路。您必須在 platform 命名空間中建立這個子網路類型。

如果上層可用區根子網路沒有足夠的可用 IP 位址,請先從全域 IP 位址範圍分配另一個可用區子網路,再繼續操作。

  • 在終端機視窗中,於 Management 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。上層子網路通常是預設虛擬私有雲中的可用區根子網路。

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

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

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

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

葉子子網路必須設定 32 的 prefixLength 值,因為其用途是分配單一 IP 位址。parentReference 值會參照先前分配的子網路,例如您在「為工作負載建立可用區分支子網路」中建立的父項可用區子網路。

  • 在終端機視窗中,於 Management 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 或 platform 命名空間。

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

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

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

如要從全域 IP 位址範圍分配可用區子網路,請在 platform 命名空間中,對預設虛擬私有雲網路完成下列步驟:

  1. 在終端機視窗中,描述預設虛擬私有雲的所有根子網路,並查看可用的 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/15 和 10.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. 確認子網路已就緒,且可在全域 API 伺服器中使用,方法是檢查其狀態 Ready 類型是否為 true:

    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. 確認可用區子網路是在可用區 Management 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. 在終端機視窗中,描述所有預設虛擬私有雲的根子網路,並檢查可用的 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/15 和 10.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. 確認子網路已就緒,且可在全域 API 伺服器中使用,方法是檢查其狀態 Ready 類型是否為 true:

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

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

後續步驟