ワークロード ネットワーキングのサブネットを構成する

IP アドレス管理(IPAM)パブリック API サブネットを使用して、各 Google Distributed Cloud(GDC)エアギャップ ゾーンにグローバル ルート サブネットが割り当てられています。グローバル ルート サブネットは、テナント組織内のすべてのクラスタ(組織インフラストラクチャ クラスタやワークロード VM など)をブートストラップするために各ゾーンに分割されるルート IP アドレス範囲(CIDR)プールをホストします。IP アドレス範囲の小さな部分も、エニーキャスト IP アドレス プールとしてルート サブネットで使用できます。

組織を作成したら、GDC ユニバースのサブネットに対して次の運用タスクを実行できます。

新しいゾーンのルート範囲グローバル サブネットを作成する

各ゾーンにはルート範囲のグローバル サブネットが必要です。GDC ユニバースの組織の初期ブートストラップ フェーズでは、各ゾーンにグローバル サブネットが自動的に生成されます。ただし、初期インストール後に新しいゾーンが追加された場合は、新しいゾーンのルート範囲グローバル サブネットを手動で作成する必要があります。

新しいゾーンのネットワーク ルート範囲サブネットの CIDR 範囲を定義する

CIDR 範囲の定義に関する組織のインストール ガイダンスと同様に、CIDR 範囲は相互に重複できません。また、カスタム リソース仕様で ipam.gdc.goog/usage: network-root-range ラベルが付いたサブネットである zone-infra-cidr および既存のルート グローバル サブネットとも重複できません。

zone-infra-cidr は各ゾーンに存在し、お客様が定義した場合は、Customer Intake Questionnaire(CIQ)から取得できます。

  1. zone-infra-cidr を取得するには、次のコマンドを実行します。

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

    CIDR 範囲をメモします。

  2. 組織に割り当てる名前と一致する名前の Namespace が必要です。この Namespace が存在することを確認します。

    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 インフラストラクチャ VPC グローバル ルート
zoneDefaultVPCCIDR 18 デフォルト VPC グローバル組織
zoneOrgAdminExternalCIDR 23 管理ネットワーク セグメント グローバル ルート
zoneOrgDataExternalCIDR 23 データ ネットワーク セグメント グローバル ルート

グローバル ルート管理 API サーバーにサブネットを作成する

グローバル ルート管理者 API サーバーにサブネットを作成する手順は次のとおりです。

  1. Universe 内のゾーンを一覧表示し、新しいゾーン名を見つけます。

    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 サーバーが実行されたら、platform 名前空間内の組織のグローバル組織管理者 API サーバーにデフォルトの 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 リソースは自動アップスケーリングをサポートしていません。顧客管理の VPC またはネットワーク セグメントに CIDR 範囲を追加するには、新しいサブネットを作成し、特定のラベルでグループ化する必要があります。ルート管理クラスタへのアクセスが必要なため、お客様がサブネットを個別にアップスケールすることはできません。

サブネット グループ化ルール

サブネットはラベルによってさまざまなカテゴリに分類されます。

カテゴリ ラベル
デフォルト VPC ipam.gdc.goog/vpc: default-vpc
インフラストラクチャ VPC ipam.gdc.goog/vpc: infra-vpc
管理ネットワーク セグメント ipam.gdc.goog/network-segment: admin
データ ネットワーク セグメント ipam.gdc.goog/network-segment: data

初期ブートストラップ時に、組織の取り込みアンケート(OIQ)で 4 つの CIDR 範囲が指定されました。これらの 4 つのグローバル サブネットは、顧客組織の作成時にグローバル API サーバーに作成されました。これらのグローバル サブネットは、組織内のすべてのゾーンにわたる各カテゴリのルートレベルの CIDR 範囲です。ルートレベルのグローバル サブネットにはすべて ipam.gdc.goog/usage: network-root-range というラベルが付いています。

各ゾーンに対して、ルートレベルのサブネットから切り出して、子グローバル サブネットがグローバル API サーバーに作成されます。各子グローバル サブネットは、特定のゾーンのカテゴリの CIDR 範囲をホストし、ipam.gdc.goog/usage: zone-network-root-range というラベルが付いています。ゾーンの子グローバル サブネットは、特定のゾーンに自動的に伝播されます。

一般的なアップスケーリングのユースケース

既存のサブネットをスケールアップするための追加サブネットを最も効率的に割り当てるには、サブネット カテゴリごとに推奨されるユースケースを検討してください。アップスケール プロセスを開始する前に、アップスケールするカテゴリを決定します。

デフォルト VPC

default-vpc のサブネットは、主に共有サービス クラスタ、ユーザー クラスタ、default-vpc-default-node-subnet の Pod と Service の CIDR を割り当てるために使用されます。また、クラスタノード IP アドレスと組織のワークロード IP アドレスにも使用されます。

ユーザー クラスタの作成に失敗した場合、サブネットのアップスケーリングが必要になる可能性があります。

ユーザー クラスタの Pod または Service の CIDR の親サブネットが見つからないため、ユーザー クラスタの作成が失敗することがあります。このエラーのサンプル メッセージは次のようになります。

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

この問題は、サブネットをアップスケールする必要性に関連するいくつかの理由が原因で発生する可能性があります。確認するには、次の手順を検討してください。

  1. Cluster カスタム リソースの .spec.clusterNetwork セクションで podCIDRSize フィールドと serviceCIDRSize フィールドを確認します。

    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 が 4 つ、/20 CIDR が 1 つ、/21 CIDR が 2 つ割り当てられています。新しいユーザー クラスタは podCIDRSize に /20 CIDR、serviceCIDRSize に /20 CIDR をリクエストしていますが、これは不十分です。

この場合は、デフォルト VPC のカテゴリにサブネットを追加する必要があります。

インフラストラクチャ VPC

infra-vpc のサブネットは、主に組織の Pod と Service の CIDR を組織のインフラストラクチャ クラスタと境界クラスタに割り当てるために使用されます。また、境界クラスタのノード IP アドレスにも使用されます。

これは内部 GDC インフラストラクチャの設定に属し、各組織には 1 つの組織インフラストラクチャ クラスタと 1 つの境界クラスタしかないため、通常、infra-vpc にアップスケール オペレーションは必要ありません。

管理ネットワーク セグメント

管理ネットワーク セグメントのサブネットは、主に組織管理者の仮想ルーティングと転送(VRF)で IP アドレスを割り当てるために使用されます。組織にデフォルトのノード サブネット、またはゲートウェイ情報を含むサブネットが作成されている。このデフォルト サブネットは、組織インフラストラクチャ クラスタノードの IP アドレスと境界クラスタノードの IP アドレスを割り当てます。

管理ネットワーク セグメントは内部 GDC インフラストラクチャ設定に属し、各組織に設定できる組織インフラストラクチャ クラスタと境界クラスタは 1 つずつのみであるため、通常、このサブネットをアップスケールする必要はありません。

データ ネットワーク セグメント

データ ネットワーク セグメントのサブネットは、主に組織データ VRF の IP アドレスを割り当てるために使用されます。組織にデフォルトのノード サブネットまたはゲートウェイ情報を含むサブネットが作成されている。このデフォルト サブネットは、組織インフラストラクチャ クラスタノードの IP アドレスと境界クラスタノードの IP アドレスを割り当てます。

データ ネットワーク セグメントは内部 GDC インフラストラクチャのセットアップに属し、各組織には 1 つの組織インフラストラクチャ クラスタと 1 つの境界クラスタのみを設定できるため、通常、このサブネットのアップスケーリングは必要ありません。

カテゴリにサブネットを追加する

サブネット タイプに基づいて、カテゴリにサブネットを追加できます。次のタイプは、サブネットを追加できます。

  • インフラストラクチャ VPC
  • 管理ネットワーク セグメント
  • データ ネットワーク セグメント
  • デフォルト VPC

サブネットを追加するサブネット タイプを特定し、そのサブネット タイプについて次の手順を完了します。

  1. グローバル ルート管理者 API サーバーで、ルート サブネット タイプを取得し、subnet.status.ipv4Allocation.cidr から CIDR maskSize フィールドを確認します。

    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. ルート サブネットのすべての子サブネットを取得し、subnet.status.ipv4Allocation.cidr から各 CIDR maskSize フィールドを確認します。

    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 は、サブネットの Namespace に置き換えます。infra-vpc サブネットには infra-network を使用し、他のサブネット タイプには 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 Namespace の 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 または管理者と datanet のワーク セグメントの場合は、ipam.gdc.goog/pivot-destination: global-org を使用します。新しい default-vpc ルート範囲を追加する場合は、このアノテーションを設定しないでください。
    • SUBNET_NAME: 新しいサブネットの名前。
    • ORG_NAME: 組織の名前。
    • NEW_CIDR: サブネットの新しい CIDR。この CIDR は、同じグローバル ルート管理者 API サーバー内の ipam.gdc.goog/usage: network-root-range ラベルを持つ既存のサブネットの CIDR と重複できません。