Pod IP アドレス範囲の追加


このページでは、VPC ネイティブの Google Kubernetes Engine(GKE)クラスタで不連続マルチ Pod CIDR を有効にする方法について説明します。

概要

不連続マルチ Pod CIDR を使用すると、新規または既存のセカンダリ Pod IP アドレス範囲を GKE クラスタに追加できます。

デフォルトでは、新しく作成したノードプールはクラスタのデフォルト Pod IP アドレス範囲(クラスタの CIDR とも呼ばれます)を使用します。この機能を使用すると、ノードプールの作成時に Pod IP アドレス範囲を指定できます。ノードプールでは、クラスタのデフォルト Pod IP アドレス範囲ではなく、指定した範囲が使用されるようになります。

次の図は、セカンダリ Pod IP アドレス範囲として /24 CIDR ブロックを使用したユーザー管理のクラスタ(256 個の IP アドレス)と、Pod IP アドレスに /25 CIDR ブロックを使用する 2 つのノードを示しています(各ノードで 128 個の IP アドレス)。セカンダリ Pod IP アドレス範囲はすべて使用されているため、クラスタに別のノードを追加することはできません。クラスタを削除して再作成するのではなく、連続していない複数の Pod CIDR を使用するとノードプールを作成できます。Pod IP アドレス用の a /28 CIDR ブロックを使用する 3 番目のノードを追加するために、クラスタが展開されます。

連続していない複数の Pod CIDR を使用して、セカンダリ Pod IP アドレス範囲に空きがないクラスタにノードプールを追加する
図: 連続していない複数の Pod CIDR の使用

利点

  • クラスタの作成前に将来の拡大を計画する必要がないため、IP の割り振りの効率が向上します。
  • 断片化した IP アドレス空間にクラスタを収めることが可能になります。
  • ビジネスニーズの変化に応じて IP アドレスを再割り振りできます。

制限事項

  • 不連続マルチ Pod CIDR は、VPC ネイティブのクラスタでのみ使用できます。
  • クラスタ内のすべてのノードプールは、バージョン 1.19.8-gke.1000 から 1.20、または 1.20.4-gke.500 以降である必要があります。
  • 不連続マルチ Pod CIDR には、Cloud SDK バージョン 330 以降が必要です。
  • ノードプールのセカンダリ Pod IP 範囲は、一旦作成すると変更できません。ただし、新しい範囲でノードプールを作成し、そのノードプールへワークロードをローテーションできます。
  • 不連続マルチ Pod CIDR は、マルチクラスタ Service では使用できません。

注意点

  • nonMasqueradeCIDRs パラメータで構成された ip-masq-agent を使用する場合、すべての Pod CIDR 範囲が含まれるように nonMasqueradeCIDRs を更新する必要があります。
  • ipBlock で構成された NetworkPolicy を使用してトラフィックを指定する場合は、cidr 値を更新してすべての Pod CIDR 範囲を含める必要があります。

変更されたファイアウォール ルール

GKE は、クラスタを作成するとファイアウォール ルールを作成し、Pod 間の通信(gke-[cluster-name]-[cluster-hash]-all)を有効にします。

不連続マルチ Pod CIDR が有効化されたノードプールを作成または削除すると、GKE は Pod IP のクラスタで使用されるすべての Pod CIDR でこのファイアウォール ルールのソース値を更新します。

始める前に

作業を始める前に、次のことを確認してください。

次のいずれかの方法で gcloud のデフォルトの設定を指定します。

  • gcloud init。デフォルトの設定全般を確認する場合に使用します。
  • gcloud config。プロジェクト ID、ゾーン、リージョンを個別に設定する場合に使用します。

gcloud init の使用

エラー One of [--zone, --region] must be supplied: Please specify location を受信した場合は、このセクションの内容を実施します。

  1. gcloud init を実行して、次の操作を行います。

    gcloud init

    リモート サーバーで SSH を使用している場合は、--console-only フラグを指定して、コマンドがブラウザを起動しないようにします。

    gcloud init --console-only
  2. 手順に従って gcloud を承認し、Google Cloud アカウントを使用します。
  3. 新しい構成を作成するか、既存の構成を選択します。
  4. Google Cloud プロジェクトを選択します。
  5. ゾーンクラスタの場合はデフォルトの Compute Engine ゾーン、リージョン クラスタまたは Autopilot クラスタの場合はデフォルトの Compute Engine リージョンを選択します。

gcloud config の使用

  • デフォルトのプロジェクト ID を設定します。
    gcloud config set project PROJECT_ID
  • ゾーンクラスタを使用する場合は、デフォルトのコンピューティング ゾーンを設定します。
    gcloud config set compute/zone COMPUTE_ZONE
  • Autopilot クラスタまたはリージョン クラスタを使用する場合は、デフォルトのコンピューティング リージョンを設定します。
    gcloud config set compute/region COMPUTE_REGION
  • gcloud を最新バージョンに更新します。
    gcloud components update

新しいセカンダリ Pod IP 範囲を使用したノードプールの作成

このセクションでは、セカンダリ Pod IP アドレス範囲のノードプールを作成します。

gcloud コマンドライン ツールまたは GKE API を使用できます。

gcloud

gcloud beta container node-pools create POOL_NAME \
  --cluster CLUSTER_NAME \
  --create-pod-ipv4-range name=RANGE_NAME,range=RANGE

以下を置き換えます。

  • POOL_NAME: 新しいノードプールの名前。
  • CLUSTER_NAME: クラスタの名前。
  • RANGE_NAME: 新しいセカンダリ Pod IP アドレス範囲の名前(省略可)。
  • RANGE: ネットマスク(/20)または CIDR 範囲(10.12.4.0/20)として指定された任意の Pod IP アドレス範囲。ネットマスクを指定する場合、GKE によりクラスタ ネットワークで使用可能な範囲から範囲を割り当てられます。range の値を指定しない場合、GKE によりサブネットの Pod のセカンダリ IP 範囲のデフォルト サイズである /14 ネットマスクが自動的に割り当てられます。

API

"nodePool": {
  "name": "POOL_NAME",
  ...
  "networkConfig": {
    "createPodRange": true,
    "podRange": "RANGE_NAME",
    "podIpv4CidrBlock": "RANGE"
  }
}

以下を置き換えます。

  • POOL_NAME: 新しいノードプールの名前。
  • RANGE_NAME: 新しいセカンダリ Pod IP アドレス範囲の名前(省略可)。
  • RANGE: ネットマスク(/20)または CIDR 範囲(10.12.0.0/20)として指定されたオプションの Pod IP アドレス範囲。ネットマスクが指定されている場合、IP 範囲はクラスタのネットワークの空き容量から自動的に割り振られます。値を指定しない場合、GKE は、サブネットの Pod 用セカンダリ IP 範囲のデフォルト サイズのネットマスク(/14)を自動的に割り振ります。

既存のセカンダリ Pod IP 範囲を使用したノードプールの作成

このセクションでは、既存のセカンダリ Pod IP アドレス範囲を持つノードプールを作成します。

gcloud ツールまたは GKE API を使用できます。

gcloud

gcloud beta container node-pools create POOL_NAME \
  --cluster CLUSTER_NAME \
  --pod-ipv4-range RANGE_NAME

以下を置き換えます。

  • POOL_NAME: 新しいノードプールの名前。
  • CLUSTER_NAME: クラスタの名前。
  • RANGE_NAME: クラスタのサブネットワークにある既存のセカンダリ Pod IP アドレス範囲の名前。

API

"nodePool": {
  "name": "POOL_NAME",
  ...
  "networkConfig": {
    "podRange": "RANGE_NAME"
  }
}

以下を置き換えます。

  • POOL_NAME: 新しいノードプールの名前。
  • RANGE_NAME: クラスタのサブネットワークにある既存のセカンダリ Pod IP アドレス範囲の名前。

ノードプールの Pod CIDR ブロックを確認する

特定のノードプール内の Pod に使用されている Pod CIDR ブロックを確認するには、次のコマンドを使用します。

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

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

...
networkConfig:
  podIpv4CidrBlock: 192.168.0.0/18
  podRange: podrange
...

ノードプールが不連続マルチ Pod CIDR を使用している場合、podRangepodIpv4CidrBlock には、このノードプールのために構成された値が表示されます。

ノードプールが不連続マルチ Pod CIDR を使用していない場合は、podRange および podIpv4CidrBlock には、IPAllocationPolicy からクラスタのデフォルト値、clusterSecondaryRangeNameclusterIpv4CidrBlock が表示されます。

トラブルシューティング

VPC フローログを有効にすると、パケットがノードに正しく送信されているかどうかを判別できます。

次のステップ