GKE でネットワーク分離をカスタマイズする


このページでは、クラスタの作成時に Google Kubernetes Engine(GKE)クラスタのネットワーク分離を構成する方法について説明します。

ベスト プラクティス:

組織のネットワーク アーキテクト、ネットワーク管理者、またはネットワーク アーキテクチャの定義、実装、メンテナンスを担当する他のネットワーク エンジニア チームと協力して、クラスタ ネットワークの分離を計画し、設計します。

クラスタ ネットワーク分離の仕組み

GKE クラスタでは、ネットワーク分離は、クラスタ コンポーネントにアクセスできるユーザーと方法によって異なります。管理者は以下を制御できます。

  • コントロール プレーン アクセス: コントロール プレーンへの外部アクセス、制限付きアクセス、無制限アクセスをカスタマイズできます。
  • クラスタ ネットワーキング: Standard クラスタ内のノードまたは Autopilot クラスタ内のワークロードにアクセスできるユーザーを選択できます。

クラスタを作成する前に、次の点を考慮してください。

  1. 誰がコントロール プレーンにアクセスできますか。また、コントロール プレーンはどのように公開されますか。
  2. ノードまたはワークロードはどのように公開されていますか?

これらの質問に回答するには、ネットワーク分離についての計画と設計のガイドラインに沿って対応してください。

制限事項

デフォルトでは、GKE はクラスタを VPC ネイティブ クラスタとして作成します。VPC ネイティブ クラスタは、レガシー ネットワークをサポートしていません。

クラスタを作成する際の IP アドレス範囲とトラフィックに関するルールを表示するには、次のセクションを開きます。

始める前に

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

  • Google Kubernetes Engine API を有効にする。
  • Google Kubernetes Engine API の有効化
  • このタスクに Google Cloud CLI を使用する場合は、gcloud CLI をインストールして初期化する。すでに gcloud CLI をインストールしている場合は、gcloud components update を実行して最新のバージョンを取得する。

コントロール プレーンへのアクセスを構成する

Google Cloud CLI を使用して任意のバージョンの GKE クラスタを作成する場合、またはバージョン 1.29 以降でコンソールを使用して作成する場合、コントロール プレーンには次のインターフェースからアクセスできます。

DNS ベースのエンドポイント

コントロール プレーンへのアクセスは、送信元トラフィックの DNS 解決によって異なります。DNS ベースのエンドポイントを有効にすると、次のメリットが得られます。

  • IAM ポリシーに基づいて動的アクセス ポリシーを作成する。
  • 踏み台インスタンスまたはプロキシ ノードを設定しなくても、他の VPC ネットワークまたは外部ロケーションからコントロール プレーンにアクセスできます。

このエンドポイントにアクセスするリクエストを認証して承認するには、IAM 権限 container.clusters.connect を構成します。この権限を構成するには、Google Cloud プロジェクトに次の IAM ロールを割り当てます。

  • roles/container.developer
  • roles/container.viewer

VPC Service Controls を使用して、コントロール プレーン アクセスにセキュリティ レイヤを追加することもできます。VPC Service Controls は、Google Cloud APIs 全体で一貫して機能します。

IP ベースのエンドポイント

コントロール プレーン エンドポイントへのアクセスは送信元 IP アドレスに依存し、承認済みネットワークによって制御されます。コントロール プレーンの IP ベースのエンドポイントへのアクセスを管理できます。たとえば、次のようなアクセスを管理できます。

  • IP ベースのエンドポイントを有効または無効にします。
  • 外部エンドポイントを有効または無効にして、外部トラフィックからのアクセスを許可します。コントロール プレーンの IP ベースのエンドポイントを有効にすると、内部エンドポイントは常に有効になります。
  • 承認済みネットワークを追加して、パブリック IP アドレスからのアクセスを許可リストに登録または拒否します。承認済みネットワークを構成しない場合、コントロール プレーンは任意の外部 IP アドレスからアクセスできます。これには、制限のないパブリック インターネットまたは Google Cloud 外部 IP アドレスが含まれます。
  • クラスタ内の任意のプライベート IP アドレスまたはすべてのプライベート IP アドレスからのアクセスを許可リストに登録または拒否します。
  • Google Cloud 外部 IP アドレスからのアクセスを許可リストに登録または拒否します。Google Cloud でホストされているお客様が使用する VM に割り当てられた外部 IP アドレスです。
  • 他の Google Cloud リージョンの IP アドレスからのアクセスを許可リストに登録または拒否する。

コントロール プレーン アクセスを定義する前に、IP ベースのエンドポイントの使用制限を確認してください。

クラスタを作成してコントロール プレーン アクセスを定義する

Autopilot クラスタまたは Standard クラスタを作成または更新するには、Google Cloud CLI または Google Cloud コンソールを使用します。

Console

デプロイを作成するには、次の手順を完了します。

  1. Google Cloud コンソールで [Google Kubernetes Engine] ページに移動します。

    Google Kubernetes Engine に移動

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

  3. プロジェクトのニーズに基づいてクラスタの属性を構成します。

  4. ナビゲーション メニューで、[ネットワーキング] をクリックします。

  5. [コントロール プレーン アクセス] で、コントロール プレーン エンドポイントを構成します。

    1. [DNS を使用したアクセス] チェックボックスをオンにして、コントロール プレーンの DNS ベースのエンドポイントを有効にします。
    2. [IPv4 アドレスを使用してアクセス] チェックボックスをオンにして、コントロール プレーンの IP ベースのエンドポイントを有効にします。コントロール プレーンにアクセスできる IP アドレスを定義するに記載されている構成を使用して、IP ベースのエンドポイントへのアクセスをカスタマイズします。

gcloud

Autopilot クラスタの場合は、次のコマンドを実行します。

  gcloud container clusters create-auto CLUSTER_NAME \
    --enable-ip-access  \
    --enable-dns-access

Standard クラスタの場合は、次のコマンドを実行します。

  gcloud container clusters create CLUSTER_NAME \
      --enable-ip-access \
      --enable-dns-access

次のように置き換えます。

  • CLUSTER_NAME: クラスタの名前。

どちらのコマンドにも、次の機能を有効にするフラグが含まれています。

  • enable-dns-access: コントロール プレーンの DNS ベースのエンドポイントを使用して、コントロール プレーンへのアクセスを有効にします。
  • enable-ip-access: IPv4 アドレスを使用してコントロール プレーンへのアクセスを有効にします。コントロール プレーンの内部エンドポイントと外部エンドポイントの両方を無効にする場合は、このフラグを省略します。

コントロール プレーンにアクセスできる IP アドレスを定義するに記載されているフラグを使用して、IP ベースのエンドポイントへのアクセスをカスタマイズします。

コントロール プレーンにアクセスできる IP アドレスを定義する

コントロール プレーンにアクセスできる IP アドレスを定義するには、次の操作を行います。

Console

  1. [コントロール プレーン アクセス] で、[承認済みネットワークを有効にする] を選択します。
  2. [承認済みネットワークを追加] をクリックします。
  3. ネットワークの名前を入力します。
  4. [ネットワーク] に、クラスタ コントロール プレーンへのアクセス権を付与する CIDR 範囲を入力します。
  5. [完了] をクリックします。
  6. 必要に応じて、承認済みネットワークを追加します。
コントロール プレーンの IP アドレスのファイアウォール ルールを定義する

コントロール プレーンの IP アドレス ファイアウォール ルールを定義する手順は次のとおりです。

  1. [IP アドレスのファイアウォール ルールを表示] セクションを開きます。
  2. パブリック IP アドレスからコントロール プレーンにアクセスできるようにするには、[コントロール プレーンの外部 IP アドレスを使用してアクセスする] チェックボックスをオンにします。

    ベスト プラクティス:

    コントロール プレーンへのアクセスを制限するために、コントロール プレーンの承認済みネットワークを定義します。

  3. [コントロール プレーンの内部 IP アドレスを使用して任意のリージョンからアクセスする] チェックボックスをオンにします。任意の Google Cloud リージョンの内部 IP アドレスからコントロール プレーンの内部エンドポイントにアクセスできます。

  4. [コントロール プレーンの内部エンドポイントに承認済みネットワークを適用する] を選択します。コントロール プレーンの内部エンドポイントにアクセスできるのは、[承認済みネットワークを追加] リストで定義した IP アドレスのみです。内部エンドポイントはデフォルトで有効になっています。

  5. [承認済みネットワークに Google Cloud の外部 IP アドレスを追加する] を選択します。Google Cloud のすべてのパブリック IP アドレスはコントロール プレーンにアクセスできます。

gcloud

コントロール プレーンの外部エンドポイントと内部エンドポイントにアクセスできる IP アドレスを構成するには、次のフラグを使用します。

  • enable-private-endpoint: 外部エンドポイントへのアクセスが無効であることを指定します。外部 IP アドレスからのコントロール プレーンへのアクセスを許可する場合は、このフラグを省略します。この場合、enable-master-authorized-networks フラグを使用して外部エンドポイントへのアクセスを制御することを強くおすすめします。
  • enable-master-authorized-networks: は、外部エンドポイントへのアクセスが承認された IP アドレス範囲に制限されることを指定します。
  • master-authorized-networks: 承認済みネットワークの CIDR 値を一覧表示します。このリストはカンマ区切りのリストです。例: 8.8.8.8/32,8.8.8.0/24

    ベスト プラクティス:

    enable-master-authorized-networks フラグを使用して、コントロール プレーンへのアクセスを制限します。

  • enable-authorized-networks-on-private-endpoint: 内部エンドポイントへのアクセスが、enable-master-authorized-networks フラグで承認した IP アドレス範囲に制限されることを指定します。

  • no-enable-google-cloud-access: Google Cloud 外部 IP アドレスからのコントロール プレーンへのアクセスを拒否します。

  • enable-master-global-access: 他の Google Cloud リージョンの IP アドレスからのアクセスを許可します。

    クラスタレベルでノードまたは Pod の分離を定義して、クラスタ ネットワークの構成を続行できます。

クラスタを作成して、ノード ネットワークとサブネット、IP スタックタイプ、IP アドレスの割り当てなど、クラスタレベルで属性を定義することもできます。詳細については、VPC ネイティブ クラスタを作成するをご覧ください。

コントロール プレーン アクセスを変更する

クラスタのコントロール プレーン アクセスを変更するには、gcloud CLI または Google Cloud コンソールを使用します。

Console

  1. Google Cloud コンソールで [Google Kubernetes Engine] ページに移動します。

    Google Kubernetes Engine に移動

  2. クラスタリストで、クラスタ名をクリックします。

  3. [クラスタの詳細] タブの [コントロール プレーン ネットワーキング] で、 をクリックします。

  4. [コントロール プレーン ネットワーキングの編集] ダイアログで、ユースケースの要件に基づいてコントロール プレーン アクセスを変更します。

  5. コントロール プレーンの構成を確認する

gcloud

次のコマンドを実行し、ユースケースに適したフラグを追加します。次のフラグを使用できます。

  • enable-dns-access: コントロール プレーンの DNS ベースのエンドポイントを使用して、コントロール プレーンへのアクセスを有効にします。
  • enable-ip-access: IPv4 アドレスを使用してコントロール プレーンへのアクセスを有効にします。コントロール プレーンの内部エンドポイントと外部エンドポイントの両方を無効にする場合は、このフラグを省略します。
  • enable-private-endpoint: 外部エンドポイントへのアクセスが無効であることを指定します。外部 IP アドレスからのコントロール プレーンへのアクセスを許可する場合は、このフラグを省略します。この場合、enable-master-authorized-networks フラグを使用して外部エンドポイントへのアクセスを制御することを強くおすすめします。
  • enable-master-authorized-networks: は、外部エンドポイントへのアクセスが承認された IP アドレス範囲に制限されることを指定します。
  • master-authorized-networks: 承認済みネットワークの CIDR 値を一覧表示します。このリストはカンマ区切りのリストです。例: 8.8.8.8/32,8.8.8.0/24

    ベスト プラクティス:

    enable-master-authorized-networks フラグを使用して、コントロール プレーンへのアクセスを制限します。

  • enable-authorized-networks-on-private-endpoint: 内部エンドポイントへのアクセスが、enable-master-authorized-networks フラグで承認した IP アドレス範囲に制限されることを指定します。

  • no-enable-google-cloud-access: Google Cloud 外部 IP アドレスからのコントロール プレーンへのアクセスを拒否します。

  • enable-master-global-access: 他の Google Cloud リージョンの IP アドレスからのアクセスを許可します。

    gcloud container clusters update CLUSTER_NAME
    

    CLUSTER_NAME はクラスタの名前で置き換えます。

コントロール プレーンの構成を確認する

クラスタのエンドポイントを表示するには、gcloud CLI または Google Cloud コンソールを使用します。

Console

  1. Google Cloud コンソールで [Google Kubernetes Engine] ページに移動します。

    Google Kubernetes Engine に移動

  2. クラスタリストで、クラスタ名をクリックします。

  3. [クラスタの詳細] タブの [コントロール プレーン] で、コントロール プレーン エンドポイントの次の特性を確認できます。

    • DNS エンドポイントには、このエンドポイントを有効にしている場合、クラスタの DNS ベースのエンドポイントの名前が含まれます。
    • IPv4 アドレスを使用したコントロール プレーンへのアクセスには、IP ベースのエンドポイントのステータスが含まれます。有効にすると、パブリック エンドポイントとプライベート エンドポイントの情報を確認できます。
    • コントロール プレーンに他のリージョンの Google IP アドレスからアクセスできる場合、[コントロール プレーンの内部 IP アドレスを使用して任意のリージョンからアクセスする] のステータスは [有効] になります。
    • [承認済みネットワーク] には、承認済みネットワークを有効にしている場合、コントロール プレーンにアクセスできる CIDR のリストが表示されます。
    • [コントロール プレーンの内部エンドポイントに承認済みネットワークを適用する] に [有効] ステータスが表示されるのは、[承認済みネットワーク] フィールドの CIDR のみが内部エンドポイントにアクセスできる場合です。
    • [承認済みネットワークに Google Cloud の外部 IP アドレスを追加する] には、Google Cloud の外部 IP アドレスがコントロール プレーンにアクセスできる場合は [有効] ステータスが表示されます。

属性を変更するには、[ IPv4 アドレスを使用したコントロール プレーンへのアクセス] をクリックし、ユースケースに応じて調整します。

gcloud

コントロール プレーンの構成を確認するには、次のコマンドを実行します。

gcloud container clusters describe CLUSTER_NAME

出力には、ネットワーク定義を記述する controlPlaneEndpointsConfig ブロックが含まれます。次のような出力が表示されます。

controlPlaneEndpointsConfig:
dnsEndpointConfig:
  allowExternalTraffic: true
  endpoint: gke-dc6d549babec45f49a431dc9ca926da159ca-518563762004.us-central1-c.autopush.gke.goog
ipEndpointsConfig:
  authorizedNetworksConfig:
    cidrBlocks:
    - cidrBlock: 8.8.8.8/32
    - cidrBlock: 8.8.8.0/24
    enabled: true
    gcpPublicCidrsAccessEnabled: false
    privateEndpointEnforcementEnabled: true
  enablePublicEndpoint: false
  enabled: true
  globalAccess: true
  privateEndpoint: 10.128.0.13

この例では、クラスタの構成は次のとおりです。

  • DNS ベースと IP アドレス ベースの両方のエンドポイントが有効になっています。
  • 承認済みネットワークが有効になり、CIDR 範囲が定義されています。これらの承認済みネットワークは、内部 IP アドレスに適用されます。
  • Google Cloud 外部 IP アドレスからのコントロール プレーンへのアクセスは拒否されます。

コントロール プレーン アクセス構成の例

このセクションでは、次のネットワーク分離の例の構成について詳しく説明します。これらの例を評価して、ユースケースとの類似性を判断します。

  • 例 1: コントロール プレーンには、定義した特定の IP アドレスからアクセスできます。これには、他の Google Cloud リージョンの IP アドレスや Google が予約した IP アドレスが含まれる場合があります。
  • 例 2: コントロール プレーンにどの外部 IP アドレスからもアクセスできません。
例 1: 特定の IP アドレスからコントロール プレーンにアクセスできる

このセクションでは、次のネットワーク分離構成を使用してクラスタを作成します。

  • コントロール プレーンで DNS ベースのエンドポイントが有効になっている。
  • コントロール プレーンでは、デフォルトで有効になっている内部エンドポイントに加えて、外部エンドポイントが有効になっています。
  • コントロール プレーンに承認済みネットワークが定義されており、次の承認済みネットワークのみがコントロール プレーンにアクセスできます。

このクラスタを作成するには、Google Cloud CLI または Google Cloud コンソールを使用します。

Console

  1. Google Cloud コンソールで [Google Kubernetes Engine] ページに移動します。

    Google Kubernetes Engine に移動

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

  3. 要件に合わせてクラスタを構成します。

  4. ナビゲーション メニューで、[ネットワーキング] をクリックします。

  5. [コントロール プレーン アクセス] で、コントロール プレーン エンドポイントを構成します。

    1. [DNS を使用してアクセス] チェックボックスをオンにします。
    2. [IPV4 アドレスを使用してアクセス] チェックボックスをオンにします。
  6. [承認済みネットワークを有効にする] を選択します。

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

  8. ネットワークの名前を入力します。

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

  10. [完了] をクリックします。

  11. 必要に応じて、承認済みネットワークを追加します。

  12. [IP アドレスのファイアウォール ルールを表示] セクションを開きます。

  13. [コントロール プレーンの内部 IP アドレスを使用して任意のリージョンからアクセスする] を選択します。任意の Google Cloud リージョンの内部 IP アドレスは、内部 IP アドレス経由でコントロール プレーンにアクセスできます。

  14. [承認済みネットワークに Google Cloud の外部 IP アドレスを追加する] を選択します。Google Cloud のすべての外部 IP アドレスはコントロール プレーンにアクセスできます。

クラスタ ネットワークの構成を続行するには、クラスタレベルでノードまたは Pod の分離を定義します。

gcloud

次のコマンドを実行します。

gcloud container clusters create-auto CLUSTER_NAME \
    --enable-dns-access \
    --enable-ip-access \
    --enable-master-authorized-networks \
    --enable-master-global-access \
    --master-authorized-networks CIDR1,CIDR2,...

次のように置き換えます。

  • CLUSTER_NAME: GKE クラスタの名前。
  • CIDR1,CIDR2,...: 承認済みネットワークの CIDR 値のカンマ区切りリスト。例: 8.8.8.8/32,8.8.8.0/24
例 2: 内部 IP アドレスからコントロール プレーンにアクセスできる

このセクションでは、次のネットワーク分離構成を使用してクラスタを作成します。

  • コントロール プレーンで DNS ベースのエンドポイントが有効になっている。
  • コントロール プレーンで外部エンドポイントが無効になっています。
  • コントロール プレーンで承認済みネットワークが有効になっている。
  • 任意の Google Cloud リージョンから内部 IP アドレス経由でコントロール プレーンへのすべてのアクセスが許可されます。
  • Google Cloud 外部 IP アドレスはクラスタにアクセスできません。

このクラスタは、Google Cloud CLI または Google Cloud コンソールを使用して作成できます。

Console

  1. Google Cloud コンソールで [Google Kubernetes Engine] ページに移動します。

    Google Kubernetes Engine に移動

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

  3. 要件に合わせてクラスタを構成します。

  4. ナビゲーション メニューで、[ネットワーキング] をクリックします。

  5. [コントロール プレーン アクセス] で、コントロール プレーン エンドポイントを構成します。

    1. [DNS を使用してアクセス] チェックボックスをオンにします。
    2. [IPV4 アドレスを使用してアクセス] チェックボックスをオンにします。
  6. [IP アドレスのファイアウォール ルールを表示] セクションを開きます。

  7. [コントロール プレーンの外部 IP アドレスを使用してアクセスする] の選択を解除します。コントロール プレーンには、どの外部 IP アドレスからもアクセスできません。

  8. [コントロール プレーン アクセス] で、[承認済みネットワークを有効にする] を選択します。

  9. [コントロール プレーンの内部 IP アドレスを使用して任意のリージョンからアクセスする] チェックボックスをオンにします。任意の Google Cloud リージョンの内部 IP アドレスは、内部 IP アドレス経由でコントロール プレーンにアクセスできます。

クラスタ ネットワークの構成を続行するには、クラスタレベルでノードまたは Pod の分離を定義します。

gcloud

次のコマンドを実行します。

gcloud container clusters create-auto CLUSTER_NAME \
    --enable-dns-access \
    --enable-ip-access \
    --enable-private-endpoint \
    --enable-master-authorized-networks \
    --master-authorized-networks CIDR1,CIDR2,... \
    --no-enable-google-cloud-access \
    --enable-master-global-access

次のように置き換えます。

  • CLUSTER_NAME: クラスタの名前。
  • CIDR1,CIDR2,...: 承認済みネットワークの CIDR 値のカンマ区切りリスト。例: 8.8.8.8/32,8.8.8.0/24

クラスタ ネットワーキングを構成する

このセクションでは、内部(限定公開)または外部(公開)アクセスを持つノードを持つようにクラスタを構成します。GKE では、使用するクラスタのタイプに応じてノード ネットワーク構成を組み合わせることができます。

  • Standard クラスタ: ノードプールを作成または更新して、同じクラスタにプライベート ノードまたはパブリック ノードをプロビジョニングできます。たとえば、プライベート ノードを含むノードプールを作成すると、GKE は内部 IP アドレスのみを使用してノードをプロビジョニングします。GKE は既存のノードプールを変更しません。デフォルトのネットワーキング構成をクラスタレベルで定義することもできます。GKE は、新しいノードプールにネットワーク構成が定義されていない場合にのみ、このデフォルトのネットワーク構成を適用します。
  • Autopilot クラスタ: クラスタを作成または更新して、すべてのワークロードのデフォルト ネットワーク構成を定義できます。GKE は、構成に基づいて、パブリック ノードまたはプライベート ノードで新規および既存のワークロードをスケジュールします。個々のワークロードのクラスタ ネットワーク構成を明示的に定義することもできます。

クラスタを構成する

このセクションでは、クラスタレベルでクラスタ ネットワーキングを構成します。GKE は、ノードプールまたはワークロードにこの構成が定義されていない場合に、この構成を考慮します。

クラスタレベルの構成を定義するには、Google Cloud CLI または Google Cloud コンソールを使用します。

Console

クラスタの作成

  1. Google Cloud コンソールで [Google Kubernetes Engine] ページに移動します。

    Google Kubernetes Engine に移動

  2. [ 作成] をクリックし、[Standard] セクションまたは [Autopilot] セクションで [構成] をクリックします。

  3. 要件に合わせてクラスタを構成します。

  4. ナビゲーション メニューで、[ネットワーキング] をクリックします。

  5. [クラスタ ネットワーキング] セクションで、ユースケースに基づいて次の操作を行います。

    1. [プライベート ノードを有効にする] を選択して、内部 IP アドレスのみを持つノード(プライベート ノード)をプロビジョニングし、外部クライアントがノードにアクセスできないようにします。この設定はいつでも変更できます。
    2. [プライベート ノードを有効にする] の選択を解除して、外部 IP アドレス(パブリック)のみを持つノードをプロビジョニングし、外部クライアントがノードにアクセスできるようにします。
  6. [Advanced networking options] セクションで、追加の VPC ネイティブ属性を構成します。詳細については、VPC ネイティブ クラスタを作成するをご覧ください。

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

既存のクラスタを更新する

  1. Google Cloud コンソールで [Google Kubernetes Engine] ページに移動します。

    Google Kubernetes Engine に移動

  2. クラスタリストで、クラスタ名をクリックします。

  3. [プライベート ノード] の [新しいデフォルトのノードプール構成] タブで、[ プライベート ノードを編集] をクリックします。

  4. [Edit Private Nodes] ダイアログで、次のいずれかを行います。

    1. [プライベート ノードを有効にする] を選択して、内部 IP アドレスのみを持つノード(プライベート ノード)をプロビジョニングし、外部クライアントがノードにアクセスできないようにします。この設定はいつでも変更できます。
    2. [プライベート ノードを有効にする] の選択を解除して、外部 IP アドレス(パブリック)のみを持つノードをプロビジョニングし、外部クライアントがノードにアクセスできるようにします。
  5. [変更を保存] をクリックします。

gcloud

クラスタ ネットワーキングを定義するには、次のいずれかのフラグを使用します。

  • enable-private-nodes: 内部 IP アドレスのみを持つノード(プライベート ノード)をプロビジョニングします。このフラグを使用する場合は、次の条件を考慮してください。
    • enable-private-nodes を使用する場合は、enable-ip-alias フラグが必要です。
    • master-ipv4-cidr フラグは、限定公開サブネットの作成に必要ありません。このフラグを使用すると、GKE は master-ipv4-cidr で定義した値を使用する新しいサブネットを作成し、新しいサブネットを使用してコントロール プレーンの内部 IP アドレスをプロビジョニングします。
  • no-enable-private-nodes: 外部 IP アドレスのみを持つノード(パブリック ノード)をプロビジョニングする場合。

Autopilot クラスタで、enable-private-nodes フラグを使用してクラスタを作成または更新します。

  • クラスタを作成するには、次のコマンドを使用します。

    gcloud container clusters create-auto CLUSTER_NAME \
        --enable-private-nodes \
        --enable-ip-alias
    
  • クラスタを更新するには、次のコマンドを使用します。

    gcloud container clusters update CLUSTER_NAME \
        --enable-private-nodes \
        --enable-ip-alias
    

    クラスタの更新は、すべてのノードプールのスケジュールが再設定された後にのみ有効になります。この処理には数時間かかることがあります。

Standard クラスタでは、enable-private-nodes フラグを使用してクラスタを作成または更新します。

  • クラスタを作成するには、次のコマンドを使用します。

    gcloud container clusters create CLUSTER_NAME \
        --enable-private-nodes \
        --enable-ip-alias
    
  • クラスタを更新するには、次のコマンドを使用します。

    gcloud container clusters update CLUSTER_NAME \
        --enable-private-nodes \
        --enable-ip-alias
    

    クラスタの更新は、新しいノードプールにのみ適用されます。GKE は、既存のノードプールでこの構成を更新しません。

クラスタ構成は、ノードプールまたはワークロード レベルのネットワーク構成によって上書きされます。

ノードプールまたはワークロードを構成する

Autopilot クラスタのワークロード レベルでプライベート ノードまたはパブリック ノードを構成する場合、または Standard クラスタのノードプールを構成する場合は、Google Cloud CLI または Google Cloud コンソールを使用します。ワークロードまたはノードプール レベルでネットワーク構成を定義しない場合、GKE はクラスタレベルでデフォルト構成を適用します。

Console

Standard クラスタで次の手順を完了します。

  1. Google Cloud コンソールで [Google Kubernetes Engine] ページに移動します。

    Google Kubernetes Engine に移動

  2. [クラスタの詳細] ページで、変更するクラスタの名前をクリックします。

  3. [ノードプールを追加] をクリックします。

  4. ユースケースに基づいて [プライベート ノードを有効にする] チェックボックスを構成します。

    1. [プライベート ノードを有効にする] を選択して、内部 IP アドレスのみを持つノード(プライベート ノード)をプロビジョニングします。
    2. [プライベート ノードを有効にする] の選択を解除して、外部 IP アドレス(パブリック)のみを持つノードをプロビジョニングし、外部クライアントがノードにアクセスできるようにします。この構成はいつでも変更できます。
  5. 新しいノードプールを構成します。

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

ノードプールの管理の詳細については、ノードプールの追加と管理をご覧ください。

gcloud

  • Autopilot クラスタで、GKE がプライベート ノードで Pod をスケジューリングするようにリクエストするには、次の nodeSelector を Pod 仕様に追加します。

    cloud.google.com/private-node=true
    

    Pod nodeSelectorprivate-node=true を使用して、内部 IP アドレスのみを持つノード(プライベート ノード)に Pod をスケジュールします。

    GKE は、構成に基づいてプライベート ノードまたはパブリック ノードで Pod を再作成します。ワークロードの中断を回避するには、各ワークロードを個別に移行し、その移行をモニタリングしてください。

  • Standard クラスタで、既存のノードプールのプライベート IP アドレスを使用してノードをプロビジョニングするには、次のコマンドを実行します。

    gcloud container node-pools update NODE_POOL_NAME \
        --cluster=CLUSTER_NAME \
        --enable-private-nodes \
        --enable-ip-alias
    

    次のように置き換えます。

    • NODE_POOL_NAME: 編集するノードプールの名前。
    • CLUSTER_NAME: 既存のクラスタの名前。

    ノードプールのネットワーキング構成を定義するには、次のいずれかのフラグを使用します。

    • enable-private-nodes: 内部 IP アドレスのみを持つノード(プライベート ノード)をプロビジョニングする場合。
    • no-enable-private-nodes: 外部 IP アドレスのみを持つノード(パブリック ノード)をプロビジョニングする場合。

高度な構成

以降のセクションでは、クラスタのネットワーク分離を構成する際に必要となる高度な構成について説明します。

Cloud Shell を使用した外部エンドポイントが無効になっているクラスタへのアクセス

クラスタのコントロール プレーンの外部エンドポイントが無効になっている場合、Cloud Shell を使用して GKE コントロール プレーンにアクセスすることはできません。Cloud Shell を使用してクラスタにアクセスする場合は、DNS ベースのエンドポイントを有効にすることをおすすめします。

クラスタへのアクセスを確認する手順は次のとおりです。

  1. DNS ベースのエンドポイントを有効にしている場合は、次のコマンドを実行してクラスタの認証情報を取得します。

    gcloud container clusters get-credentials CLUSTER_NAME \
        --dns-endpoint
    

    IP ベースのエンドポイントを有効にしている場合は、次のコマンドを実行してクラスタの認証情報を取得します。

    gcloud container clusters get-credentials CLUSTER_NAME \
        --project=PROJECT_ID \
        --internal-ip
    

    PROJECT_ID を実際のプロジェクト ID に置き換えます。

  2. Cloud Shell で kubectl を使用して、クラスタにアクセスします。

    kubectl get nodes
    

    出力は次のようになります。

    NAME                                               STATUS   ROLES    AGE    VERSION
    gke-cluster-1-default-pool-7d914212-18jv   Ready    <none>   104m   v1.21.5-gke.1302
    gke-cluster-1-default-pool-7d914212-3d9p   Ready    <none>   104m   v1.21.5-gke.1302
    gke-cluster-1-default-pool-7d914212-wgqf   Ready    <none>   104m   v1.21.5-gke.1302
    

IP ベースのエンドポイント アクセスが無効になっている場合、get-credentials コマンドは DNS ベースのエンドポイントを自動的に使用します。

特定のユースケースに対するファイアウォール ルールを追加する

このセクションでは、クラスタにファイアウォール ルールを追加する方法について説明します。デフォルトでは、クラスタ コントロール プレーンはポート 443(HTTPS)および 10250(kubelet)上のみでノードおよび Pod への TCP 接続を開始するようにファイアウォール ルールによって制限されています。一部の Kubernetes 機能では、他のポート上でアクセスを許可するためにファイアウォール ルールを追加する必要があります。自動的に作成されたファイアウォール ルールよりも高い優先度のファイアウォール ルールまたは階層型ファイアウォール ポリシー ルールを作成しないでください。

追加のファイアウォール ルールを必要とする Kubernetes 機能は次のとおりです。

ファイアウォール ルールを追加すると、クラスタ コントロール プレーンから次のポートへのトラフィックが許可されます。

  • 各ノードの指定ポート(hostPort)。
  • これらのノードで実行されている各 Pod の指定ポート。
  • こうしたノードで実行されている各 Service の指定ポート。

ファイアウォール ルールの詳細は、Cloud Load Balancing ドキュメントのファイアウォール ルールをご覧ください。

ファイアウォール ルールをクラスタに追加するには、使用するクラスタ コントロール プレーンの CIDR ブロックとターゲットを記録する必要があります。記録したらルールを作成します。

コントロール プレーンの CIDR ブロックを表示する

ファイアウォール ルールを追加するには、クラスタ コントロール プレーンの CIDR ブロックが必要です。

コンソール

  1. Google Cloud コンソールで [Google Kubernetes Engine] ページに移動します。

    Google Kubernetes Engine に移動

  2. クラスタリストで、クラスタ名をクリックします。

[詳細] タブの [ネットワーキング] で、[コントロール プレーン アドレスの範囲] フィールドの値をメモしておきます。

gcloud

次のコマンドを実行します。

gcloud container clusters describe CLUSTER_NAME

CLUSTER_NAME は、使用するクラスタの名前に置き換えます。

コマンド出力で、masterIpv4CidrBlock フィールドの値をメモしておきます。

既存のファイアウォール ルールを表示する

クラスタの既存のファイアウォール ルールが使用するターゲット(この場合は宛先ノード)を指定する必要があります。

コンソール

  1. Google Cloud コンソールの [ファイアウォール] ページに移動します。

    [ファイアウォール ポリシー] に移動

  2. [VPC ファイアウォール ルール] の [テーブルをフィルタリング] に「gke-CLUSTER_NAME」と入力します。

結果として出力される [ターゲット] フィールドの値をメモしておきます。

gcloud

次のコマンドを実行します。

gcloud compute firewall-rules list \
    --filter 'name~^gke-CLUSTER_NAME' \
    --format 'table(
        name,
        network,
        direction,
        sourceRanges.list():label=SRC_RANGES,
        allowed[].map().firewall_rule().list():label=ALLOW,
        targetTags.list():label=TARGET_TAGS
    )'

コマンド出力で、[ターゲット] フィールドの値をメモしておきます。

共有 VPC のファイアウォール ルールを表示するには、コマンドに --project HOST_PROJECT_ID フラグを追加します。

ファイアウォール ルールを追加する

コンソール

  1. Google Cloud コンソールの [ファイアウォール] ページに移動します。

    [ファイアウォール ポリシー] に移動

  2. [ ファイアウォール ルールを作成] をクリックします。

  3. [名前] に、ファイアウォール ルールに付ける名前を入力します。

  4. [ネットワーク] リストで、関連するネットワークを選択します。

  5. [トラフィックの方向] で [上り(内向き)] をクリックします。

  6. [一致したときのアクション] で [許可] をクリックします。

  7. [ターゲット] リストで、[指定されたターゲットタグ] を選択します。

  8. [ターゲットタグ] に、先ほどメモしたターゲット値を入力します。

  9. [ソースフィルタ] リストで、[IPv4 範囲] を選択します。

  10. [ソース IPv4 の範囲] に、クラスタ コントロール プレーンの CIDR ブロックを入力します。

  11. [プロトコルとポート] で[指定したプロトコルとポート] をクリックし、関連するプロトコル(tcpまたはudp)のチェックボックスを選択し、プロトコル フィールドにポート番号を入力します。

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

gcloud

次のコマンドを実行します。

gcloud compute firewall-rules create FIREWALL_RULE_NAME \
    --action ALLOW \
    --direction INGRESS \
    --source-ranges CONTROL_PLANE_RANGE \
    --rules PROTOCOL:PORT \
    --target-tags TARGET

以下を置き換えます。

  • FIREWALL_RULE_NAME: ファイアウォール ルールに付ける名前。
  • CONTROL_PLANE_RANGE: 前の手順で確認したクラスタ コントロール プレーンの IP アドレス範囲(masterIpv4CidrBlock)。
  • PROTOCOL:PORT: ポートとそのプロトコル(tcp または udp)。
  • TARGET: 以前に収集した目標(Targets)値。

共有 VPC のファイアウォール ルールを追加するには、コマンドに次のフラグを追加します。

--project HOST_PROJECT_ID
--network NETWORK_ID

プライベート ノードにインターネットへの送信アクセスを許可する

外部レジストリからイメージを pull するなど、プライベート ノードにインターネットへのアウトバウンド アクセスを提供する場合は、Cloud NAT を使用して Cloud Router を作成して構成します。Cloud NAT を使用すると、プライベート ノードでは、インターネット経由でアウトバウンド接続を確立してパケットを送受信できます。

Cloud Router を使用すると、リージョン内のすべてのノードで、すべてのプライマリ IP 範囲とエイリアス IP 範囲に Cloud NAT を使用できます。また、NAT ゲートウェイに外部 IP アドレスが自動的に割り振られます。

Cloud Router の作成と構成の手順については、Cloud NAT のドキュメントの Cloud Router を使用して NAT 構成を作成するをご覧ください。

Windows Server コンテナ アプリケーションのデプロイ

プライベート ノードを含むクラスタに Windows Server コンテナ アプリケーションをデプロイする方法については、Windows ノードプールのドキュメントをご覧ください。

次のステップ