Pod の IPv4 アドレス範囲の追加


このページでは、VPC ネイティブ クラスタに Pod の IPv4 アドレス範囲を追加で構成する方法と、VPC ネイティブ クラスタのノードプールにカスタム Pod の IPv4 アドレス範囲を指定する方法について説明します。

VPC ネイティブ クラスタの Pod の IPv4 アドレス範囲は、常にサブネットのセカンダリ IPv4 アドレス範囲から取得されます。新しいクラスタを作成するときは、クラスタに Pod のデフォルトの IPv4 アドレス範囲を割り当てます。

  • Autopilot クラスタと Standard クラスタでは、Pod の追加の IPv4 アドレス範囲を使用するようにクラスタを構成できます。このように構成すると GKE では、今後ノードプールで作成されるノードで、Pod の IPv4 アドレスとして、これらの Pod の追加の IPv4 アドレス範囲が使用されます。
  • Standard クラスタの場合、Pod の IPv4 アドレスとして、カスタムのサブネットのセカンダリ IPv4 アドレス範囲を使用するノードプールを作成できます。

始める前に

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

  • Google Kubernetes Engine API を有効にします。
  • Google Kubernetes Engine API の有効化
  • このタスクに Google Cloud CLI を使用する場合は、gcloud CLI をインストールして初期化します。すでに gcloud CLI をインストールしている場合は、gcloud components update を実行して最新のバージョンを取得します。
  • クラスタのサブネットを含むプロジェクトに対して、Compute ネットワーク管理者の Identity and Access Management(IAM)ロールを所有していることを確認します。これは、新しいサブネットのセカンダリ IPv4 アドレス範囲の作成に必要です。共有 VPC を使用する場合は、共有 VPC のホスト プロジェクトのネットワーク管理者に協力を要請する必要があります。
  • GKE クラスタが VPC ネイティブ クラスタであることを確認します。ルートベース クラスタは、Pod の追加の IPv4 アドレス範囲またはノードプールのカスタム Pod の IPv4 アドレス範囲をサポートしていません。
  • フォローアップ手順を確認します。

新しいサブネットのセカンダリ IPv4 アドレス範囲を作成する

新しいサブネットのセカンダリ IPv4 アドレス範囲を作成するには、Google Cloud コンソールまたは Google Cloud CLI を使用します。各サブネットは、最大 30 個のセカンダリ IPv4 アドレス範囲をサポートします。詳細については、VPC ドキュメントのセカンダリ IPv4 範囲を編集するをご覧ください。

コンソール

  1. Google Cloud コンソールで [VPC ネットワーク] ページに移動します。

    [VPC ネットワーク] に移動

  2. [VPC ネットワーク] リストで、拡張するネットワークを選択します。

  3. [サブネット] リストで、必要なサブネットを選択します。

  4. [編集] をクリックします。

  5. [IP の範囲を追加] をクリックします。

  6. [サブネット範囲の名前] に、新しいサブネットのセカンダリ IPv4 アドレス範囲の名前を入力します。例: pod-range-2

  7. [セカンダリ IP 範囲] に、IPv4 アドレス範囲を CIDR 形式で入力します。例: 10.2.204.0/22

  8. [保存] をクリックします。

gcloud

gcloud compute networks subnets update SUBNET_NAME \
    --region=REGION \
    --add-secondary-ranges=SECONDARY_RANGE_NAME=SECONDARY_RANGE_CIDR

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

  • SUBNET_NAME: クラスタのサブネットの名前(クラスタの作成時にクラスタに割り当てられたサブネットと同じサブネット)。
  • REGION: クラスタのサブネットのリージョン。クラスタのサブネットのリージョンは、GKE クラスタを含むリージョンです。
  • SECONDARY_RANGE_NAME: 新しいサブネットのセカンダリ IPv4 アドレス範囲の名前(クラスタで Pod の追加 IPv4 アドレス範囲として使用される)。例: pod-range-2
  • SECONDARY_RANGE_CIDR: 新しいサブネットのセカンダリ IPv4 アドレス範囲で使用される CIDR。例: 10.2.204.0/22

新しいサブネットのセカンダリ IPv4 アドレス範囲を複数追加するには、--add-secondary-ranges フラグの後に SECONDARY_RANGE_NAME=SECONDARY_RANGE_CIDR ペアをカンマで区切って追加します。

Pod の追加 IPv4 アドレス範囲をクラスタに割り当てる

Pod の追加 IPv4 アドレス範囲は、クラスタレベルで割り当てることができます。これは、クラスタで作成した新しいノードプールで作成された新しいノードに適用されます。クラスタに Pod の追加 IPv4 アドレス範囲を割り当てるには、まず新しいサブネットのセカンダリ IPv4 アドレス範囲を作成する必要があります。

Pod の追加 IPv4 アドレス範囲の割り当ては、次のクラスタでサポートされています。

  • GKE バージョン 1.26 以降を実行している Autopilot クラスタ
  • Standard クラスタ

コンソール

  1. Google Cloud コンソールで Google Kubernetes Engine のページに移動します。

    Google Kubernetes Engine に移動

  2. 編集するクラスタの横にある [アクション] をクリックし、[ 編集] をクリックします。

  3. [ネットワーキング] セクションで、[クラスタ Pod の IPv4 範囲(追加)] の横にある [編集] をクリックします。

  4. [追加のクラスタ Pod の IPv4 範囲の編集] ダイアログで、[Pod のセカンダリ CIDR 範囲] をクリックし、クラスタのサブネット内にある 1 つ以上の既存のサブネットのセカンダリ IPv4 アドレス範囲の名前を選択します。追加のサブネットのセカンダリ IPv4 アドレス範囲が使用できない場合は、まず新しいサブネットのセカンダリ IPv4 アドレス範囲を作成してから、次の手順を繰り返します。

  5. [変更を保存] をクリックします。

gcloud

  1. --additional-pod-ipv4-ranges フラグを使用してクラスタを更新します。

    gcloud container clusters update CLUSTER_NAME \
        --additional-pod-ipv4-ranges=SECONDARY_RANGE_NAME \
        --location=ZONE_OR_REGION
    

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

    • CLUSTER_NAME: クラスタの名前。
    • SECONDARY_RANGE_NAME: クラスタのサブネットにある 1 つ以上の既存のセカンダリ IPv4 アドレス範囲の名前。複数の場合はカンマで区切ります。使用可能なサブネットのセカンダリ IPv4 アドレス範囲がない場合は、まず新しいサブネットのセカンダリ IPv4 アドレス範囲を作成します。
    • ZONE_OR_REGION: ゾーンクラスタの場合は、クラスタが配置されている Compute Engine ゾーン。リージョン クラスタの場合は、クラスタが配置されている Compute Engine リージョン。ゾーンとリージョンのリストについては、Compute Engine ドキュメントのリージョンとゾーンをご覧ください。

クラスタの Pod の IPv4 範囲を検索する

クラスタの Pod のデフォルトの IPv4 アドレス範囲と、クラスタに割り当てられている Pod の追加の IPv4 アドレス範囲を検索するには、次のコマンドを使用します。

gcloud container clusters describe CLUSTER_NAME \
  --location=ZONE_OR_REGION

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

  • CLUSTER_NAME: クラスタの名前。
  • ZONE_OR_REGION: ゾーンクラスタの場合は、クラスタが配置されている Compute Engine ゾーン。リージョン クラスタの場合は、クラスタが配置されている Compute Engine リージョン。

出力は次のようになります。クラスタの IPAllocationPolicy が含まれます。

ipAllocationPolicy:
  clusterSecondaryRangeName: cluster-pods
  clusterIpv4CidrBlock: 10.10.0.0/23
  additionalPodRangesConfig:
    podRangeNames:
      - pod-range-1
      - pod-range-2

ここで

  • clusterSecondaryRangeName: クラスタの Pod のデフォルトの IPv4 アドレス範囲として使用されるサブネットのセカンダリ IPv4 アドレス範囲の名前。クラスタの作成時に定義されます。
  • clusterIpv4CidrBlock: Pod の IPv4 アドレスに使用するサブネットのセカンダリ IPv4 アドレス範囲の CIDR。クラスタの作成時に定義されます。
  • additionalPodRangesConfig.podRangeNames: Pod の IPv4 アドレス用に割り当てられた追加のサブネットのセカンダリ IPv4 アドレス範囲のリスト。

ノードプールのカスタム Pod の IPv4 アドレス範囲

GKE 1.20.4-gke.500 以降を実行している Standard クラスタの場合、次のいずれかの方法でカスタム Pod の IPv4 アドレス範囲を新しいノードプールに割り当てることができます。

  • GKE によって管理されるノードプールのカスタム Pod の IPv4 アドレス範囲: このオプションを使用する場合は、新しいノードプールを作成し、クラスタのサブネットに新しいサブネットのセカンダリ IPv4 アドレス範囲を作成するのに必要な情報を GKE に提供します。新しいノードプールで作成された新しい各ノードには、Pod の IPv4 アドレスのエイリアス IP アドレス範囲が割り当てられます。各エイリアス IP アドレス範囲は、GKE が作成する新しいサブネットのセカンダリ IPv4 アドレス範囲から取得されます。このオプションは、クラスタとクラスタのサブネットを含む VPC ネットワークの両方が同じプロジェクト内にある場合にのみ使用できます。

  • ユーザー管理ノードプールのカスタム Pod の IPv4 アドレス範囲: このオプションを使用する場合は、GKE が既存のサブネットのセカンダリ IPv4 アドレス範囲を使用する新しいノードプールを作成します。新しいノードプールで作成された新しい各ノードには、Pod の IPv4 アドレスのエイリアス IP アドレス範囲が割り当てられます。各エイリアス IP アドレス範囲は、GKE に使用するように指示するサブネットのセカンダリ IPv4 アドレス範囲から取得されます。クラスタが共有 VPC サービス プロジェクトにあり、クラスタのサブネットがホスト プロジェクトの共有 VPC ネットワークにある場合は、このオプションを使用する必要があります。

ノードプールのカスタム Pod の IPv4 アドレス範囲は、クラスタに割り当てられた Pod の追加の IPv4 アドレス範囲も含め、クラスタレベルで定義された Pod のすべての IPv4 アドレス範囲をオーバーライドします。ノードプールに割り当てられたカスタム Pod の IPv4 アドレス範囲は、不連続のマルチ Pod CIDR とも呼ばれます。

ノードプールのカスタム Pod の IPv4 アドレス範囲の例

次の図は、ユーザー管理の Pod の IPv4 アドレス範囲を持つ VPC ネイティブ クラスタを示しています。

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

上の図は次のことを示しています。

  • クラスタ内の各ノードプールのノードあたりの Pod の最大数は 64 に設定されています。ノードあたり最大 64 個の Pod に対応するために、GKE は /25 エイリアスの IP アドレス範囲を使用して各ノードを作成し、ノードあたり 128 個の Pod の IPv4 アドレスを提供します。
  • クラスタのデフォルトの Pod の IPv4 アドレス範囲は /24 です。各ノードは Pod の IPv4 アドレスに対して /25 を必要とするため、クラスタのデフォルトの Pod の IPv4 アドレス範囲は 2 つのノードのみをサポートします。
  • 追加のノードをサポートするために、クラスタ管理者は追加のノードプールを作成し、ノードあたりの最大 Pod 数を 64 個に維持します。追加のノードプールは、カスタムの /20 の Pod IPv4 アドレス範囲を使用します。この範囲は、32 個の追加ノードをサポートします。

GKE によって管理されるノードプールのカスタム Pod の IPv4 アドレス範囲

GKE で管理されるカスタム Pod の IPv4 アドレス範囲を使用してノードプールを作成するには、次のように gcloud CLI または GKE API を使用します。

gcloud

gcloud container node-pools create POOL_NAME \
  --cluster=CLUSTER_NAME \
  --location=ZONE_OR_REGION \
  --create-pod-ipv4-range=name=SECONDARY_RANGE_NAME,range=CIDR_OR_NETMASK

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

  • POOL_NAME: 新しいノードプールの名前。
  • CLUSTER_NAME: クラスタの名前。
  • ZONE_OR_REGION: ゾーンクラスタの場合は、クラスタが配置されている Compute Engine ゾーン。リージョン クラスタの場合は、クラスタが配置されている Compute Engine リージョン。ゾーンとリージョンのリストについては、リージョンとゾーンをご覧ください。
  • SECONDARY_RANGE_NAME: GKE が作成するサブネットのセカンダリ IPv4 アドレス範囲の名前。name=SECONDARY_RANGE_NAME を省略すると、GKE によって新しいサブネットのセカンダリ IPv4 アドレス範囲の名前が自動的に生成されます。
  • CIDR_OR_NETMASK: Pod の IPv4 アドレス範囲。CIDR 形式(10.12.4.0/20 など)またはサブネット マスク(/20 など)で表します。
    • サブネット マスクのみを指定した場合、GKE は、クラスタのサブネットを含む VPC ネットワーク内の既存のサブネット IPv4 アドレス範囲と競合しない、新しいサブネットのセカンダリ IPv4 アドレス範囲の作成を試みます。
    • range=CIDR_OR_NETMASK を省略すると、GKE は、クラスタのサブネットを含む VPC ネットワーク内の既存のサブネット IPv4 アドレス範囲と競合しない、新しい /14 サブネットのセカンダリ IPv4 アドレス範囲を作成しようとします。

API

"nodePool": {
  "name": "POOL_NAME",
  ...
  "networkConfig": {
    "createPodRange": true,
    "podRange": "SECONDARY_RANGE_NAME",
    "podIpv4CidrBlock": "CIDR_OR_NETMASK"
    }
}

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

  • POOL_NAME: 新しいノードプールの名前。
  • SECONDARY_RANGE_NAME: (省略可)GKE が作成するサブネットのセカンダリ IPv4 アドレス範囲の名前。networkConfig.podRange の値として "" を使用するか、リクエストで podRange パラメータを省略すると、GKE は新しいサブネットのセカンダリ IPv4 アドレス範囲の名前を自動的に生成します。
  • CIDR_OR_NETMASK: Pod の IPv4 アドレス範囲。CIDR 形式(10.12.4.0/20 など)またはサブネット マスク(/20 など)で表します。
    • サブネット マスクのみを指定した場合、GKE は、クラスタのサブネットを含む VPC ネットワーク内の既存のサブネット IPv4 アドレス範囲と競合しない、新しいサブネットのセカンダリ IPv4 アドレス範囲の作成を試みます。
    • networkConfig.podIpv4CidrBlock の値として "" を使用する場合、GKE は、クラスタのサブネットを含む VPC ネットワーク内の既存のサブネット IPv4 アドレス範囲と競合しない、新しい /14 サブネットのセカンダリ IPv4 アドレス範囲を作成しようとします。

ユーザー管理のノードプールのカスタム Pod の IPv4 アドレス範囲

ユーザー管理のカスタム Pod の IPv4 アドレス範囲を使用してノードプールを作成するには、次のように gcloud CLI または GKE API を使用します。

gcloud

gcloud container node-pools create POOL_NAME \
  --cluster=CLUSTER_NAME \
  --location=ZONE_OR_REGION \
  --pod-ipv4-range SECONDARY_RANGE_NAME

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

  • POOL_NAME: 新しいノードプールの名前。
  • CLUSTER_NAME: クラスタの名前。
  • ZONE_OR_REGION: ゾーンクラスタの場合は、クラスタが配置されている Compute Engine ゾーン。リージョン クラスタの場合は、クラスタが配置されている Compute Engine リージョン。ゾーンとリージョンのリストについては、Compute Engine ドキュメントのリージョンとゾーンをご覧ください。
  • SECONDARY_RANGE_NAME: クラスタのサブネットにある既存のサブネットのセカンダリ IPv4 アドレス範囲の名前。必要に応じて、最初に新しいサブネットのセカンダリ IPv4 アドレス範囲を作成します。

API

"nodePool": {
  "name": "POOL_NAME",
  ...
  "networkConfig": {
    "createPodRange": false,
    "podRange": "SECONDARY_RANGE_NAME"
    }
}

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

ノードプールの Pod の IPv4 アドレス範囲を検索する

ノードプールの Pod の IPv4 アドレス範囲を検索するには、次のコマンドを使用します。

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

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

  • POOL_NAME: ノードプールの名前。
  • CLUSTER_NAME: クラスタの名前。
  • ZONE_OR_REGION: ゾーンクラスタの場合は、クラスタが配置されている Compute Engine ゾーン。リージョン クラスタの場合は、クラスタが配置されている Compute Engine リージョン。

出力は次のようになります(ノードプールの NodeNetworkConfig が含まれます)。

  networkConfig:
    podRange: podrange
    podIpv4CidrBlock: 192.168.0.0/18

ここで

  • podRange: ノードプールの Pod の IPv4 アドレスに使用するサブネットのセカンダリ IPv4 アドレス範囲の名前。
  • podIpv4CidrBlock: ノードプールの Pod の IPv4 アドレスに使用するサブネットのセカンダリ IPv4 アドレス範囲の CIDR。

ノードプールでカスタムの Pod の IPv4 アドレス範囲を使用している場合、podRangepodIpv4CidrBlock の値は、クラスタの Pod のデフォルトの IPv4 アドレス範囲と異なります。

フォローアップ手順

クラスタに Pod の IPv4 アドレス範囲を追加で割り当てるか、ノードプールのカスタム Pod の IPv4 アドレス範囲を構成すると、GKE は自動的に作成された gke-[cluster-name]-[cluster-hash]-all VPC ファイアウォール ルールを更新し、ソース範囲にすべての Pod の IPv4 アドレスが含まれるようにします。

次の操作も必要になる場合があります。

次のステップ