ルートベース クラスタの作成


このページでは、Google Kubernetes Engine(GKE)でルートベース クラスタを作成する方法について説明します。

概要

GKE では、Pod 間でトラフィックをルーティングする方法によってクラスタを区別しています。Google Cloud のルートを使用するクラスタは、ルートベース クラスタと呼ばれています。エイリアス IP を使用するクラスタは、VPC ネイティブ クラスタと呼ばれています。

VPC ネイティブは推奨のタイプであり、GKE バージョン 1.21.0-gke.1500 以降の新しいクラスタのデフォルトです。ルートベース クラスタを作成するには、VPC ネイティブ オプションを明示的にオフにする必要があります。

始める前に

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

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

ルートベース クラスタを作成する

ルートベース クラスタは、gcloud CLI または Google Cloud コンソールを使用して作成できます。

gcloud

ルートベースのクラスタを作成するには、クラスタ作成コマンドに --no-enable-ip-alias フラグを追加します。

gcloud container clusters create CLUSTER_NAME --no-enable-ip-alias

CLUSTER_NAME は、クラスタに選択した名前に置き換えます。

Console

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

    Google Kubernetes Engine に移動

  2. [ 作成] をクリックします。

  3. クラスタの名前を入力します。

  4. ナビゲーション パネルの [クラスタ] の下の [ネットワーキング] をクリックします。

  5. [高度なネットワーキングのオプション] で、[VPC ネイティブのトラフィック ルーティングを有効にする(エイリアス IP を使用)] チェックボックスをオフにします。

  6. [作成] をクリックします。

ルートベース クラスタを作成して、コントロール プレーンの IP 範囲を選択する

デフォルトでは、Private Service Connect を使用するクラスタは、プライマリ サブネット範囲を使用して、コントロール プレーン エンドポイントに割り当てられた内部 IP アドレスをプロビジョニングします。このデフォルト設定をオーバーライドするには、クラスタの作成時に別のサブネット範囲を選択します。以降のセクションでは、Private Service Connect を使用してクラスタを作成し、サブネット範囲をオーバーライドする方法について説明します。

gcloud

Private Service Connect を使用してクラスタを作成します。

gcloud container clusters create CLUSTER_NAME --no-enable-ip-alias \
    --private-endpoint-subnetwork=SUBNET_NAME \
    --region=COMPUTE_REGION

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

Console

前提条件

新しいクラスタのコントロール プレーンにサブネットを割り当てるには、まずサブネットを追加する必要があります。

クラスタを作成してコントロール プレーンの IP 範囲を割り当てる

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

    Google Kubernetes Engine に移動

  2. [ 作成] をクリックします。

  3. クラスタの名前を入力します。

  4. ナビゲーション パネルの [クラスタ] の下の [ネットワーキング] をクリックします。

  5. [コントロール プレーン アクセス] で、コントロール プレーンのエンドポイントへのアクセスを構成します。

  6. [高度なネットワーキングのオプション] セクションで、[コントロール プレーンのデフォルトのプライベート エンドポイント サブネットをオーバーライドする] チェックボックスをオンにします。

  7. [プライベート エンドポイント サブネット] リストで、作成したサブネットを選択します。

  8. [VPC ネイティブのトラフィック ルーティングを有効にする(エイリアス IP を使用)] チェックボックスをオフにします。

  9. [作成] をクリックします。

クラスタでルートが使用されていることを確認する

gcloud

クラスタノードを一覧表示します。

kubectl get nodes

ノードの名前が出力に表示されます。

NAME                                 STATUS   ...     AGE    VERSION
gke-xxx-default-pool-83e239a7-kcg8   Ready    ...     42m    v1.9.7-gke.6
gke-xxx-default-pool-83e239a7-qm6b   Ready    ...     42m    v1.9.7-gke.6
gke-xxx-default-pool-83e239a7-wnrq   Ready    ...     42m    1.9.7-gke.6

ルートを一覧表示します。

gcloud compute routes list

この出力の NEXT_HOP 列で、いずれかのクラスタノードの名前を探します。

NAME                 NETWORK        DEST_RANGE         NEXT_HOP
...
[ROUTE_NAME]         default        10.24.0.0/24       [YOUR_NODE_NAME]
...

この出力では、ルートが特定の Pod アドレス範囲宛てのパケットにネクストホップを提供します。

Console

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

    Google Kubernetes Engine に移動

  2. クラスタリストで、検査するクラスタの名前をクリックします。

  3. [クラスタの詳細] ページで [ノード] タブをクリックします。

  4. [ノード] セクションで、任意のノードの名前をメモします。

  5. Google Cloud コンソールの [ルート] ページに移動します。

    [ルート] に移動

  6. ルートの一覧の [ネクストホップ] 列で、いずれかのクラスタノードの名前を探します。その行のルート名をクリックします。

  7. [ルートの詳細] ページで [ネクストホップ] セクションを確認し、ルートが特定の Pod アドレス範囲宛てのパケットにネクストホップを提供していることを確認します。

ノードあたりの Pod 数

ルートベースのクラスタでは、各ノードのポッドに対して IP アドレスの /24 の範囲が割り当てられます。/24 の範囲では、256 個のアドレスが存在しますが、ノードあたりの最大ポッド数は 110 です。指定できるポッドの約 2 倍の数の利用可能な IP アドレスを指定すると、ポッドがノードに追加されたりノードから削除されたりするときに、Kubernetes での IP アドレスの再利用が楽になります。

ポッドのアドレス範囲

ルートベースのクラスタには、ポッドとサービスのために使用される IP アドレスの範囲が存在します。この範囲はポッドとサービスの両方に使用されますが、ポッドアドレス範囲と呼ばれています。ポッドアドレス範囲の最後の /20 がサービスに使用されます。/20 の範囲の場合、212 = 4,096 個のアドレスが存在します。そのため、4,096 個のアドレスがサービスに使用され、残りの範囲はポッドに使用されます。

コマンド出力で、Pod のアドレス範囲は clusterIpv4Cidr、Services に使用されるアドレス範囲は servicesIpv4Cidr と呼ばれます。たとえば、gcloud container clusters describe の出力には次のような内容が含まれます。

clusterIpv4Cidr: 10.96.0.0/16
...
servicesIpv4Cidr: 10.96.240.0/20

ポッドアドレス範囲は、任意の RFC 1918 ブロック(10.0.0.0/8172.16.0.0/12192.168.0.0/16)から指定できます。

CIDR 範囲を指定して、ポッドアドレス範囲をカスタマイズできます。たとえば、10.96.0.0/16 の範囲を指定できます。

gcloud

gcloud container clusters create CLUSTER_NAME \
    --no-enable-ip-alias \
    --cluster-ipv4-cidr 10.96.0.0/16

CLUSTER_NAME は、クラスタに選択した名前に置き換えます。

Console

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

    Google Kubernetes Engine に移動

  2. [ 作成] をクリックします。

  3. クラスタの名前を入力します。

  4. ナビゲーション パネルの [クラスタ] の下の [ネットワーキング] をクリックします。

  5. [高度なネットワーキングのオプション] で、[VPC ネイティブのトラフィック ルーティングを有効にする(エイリアス IP を使用)] チェックボックスをオフにします。

  6. [Pod のアドレス範囲] フィールドに「10.96.0.0/16」と入力します。

  7. [作成] をクリックします。

クラスタのサイズに関する考慮事項

所定の GKE クラスタのノード、ポッド、サービスの最大数は、クラスタ サブネットのサイズとポッドアドレス範囲のサイズによって決まります。ポッドアドレス範囲のサイズは、クラスタを作成した後は変更できません。クラスタを作成する際、クラスタの予想される増大に対応できる十分な大きさのポッドアドレス範囲を選択するようにしてください。

次の表は、900 ノードのクラスタに十分なアドレス範囲を選択する方法を説明しています。

範囲 ガイダンス
ノード

ノード IP アドレスは、クラスタ サブネットのプライマリ範囲から取得されます。クラスタ サブネットは、クラスタ内のノードの総数を保持するのに十分な大きさである必要があります。

たとえば、900 ノードのクラスタを作成する予定であれば、クラスタ サブネットは少なくとも /22 のサイズである必要があります。/22 の範囲の場合、210 = 1,024 個のアドレスが存在します。4 個の未使用 IP アドレスを差し引くと 1,020 個になり、これは 900 ノードに対して十分です。

Pod のアドレス範囲

各ノードには、ポッド用に IP アドレスの /24 の範囲があります。/24 の範囲の場合、28 = 256 個のアドレスが存在します。ポッドアドレス範囲内の 4,096 個のアドレスがサービスに使用されていることを思い出してください。ポッドアドレス範囲の残りの部分はポッド用に使用され、ノード数 x 256 個のアドレスを保持するのに十分な大きさでなければなりません。

たとえば、900 ノードのクラスタを作成するとします。その場合、ポッド用に 900 x 256 = 230,400 個のアドレスが必要です。今度は /14 のポッドアドレス範囲があるとします。/14 の範囲の場合、218 = 262,144 個のアドレスが存在します。サービスに使用される 4,096 個のアドレスを引くと、258,048 になります。これは 900 ノードに対して十分です。

範囲サイズのデフォルトと制限

次の表は、クラスタ サブネットとポッドアドレス範囲の最小、最大、およびデフォルトのサイズを示しています。

範囲 デフォルト サイズ 最小サイズ 最大サイズ
ノード

/20、つまり 212 = 4,096 個のアドレス。4 個の予約済みアドレスを差し引くと、ノード用のアドレスは 4,092 個です。

/29、つまり 23 = 8 個のアドレス。4 個の予約済みアドレスを差し引くと、ノード用のアドレスは 4 個です。

/7、つまり 225 個のアドレス。これはノードに対して約 3,300 万個のアドレスです。

ポッドのアドレス範囲

/14、つまり 218 = 262,144 個のアドレス。

/19、つまり 213 = 8,192 個のアドレス。

/9、つまり 223 = 8,388,608 個のアドレス。

制限事項

  • VPC ネイティブ クラスタは、ルートベースのクラスタに移行できません。
  • ルートベース クラスタは、VPC ネイティブ クラスタに移行できません。
  • ルートベース クラスタでは、プライベート IP アドレスに RFC 1918 範囲のアドレスのみを使用できます。VPC ネイティブ クラスタでは、より広い範囲のアドレスが使用可能です。
  • ルートベース クラスタは、デュアルスタック ネットワーキングをサポートしていません。

次のステップ