クラスタ マスター アクセス用の承認済みネットワークの追加

このページでは、承認済みネットワークに Google Kubernetes Engine クラスタ内のクラスタ マスターへのアクセスを許可する方法について説明します。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 の使用

  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]...
    

--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]...
    

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

次のステップ