コントロール プレーン アクセス用の承認済みネットワークの追加

このページでは、承認済みネットワークに、Google Kubernetes Engine(GKE)クラスタ内のクラスタ コントロール プレーン(マスター)へのアクセスを許可する方法について説明します。GKE ネットワーキングに関する一般的な情報については、ネットワークの概要をご覧ください。

概要

承認済みネットワークを使用すると、CIDR 範囲を指定し、その範囲内の IP アドレスから HTTPS を使用してクラスタのコントロール プレーン エンドポイントにアクセスできるようになります。承認済みネットワークはすべてのクラスタと互換性があります。

GKE では、TLS(Transport Layer Security)と認証の両方を使用して、公共のインターネットからクラスタ コントロール プレーン エンドポイントへの安全なアクセスを実現します。これにより、クラスタをどこからでも柔軟に管理できます。承認済みネットワークを使用することで、特定の IP アドレスセットに対するアクセスをさらに制限できます。

利点

承認済みネットワークを追加すると、クラスタにさらなるセキュリティ上の利点がもたらされます。承認済みネットワークにより、指定された特定のアドレスセット(自分の環境から発信されるものなど)に対してアクセスが許可されます。これによって、クラスタの認証や承認メカニズムに脆弱性が存在する場合でも、クラスタへのアクセスを保護できます。

限定公開クラスタのメリット

限定公開クラスタでは、ノードが外部 IP アドレスなしで動作し、必要に応じて、公開アクセス可能なエンドポイントなしでクラスタ コントロール プレーンを実行します。また、デフォルトでは、Google Cloud IP アドレスでコントロール プレーン エンドポイントにアクセスすることはできません。承認済みネットワークを限定公開クラスタで使用すると、許可された CIDR、クラスタの VPC 内のノード、コントロール プレーンを管理する Google 内部の本番環境ジョブのみが、コントロール プレーンにアクセスできます。

制限事項

  • 1 つのクラスタが持てる承認済みネットワークの CIDR 範囲は 50 個までです。

始める前に

作業を始める前に、次のことを確認してください。

次のいずれかの方法で gcloud のデフォルトの設定を指定します。

  • gcloud init。デフォルトの設定全般を確認する場合に使用します。
  • gcloud config。プロジェクト ID、ゾーン、リージョンを個別に設定する場合に使用します。

gcloud init の使用

エラー One of [--zone, --region] must be supplied: Please specify location を受信した場合は、このセクションの内容を実施します。

  1. gcloud init を実行して、次の操作を行います。

    gcloud init

    リモート サーバーで SSH を使用している場合は、--console-only フラグを指定して、コマンドがブラウザを起動しないようにします。

    gcloud init --console-only
  2. 手順に従って gcloud を承認し、Google Cloud アカウントを使用します。
  3. 新しい構成を作成するか、既存の構成を選択します。
  4. Google Cloud プロジェクトを選択します。
  5. デフォルトの 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 cidr,cidr...

以下を置き換えます。

  • cluster-name: 既存のクラスタの名前。
  • cidr: 承認済みネットワークの 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

  1. Cloud Console で Google Kubernetes Engine のメニューに移動します。

    Google Kubernetes Engine のメニューに移動

  2. [クラスタを作成] ボタンをクリックします。

  3. 必要に応じてクラスタを構成します。

  4. ナビゲーション パネルの [クラスタ] の下の [ネットワーキング] をクリックします。

  5. [マスター承認済みネットワークを有効にする] チェックボックスをオンにします。

  6. [承認済みネットワークを追加] ボタンをクリックします。

  7. [名前] に、ネットワークに付ける名前を入力します。

  8. [ネットワーク] に、クラスタ コントロール プレーンへのアクセスを許可する CIDR 範囲を入力します。

  9. [完了] をクリックします。必要に応じて、承認済みネットワークを追加します。

  10. [作成] をクリックします。

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 cidr,cidr...

以下を置き換えます。

  • cluster-name: 既存のクラスタの名前。
  • cidr: 承認済みネットワークの 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

  1. Cloud Console で Google Kubernetes Engine のメニューに移動します。

    Google Kubernetes Engine のメニューに移動

  2. 目的のクラスタを選択します。

  3. [編集] をクリックします。

  4. [マスター承認済みのネットワーク] プルダウン メニューから、[有効] を選択します(まだ有効になっていない場合)。

  5. [承認済みネットワークを追加] をクリックします。

  6. [名前] に、ネットワークに付ける名前を入力します。

  7. [ネットワーク] に、コントロール プレーンへのアクセスを許可する CIDR 範囲を入力します。

  8. [完了] をクリックします。必要に応じて、承認済みネットワークを追加します。

  9. メニューの下部にある [保存] をクリックします。

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

  1. Cloud Console で Google Kubernetes Engine のメニューに移動します。

    Google Kubernetes Engine のメニューに移動

  2. 目的のクラスタを選択します。

[マスター承認済みのネットワーク] フィールドに、許可されている 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

  1. Cloud Console で Google Kubernetes Engine のメニューに移動します。

    Google Kubernetes Engine のメニューに移動

  2. 目的のクラスタを選択します。

  3. [編集] をクリックします。

  4. [マスター承認済みのネットワーク] プルダウン メニューから、[無効] を選択します。

  5. [保存] をクリックします。

トラブルシューティング

以降のセクションでは、承認済みネットワークに関連する一般的な問題の解決方法について説明します。

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 ブロックを正しく指定するよう注意してください

次のステップ