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 以降の GKE クラスタを作成する場合、コントロール プレーンには以下のインターフェースからアクセスできます。

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 アドレスからのアクセスを、許可リストに登録するか拒否します。
  • 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 ベースのエンドポイントのステータスが記載されます。有効にすると、パブリック エンドポイントとプライベート エンドポイントの情報を確認できます。
    • [コントロール プレーンの内部 IP アドレスを使用して任意のリージョンからアクセスする] には、他のリージョンの Google 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. [高度なネットワーキングのオプション] セクションで、追加の VPC ネイティブ属性を構成します。詳細については、VPC ネイティブ クラスタを作成するをご覧ください。

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

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

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

    Google Kubernetes Engine に移動

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

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

  4. [プライベート ノードを編集] ダイアログで、次のいずれかを行います。

    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
    

    クラスタの更新は、新しいノードプールに対してのみ有効になります。既存のノードプールでは、この構成は更新されません。

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

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

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 Server アプリケーションのデプロイをご覧ください。

次のステップ