このページでは、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 範囲を編集するをご覧ください。
コンソール
Google Cloud コンソールで [VPC ネットワーク] ページに移動します。
[VPC ネットワーク] リストで、拡張するネットワークを選択します。
[サブネット] リストで、必要なサブネットを選択します。
[編集] をクリックします。
[IP の範囲を追加] をクリックします。
[サブネット範囲の名前] に、新しいサブネットのセカンダリ IPv4 アドレス範囲の名前を入力します。例:
pod-range-2
[セカンダリ IP 範囲] に、IPv4 アドレス範囲を CIDR 形式で入力します。例:
10.2.204.0/22
[保存] をクリックします。
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 クラスタ
コンソール
Google Cloud コンソールで Google Kubernetes Engine のページに移動します。
編集するクラスタの横にあるmore_vert [アクション] をクリックし、[edit 編集] をクリックします。
[ネットワーキング] セクションで、[クラスタ Pod の IPv4 範囲(追加)] の横にある edit [編集] をクリックします。
[追加のクラスタ Pod の IPv4 範囲の編集] ダイアログで、[Pod のセカンダリ CIDR 範囲] をクリックし、クラスタのサブネット内にある 1 つ以上の既存のサブネットのセカンダリ IPv4 アドレス範囲の名前を選択します。追加のサブネットのセカンダリ IPv4 アドレス範囲が使用できない場合は、まず新しいサブネットのセカンダリ IPv4 アドレス範囲を作成してから、次の手順を繰り返します。
[変更を保存] をクリックします。
gcloud
--additional-pod-ipv4-ranges
フラグを使用してクラスタを更新します。gcloud container clusters update CLUSTER_NAME \ --additional-pod-ipv4-ranges=SECONDARY_RANGE_NAME \ --location=COMPUTE_LOCATION
次のように置き換えます。
CLUSTER_NAME
: クラスタの名前。SECONDARY_RANGE_NAME
: クラスタのサブネットにある 1 つ以上の既存のセカンダリ IPv4 アドレス範囲の名前。複数の場合はカンマで区切ります。使用可能なサブネットのセカンダリ IPv4 アドレス範囲がない場合は、まず新しいサブネットのセカンダリ IPv4 アドレス範囲を作成します。COMPUTE_LOCATION
: クラスタの Compute Engine のロケーション。
クラスタの Pod の IPv4 範囲を検索する
クラスタの Pod のデフォルトの IPv4 アドレス範囲と、クラスタに割り当てられている Pod の追加の IPv4 アドレス範囲を検索するには、次のコマンドを使用します。
gcloud container clusters describe CLUSTER_NAME \
--location=COMPUTE_LOCATION
次のように置き換えます。
CLUSTER_NAME
: クラスタの名前。COMPUTE_LOCATION
: クラスタの 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 の最大数は
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=COMPUTE_LOCATION \
--create-pod-ipv4-range=name=SECONDARY_RANGE_NAME,range=CIDR_OR_NETMASK
次のように置き換えます。
POOL_NAME
: 新しいノードプールの名前。CLUSTER_NAME
: クラスタの名前。COMPUTE_LOCATION
: クラスタの 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=COMPUTE_LOCATION \
--pod-ipv4-range SECONDARY_RANGE_NAME
次のように置き換えます。
POOL_NAME
: 新しいノードプールの名前。CLUSTER_NAME
: クラスタの名前。COMPUTE_LOCATION
: クラスタの Compute Engine のロケーション。SECONDARY_RANGE_NAME
: クラスタのサブネットにある既存のサブネットのセカンダリ IPv4 アドレス範囲の名前。必要に応じて、最初に新しいサブネットのセカンダリ IPv4 アドレス範囲を作成します。
API
"nodePool": {
"name": "POOL_NAME",
...
"networkConfig": {
"createPodRange": false,
"podRange": "SECONDARY_RANGE_NAME"
}
}
次のように置き換えます。
POOL_NAME
: 新しいノードプールの名前。SECONDARY_RANGE_NAME
: クラスタのサブネットにある既存のサブネットのセカンダリ IPv4 アドレス範囲の名前。必要に応じて、最初に新しいサブネットのセカンダリ IPv4 アドレス範囲を作成します。
ノードプールの Pod の IPv4 アドレス範囲を検索する
ノードプールの Pod の IPv4 アドレス範囲を検索するには、次のコマンドを使用します。
gcloud container node-pools describe POOL_NAME \
--cluster=CLUSTER_NAME \
--location=COMPUTE_LOCATION
次のように置き換えます。
POOL_NAME
: ノードプールの名前。CLUSTER_NAME
: クラスタの名前。COMPUTE_LOCATION
: クラスタの Compute Engine のロケーション。
出力は次のようになります(ノードプールの NodeNetworkConfig が含まれます)。
networkConfig:
podRange: podrange
podIpv4CidrBlock: 192.168.0.0/18
ここで
podRange
: ノードプールの Pod の IPv4 アドレスに使用するサブネットのセカンダリ IPv4 アドレス範囲の名前。podIpv4CidrBlock
: ノードプールの Pod の IPv4 アドレスに使用するサブネットのセカンダリ IPv4 アドレス範囲の CIDR。
ノードプールでカスタムの Pod の IPv4 アドレス範囲を使用している場合、podRange
と podIpv4CidrBlock
の値は、クラスタの Pod のデフォルトの IPv4 アドレス範囲と異なります。
フォローアップ手順
クラスタに Pod の IPv4 アドレス範囲を追加で割り当てるか、ノードプールのカスタム Pod の IPv4 アドレス範囲を構成すると、GKE は自動的に作成された gke-[cluster-name]-[cluster-hash]-all
VPC ファイアウォール ルールを更新し、ソース範囲にすべての Pod の IPv4 アドレスが含まれるようにします。
次の操作も必要になる場合があります。
クラスタの IP マスカレード エージェント構成を更新する。 マスカレードされていない CIDR の有効なセットには、クラスタ(およびそのノードプール)で使用されるすべての Pod の IPv4 アドレス範囲を含める必要があります。 詳細については、
ip-masq-agent
ステータスのチェックとip-masq-agent
の構成とデプロイをご覧ください。クラスタの
NetworkPolicy
構成を確認する。Pod の IPv4 アドレス範囲を参照するipBlock
属性の更新が必要となる場合があります。VPC フローログとファイアウォール ルールのロギングを使用して、接続に関する問題のトラブルシューティングを行う。
次のステップ
- IP アドレスの割り振りの最適化の詳細を確認する。