為工作負載佈建 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:動態分配的新子網路 CIDR 前置字串長度,例如 20。如要靜態設定 CIDR,請將 prefixLength 欄位替換為 cidr 欄位,然後設定 CIDR 區塊,例如 10.0.10.0/27

    • 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/allocation-preference: default
        ipam.gdc.goog/vpc: default-vpc
      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 位址可供內部工作負載 (例如 VM 和容器) 使用。如要進一步瞭解如何設定工作負載的 IP 位址,請參閱「部署虛擬機器工作負載」或「部署容器工作負載」。

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

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

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

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

    kubectl --kubeconfig GLOBAL_API_SERVER_KUBECONFIG describe subnets --namespace platform \
        --label 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
      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:機構名稱。

    詳情請參閱 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 位址分配給內部工作負載。

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

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

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

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

    kubectl --kubeconfig GLOBAL_API_SERVER_KUBECONFIG describe subnets --namespace platform \
        --label 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:機構名稱。

    詳情請參閱 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/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 伺服器中細分,也可以分配給特定區域

後續步驟