このページでは、Google Kubernetes Engine(GKE)クラスタ内のクラスタ コントロール プレーンへのアクセスを承認済みネットワークに許可する方法について説明します。GKE ネットワーキングに関する一般的な情報については、ネットワークの概要をご覧ください。
概要
承認済みネットワークを使用すると、CIDR 範囲を指定して、その範囲内の IP アドレスから HTTPS を使用してクラスタのコントロール プレーン エンドポイントにアクセスできるようになります。承認済みネットワークは、すべてのクラスタに対応しています。
GKE では、TLS(Transport Layer Security)と認証の両方を使用して、公共のインターネットからクラスタ コントロール プレーン エンドポイントに安全にアクセスできます。これにより、クラスタをどこからでも柔軟に管理できます。承認済みネットワークを使用することで、特定の IP アドレスセットに対するアクセスをさらに制限できます。
限定公開クラスタは、承認済みネットワークと同様に、内部 IP アドレスのみを持つノードで動作します。また、Google Cloud 外部の信頼されていない IP アドレスからコントロール プレーンのエンドポイントへのアクセスを許可しません。
限定公開クラスタで承認済みネットワークを使用すると、次の方法でのみコントロール プレーンに到達可能になります。
- Compute Engine 仮想マシン(VM)Cloud Functions、Cloud Run など、Google Cloud 内部のアドレス
- 許可された CIDR ブロック
- クラスタの VPC 内のノードと Pod
- Google がお客様のコントロール プレーンを管理するために本番環境で実行する内部ジョブ
承認済みネットワークと限定公開クラスタ ユーザーは、Cloud Run や Cloud Functions などのクラウド サービスからコントロール プレーンにアクセスしないようにしてください。このアクセスは今後削除されるためです。
利点
承認済みネットワークを追加すると、クラスタにさらなるセキュリティ上の利点がもたらされます。承認済みネットワークにより、指定された特定のアドレスセット(自分の環境から発信されるものなど)に対してアクセスが許可されます。これによって、クラスタの認証や承認メカニズムに脆弱性が存在する場合でも、クラスタへのアクセスを保護できます。
制限事項
- パブリック クラスタには最大 50 個の承認済みネットワーク CIDR 範囲を設定できます。限定公開クラスタに設定できる最大数は 100 です。
- 承認済みネットワークを持つクラスタが使用しているサブネットを拡張する場合は、拡張された IP アドレス範囲を含むように承認済みネットワークを更新する必要があります。
始める前に
作業を始める前に、次のことを確認してください。
- Google Kubernetes Engine API が有効になっていることを確認します。 Google Kubernetes Engine API の有効化
- Google Cloud CLI がインストールされていることを確認します。
- 次のいずれかの方法で、プロジェクトにデフォルトの Google Cloud CLI 設定をセットアップします。
- プロジェクトのデフォルトの設定全般を確認する場合は、
gcloud init
を使用します。 gcloud config
を使用して、プロジェクト ID、ゾーン、リージョンを個別に設定します。-
gcloud init
を実行して、次の操作を行います。gcloud init
リモート サーバーで SSH を使用している場合は、
--console-only
フラグを指定して、コマンドがブラウザを起動しないようにします。gcloud init --console-only
- Google Cloud アカウントを使用できるように、gcloud CLI の承認手順を行います。
- 新しい構成を作成するか、既存の構成を選択します。
- Google Cloud プロジェクトを選択します。
- デフォルトの Compute Engine ゾーンを選択します。
- デフォルトの Compute Engine リージョンを選択します。
- デフォルトのプロジェクト ID を設定します。
gcloud config set project PROJECT_ID
- デフォルトの Compute Engine リージョン(例:
us-central1
)を設定します。gcloud config set compute/region COMPUTE_REGION
- デフォルトの Compute Engine ゾーン(例:
us-central1-c
)を設定します。gcloud config set compute/zone COMPUTE_ZONE
gcloud
を最新バージョンに更新します。gcloud components update
gcloud init
gcloud config
デフォルトの場所を設定することで、gcloud CLI のエラー(One of [--zone, --region] must be supplied: Please specify location
など)を防止できます。
承認済みネットワークを使用するクラスタを作成する
1 つ以上の承認済みネットワークを使用するクラスタを作成するには、Google Cloud CLI、Google Cloud Console、または GKE API を使用します。
gcloud
次のコマンドを実行します。
gcloud container clusters create 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
Console
Cloud Console で Google Kubernetes Engine ページに移動します。
[add_box作成] をクリックします。
必要に応じてクラスタを構成します。
ナビゲーション メニューの [クラスタ] で、[ネットワーキング] をクリックします。
[高度なネットワーキングのオプション] で [コントロール プレーン承認済みネットワークを有効にする] チェックボックスをオンにします。
[承認済みネットワークを追加] をクリックします。
ネットワークの名前を入力します。
[ネットワーク] に、クラスタ コントロール プレーンへのアクセス権を付与する CIDR 範囲を入力します。
[完了] をクリックします。必要に応じて、承認済みネットワークを追加します。
[作成] をクリックします。
API
クラスタ create
リクエストで masterAuthorizedNetworksConfig
オブジェクトを指定します。
"masterAuthorizedNetworksConfig": {
"enabled": true,
"cidrBlocks": [
{
"displayName": string,
"cidrBlock": string
}
]
}
詳細については、MasterAuthorizedNetworksConfig をご覧ください。
承認済みネットワークを使用する限定公開クラスタの作成
1 つ以上の承認済みネットワークを持つ限定公開クラスタを作成する方法については、限定公開クラスタをご覧ください。
承認済みネットワークを既存のクラスタに追加する
既存のクラスタに承認済みネットワークを追加するには、gcloud CLI または Cloud Console を使用します。
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
Console
Cloud Console で Google Kubernetes Engine のページに移動します。
変更するクラスタの名前をクリックします。
[ネットワーキング] の [コントロール プレーン承認済みネットワーク] フィールドで、[editコントロール プレーン承認済みネットワークの編集] をクリックします。
[コントロール プレーン承認済みネットワークを有効にする] チェックボックスをオンにします。
[承認済みネットワークを追加] をクリックします。
ネットワークの名前を入力します。
[ネットワーク] に、クラスタ コントロール プレーンへのアクセス権を付与する CIDR 範囲を入力します。
[完了] をクリックします。必要に応じて、承認済みネットワークを追加します。
[変更を保存] をクリックします。
API
クラスタの update
リクエストで desiredMasterAuthorizedNetworksConfig
フィールドを指定します。このフィールドで、MasterAuthorizedNetworksConfig オブジェクトを次のように指定します。
"desiredMasterAuthorizedNetworksConfig": {
object(MasterAuthorizedNetworksConfig)
}
承認済みネットワークを確認する
既存のクラスタの承認済みネットワークを確認するには、gcloud CLI または Cloud Console を使用します。
gcloud
次のコマンドを実行します。
gcloud container clusters describe CLUSTER_NAME
出力は次のようになります。
...
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 CLI または Cloud Console を使用します。
gcloud
次のコマンドを実行します。
gcloud container clusters update CLUSTER_NAME \
--no-enable-master-authorized-networks
Console
Cloud Console で Google Kubernetes Engine のページに移動します。
変更するクラスタの名前をクリックします。
[ネットワーキング] の [コントロール プレーン承認済みネットワーク] フィールドで、[editコントロール プレーン承認済みネットワークの編集] をクリックします。
[コントロール プレーン承認済みネットワークを有効にする] チェックボックスをオフにします。
[変更を保存] をクリックします。
承認済みネットワークを削除する
既存クラスタのカスタム承認済みネットワークをすべて削除するには、gcloud CLI または Cloud Console を使用します。
gcloud
次のコマンドを実行します。
gcloud container clusters update CLUSTER_NAME \
--enable-master-authorized-networks
```
Console
Cloud Console で Google Kubernetes Engine ページに移動します。
変更するクラスタの名前をクリックします。
[ネットワーキング] の [コントロール プレーン承認済みネットワーク] フィールドで、[editコントロール プレーン承認済みネットワークの編集] をクリックします。
CIDR を削除するには、[
削除] をクリックします。[変更を保存] をクリックします。
トラブルシューティング
以降のセクションでは、承認済みネットワークに関連する一般的な問題の解決方法について説明します。
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 ブロックを正しく指定するよう注意してください。