このページでは、承認済みネットワークを使用して、Google Kubernetes Engine(GKE)クラスタのコントロール プレーンにアクセスできるオリジンを制限する方法について説明します。承認済みネットワークは、信頼できる IP アドレスの特定のセットにコントロール プレーンへのアクセス権を付与し、GKE クラスタの保護とセキュリティ上の利点を向上させます。
承認済みネットワークの仕組み
承認済みネットワークは、GKE コントロール プレーンへのアクセスを制御する IP ベースのファイアウォールを備えています。コントロール プレーンへのアクセスは、GKE クラスタのタイプと送信元 IP アドレスによって異なります。承認済みネットワークを使用して、GKE クラスタのコントロール プレーン エンドポイントへのアクセスを許可する IP アドレスを CIDR ブロックリストとして構成します。
クラスタと IP アドレスに関する用語
次の用語は、適用されている IP ベースのファイアウォール ルールをクラスタのタイプに応じて区別するために使用されます。
IP アドレスの区別:
- Google Cloud のすべての Compute Engine VM のパブリック IP アドレス: Google Cloud でホストされている顧客によって使用される VM に割り当てられたパブリック IP アドレス。Google Cloud はこれらの IP アドレスを所有しています。詳細については、Compute Engine の IP 範囲はどこで確認できますか?をご覧ください。
- Google Cloud Platform の IP アドレス: Cloud Run や Cloud Run functions などの Google Cloud プロダクトで使用される IP アドレス。Google Cloud でホストされているあらゆるクライアントは、これらの IP アドレスをインスタンス化できます。Google Cloud はこれらの IP アドレスを所有しています。
- Google で予約された IP アドレス: GKE クラスタを管理するためのパブリック IP アドレス。これらの IP アドレスには、GKE マネージド プロセスと他の本番環境の Google サービスが含まれています。Google はこれらの IP アドレスを所有しています。
- インターネット パブリック IP アドレス: RFC 1918 以外のパブリック IP アドレスと Google 以外のパブリック IP アドレス。Google と Google Cloud のいずれのプロダクトも、これらのパブリック IP アドレスを所有していません。
- GKE クラスタの IP アドレス範囲: GKE がクラスタのノード、Pod、Service に使用するクラスタに割り振られた IP アドレス。
- プライベートで使用される IP アドレス: クラスタの VPC ネットワークの IP アドレス。これらの IP アドレスには、クラスタ IP アドレス、オンプレミス ネットワーク、RFC 1918 範囲、または RFC 1918 以外の範囲を含むプライベートで使用されるパブリック IP(PUPI)アドレスを配置できます。
クラスタの種類:
- レガシー パブリック クラスタ: レガシー ネットワークまたはノードに割り当てられているパブリック IP アドレスを持つ VPC ネットワークで実行されており、Private Service Connect アーキテクチャに移行されていない一般公開クラスタ。
- レガシー限定公開クラスタ: プライベート IP アドレスのみを持つノードからのコントロール プレーン接続用の VPC ネットワーク ピアリングに基づくクラスタ。
- パブリックまたは限定公開として作成された PSC ベースのクラスタ: GKE クラスタ コントロール プレーンとノード間の通信に Private Service Connect アーキテクチャを使用するクラスタ。クラスタで Private Service Connect を使用しているかどうかを確認するには、GKE コントロール プレーンをご覧ください。
コントロール プレーン エンドポイントへのアクセス
次の表に、クラスタ作成時の承認済みネットワークのデフォルトのステータスを示します。GKE クラスタとコントロール プレーン エンドポイントのタイプに基づいて、次の対象を決定できます。
- GKE コントロール プレーンに常にアクセスできるプリセット IP アドレス。
- 承認済みネットワークが有効になっているクラスタのコントロール プレーンにアクセスするように構成できる IP アドレス。
構成可能な IP アドレスは、それらを許可リストに登録し、承認済みネットワークを有効にすると、クラスタのコントロール プレーンにアクセスできます。
GKE クラスタとコントロール プレーン エンドポイントのタイプ | コントロール プレーン承認済みネットワークのデフォルト ステータス | GKE コントロール プレーンに常にアクセスできるプリセット IP アドレス1 | 承認済みネットワークが有効に設定されており、GKE コントロール プレーンにアクセスできる構成可能な IP アドレス2 |
---|---|---|---|
VPC ネットワーク ピアリングに基づくレガシー パブリック クラスタまたはレガシー限定公開クラスタ | |||
パブリック エンドポイントを持つレガシー パブリック クラスタ | 無効 |
|
|
パブリック エンドポイントと限定公開エンドポイントを持つレガシー限定公開クラスタ | 有効 |
|
|
Private Service Connect を使用するクラスタ | |||
パブリックとして作成されたクラスタ | 無効 |
詳細については、クラスタの分離を変更するをご覧ください。 |
|
限定公開として作成されたクラスタ | 有効 |
GKE クラスタの IP アドレス範囲(ノード、Pod、Service など)は、プライベート IP アドレスのみを持ちます。 デフォルトでは、クラスタの作成時に
詳細については、クラスタの分離を変更するをご覧ください。 |
|
制限事項
- 承認済みネットワークを持つクラスタが使用しているサブネットを拡張する場合は、拡張された IP アドレス範囲を含むように承認済みネットワーク構成を更新する必要があります。
パブリック IP アドレスとプライベート IP アドレスに指定できる承認済み IP アドレス範囲の数は、クラスタのタイプによって異なります。
- パブリック クラスタ: 50 個の IP アドレス範囲
- 限定公開クラスタ: 100 個の IP アドレス範囲
- PSC ベースのクラスタ: 100 個の IP アドレス範囲
始める前に
始める前に、次の作業が完了していることを確認してください。
- Google Kubernetes Engine API を有効にする。 Google Kubernetes Engine API の有効化
- このタスクに Google Cloud CLI を使用する場合は、gcloud CLI をインストールして初期化する。すでに gcloud CLI をインストールしている場合は、
gcloud components update
を実行して最新のバージョンを取得する。
承認済みネットワークを使用するクラスタを作成する
1 つ以上の承認済みネットワークを使用するクラスタを作成するには、Google Cloud CLI、Google Cloud コンソール、または GKE API を使用します。
gcloud
次のコマンドを実行します。
gcloud container clusters create-auto CLUSTER_NAME \
--enable-master-authorized-networks \
--master-authorized-networks CIDR1,CIDR2,...
次のように置き換えます。
CLUSTER_NAME
: クラスタの名前。CIDR1,CIDR2,...
: 承認済みネットワークの CIDR 値のカンマ区切りリスト。例:8.8.8.8/32,8.8.8.0/24
コンソール
Google Cloud コンソールで Google Kubernetes Engine のページに移動します。
[add_box 作成] をクリックします。
[Autopilot] セクションまたは [Standard] セクションで、[構成] をクリックします。
必要に応じてクラスタを構成します。
ナビゲーション メニューで、[ネットワーキング] をクリックします。
[高度なネットワーキングのオプション] で [コントロール プレーン承認済みネットワークを有効にする] チェックボックスをオンにします。
[承認済みネットワークを追加] をクリックします。
ネットワークの名前を入力します。
[ネットワーク] に、クラスタ コントロール プレーンへのアクセス権を付与する CIDR 範囲を入力します。
[完了] をクリックします。必要に応じて、承認済みネットワークを追加します。
[作成] をクリックします。
API
クラスタ create
リクエストで masterAuthorizedNetworksConfig
オブジェクトを指定します。
"masterAuthorizedNetworksConfig": {
"enabled": true,
"cidrBlocks": [
{
"displayName": string,
"cidrBlock": string
}
]
}
詳細については、MasterAuthorizedNetworksConfig をご覧ください。
1 つ以上の承認済みネットワークを使用して限定公開クラスタを構成できます。詳細については、限定公開クラスタをご覧ください。
コントロール プレーン アクセスを制限したクラスタを作成する
GKE は、一般公開クラスタ内のコントロール プレーンにパブリック IP アドレス(外部エンドポイント)を割り当てます。Private Service Connect を使用する一般公開クラスタでは、より詳細なクラスタ分離を設定して、ノードとコントロール プレーンをプライベート接続できます。クラスタで Private Service Connect を使用しているかどうかを確認するには、Private Service Connect を使用する一般公開クラスタをご覧ください。
クラスタを作成して、次の送信元からコントロール プレーンへのアクセスをブロックするように GKE に指示できます。
- Google Cloud が所有する IP アドレスから。
- 外部 IP アドレス(クラスタ管理プロセスを実行する Google サービスを除く)から。
クラスタを作成し、コントロール プレーンへのアクセスを定義するには、Google Cloud CLI または Google Cloud コンソールを使用します。
gcloud
次のコマンドを実行します。
gcloud container clusters create-auto CLUSTER_NAME
--no-enable-google-cloud-access
CLUSTER_NAME
は、GKE クラスタの名前に置き換えます。
このコマンドを使用すると、no-enable-google-cloud-access
フラグにより、Google Cloud が所有する IP アドレスからコントロール プレーンにアクセスできなくなります。
コンソール
Google Cloud コンソールで Google Kubernetes Engine のページに移動します。
[add_box 作成] をクリックします。
[Autopilot] セクションまたは [Standard] セクションで、[構成] をクリックします。
必要に応じてクラスタを構成します。
ナビゲーション メニューで、[ネットワーキング] をクリックします。
[高度なネットワーキングのオプション] で [コントロール プレーン承認済みネットワークを有効にする] チェックボックスをオンにします。
[Google Cloud のパブリック IP アドレスを介したアクセスを許可する] チェックボックスをオフにして、Google Cloud が所有する IP アドレスからコントロール プレーンにアクセスできないようにします。
[承認済みネットワークを追加] をクリックします。
ネットワークの名前を入力します。
[ネットワーク] に、クラスタ コントロール プレーンへのアクセス権を付与する CIDR 範囲を入力します。
[完了] をクリックします。必要に応じて、承認済みネットワークを追加します。
[作成] をクリックします。
承認済みネットワークを既存のクラスタに追加する
既存のクラスタに承認済みネットワークを追加するには、gcloud CLI または Google Cloud コンソールを使用します。
gcloud
次のコマンドを実行します。
gcloud container clusters update CLUSTER_NAME \
--enable-master-authorized-networks \
--master-authorized-networks CIDR1,CIDR2,...
次のように置き換えます。
CLUSTER_NAME
: 既存のクラスタの名前。CIDR1,CIDR2,...
: 承認済みネットワークの CIDR 値のカンマ区切りリスト。例:8.8.8.8/32,8.8.8.0/24
コンソール
Google Cloud コンソールで Google Kubernetes Engine のページに移動します。
変更するクラスタの名前をクリックします。
[ネットワーキング] の [コントロール プレーン承認済みネットワーク] フィールドで、[editコントロール プレーン承認済みネットワークの編集] をクリックします。
[コントロール プレーン承認済みネットワークを有効にする] チェックボックスをオンにします。
[承認済みネットワークを追加] をクリックします。
ネットワークの名前を入力します。
[ネットワーク] に、クラスタ コントロール プレーンへのアクセス権を付与する CIDR 範囲を入力します。
[完了] をクリックします。必要に応じて、承認済みネットワークを追加します。
[変更を保存] をクリックします。
API
クラスタの update
リクエストで desiredMasterAuthorizedNetworksConfig
フィールドを指定します。このフィールドで、MasterAuthorizedNetworksConfig オブジェクトを次のように指定します。
"desiredMasterAuthorizedNetworksConfig": {
object(MasterAuthorizedNetworksConfig)
}
承認済みネットワークを確認する
既存のクラスタの承認済みネットワークを確認するには、gcloud CLI または Google Cloud コンソールを使用します。
gcloud
次のコマンドを実行します。
gcloud container clusters describe CLUSTER_NAME
出力は次のようになります。
...
masterAuthorizedNetworksConfig:
cidrBlocks:
- cidrBlock: 8.8.8.8/32
- cidrBlock: 8.8.4.4/32
enabled: true
...
コンソール
Google Cloud コンソールで Google Kubernetes Engine のページに移動します。
変更するクラスタの名前をクリックします。
[ネットワーキング] の [コントロール プレーン承認済みネットワーク] フィールドに、許可された CIDR が表示されます。
API
get
リクエストを送信します。masterAuthorizedNetworksConfig
フィールドの下で CIDR ブロックを探します。次に例を示します。
"masterAuthorizedNetworksConfig": {
"enabled": true,
"cidrBlocks": [
{
"displayName": "Office",
"cidrBlock": "192.0.2.0/24"
}
]
}
承認済みネットワークの無効化
既存クラスタの承認済みネットワークを無効にするには、gcloud CLI または Google Cloud コンソールを使用します。
gcloud
次のコマンドを実行します。
gcloud container clusters update CLUSTER_NAME \
--no-enable-master-authorized-networks
コンソール
Google Cloud コンソールで Google Kubernetes Engine のページに移動します。
変更するクラスタの名前をクリックします。
[ネットワーキング] の [コントロール プレーン承認済みネットワーク] フィールドで、[editコントロール プレーン承認済みネットワークの編集] をクリックします。
[コントロール プレーン承認済みネットワークを有効にする] チェックボックスをオフにします。
[変更を保存] をクリックします。
承認済みネットワークを削除する
gcloud
次のコマンドを実行します。
gcloud container clusters update CLUSTER_NAME \
--enable-master-authorized-networks
コンソール
Google Cloud コンソールで Google Kubernetes Engine のページに移動します。
変更するクラスタの名前をクリックします。
[ネットワーキング] の [コントロール プレーン承認済みネットワーク] フィールドで、[editコントロール プレーン承認済みネットワークの編集] をクリックします。
[
削除] をクリックします。[変更を保存] をクリックします。
トラブルシューティング
以降のセクションでは、承認済みネットワークに関連する一般的な問題の解決方法について説明します。
CIDR ブロックが多すぎる
50 個を超える CIDR ブロックがあるクラスタを作成または更新しようとすると、gcloud
は次のエラーを返します。
ERROR: (gcloud.container.clusters.update) argument --master-authorized-networks: too many args
この問題を解決するには、クラスタが公開されている場合は指定する CIDR ブロックの数を 50 個以下にしてください。クラスタが非公開の場合は、指定する CIDR ブロックの数を 100 個以下にしてください。
サーバーに接続できない
CIDR ブロックの指定に誤りがあると、kubectl
コマンドはタイムアウトになります。
Unable to connect to the server: dial tcp MASTER_IP: getsockopt: connection timed out
クラスタを作成または更新するときは、CIDR ブロックを正しく指定するよう注意してください。