クラスタにサブネットを追加する


このページでは、VPC ネイティブ クラスタに追加のサブネットを割り当てる方法について説明します。クラスタに割り当てられた追加のサブネットを使用すると、ノードと Pod の両方の IPv4 アドレスが追加のサブネット範囲から取得される新しいノードプールを作成できます。

このページは、組織のネットワークを設計するネットワーク スペシャリストを対象としています。 Google Cloud のコンテンツで使用されている一般的なロールとタスクの例の詳細については、一般的な GKE Enterprise ユーザーロールとタスクをご覧ください。

概要

新しい VPC ネイティブ GKE クラスタを作成するときに、クラスタのデフォルト サブネットを選択します。クラスタのデフォルト サブネットは、VPC ネイティブ クラスタの IP アドレス範囲で説明されているように、ノード、Pod、Service に IPv4 アドレスを提供します。

VPC ネイティブ クラスタには最大 8 つの追加サブネットを割り当てることができ、クラスタを大幅に拡張できます。新しく割り当てられた追加のサブネットは、デフォルト以外のサブネットと呼ばれます。

始める前に

作業を始める前に、次のタスクが完了していることを確認してください。

  • Google Kubernetes Engine API を有効にする。
  • Google Kubernetes Engine API の有効化
  • このタスクに Google Cloud CLI を使用する場合は、gcloud CLI をインストールして初期化する。すでに gcloud CLI をインストールしている場合は、gcloud components update を実行して最新のバージョンを取得する。

要件と制限事項

このセクションでは、クラスタに追加のサブネットを割り当てて使用する場合に適用される要件と制限事項について説明します。追加のサブネットを割り当てる前に、すべての要件を満たしている必要があります。

  • GKE クラスタが、GKE バージョン 1.30.3-gke.1211000 以降を実行する VPC ネイティブ クラスタであることを確認します。ルートベース クラスタとレガシー ネットワーク上のクラスタは、追加のサブネットをサポートしていません。
  • クラスタごとに最大 8 つの追加サブネットを割り当てることができます。
  • 追加のサブネットは、ノードと Pod の IPv4 アドレスのみを提供します。追加のサブネットを使用して、ノードまたは Pod の IPv6 アドレスを提供することはできません。
  • 追加のサブネットを使用できるのは新しいノードプールのみで、既存のノードプールは使用できません。新しいノードプールを作成し、複数のデフォルト以外のサブネットが使用可能な場合、GKE は IP アドレスの要件とすべてのクラスタ サブネットでの IP アドレスの可用性に基づいて、ノードプールに最適なサブネットを選択します。
  • デフォルト以外のサブネットのサブネット セカンダリ IPv4 アドレス範囲は、単一のクラスタでのみ使用できます。
  • Pod のマルチネットワーク サポートを使用する場合、追加のサブネットのプライマリと Pod の IPv4 アドレス範囲は、マルチネットワーク設定内で構成されている CIDR 範囲と重複してはなりません。構成する追加のサブネットは、デフォルト ネットワークにのみ適用されます。この制限により、ノードと Pod の追加のネットワーク インターフェースは、これらの追加のサブネットによって提供される IP アドレスを使用できません。
  • デフォルト サブネットの IP アドレスのプールが枯渇すると、追加のサブネットを使用しても、クラスタを自動スケーリングできません。

追加のサブネットがあるクラスタのロードバランサの要件

このセクションでは、クラスタで追加のサブネットを使用する場合に適用されるロードバランサの要件について説明します。これらの要件は、外部 Ingress、外部 Gateway、外部 LoadBalancer Service を作成するたびに適用されます。

  • 追加のサブネットを含むクラスタで外部 Ingress、Gateway、または LoadBalancer Service を使用するには、クラスタで GKE バージョン 1.33.2-gke.4780000 以降を実行する必要があります。
  • GKE Ingress コントローラを使用する外部 Ingress オブジェクトは、コンテナ ネイティブのロード バランシングを使用する必要があります。
  • 内部 LoadBalancer Service の GKE サブセット化を有効にします。GKE のサブセット化は、新しい内部 LoadBalancer Service にのみ影響します。そのため、GKE サブセット設定を有効にした後、クラスタ内の既存の Service を削除して再作成する必要があります。
  • バックエンド サービスベースの外部パススルー ネットワーク ロードバランサを作成するには、新しい外部 LoadBalancer Service に cloud.google.com/l4-rbs: "enabled" アノテーションを含める必要があります。このアノテーションは、新しい外部 LoadBalancer Service にのみ影響し、既存の外部 LoadBalancer Service には適用されません。cloud.google.com/l4-rbs: "enabled" アノテーションなしで作成されたすべての外部 LoadBalancer Service を削除して再作成します。

    使用されるバックエンド タイプ(GCE_VM_IP NEG バックエンドまたはインスタンス グループ バックエンド)は、外部 LoadBalancer Service の作成時の GKE バージョンによって異なります。詳細については、ノードグループをご覧ください。

1 つの Pod IPv4 アドレス範囲を持つ新しいサブネットを追加する

  1. 新しいサブネットを作成し、新しいサブネットのセカンダリ IPv4 アドレス範囲を追加します。サブネットは、クラスタと同じリージョンと VPC ネットワークに存在する必要があります。

       gcloud compute networks subnets create SUBNET_NAME \
         --network=NETWORK \
         --region=REGION \
         --range=PRIMARY_RANGE \
         --add-secondary-ranges=POD_RANGE_NAME=SECONDARY_RANGE
    

    次のように置き換えます。

    • SUBNET_NAME: 新しいサブネットの名前。
    • NETWORK: 新しいサブネットを含む VPC ネットワークの名前。
    • REGION: サブネットが配置されているリージョン。
    • PRIMARY_RANGE: 新しいサブネットのプライマリ IPv4 範囲(CIDR 表記)。詳細については、IPv4 サブネットの範囲をご覧ください。
    • POD_RANGE_NAME: セカンダリ範囲の名前。
    • SECONDARY_RANGE: CIDR 表記のセカンダリ IPv4 範囲。有効な範囲については、IPv4 サブネットの範囲をご覧ください。

    詳細については、サブネットを操作するをご覧ください。

  2. gcloud CLI を使用して、追加のサブネットを使用するようにクラスタを更新します。

       gcloud container clusters update CLUSTER_NAME \
         --additional-ip-ranges=subnetwork=SUBNET_NAME,pod-ipv4-range=POD_RANGE_NAME
    

    次のように置き換えます。

    • CLUSTER_NAME: 既存のクラスタの名前。
    • SUBNET_NAME: 作成した新しいサブネットの名前。
    • POD_RANGE_NAME: Pod の IPv4 アドレス範囲に使用するサブネットのセカンダリ IPv4 アドレス範囲の名前。

複数の Pod IPv4 アドレス範囲を持つ新しいサブネットを追加する

  1. クラスタと同じリージョンと VPC ネットワークに新しいサブネットを作成します。サブネットのプライマリ IPv4 アドレス範囲をノードの追加 IPv4 アドレス範囲に設定します。

  2. 必要な Pod の追加 IPv4 アドレス範囲ごとに、前の手順で作成したサブネットに新しいサブネットのセカンダリ IPv4 アドレス範囲を追加します。

  3. gcloud CLI を使用して、追加のサブネットを使用するようにクラスタを更新します。次の例では、Pod 用の 2 つのサブネット セカンダリ IPv4 アドレス範囲を持つサブネットを 1 つ追加します。

       gcloud container clusters update CLUSTER_NAME \
         --additional-ip-ranges=subnetwork=SUBNET_NAME,pod-ipv4-range=POD_RANGE_NAME_1 \
         --additional-ip-ranges=subnetwork=SUBNET_NAME,pod-ipv4-range=POD_RANGE_NAME_2
    

    次のように置き換えます。

    • CLUSTER_NAME: 既存のクラスタの名前。
    • SUBNET_NAME: 作成した新しいサブネットの名前。
    • POD_RANGE_NAME_1POD_RANGE_NAME_2: Pod の IPv4 アドレス範囲に使用するサブネットのセカンダリ IPv4 アドレス範囲の名前。

サブネットを確認する

クラスタ別: クラスタに関連付けられているすべてのサブネットの詳細を表示するには、次のコマンドを実行します。

   gcloud container clusters describe CLUSTER_NAME

CLUSTER_NAME は、使用するクラスタの名前に置き換えます。

出力は次のようになります。

ipAllocationPolicy:
  additionalIPRangesConfig:
  - podIpv4RangeNames:
    - pod-range-1
    subnetwork: projects/user-gke-dev-2/regions/us-central1/subnetworks/shared-msc-subnets

ノードプール別: ノードプールに関連付けられているすべてのサブネットの詳細を表示するには、次のコマンドを実行します。

gcloud container node-pools describe POOL_NAME \
    --cluster=CLUSTER_NAME \

次のように置き換えます。

  • POOL_NAME: ノードプールの名前。
  • CLUSTER_NAME: クラスタの名前。

出力は次のようになります。

name: pool-1
networkConfig:
  podRange: pod-range-1
  subnetwork: projects/user-gke-dev-2/regions/us-central1/subnetworks/shared-msc-subnets

デフォルト以外のサブネットを削除する

クラスタからデフォルト以外のサブネットを削除すると、クラスタはクラスタのノードプールでサブネットの範囲を使用しなくなります。削除すると、次のような影響があります。

  • デフォルト以外のサブネットのプライマリ IPv4 アドレス範囲は、ノードの IPv4 アドレス範囲には使用できません。
  • デフォルト以外のサブネットのサブネット セカンダリ IPv4 範囲は、Pod IPv4 範囲に使用できません。

デフォルト以外のサブネットを削除する前に、このサブネットを使用しているすべてのノードプールを削除する必要があります。

クラスタからデフォルト以外のサブネットを削除するには、次のコマンドを実行します。

   gcloud container clusters update CLUSTER_NAME \
     --remove-additional-ip-ranges= subnetwork=SUBNET_NAME

次のように置き換えます。

  • CLUSTER_NAME: クラスタの名前。
  • SUBNET_NAME: クラスタから削除するサブネットの名前。

クラスタからデフォルト以外のサブネットを削除したら、デフォルト以外のサブネットを削除できます。

デフォルト以外のサブネットのセカンダリ IPv4 範囲を削除する

クラスタからデフォルト以外のサブネット セカンダリ IPv4 範囲を削除すると、GKE は、どのノードプールの Pod IPv4 範囲にもその範囲を使用しないようにクラスタに指示します。削除するデフォルト以外のサブネットのセカンダリ IPv4 範囲が、このクラスタで使用されているデフォルト以外のサブネットの唯一の範囲である場合、GKE は、ノードの IPv4 アドレスにこのサブネットのプライマリ IPv4 アドレスの使用を停止するようにクラスタに指示します。

デフォルト以外のサブネットのセカンダリ IPv4 範囲を削除する前に、Pod の IPv4 アドレスにその範囲を使用するすべてのノードプールを削除する必要があります。

デフォルト以外のサブネットのセカンダリ IPv4 範囲をクラスタから削除するには、次のコマンドを実行します。

   gcloud container clusters update CLUSTER_NAME \
     --remove-additional-ip-ranges=\
       subnetwork=SUBNET_NAME,pod-ipv4-range=POD_RANGE_NAME

次のように置き換えます。

  • CLUSTER_NAME: クラスタの名前。
  • SUBNET_NAME: デフォルト以外のサブネットの名前。
  • POD_RANGE_NAME: クラスタから削除するデフォルト以外のサブネットのセカンダリ IPv4 範囲の名前。

クラスタからデフォルト以外のサブネットのセカンダリ IPv4 範囲を削除したら、デフォルト以外のサブネットのセカンダリ IPv4 範囲を削除できます。

次のステップ