限定公開クラスタの高度な構成


このページでは、限定公開クラスタの作成時に必要となる高度な構成について説明します。限定公開クラスタの基本構成については、限定公開クラスタの作成をご覧ください。

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

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

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

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

共有 VPC ネットワーク内での限定公開クラスタの作成

共有 VPC ネットワーク内で限定公開クラスタを作成する方法については、共有 VPC での限定公開クラスタの作成をご覧ください。

Windows Server コンテナ アプリケーションを限定公開クラスタにデプロイする

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

コントロール プレーンのプライベート エンドポイントにグローバルにアクセスする

コントロール プレーンのプライベート エンドポイントは、コントロール プレーンの VPC ネットワーク内の内部パススルー ネットワーク ロードバランサによって実装されます。内部パススルー ネットワーク ロードバランサにアクセスできるのは、内部クライアント、または Cloud VPN トンネルと Cloud Interconnect VLAN アタッチメント経由で接続しているクライアントです。

デフォルトでは、これらのクライアントはロードバランサと同じリージョンに配置されている必要があります。

コントロール プレーンのグローバル アクセスを有効にすると、内部パススルー ネットワーク ロードバランサにグローバルにアクセスできるようになります。クライアント VM とオンプレミス システムは、承認済みネットワークの構成に従って、任意のリージョンからコントロール プレーンのプライベート エンドポイントに接続できます。

内部パススルー ネットワーク ロードバランサとグローバル アクセスの詳細については、内部ロードバランサと接続ネットワークをご覧ください。

コントロール プレーンのプライベート エンドポイント グローバル アクセスを有効にする

限定公開クラスタを作成するときに、デフォルトでは、コントロール プレーンのプライベート エンドポイントに対するグローバル アクセスが有効になっていません。コントロール プレーンのグローバル アクセスを有効にするには、クラスタのモードに基づいて次のツールを使用します。

  • Standard クラスタの場合は、Google Cloud CLI または Google Cloud コンソールを使用できます。
  • Autopilot クラスタの場合は、google_container_cluster Terraform リソースを使用できます。

コンソール

コントロール プレーンのグローバル アクセスを有効にした新しい限定公開クラスタを作成するには、次の手順を行います。

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

    Google Kubernetes Engine に移動

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

  3. 名前を入力します。

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

  5. [限定公開クラスタ] を選択します。

  6. [コントロール プレーンのグローバル アクセスを有効にする] チェックボックスをオンにします。

  7. 必要に応じて他のフィールドを構成します。

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

既存の限定公開クラスタでコントロール プレーンのグローバル アクセスを有効にするには、次の手順を行います。

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

    Google Kubernetes Engine に移動

  2. 編集するクラスタの横にある [アクション] をクリックし、[ 編集] をクリックします。

  3. [ネットワーキング] セクションで、[コントロール プレーン グローバル アクセス] の横にある [ 編集] をクリックします。

  4. [コントロール プレーン グローバル アクセスの編集] ダイアログで、[コントロール プレーン グローバル アクセスを有効にする] チェックボックスをオンにします。

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

gcloud

--enable-master-global-access フラグを追加して、コントロール プレーンのプライベート エンドポイントへのグローバル アクセスが有効な限定公開クラスタを作成します。

gcloud container clusters create CLUSTER_NAME \
    --enable-private-nodes \
    --enable-master-global-access

既存の限定公開クラスタのコントロール プレーンのプライベート エンドポイントへのグローバル アクセスを有効にすることもできます。

gcloud container clusters update CLUSTER_NAME \
    --enable-master-global-access

コントロール プレーンのプライベート エンドポイント グローバル アクセスを確認する

コントロール プレーンのプライベート エンドポイントへのグローバル アクセスが有効になっているかどうか確認するには、次のコマンドを実行して出力を表示します。

gcloud container clusters describe CLUSTER_NAME

出力の privateClusterConfig セクションで masterGlobalAccessConfig のステータスを確認できます。

privateClusterConfig:
  enablePrivateNodes: true
  masterIpv4CidrBlock: 172.16.1.0/28
  peeringName: gke-1921aee31283146cdde5-9bae-9cf1-peer
  privateEndpoint: 172.16.1.2
  publicEndpoint: 34.68.128.12
  masterGlobalAccessConfig:
    enabled: true

他のネットワークからコントロール プレーンのプライベート エンドポイントにアクセスする

GKE 限定公開クラスタを作成し、コントロール プレーンのパブリック エンドポイントを無効にする場合、kubectl などのツールで、コントロール プレーンのプライベート エンドポイントを使用してクラスタを管理する必要があります。次のような別のネットワークから、クラスタのコントロール プレーンのプライベート エンドポイントにアクセスできます。

  • Cloud VPN トンネルや Cloud Interconnect VLAN アタッチメントを使用してクラスタの VPC ネットワークに接続しているオンプレミス ネットワーク
  • Cloud VPN トンネルを使用してクラスタの VPC ネットワークに接続された別の VPC ネットワーク

次の図は、オンプレミス ネットワークと GKE コントロール プレーン ノード間のルーティング パスを示しています。

オンプレミス VPC とクラスタ コントロール プレーン間のルーティングを示す図

別のネットワーク内のシステムがクラスタのコントロール プレーンのプライベート エンドポイントに接続できるようにするには、次の要件を満たす必要があります。

  1. クラスタとそのコントロール プレーンのプライベート エンドポイントの関連するネットワーク情報を特定して記録します。

    gcloud container clusters describe CLUSTER_NAME \
       --location=COMPUTE_LOCATION \
       --format="yaml(network, privateClusterConfig)"
    

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

    コマンドの出力から、次の手順で使用する次の情報を特定して記録します。

    • network: クラスタの VPC ネットワークの名前または URI。
    • privateEndpoint: コントロール プレーンのプライベート エンドポイントの IPv4 アドレス、またはそれを含む IPv4 CIDR 範囲(masterIpv4CidrBlock)。
    • peeringName: クラスタの VPC ネットワークをコントロール プレーンの VPC ネットワークに接続するために使用される VPC ネットワーク ピアリング接続の名前。

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

    network: cluster-network
    privateClusterConfig:
      enablePrivateNodes: true
      masterGlobalAccessConfig:
        enabled: true
      masterIpv4CidrBlock: 172.16.1.0/28
      peeringName: gke-1921aee31283146cdde5-9bae-9cf1-peer
      privateEndpoint: 172.16.1.2
      publicEndpoint: 34.68.128.12
    
  2. コントロール プレーンのプライベート エンドポイント グローバル アクセスを有効にして、パケットがクラスタの VPC ネットワーク内の任意のリージョンから入るようにすることを検討してください。コントロール プレーンのプライベート エンドポイント グローバル アクセスを有効にすると、クラスタのリージョンだけでなく、任意のリージョンにある Cloud VPN トンネルや Cloud Interconnect VLAN アタッチメントを使用してプライベート エンドポイントに接続できます。

  3. 他のネットワークにある privateEndpoint IP アドレスまたは masterIpv4CidrBlock IP アドレス範囲に向うルートを作成します。コントロール プレーンのプライベート エンドポイント IP アドレスは、常に masterIpv4CidrBlock IPv4 アドレス範囲内にあるため、次のような場合、privateEndpoint IP アドレスまたはそこを含む範囲のルートを作成すると、パケットが相手ネットワークからコントロール プレーンのプライベート エンドポイントに向かうパスが確立します。

    • 他のネットワークは、Cloud Interconnect VLAN アタッチメントか動的(BGP)ルートを使用する Cloud VPN トンネルを使用して、クラスタの VPC ネットワークに接続します。Cloud Router のカスタムルート アドバタイズを使用します。詳細については、Cloud Router のドキュメントのカスタム IP 範囲のアドバタイジングをご覧ください。

    • 他のネットワークは、動的ルートを使用しない Classic VPN トンネルを使用してクラスタの VPC ネットワークに接続します。他のネットワークには静的ルートを構成する必要があります。

  4. ピアリング関係のカスタムルートをコントロール プレーンの VPC ネットワークにエクスポートするように、クラスタの VPC ネットワークを構成します。Google Cloud は常に、クラスタの VPC ネットワークからカスタムルートをインポートするようにコントロール プレーンの VPC ネットワークを構成します。このステップでは、コントロール プレーンのプライベート エンドポイントから他のネットワークに戻るパケットのパスを確立します。

    クラスタの VPC ネットワークからカスタムルートのエクスポートを有効にするには、次のコマンドを使用します。

    gcloud compute networks peerings update PEERING_NAME \
        --network=CLUSTER_VPC_NETWORK \
        --export-custom-routes
    

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

    • PEERING_NAME: クラスタの VPC ネットワークをコントロール プレーンの VPC ネットワークに接続するピアリングの名前
    • CLUSTER_VPC_NETWORK: クラスタの VPC ネットワークの名前または URI

    VPC でカスタムルートのエクスポートが有効になっている場合、Google Cloud IP の範囲と重複するルートを作成すると、クラスタが壊れる可能性があります。

    既存の VPC ネットワーク ピアリング接続のルート交換を更新する方法については、ピアリング接続を更新するをご覧ください。

    クラスタの VPC ネットワーク内のカスタムルートには、オンプレミス ネットワークなど他のネットワークの IP アドレス範囲が宛先であるルートが含まれます。こうしたルートが、コントロール プレーンの VPC ネットワークでピアリング カスタムルートとして有効になるようにするには、他のネットワークからのサポートされている宛先をご覧ください。

他のネットワークからのサポートされている宛先

他のネットワークからクラスタの VPC ネットワーク内の Cloud Router に送信されるアドレス範囲は、次の条件を満たしている必要があります。

  • クラスタの VPC はデフォルト ルート(0.0.0.0/0)を受け入れることができますが、コントロール プレーンの VPC ネットワークは、すでにローカルのデフォルト ルートがあるため、常にデフォルト ルートを拒否します。他のネットワークが VPC ネットワークにデフォルト ルートを送信する場合、相手側のネットワークもコントロール プレーンのプライベート エンドポイントに接続する必要があるシステムの特定の宛先を送信する必要があります。詳細については、ルーティング順序をご覧ください。

  • コントロール プレーンの VPC ネットワークが、デフォルト ルートを効率的に置き換えるルートを受け入れる場合、そうしたルートは Google Cloud API とサービスへの接続を切断し、クラスタ コントロール プレーンを中断させます。代表的な例として、相手側ネットワークは、宛先が 0.0.0.0/1128.0.0.0/1 のルートをアドバタイズしてはいけません。別の方法については、前の説明をご覧ください。

Cloud Router の上限、特に学習したルートの一意の宛先の最大数をモニタリングします。

VPC Service Controls による限定公開クラスタの保護

VPC Service Controls を使用して GKE 限定公開クラスタの保護を強化します。

VPC Service Controls は GKE 限定公開クラスタ向けの追加のセキュリティ機能を提供して、データ漏洩のリスクを低減します。VPC Service Controls の活用により、境界の外部から発生するリクエストからリソースとサービスを保護するサービス境界にプロジェクトを追加できます。

サービス境界の詳細については、サービス境界の詳細と構成をご覧ください。

VPC Service Controls サービス境界内の GKE 限定公開クラスタで Artifact Registry を使用する場合は、制限付きの仮想 IP へのルーティングを構成して、データの引き出しを防ぐ必要があります。