設定工作負載網路的子網路

每個 Google Distributed Cloud (GDC) 氣隙區域都會指派全域根子網路,並搭配 IP 位址管理 (IPAM) 公開 API 子網路。全域根子網路會代管根 IP 位址範圍 (CIDR) 集區,並分割至各個區域,以啟動租戶機構中的所有叢集,包括機構基礎架構叢集和工作負載 VM。IP 位址範圍的一小部分也會提供給根子網路,做為任播 IP 位址集區。

建立機構後,您就可以為 GDC 宇宙中的子網路完成下列作業:

為新區域建立根範圍全域子網路

每個區域都必須有根範圍的全域子網路。在 GDC 宇宙的初始機構組織啟動階段,每個區域都會自動產生全域子網路。不過,如果在初始安裝後新增區域,您必須手動為新區域建立根範圍全域子網路。

為新區域的網路根範圍子網路定義 CIDR 範圍

定義 CIDR 範圍的機構安裝指南類似,CIDR 範圍不得重疊,也不得與 zone-infra-cidr 和現有的根層級全域子網路重疊。這些子網路在自訂資源規格中帶有 ipam.gdc.goog/usage: network-root-range 標籤。

zone-infra-cidr 存在於每個區域,如果客戶已定義,則可從客戶資訊問卷 (CIQ) 中擷取。

  1. 如要擷取 zone-infra-cidr,請執行:

    kubectl --kubeconfig ROOT_ADMIN_KUBECONFIG get cidrclaim -n gpc-system zone-infra-cidr
    

    請記下 CIDR 範圍。

  2. 您必須擁有與機構名稱相符的命名空間。確認這個命名空間是否存在:

    kubectl --kubeconfig GLOBAL_ROOT_ADMIN_KUBECONFIG get namespace ORG_NAME
    
  3. 擷取現有的根層級全域子網路:

    • 如果是全域根管理員叢集,請執行:

      kubectl –kubeconfig GLOBAL_ROOT_ADMIN_KUBECONFIG get subnet \
          -n ORG_NAME  -l ipam.gdc.goog/usage=network-root-range
      
    • 如要使用全域機構管理員 API 伺服器,請執行下列指令:

      kubectl –kubeconfig GLOBAL_ORG_API_SERVER_KUBECONFIG get subnet \
          -n platform -l ipam.gdc.goog/usage=network-root-range
      

      請記下輸出內容中的所有 CIDR 範圍。

  4. 確認新的 CIDR 範圍不會與任何先前的 CIDR 範圍重疊。

確認新的 CIDR 範圍適用於新區域後,請確認 CIDR 範圍符合下列規則:

CIDR 範圍欄位。 大小下限 VPC/VRF 全球 API 伺服器
zoneInfraVPCCIDR 17 基礎架構虛擬私有雲 全域根目錄
zoneDefaultVPCCIDR 18 預設虛擬私有雲 全球機構
zoneOrgAdminExternalCIDR 23 管理網路區隔 全域根目錄
zoneOrgDataExternalCIDR 23 資料網路區隔 全域根目錄

在全域根管理 API 伺服器中建立子網路

如要在全域根管理 API 伺服器中建立子網路,請完成下列步驟:

  1. 列出宇宙中的可用區,並找出新的可用區名稱:

    kubectl --kubeconfig GLOBAL_ROOT_ADMIN_KUBECONFIG get zone -A
    
  2. 為機構的新區域建立區域網路根範圍 infra-vpc 子網路:

    kubectl apply -f --kubeconfig GLOBAL_ROOT_ADMIN_KUBECONFIG - <<EOF
    apiVersion: ipam.global.gdc.goog/v1
    kind: Subnet
    metadata:
      labels:
        ipam.gdc.goog/vpc: infra-vpc
        ipam.gdc.goog/usage: zone-network-root-range
      annotations:
        ipam.gdc.goog/pivot-destination: global-org
      name: infra-vpc-NEW_ZONE_NAME-root-cidr
      namespace: ORG_NAME
    spec:
      ipv4Request:
        cidr: zoneInfraVPCCIDR
      zone: NEW_ZONE_NAME
      propagationStrategy: SingleZone
      type: Root
    EOF
    
  3. 為機構的新區域建立區域網路根範圍資料網路區隔子網路:

    kubectl apply -f --kubeconfig GLOBAL_ROOT_ADMIN_KUBECONFIG - <<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
      annotations:
        ipam.gdc.goog/pivot-destination: global-org
      name: data-external-NEW_ZONE_NAME-root-cidr
      namespace: ORG_NAME
    spec:
      ipv4Request:
        cidr: zoneOrgDataExternalCIDR
      zone: NEW_ZONE_NAME
      propagationStrategy: SingleZone
      type: Root
    EOF
    
  4. 為機構的新區域建立區域網路根範圍管理網路區隔子網路:

    kubectl apply -f --kubeconfig GLOBAL_ROOT_ADMIN_KUBECONFIG - <<EOF
    apiVersion: ipam.global.gdc.goog/v1
    kind: Subnet
    metadata:
      labels:
        ipam.gdc.goog/network-segment: admin
        ipam.gdc.goog/usage: zone-network-root-range
      annotations:
        ipam.gdc.goog/pivot-destination: global-org
      name: admin-external-NEW_ZONE_NAME-root-cidr
      namespace: ORG_NAME
    spec:
      ipv4Request:
        cidr: zoneOrgAdminExternalCIDR
      zone: NEW_ZONE_NAME
      propagationStrategy: SingleZone
      type: Root
    EOF
    

在全域機構管理 API 伺服器中建立子網路

API 伺服器執行後,您必須在機構的全球機構管理 API 伺服器中,於 platform 命名空間內建立預設 VPC 子網路。

建立及套用下列 Subnet 自訂資源:

kubectl apply -f --kubeconfig=GLOBAL_ORG_API_SERVER_KUBECONFIG - <<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: default-vpc-NEW_ZONE_NAME-root-cidr
  namespace: platform
spec:
  type: Root
  ipv4Request:
    cidr: zoneDefaultVPCCIDR
  zone: NEW_ZONE_NAME
  propagationStrategy: SingleZone
EOF

升級子網路

公開 Subnet 資源不支援自動升級。如要將更多 CIDR 範圍新增至客戶管理的虛擬私有雲或網路區隔,您必須建立新的子網路,並將這些子網路與特定標籤分組。由於需要存取根管理員叢集,客戶無法自行擴充子網路。

子網路分組規則

子網路會依標籤分組為不同類別:

類別 標籤
預設虛擬私有雲 ipam.gdc.goog/vpc: default-vpc
基礎架構虛擬私有雲 ipam.gdc.goog/vpc: infra-vpc
管理網路區隔 ipam.gdc.goog/network-segment: admin
資料網路區隔 ipam.gdc.goog/network-segment: data

在初始啟動期間,組織攝取問卷 (OIQ) 中指定了四個 CIDR 範圍。這四個全域子網路是在建立客戶機構時,於全域 API 伺服器中建立。這些全域子網路是機構中所有可用區各類別的根層級 CIDR 範圍。所有根層級的全球子網路都有 ipam.gdc.goog/usage: network-root-range 標籤。

系統會從根層級子網路中劃出每個可用區的子網路,並在全域 API 伺服器中建立子網路。每個子項全域子網路都會代管特定區域中某個類別的 CIDR 範圍,並具有 ipam.gdc.goog/usage: zone-network-root-range 標籤。系統會自動將可用區的子項全域子網路傳播至特定可用區。

常見的升頻用途

如要為現有子網路擴充功能,以最有效率的方式分配額外子網路,請考慮各子網路類別的建議用途。開始升級程序前,請先決定要升級的類別。

預設虛擬私有雲

default-vpc 中的子網路主要用於為共用服務叢集、使用者叢集和default-vpc-default-node-subnet分配 Pod 和服務 CIDR,以及機構的叢集節點 IP 位址和工作負載 IP 位址。

無法建立使用者叢集是常見情況,這時可能需要擴充子網路。

如果找不到 Pod 或使用者叢集服務 CIDR 的父項子網路,建立使用者叢集可能會失敗。這類失敗的訊息範例如下:

could not find parent for subnet platform/user-vm-1-service-cidr

這個問題可能是由多種原因所致,直接與子網路升級需求有關。請按照下列步驟確認:

  1. 檢查 Cluster 自訂資源的 .spec.clusterNetwork 區段中的 podCIDRSizeserviceCIDRSize 欄位:

    kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG get cluster \
        -n platform USER_CLUSTER_NAME -oyaml
    

    輸出看起來類似以下內容:

    Example:
    spec:
      clusterNetwork:
        podCIDRSize: 20
        serviceCIDRSize: 20
    
  2. 找出現有子網路的父項子網路:

    kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG get subnet -n platform  -l \
        ipam.gdc.goog/vpc=default-vpc,ipam.gdc.goog/usage=zone-network-root-range
    

    輸出看起來類似以下內容:

    Example:
    NAME                     PARENT   READY   IPV4 CIDR        IPV6 CIDR
    default-vpc-zone0-cidr            True    198.51.100.0/18 
    
  3. 找出父項子網路分配的所有子網路:

    kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG get subnet -n platform  -l \
        ipam.gdc.goog/vpc=default-vpc,ipam.gdc.goog/usage!=zone-network-root-range
    

    輸出看起來類似以下內容:

    Example:
    default-vpc-default-node-subnet       {"name":"default-vpc-zone0-cidr","namespace":"platform"}   True    198.51.100.0/23
    g-org-1-shared-service-pod-cidr       {"name":"default-vpc-zone0-cidr","namespace":"platform"}   True    198.51.16.0/20
    g-org-1-shared-service-service-cidr   {"name":"default-vpc-zone0-cidr","namespace":"platform"}   True    198.51.2.0/23
    user-vm-1-pod-cidr                    {"name":"default-vpc-zone0-cidr","namespace":"platform"}   True    198.51.8.0/21
    user-vm-1-service-cidr                {"name":"default-vpc-zone0-cidr","namespace":"platform"}   True    198.51.4.0/23
    user-vm-2-pod-cidr                    {"name":"default-vpc-zone0-cidr","namespace":"platform"}   True    198.51.32.0/21
    user-vm-2-service-cidr                {"name":"default-vpc-zone0-cidr","namespace":"platform"}   True    198.51.6.0/23
    

在這個範例中,/18 父項 CIDR 分配了四個 /23 CIDR、一個 /20 CIDR 和兩個 /21 CIDR,而新使用者叢集要求 podCIDRSize 的 /20 CIDR 和 serviceCIDRSize 的 /20 CIDR,這並不夠。

在這種情況下,您必須為預設虛擬私有雲新增更多類別的子網路。

基礎架構虛擬私有雲

infra-vpc 中的子網路主要用於為機構基礎架構叢集和周邊叢集分配機構的 Pod 和服務 CIDR,以及周邊叢集的節點 IP 位址。

由於這屬於內部 GDC 基礎架構設定,且每個機構組織只有一個機構組織基礎架構叢集和一個周邊叢集,因此通常 infra-vpc 不需要升級作業。

管理網路區隔

管理網路區隔中的子網路主要用於在機構管理員虛擬轉送和轉送 (VRF) 中分配 IP 位址。在機構中建立預設節點子網路,或含有閘道資訊的子網路。這個預設子網路會為機構基礎架構叢集節點 IP 位址和周邊叢集節點 IP 位址分配 IP 位址。

由於管理員網路區隔屬於內部 GDC 基礎架構設定,且每個機構只能有一個機構基礎架構叢集和一個周邊叢集,因此通常不需要擴充這個子網路。

資料網路區隔

資料網路區隔中的子網路主要用於在機構資料 VRF 中分配 IP 位址。機構中已建立預設節點子網路,或含有閘道資訊的子網路。這個預設子網路會為機構基礎架構叢集節點 IP 位址和周邊叢集節點 IP 位址分配 IP 位址。

由於資料網路區隔屬於內部 GDC 基礎架構設定,且每個機構只能有一個機構基礎架構叢集和一個周邊叢集,因此通常不需要擴充這個子網路。

為類別新增更多子網路

您可以根據子網路類型,為類別新增更多子網路。以下類型可新增更多子網路:

  • 基礎架構虛擬私有雲
  • 管理網路區隔
  • 資料網路區隔
  • 預設虛擬私有雲

找出要新增子網路的子網路類型,然後完成該子網路類型的下列步驟:

  1. 在全域根管理 API 伺服器中,取得根子網路類型並檢查其 CIDR maskSize 欄位:subnet.status.ipv4Allocation.cidr

    kubectl --kubeconfig GLOBAL_ROOT_ADMIN_KUBECONFIG get subnet -n ORG_NAME \
        -l ipam.gdc.goog/SUBNET_TYPE,ipam.gdc.goog/usage=network-root-range
    

    更改下列內容:

    • GLOBAL_ROOT_ADMIN_KUBECONFIG:根管理員叢集的 kubeconfig 檔案路徑。
    • ORG_NAME:機構名稱。
    • SUBNET_TYPE:子網路類型,例如 vpc=infra-vpcnetwork-segment=adminnetwork-segment=datavpc=default-vpc

    請記下這個值,也就是 CIDR 總數,稍後會參照這個值。

  2. 取得根子網路的所有子項子網路,並檢查 maskSize 中的每個 CIDR subnet.status.ipv4Allocation.cidr 欄位:

    kubectl --kubeconfig GLOBAL_ROOT_ADMIN_KUBECONFIG get subnet -n ORG_NAME \
        -l ipam.gdc.goog/SUBNET_TYPE,ipam.gdc.goog/usage!=network-root-range
    

    請記下每個值做為使用的 CIDR,稍後會參考這些值。

  3. 根據總 CIDR 和已用 CIDR,計算子網路的可用 CIDR。如果可用 CIDR 不夠大,無法分配新的子網路,請新增網路根範圍全域子網路。然後繼續執行下一個步驟。

  4. 在全域根管理 API 伺服器中建立新的子網路:

    kubectl --kubeconfig GLOBAL_ROOT_ADMIN_KUBECONFIG apply -f - <<EOF
    apiVersion: ipam.global.gdc.goog/v1
    kind: Subnet
    metadata:
      labels:
        ipam.gdc.goog/SUBNET_TYPE_LABEL
        ipam.gdc.goog/usage: zone-network-root-range
      annotations:
        ipam.gdc.goog/pivot-destination: global-org
      name: SUBNET_NAME
      namespace: ORG_NAME
    spec:
      ipv4Request:
        prefixLength: CIDR_PREFIX_LENGTH
      zone: ZONE_NAME
      propagationStrategy: SingleZone
      type: Branch
      parentReference:
        name: PARENT_SUBNET_NAME
        namespace: ORG_NAME
    EOF
    

    更改下列內容:

    • GLOBAL_ROOT_ADMIN_KUBECONFIG:根管理員叢集的 kubeconfig 檔案路徑。
    • SUBNET_TYPE_LABEL:子網路類型,必須是下列其中一個值:vpc: infra-vpcnetwork-segment: adminnetwork-segment: datavpc: default-vpc
    • SUBNET_NAME:新子網路的名稱。
    • ORG_NAME:機構名稱。
    • CIDR_PREFIX_LENGTH:新子網路的前置字串長度,例如 20
    • ZONE_NAME:子網路的區域名稱,例如 zone1
    • PARENT_SUBNET_NAME:父項子網路的名稱,例如 infra-vpc-root-cidradmin-external-root-cidrdata-external-root-cidrdefault-vpc-root-cidr
  5. 確認子網路已準備就緒,方法是檢查其狀態 Ready 類型是否為 true

  6. 確認機構的全球 API 伺服器中已建立全球子網路,且該子網路已準備就緒:

    kubectl --kubeconfig GLOBAL_ORG_ADMIN_KUBECONFIG get subnet -n NAMESPACE -l \
        ipam.gdc.goog/SUBNET_TYPE,ipam.gdc.goog/usage=zone-network-root-range
    

    NAMESPACE 替換為子網路的命名空間。infra-network 用於 infra-vpc 子網路,platform 用於其他子網路類型。

  7. 確認區域子網路是在根管理員叢集的機構命名空間中建立,且已準備就緒:

    kubectl --kubeconfig ROOT_ADMIN_KUBECONFIG get subnet -n ORG_NAME \
        -l ipam.gdc.goog/SUBNET_TYPE,ipam.gdc.goog/usage=zone-network-root-range
    
  8. 確認區域子網路已在 platform 命名空間的 Management API 伺服器中建立,且已準備就緒:

    kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG get subnet -n NAMESPACE \
        -l ipam.gdc.goog/SUBNET_TYPE,ipam.gdc.goog/usage=zone-network-root-range
    

您指定區域的機構子網路升級作業已完成。 管理員可以從新的子網路建立更多子網路。

新增網路根範圍全域子網路

標有 ipam.gdc.goog/usage: network-root-range 標籤的全域子網路會代管這個類別所有區域的 CIDR。如果用完,您必須在全域 API 伺服器中建立新的子網路 network-root-range。您可以視需要建立多個根全域子網路。

如要建立新的 network-root-range 子網路,請完成下列步驟:

  1. 為新的網路根範圍全域子網路建立 YAML 檔案,例如 subnet-network-root.yaml

    apiVersion: ipam.global.gdc.goog/v1
    kind: Subnet
    metadata:
      labels:
        ipam.gdc.goog/SUBNET_TYPE
        ipam.gdc.goog/usage: network-root-range
      annotations:
        ipam.gdc.goog/pivot-destination: global-org
      name: SUBNET_NAME
      namespace: ORG_NAME
    spec:
      ipv4Request:
        cidr: NEW_CIDR
      type: Root
    

    更改下列內容:

    • SUBNET_TYPE:子網路類型,必須是下列其中一個值:vpc: infra-vpcnetwork-segment: adminnetwork-segment: datavpc: default-vpc
    • API_SERVER_ANNOTATION:用於識別這個子網路必須轉向另一個 API 伺服器。如果是 infra-vpc 或管理員和資料網路區隔,請使用 ipam.gdc.goog/pivot-destination: global-org。如果您要新增 default-vpc 根範圍,請勿設定此註解。
    • SUBNET_NAME:新子網路的名稱。
    • ORG_NAME:機構名稱。
    • NEW_CIDR:子網路的新 CIDR。這個 CIDR 不得與所有現有子網路中的任何 CIDR 重疊,且這些子網路在同一個全域根目錄管理 API 伺服器中具有 ipam.gdc.goog/usage: network-root-range 標籤。