このページでは、承認済みネットワークに、Google Kubernetes Engine(GKE)クラスタ内のクラスタ コントロール プレーン(マスター)へのアクセスを許可する方法について説明します。GKE ネットワーキングに関する一般的な情報については、ネットワークの概要をご覧ください。
概要
承認済みネットワークを使用すると、CIDR 範囲を指定して、その範囲内の IP アドレスから HTTPS を使用してクラスタのコントロール プレーン エンドポイントにアクセスできるようになります。承認済みネットワークは、すべてのクラスタに対応しています。
GKE では、TLS(Transport Layer Security)と認証の両方を使用して、公共のインターネットからクラスタ コントロール プレーン エンドポイントへの安全なアクセスを実現します。これにより、クラスタをどこからでも柔軟に管理できます。承認済みネットワークを使用することで、特定の IP アドレスセットに対するアクセスをさらに制限できます。
利点
承認済みネットワークを追加すると、クラスタにさらなるセキュリティ上の利点がもたらされます。承認済みネットワークにより、指定された特定のアドレスセット(自分の環境から発信されるものなど)に対してアクセスが許可されます。これによって、クラスタの認証や承認メカニズムに脆弱性が存在する場合でも、クラスタへのアクセスを保護できます。
限定公開クラスタのメリット
限定公開クラスタでは、ノードが外部 IP アドレスなしで動作し、必要に応じて、公開アクセス可能なエンドポイントなしでクラスタ コントロール プレーンを実行します。また、デフォルトでは、Google Cloud IP アドレスでコントロール プレーン エンドポイントにアクセスすることはできません。承認済みネットワークを限定公開クラスタで使用すると、許可された CIDR、クラスタの VPC 内のノード、コントロール プレーンを管理する Google 内部の本番環境ジョブのみが、コントロール プレーンにアクセスできます。
制限事項
- 1 つのクラスタが持てる承認済みネットワークの CIDR 範囲は 50 個までです。
始める前に
作業を始める前に、次のことを確認してください。
- Google Kubernetes Engine API が有効になっていることを確認します。 Google Kubernetes Engine API の有効化
- Cloud SDK がインストール済みであることを確認します。
次のいずれかの方法で gcloud
のデフォルトの設定を指定します。
gcloud init
。デフォルトの設定全般を確認する場合に使用します。gcloud config
。プロジェクト ID、ゾーン、リージョンを個別に設定する場合に使用します。
gcloud init の使用
エラー One of [--zone, --region] must be supplied: Please specify
location
を受信した場合は、このセクションの内容を実施します。
-
gcloud init
を実行して、次の操作を行います。gcloud init
リモート サーバーで SSH を使用している場合は、
--console-only
フラグを指定して、コマンドがブラウザを起動しないようにします。gcloud init --console-only
- 手順に従って
gcloud
を承認し、Google Cloud アカウントを使用します。 - 新しい構成を作成するか、既存の構成を選択します。
- Google Cloud プロジェクトを選択します。
- デフォルトの Compute Engine ゾーンを選択します。
gcloud config の使用
- デフォルトのプロジェクト ID を設定します。
gcloud config set project project-id
- ゾーンクラスタを使用する場合は、デフォルトのコンピューティング ゾーンを設定します。
gcloud config set compute/zone compute-zone
- リージョン クラスタを使用する場合は、デフォルトのコンピューティング リージョンを設定します。
gcloud config set compute/region compute-region
gcloud
を最新バージョンに更新します。gcloud components update
承認済みネットワークを持つクラスタの作成
gcloud
ツール、Google Cloud Console、または GKE API を使用して、1 つ以上の承認済みネットワークを使用するクラスタを作成できます。
gcloud
次のコマンドを実行します。
gcloud container clusters create cluster-name \
--enable-master-authorized-networks \
--master-authorized-networks cidr1,cidr2...
以下を置き換えます。
- cluster-name: 既存のクラスタの名前。
- cidr1、cidr2: 承認済みネットワークの CIDR 値。
--master-authorized-networks
フラグを使用すると、HTTPS を介してクラスタ コントロール プレーンのエンドポイントへのアクセスを許可するカンマ区切りの CIDR(8.8.8.0/24
など)を最大 50 個まで指定できます。
例:
gcloud container clusters create example-cluster \
--enable-master-authorized-networks \
--master-authorized-networks 8.8.8.8/32,8.8.8.0/24
Console
Cloud Console で Google Kubernetes Engine のメニューに移動します。
[クラスタを作成] ボタンをクリックします。
必要に応じてクラスタを構成します。
ナビゲーション パネルの [クラスタ] の下の [ネットワーキング] をクリックします。
[マスター承認済みネットワークを有効にする] チェックボックスをオンにします。
[承認済みネットワークを追加] ボタンをクリックします。
[名前] に、ネットワークに付ける名前を入力します。
[ネットワーク] に、クラスタ コントロール プレーンへのアクセスを許可する CIDR 範囲を入力します。
[完了] をクリックします。必要に応じて、承認済みネットワークを追加します。
[作成] をクリックします。
API
クラスタ create
リクエストで masterAuthorizedNetworksConfig
オブジェクトを指定します。
"masterAuthorizedNetworksConfig": {
"enabled": true,
"cidrBlocks": [
{
"displayName": string,
"cidrBlock": string
}
]
}
詳細については、MasterAuthorizedNetworksConfig をご覧ください。
承認済みネットワークを持つ限定公開クラスタの作成
承認済みネットワークを 1 つ以上持つ限定公開クラスタを作成する方法については、限定公開クラスタをご覧ください。
承認済みネットワークを既存のクラスタに追加する
既存のクラスタに承認済みネットワークを追加するには、gcloud
コマンドライン ツールまたは Cloud Console を使用できます。
gcloud
次のコマンドを実行します。
gcloud container clusters update cluster-name \
--enable-master-authorized-networks \
--master-authorized-networks cidr1,cidr2...
以下を置き換えます。
- cluster-name: 既存のクラスタの名前。
- cidr1、cidr2: 承認済みネットワークの CIDR 値。
--master-authorized-networks
フラグを使用すると、HTTPS を介してクラスタ コントロール プレーンのエンドポイントへのアクセスを許可するカンマ区切りの CIDR(8.8.8.0/24
など)を最大 50 個まで指定できます。
例:
gcloud container clusters update example-cluster \
--enable-master-authorized-networks \
--master-authorized-networks 8.8.8.8/32,8.8.8.0/24
Console
Cloud Console で Google Kubernetes Engine のメニューに移動します。
目的のクラスタを選択します。
[編集] をクリックします。
[マスター承認済みのネットワーク] プルダウン メニューから、[有効] を選択します(まだ有効になっていない場合)。
[承認済みネットワークを追加] をクリックします。
[名前] に、ネットワークに付ける名前を入力します。
[ネットワーク] に、コントロール プレーンへのアクセスを許可する CIDR 範囲を入力します。
[完了] をクリックします。必要に応じて、承認済みネットワークを追加します。
メニューの下部にある [保存] をクリックします。
API
クラスタ update
リクエストで desiredMasterAuthorizedNetworksConfig
フィールドを指定します。このフィールドで、MasterAuthorizedNetworksConfig オブジェクトを次のように指定します。
"desiredMasterAuthorizedNetworksConfig": {
object(MasterAuthorizedNetworksConfig)
}
承認済みネットワークの確認
既存のクラスタ内で承認済みネットワークを確認するには、gcloud
コマンドライン ツールまたは Cloud Console を使用できます。
gcloud
次のコマンドを実行します。
gcloud container clusters describe cluster-name
コマンド出力で、masterAuthorizedNetworksConfig
フィールドを探します。
...
masterAuthorizedNetworksConfig:
cidrBlocks:
- cidrBlock: 8.8.8.8/32
- cidrBlock: 8.8.4.4/32
enabled: true
...
Console
Cloud Console で Google Kubernetes Engine のメニューに移動します。
目的のクラスタを選択します。
[マスター承認済みのネットワーク] フィールドに、許可された CIDR が表示されます。
API
get
リクエストを送信します。masterAuthorizedNetworksConfig
フィールドの下で CIDR ブロックを探します。例:
"masterAuthorizedNetworksConfig": {
"enabled": true,
"cidrBlocks": [
{
"displayName": "Office",
"cidrBlock": "192.0.2.0/24"
}
]
}
承認済みネットワークの無効化
既存のクラスタ用の承認済みネットワークを無効化するには、gcloud
コマンドライン ツールまたは Cloud Console を使用できます。
gcloud
次のコマンドを実行します。
gcloud container clusters update cluster-name \
--no-enable-master-authorized-networks
Console
Cloud Console で Google Kubernetes Engine のメニューに移動します。
目的のクラスタを選択します。
[編集] をクリックします。
[マスター承認済みのネットワーク] プルダウン メニューから、[無効] を選択します。
[保存] をクリックします。
トラブルシューティング
以降のセクションでは、承認済みネットワークに関連する一般的な問題の解決方法について説明します。
CIDR ブロックが多すぎる
50 個を超える CIDR ブロックがあるクラスタを作成または更新しようとすると、gcloud
は次のエラーを返します。
ERROR: (gcloud.container.clusters.update) argument --master-authorized-networks: too many args
この問題を解決するには、指定する CIDR ブロックの数を 50 個以下にしてください。
サーバーに接続できません
CIDR ブロックの指定に誤りがあると、kubectl
コマンドはタイムアウトになります。
Unable to connect to the server: dial tcp MASTER_IP: getsockopt: connection timed out
クラスタを作成または更新するときは、CIDR ブロックを正しく指定するよう注意してください。