このページでは、クラスタのコントロール プレーンとクラスタノードのネットワーク分離を変更する方法について説明します。クラスタの分離モードの変更は、Private Service Connect を使用してコントロール プレーンとノードにプライベート接続しているクラスタでのみサポートされます。
クラスタの分離を変更する理由
デフォルトでは、Private Service Connect を使用するクラスタを作成すると、GKE がコントロール プレーンに外部 IP アドレス(外部エンドポイント)を割り当てます。つまり、外部 IP アドレスを持つ VM はコントロール プレーンにアクセスできます。
承認済みネットワークを構成する場合は、クラスタ コントロール プレーンにアクセスできる IP アドレス範囲を制限できますが、クラスタ コントロール プレーンには Google Cloud 所有の IP アドレスから引き続きアクセスできます。たとえば、Google Cloud で外部 IP アドレスが割り当てられている VM は、コントロール プレーンの外部 IP アドレスにアクセスできます。ただし、対応する認証情報を持たない VM はノードにアクセスできません。
利点
ネットワークの分離には次の利点があります。
- 同じクラスタ内にプライベート ノードとパブリック ノードを組み合わせて構成できます。これにより、インターネット上の公開サービスにアクセスするために外部 IP アドレスを必要としないノードのコストを削減できます。
- Google Cloud 所有の IP アドレスまたは外部 IP アドレスからのコントロール プレーンへのアクセスをブロックして、クラスタ コントロール プレーンを完全に分離できます。
このページでは、次の操作を行って、このデフォルトの動作を変更する方法について説明します。
- Google Cloud 所有の IP アドレスからコントロール プレーンへのアクセスを有効または無効にする。この操作を行うと、Google Cloud 所有の IP アドレスを持つ VM はコントロール プレーンにアクセスできなくなります。詳細については、Google Cloud 所有の IP アドレスからコントロール プレーンへのアクセスをブロックするをご覧ください。
- コントロール プレーンの外部エンドポイントへの公開アクセスを有効または無効にする。この操作により、クラスタが完全に分離され、コントロール プレーンにはパブリック IP アドレスからアクセスできなくなります。詳細については、クラスタ コントロール プレーンを分離するをご覧ください。
- ノードからパブリック IP アドレスを削除する。この操作により、ワークロードが完全に分離されます。詳細については、ノードプールを分離するをご覧ください。
始める前に
始める前に、次の作業が完了していることを確認してください。
- Google Kubernetes Engine API を有効にする。 Google Kubernetes Engine API の有効化
- このタスクに Google Cloud CLI を使用する場合は、gcloud CLI をインストールして初期化する。すでに gcloud CLI をインストールしている場合は、
gcloud components update
を実行して最新のバージョンを取得する。
Google Cloud VM、Cloud Run、Cloud Run functions からコントロール プレーンへのアクセスをブロックする
一般公開として事前定義されたクラスタを Private Service Connect で作成した場合、承認済みネットワーク機能はデフォルトで無効になっています。
限定公開として事前定義されたクラスタを Private Service Connect で作成した場合、承認済みネットワーク機能はデフォルトで有効になっています。GKE コントロール プレーンに常にアクセスできる IP アドレスについては、コントロール プレーン エンドポイントへのアクセスをご覧ください。
Google Cloud VM、Cloud Run、Cloud Run functions からクラスタのコントロール プレーンへのアクセス権を削除するには、gcloud CLI または Google Cloud コンソールを使用します。
gcloud
--no-enable-google-cloud-access
フラグを使用するようにクラスタを更新します。gcloud container clusters update CLUSTER_NAME \ --no-enable-google-cloud-access
CLUSTER_NAME
はクラスタの名前で置き換えます。--no-enable-google-cloud-access
フラグが適用されていることを確認します。gcloud container clusters describe CLUSTER_NAME | grep "gcpPublicCidrsAccessEnabled"
出力は次のようになります。
gcpPublicCidrsAccessEnabled: false
コンソール
Google Cloud コンソールで Google Kubernetes Engine のページに移動します。
変更するクラスタの名前をクリックします。
[ネットワーキング] の [コントロール プレーン承認済みネットワーク] フィールドで、[editコントロール プレーン承認済みネットワークの編集] をクリックします。
[Google Cloud のパブリック IP アドレスを介したアクセスを許可する] チェックボックスをオフにします。
[変更を保存] をクリックします。
Google Cloud 所有の IP アドレスからコントロール プレーンへのアクセスを許可する
Google Cloud 所有のパブリック IP アドレスからクラスタ コントロール プレーンへのアクセスを許可するには、次のコマンドを実行します。
gcloud
gcloud container clusters update CLUSTER_NAME \
--enable-google-cloud-access
CLUSTER_NAME
はクラスタの名前で置き換えます。
Google Cloud 所有の IP アドレスからクラスタ コントロール プレーンにアクセスできます。
コンソール
Google Cloud コンソールで Google Kubernetes Engine のページに移動します。
変更するクラスタの名前をクリックします。
[ネットワーキング] の [コントロール プレーン承認済みネットワーク] フィールドで、[editコントロール プレーン承認済みネットワークの編集] をクリックします。
[Google Cloud のパブリック IP アドレスを介したアクセスを許可する] チェックボックスをオンにします。
[変更を保存] をクリックします。
Private Service Connect を使用するクラスタでコントロール プレーンへの外部アクセスを無効にする
一般公開として作成されたクラスタ
デフォルトでは、GKE 一般公開クラスタを作成すると、GKE がコントロール プレーンに外部 IP アドレス(外部エンドポイント)を割り当てます。この外部エンドポイントの割り当てを解除するように GKE に指示すると、GKE はプライベート エンドポイントを有効にします。外部 IP アドレスからコントロール プレーンへのアクセスは無効になります。ただし、クラスタ管理プロセスを実行する Google Cloud サービスからのアクセスは無効になりません。有効なプライベート エンドポイントとその制限の詳細については、Private Service Connect を使用する一般公開クラスタをご覧ください。
一般公開として作成したクラスタのコントロール プレーンの分離を変更するには、gcloud CLI を使用します。
--enable-private-endpoint
フラグを使用するようにクラスタを更新します。gcloud container clusters update CLUSTER_NAME \ --enable-private-endpoint
CLUSTER_NAME
は、一般公開クラスタの名前に置き換えます。--enable-private-endpoint
フラグが適用されていることを確認します。gcloud container clusters describe CLUSTER_NAME | grep "enablePrivateEndpoint"
出力は次のようになります。
enablePrivateEndpoint:true
限定公開として作成されたクラスタ
デフォルトでは、GKE 限定公開クラスタを作成すると、GKE がコントロール プレーンに外部 IP アドレス(外部エンドポイント)と内部 IP アドレス(内部エンドポイント)を割り当てます。この外部エンドポイントの割り当ては解除できますが、内部エンドポイントの割り当ては解除できません。
外部エンドポイントの割り当てを解除するように GKE に指示すると、外部 IP アドレスからコントロール プレーンへの外部アクセスが無効になります。
限定公開として作成されたクラスタの外部エンドポイントを削除するには、gcloud CLI または Google Cloud コンソールを使用します。
gcloud
--enable-private-endpoint
フラグを使用するようにクラスタを更新します。gcloud container clusters update CLUSTER_NAME \ --enable-private-endpoint
CLUSTER_NAME
は、一般公開クラスタの名前に置き換えます。--enable-private-endpoint
フラグが適用されていることを確認します。gcloud container clusters describe CLUSTER_NAME | grep "enablePrivateEndpoint"
出力は次のようになります。
enablePrivateEndpoint: true
コンソール
Google Cloud コンソールで Google Kubernetes Engine のページに移動します。
変更するクラスタの名前をクリックします。
[クラスタの基本] の [外部エンドポイント] フィールドで、[edit 外部コントロール プレーン アクセスの編集] をクリックします。
[Google Cloud のパブリック IP アドレスを介したアクセスを許可する] チェックボックスをオフにします。
[変更を保存] をクリックします。
Private Service Connect を使用するクラスタでコントロール プレーンへの外部アクセスを有効にする
一般公開または限定公開として作成されたクラスタのコントロール プレーンに外部 IP アドレス(外部エンドポイント)を割り当てるには、gcloud CLI または Google Cloud コンソールを使用します。
gcloud
次のコマンドを実行します。
gcloud container clusters update CLUSTER_NAME \
--no-enable-private-endpoint
CLUSTER_NAME
は、一般公開クラスタの名前に置き換えます。
外部 IP アドレスはクラスタ コントロール プレーンにアクセスできます。
コンソール
Google Cloud コンソールで Google Kubernetes Engine のページに移動します。
変更するクラスタの名前をクリックします。
[クラスタの基本] の [外部エンドポイント] フィールドで、[edit 外部コントロール プレーン アクセスの編集] をクリックします。
[外部 IP アドレスを使用してコントロール プレーンにアクセス] チェックボックスをオンにします。
[変更を保存] をクリックします。
ノードプールを分離する
プライベート IP アドレスのみを持つノードプールをプロビジョニングするように GKE に指示できます。パブリック ノードプールをプライベート モードに更新すると、公共のインターネット アクセスを必要とするワークロードが失敗することがあります。ノードの分離を変更する前に、Private Service Connect クラスタの制限事項をご覧ください。この設定は、一般公開または限定公開として作成されたクラスタで編集できます。
Autopilot
Autopilot クラスタでは、既存の Pod に taint を追加して、GKE がプライベート ノードにのみ Pod をプロビジョニングするようにします。
GKE がプライベート ノードで Pod をスケジューリングするようにリクエストするには、次の nodeSelector を Pod 仕様に追加します。
cloud.google.com/private-node=true
GKE はプライベート ノードに Pod を再作成します。ワークロードの中断を回避するには、各ワークロードを個別に移行し、その移行をモニタリングしてください。
共有 VPC を使用している場合は、クラスタ分離モードを変更した後に限定公開の Google アクセスを有効にします。Cloud NAT を使用している場合は、限定公開の Google アクセスを有効にする必要はありません。
Standard
gcloud
既存のノードプールのプライベート IP アドレスを使用してノードをプロビジョニングするには、次のコマンドを実行します。
gcloud container node-pools update NODE_POOL_NAME \
--cluster=CLUSTER_NAME \
--enable-private-nodes
次のように置き換えます。
NODE_POOL_NAME
: 編集するノードプールの名前。CLUSTER_NAME
: GKE クラスタの名前。共有 VPC を使用している場合は、クラスタ分離モードを変更した後に限定公開の Google アクセスを有効にします。Cloud NAT を使用している場合は、限定公開の Google アクセスを有効にする必要はありません。
コンソール
Google Cloud コンソールで Google Kubernetes Engine のページに移動します。
クラスタのリストで、クラスタ名をクリックします。
[クラスタ] ページで、[ノード] タブをクリックします。
[ノードプール] でノードプールの名前をクリックします。
[編集] をクリックします。
[プライベート ノードを有効にする] チェックボックスをオンにします。
[保存] をクリックします。
ノードプールの分離を元に戻す
Standard クラスタで、パブリック IP アドレスを持つノードプールをプロビジョニングするように GKE に指示するには、次のコマンドを実行します。
gcloud container node-pools update NODE_POOL_NAME \
--cluster=CLUSTER_NAME \
--no-enable-private-nodes
次のように置き換えます。
NODE_POOL_NAME
: 編集するノードプールの名前。CLUSTER_NAME
: GKE クラスタの名前。
パブリック IP アドレスはクラスタノードにアクセスできます。
制限事項
クラスタ分離モードを変更する前に、次の制限事項を考慮してください。
- 分離モードを変更できるのは、Private Service Connect を使用するクラスタのみです。
- 分離モードの変更は、以前のネットワークで実行されている一般公開クラスタではサポートされていません。
- パブリック ノードプールをプライベート モードに更新すると、公共のインターネット アクセスを必要とするワークロードが次のシナリオで失敗する可能性があります。
- 限定公開の Google アクセスが有効になっていない共有 VPC ネットワーク内のクラスタ。限定公開の Google アクセスを手動で有効にして、割り当てられたノードイメージが GKE によってダウンロードされるようにします。共有 VPC ネットワークにないクラスタの場合、GKE は限定公開の Google アクセスを自動的に有効にします。
- Cloud NAT が有効になっていないか、カスタム NAT ソリューションが定義されていないワークロードがインターネットにアクセスする必要がある場合。インターネットへの下り(外向き)トラフィックを許可するには、Cloud NAT またはカスタム NAT ソリューションを有効にします。
一般公開または限定公開として作成された Private Service Connect クラスタ
一般公開として作成され、Private Service Connect を使用するクラスタでは、プライベート エンドポイントが有効になっています。このプライベート エンドポイントでは、新規または既存の Webhook に構成した URL に内部 IP アドレスは使用できません。この非互換性を回避するには、次のようにします。
- URL でプライベート アドレスを使用して Webhook を設定します。
- セレクタなしでヘッドレス サービスを作成します。
- 必要な宛先に対応するエンドポイントを作成します。
一般公開として作成された Private Service Connect クラスタ
一般公開として作成された Private Service Connect クラスタでのみ、クラスタのネットワークのすべてのプライベート IP アドレスは常にクラスタのプライベート エンドポイントにアクセスできます。コントロール プレーン アクセスの詳細については、コントロール プレーン アクセスの承認済みネットワークをご覧ください。