このページでは、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
は、クラスタに選択した名前に置き換えます。
コンソール
Google Cloud コンソールで Google Kubernetes Engine のページに移動します。
[add_box 作成] をクリックします。
クラスタの名前を入力します。
ナビゲーション パネルの [クラスタ] の下の [ネットワーキング] をクリックします。
[高度なネットワーキングのオプション] で、[VPC ネイティブのトラフィック ルーティングを有効にする(エイリアス IP を使用)] チェックボックスをオフにします。
[作成] をクリックします。
ルートベース クラスタを作成して、コントロール プレーンの 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
次のように置き換えます。
CLUSTER_NAME
: GKE クラスタの名前。SUBNET_NAME
: 既存のサブネットの名前。COMPUTE_REGION
: クラスタの Compute Engine のリージョン。ゾーンクラスタを作成するには、このフラグを--zone=COMPUTE_ZONE
に置き換えます。COMPUTE_ZONE
はコンピューティング ゾーンです。
コンソール
前提条件
新しいクラスタのコントロール プレーンにサブネットを割り当てるには、まずサブネットを追加する必要があります。
クラスタを作成してコントロール プレーンの IP 範囲を割り当てる
Google Cloud コンソールで Google Kubernetes Engine のページに移動します。
[add_box 作成] をクリックします。
クラスタの名前を入力します。
ナビゲーション パネルの [クラスタ] の下の [ネットワーキング] をクリックします。
[IPv4 ネットワーク アクセス] セクションで、次の操作を行います。
- GKE クラスタを一般公開クラスタとして作成するには、[一般公開クラスタ] ラジオボタンをオンにします。
- 限定公開 GKE クラスタを作成するには、[限定公開クラスタ] ラジオボタンを選択します。
いずれの場合も、クラスタ構成を編集するときにクラスタ分離モードを変更できます。
[高度なネットワーキングのオプション] セクションで、[コントロール プレーンのデフォルトのプライベート エンドポイント サブネットをオーバーライドする] チェックボックスをオンにします。
[プライベート エンドポイント サブネット] リストで、作成したサブネットを選択します。
[VPC ネイティブのトラフィック ルーティングを有効にする(エイリアス IP を使用)] チェックボックスをオフにします。
[作成] をクリックします。
クラスタでルートが使用されていることを確認する
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 アドレス範囲宛てのパケットにネクストホップを提供しています。
コンソール
Google Cloud コンソールで Google Kubernetes Engine のページに移動します。
クラスタリストで、検査するクラスタの名前をクリックします。
[クラスタの詳細] ページで [ノード] タブをクリックします。
[ノード] セクションで、任意のノードの名前をメモします。
Google Cloud コンソールの [ルート] ページに移動します。
ルートの一覧の [ネクストホップ] 列で、いずれかのクラスタノードの名前を探します。その行のルート名をクリックします。
[ルートの詳細] ページで [ネクストホップ] セクションを確認し、ルートが特定の Pod アドレス範囲宛てのパケットにネクストホップを提供していることを確認します。
ノードあたりの Pod 数
ルートベース クラスタでは、各ノードの Pod に対して IP アドレスの /24 の範囲が割り振られます。/24 の範囲では、256 個のアドレスが存在しますが、ノードあたりの最大ポッド数は 110 です。指定できるポッドの約 2 倍の数の利用可能な IP アドレスを指定すると、ポッドがノードに追加されたりノードから削除されたりするときに、Kubernetes での IP アドレスの再利用が楽になります。
ポッドのアドレス範囲
ルートベース クラスタには、Pod と Service のために使用される IP アドレスの範囲が存在します。この範囲は Pod と Service の両方に使用されますが、Pod アドレス範囲と呼ばれています。Pod アドレス範囲の最後の /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
Pod のアドレス範囲は、任意の RFC 1918 ブロック(10.0.0.0/8
、172.16.0.0/12
、192.168.0.0/16
)から指定できます。
CIDR 範囲を指定すると、Pod のアドレス範囲をカスタマイズできます。たとえば、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
は、クラスタに選択した名前に置き換えます。
コンソール
Google Cloud コンソールで Google Kubernetes Engine のページに移動します。
[add_box 作成] をクリックします。
クラスタの名前を入力します。
ナビゲーション パネルの [クラスタ] の下の [ネットワーキング] をクリックします。
[高度なネットワーキングのオプション] で、[VPC ネイティブのトラフィック ルーティングを有効にする(エイリアス IP を使用)] チェックボックスをオフにします。
[Pod のアドレス範囲] フィールドに「
10.96.0.0/16
」と入力します。[作成] をクリックします。
クラスタのサイズに関する考慮事項
所定の GKE クラスタのノード、Pod、Service の最大数は、クラスタ サブネットのサイズと Pod のアドレス範囲のサイズによって決まります。Pod アドレス範囲のサイズは、クラスタを作成した後は変更できません。クラスタを作成する際、クラスタの予想される増大に対応できる十分な大きさの Pod アドレス範囲を選択するようにしてください。
次の表は、900 ノードのクラスタに十分なアドレス範囲を選択する方法を説明しています。
範囲 | ガイダンス |
---|---|
ノード |
ノード IP アドレスは、クラスタ サブネットのプライマリ範囲から取得されます。クラスタ サブネットは、クラスタ内のノードの総数を保持するのに十分な大きさである必要があります。 たとえば、900 ノードのクラスタを作成する予定であれば、クラスタ サブネットは少なくとも /22 のサイズである必要があります。/22 の範囲の場合、210 = 1,024 個のアドレスが存在します。4 個の使用できない IP アドレスを差し引くと 1,020 個になり、これは 900 ノードに対して十分です。 |
Pod のアドレス範囲 |
各ノードには、ポッド用に IP アドレスの /24 の範囲があります。/24 の範囲の場合、28 = 256 個のアドレスが存在します。Pod アドレス範囲内の 4,096 個のアドレスが Service に使用されていることを思い出してください。Pod アドレス範囲の残りの部分は Pod 用に使用され、ノード数 x 256 個のアドレスを保持するのに十分な大きさでなければなりません。 たとえば、900 ノードのクラスタを作成するとします。その場合、ポッド用に 900 x 256 = 230,400 個のアドレスが必要です。今度は /14 の Pod アドレス範囲があるとします。/14 の範囲の場合、218 = 262,144 個のアドレスが存在します。サービスに使用される 4,096 個のアドレスを引くと、258,048 になります。これは 900 ノードに対して十分です。 |
範囲サイズのデフォルトと制限
次の表は、クラスタ サブネットと Pod のアドレス範囲の最小、最大、デフォルトのサイズを示しています。
範囲 | デフォルト サイズ | 最小サイズ | 最大サイズ |
---|---|---|---|
ノード | /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 ネイティブ クラスタでは、より広い範囲のアドレスが使用可能です。
- ルートベース クラスタは、デュアルスタック ネットワーキングをサポートしていません。