限定公開クラスタ

このページでは、Google Kubernetes Engine(GKE)での限定公開クラスタの動作について説明します。限定公開クラスタの作成と管理の方法についても説明します。

限定公開クラスタを使用すると、公共のインターネットとの送受信接続からノードを隔離できます。この隔離は、ノードが内部 IP アドレスのみを持つことで実現します。

特定のプライベート ノードに対して送信インターネット アクセスを提供する場合は、Cloud NAT を使用するか、独自の NAT ゲートウェイを使用します。

ノード IP アドレスがプライベートでも、外部クライアントはクラスタの Service にアクセスできます。たとえば、LoadBalancer タイプの Service を作成し、外部クライアントがロードバランサの IP アドレスを呼び出すことができます。NodePort タイプの Service を作成して Ingress を作成することもできます。GKE は、Service と Ingress の情報を使用して HTTP(S) ロードバランサを構成します。外部クライアントは、HTTP(S) ロードバランサの外部 IP アドレスを呼び出すことができます。

次の図は、限定公開クラスタのアーキテクチャの概要を示しています。

限定公開クラスタのアーキテクチャ

限定公開クラスタで限定公開の Google アクセスを使用する

限定公開の Google アクセスはデフォルトで有効になっています。限定公開の Google アクセスによって、プライベート ノードとそのワークロードは、Google のプライベート ネットワークを介して Google Cloud APIs とサービスに限定的な送信アクセスができるようになります。たとえば、限定公開の Google アクセスによって、プライベート ノードが Container Registry からコンテナイメージを pull したり、Cloud Logging にログを送信したりできるようになります。

限定公開クラスタ内のコントロール プレーン

各 GKE クラスタには、コントロール プレーン(マスター)が管理する Kubernetes API サーバーがあります。コントロール プレーンは、Google が所有するプロジェクトの VPC ネットワーク内の VM 上で動作します。リージョン クラスタには複数のコントロール プレーンがあり、各コントロール プレーンは独自の VM で実行されます。

限定公開クラスタでは、コントロール プレーンの VPC ネットワークが VPC ネットワーク ピアリングによりクラスタの VPC ネットワークに接続します。VPC ネットワークにはクラスタノードが存在し、別の Google Cloud VPC ネットワークにクラスタのコントロール プレーンが存在します。コントロール プレーンの VPC ネットワークは、Google が管理するプロジェクト内にあります。ノードとコントロール プレーンの間のトラフィックは、すべて内部 IP アドレスを使用してルーティングされます。

VPC ネットワーク ピアリングの再使用

新しく作成された限定公開クラスタはすべて、既存の VPC ネットワーク ピアリング接続を自動的に再利用します。最初に作成したゾーンクラスタまたはリージョン限定公開クラスタが新しい VPC ネットワーク ピアリング接続を生成します。同じゾーンまたはリージョンに追加した限定公開クラスタとネットワークは同じピアリングを使用します。追加の VPC ネットワーク ピアリング接続を作成する必要はありません。たとえば、us-east1-b ゾーンに 2 つのシングルゾーン限定公開クラスタを作成し、asia-east1 リージョンに 3 つのリージョン限定公開クラスタを作成した場合、作成されるピアリング接続は 2 つだけです。ただし、同じリージョン(たとえば、asia-east1asia-east1-a)にリージョン クラスタとゾーンクラスタを作成すると、2 つの異なるピアリング接続が作成されます。限定公開クラスタが接続を再利用するかどうか確認できます。

限定公開クラスタ内のエンドポイント

限定公開クラスタのコントロール プレーンには、プライベート エンドポイントとパブリック エンドポイントがあります。限定公開以外のクラスタのコントロール プレーンには、パブリック エンドポイントしかありません。

プライベート エンドポイント
プライベート エンドポイントは、コントロール プレーンの VPC ネットワーク内の内部 IP アドレスです。限定公開クラスタでは、ノードは常にコントロール プレーンのプライベート エンドポイントと通信します。構成によっては、プライベート エンドポイントにも接続する kubectl などのツールでクラスタを管理できます。限定公開クラスタと同じサブネットを使用する VM は、プライベート エンドポイントにもアクセスできます。
パブリック エンドポイント
これは、コントロール プレーンの外部 IP アドレスです。デフォルトでは、kubectl などのツールはそのパブリック エンドポイント上のコントロール プレーンと通信します。承認済みネットワークを使用すると、このエンドポイントへのアクセスを制御できます。また、パブリック エンドポイントへのアクセスを無効にすることもできます。

クラスタ エンドポイントへのアクセス

エンドポイントへのアクセスレベルを制御するには、次のいずれかの構成を使用します。

  • パブリック エンドポイント アクセスが無効: これは最も安全なオプションで、コントロール プレーンに対するすべてのインターネット アクセスが阻止されます。Cloud InterconnectCloud VPN を使用してオンプレミス ネットワークから Google Cloud への接続を構成している場合に適しています。これらのテクノロジーは、トラフィックを公共のインターネットを経由することなく、会社のネットワークを VPC に効率的に接続します。

    パブリック エンドポイントへのアクセスを無効にするには、プライベート エンドポイントの承認済みネットワークを構成する必要があります。この構成を行わないと、クラスタと同じサブネット内のクラスタノードまたは VM からのみ、プライベート エンドポイントへの接続が許可されます。また、承認済みネットワークは内部 IP アドレスにする必要があります。

  • パブリック エンドポイント アクセスが有効、承認済みネットワークが有効: 承認済みネットワークが有効になっている限定公開クラスタを使用することで、定義済みの送信元 IP アドレスからコントロール プレーンへのアクセスが制限されます。これは、既存の VPN インフラストラクチャがない場合や、リモート ユーザーや支社が企業 VPN や Cloud Interconnect / Cloud VPN を使用せずに公共のインターネット経由で接続する場合に適しています。

  • パブリック エンドポイント アクセスが有効、承認済みネットワークが無効: これはデフォルトで、最も制限の少ないオプションです。承認済みネットワークが有効でないため、承認されていれば、送信元 IP アドレスからクラスタを管理できます。

次の表に、エンドポイントへのアクセス方法を示します。

パブリック エンドポイント アクセスが無効 パブリック エンドポイント アクセスが有効、
承認済みネットワークが有効
パブリック エンドポイント アクセスが有効、
承認済みネットワークが無効
セキュリティ コントロール プレーンへの最高度の制限付きアクセスコントロール プレーンのパブリック エンドポイントへのクライアント アクセスが遮断されます。コントロール プレーンへのアクセスは、内部 IP アドレスから行う必要があります。 定義した内部 IP アドレスと外部 IP アドレスの両方からのコントロール プレーンへの制限付きアクセス。 任意の IP アドレスからコントロール プレーンへのアクセス。
詳細な構成手順 パブリック エンドポイントへのクライアント アクセス権のない限定公開クラスタの作成 パブリック エンドポイントへのアクセスが制限された限定公開クラスタの作成 パブリック エンドポイントへ無制限にアクセス可能な限定公開クラスタの作成
Cloud Console の構成オプション
  1. [VPC ネイティブを有効にする] を選択します。
  2. [限定公開クラスタ] を選択します。
  3. [外部 IP アドレスを使用したマスターへのアクセス] を選択解除します。
    [マスター承認済みネットワークを有効にする] は自動的に有効になります。
  1. [VPC ネイティブを有効にする] を選択します。
  2. [限定公開クラスタ] を選択します。
  3. [外部 IP アドレスを使用したマスターへのアクセス] を選択します。
  4. [マスター承認済みネットワークを有効にする] を選択します。
  1. [VPC ネイティブを有効にする] を選択します。
  2. [限定公開クラスタ] を選択します。
  3. [外部 IP アドレスを使用したマスターへのアクセス] を選択します。
  4. [マスター承認済みネットワークを有効にする] を選択解除します。
gcloud のクラスタ作成フラグ --enable-ip-alias
--enable-private-nodes
--enable-private-endpoint
--enable-master-authorized-networks
--enable-ip-alias
--enable-private-nodes
--enable-master-authorized-networks
--enable-ip-alias
--enable-private-nodes
--no-enable-master-authorized-networks
ノードとコントロール プレーン間の通信

ノードは常にプライベート エンドポイントを使用してコントロール プレーンと通信します。

ノードと API サーバー間の Webhook 通信

targetPort が 443 以外のサービスを使用する Webhook には、これを許可するファイアウォール ルールが必要です。詳細については、特定のユースケースに対するファイアウォール ルールの追加をご覧ください。

マスター承認済みのネットワーク

ノードと Pod 以外の内部 IP アドレスからコントロール プレーンへのアクセスに必要です。

ノードの内部 IP アドレス範囲を明示的に承認する必要はありません。クラスタのサブネットのプライマリ IP アドレス範囲内のアドレスは、常にプライベート エンドポイントとの通信が許可されます。

コントロール プレーンにアクセスできる追加の内部 IP アドレスを指定するには、--master-authorized-networks を使用します。パブリック エンドポイントへのアクセスが無効になっているため、承認済みネットワークのリストに外部 IP アドレスを含めることができません。

外部 IP アドレスとノードおよび Pod 以外の内部 IP アドレスからコントロール プレーンにアクセスする場合に必要です。

コントロール プレーンにアクセスできる、外部 IP アドレスとノードおよび Pod 以外の内部 IP アドレスを指定するには、--master-authorized-networks を使用します。

使用されません。

承認済みネットワークを有効にせずにコントロール プレーンのパブリック エンドポイントへのアクセスを有効にした場合、コントロール プレーンのパブリック エンドポイントへのアクセスは制限されません。

kubectl を使用したアクセス

ノードから: 常にプライベート エンドポイントを使用します。 kubectl を、プライベート エンドポイントを使用するように構成する必要があります。

クラスタの VPC ネットワーク内の他の VM から: 他の VM は、クラスタと同じリージョンにあり、その内部 IP アドレスがマスター承認済みネットワークのリストに含まれている場合、またはクラスタのノードと同じサブネットに存在する場合のみ、kubectl を使用してプライベート エンドポイントと通信できます。kubectl を、プライベート エンドポイントを使用するように構成する必要があります。

パブリック IP アドレスから: 不可。

ノードから: 常にプライベート エンドポイントを使用します。 kubectl を、プライベート エンドポイントを使用するように構成する必要があります。

クラスタの VPC ネットワーク内の他の VM から: 他の VM は、クラスタと同じリージョンにあり、その内部 IP アドレスがマスター承認済みネットワークのリストに含まれている場合、またはクラスタのノードと同じサブネットに存在する場合のみ、kubectl を使用してプライベート エンドポイントと通信できます。kubectl を、プライベート エンドポイントを使用するように構成する必要があります。

パブリック IP アドレスから: パブリック IP アドレスを持つマシンは、パブリック IP アドレスが承認済みネットワークのリストに含まれている場合にのみ、kubectl を使用してパブリック エンドポイントと通信できます。これには、Google Cloud の外のマシンと外部 IP アドレスを持つ Google Cloud VM が含まれます。

ノードから: 常にプライベート エンドポイントを使用します。 kubectl を、プライベート エンドポイントを使用するように構成する必要があります。

クラスタの VPC ネットワーク内の他の VM から: 他の VM は、クラスタと同じリージョンにある場合にのみ、kubectl を使用してプライベート エンドポイントと通信できます。kubectl を、プライベート エンドポイントを使用するように構成する必要があります。

パブリック IP アドレスから: パブリック IP アドレスを持つマシンは、kubectl を使用してパブリック エンドポイントと通信できます。これには、Google Cloud の外のマシンと外部 IP アドレスを持つ Google Cloud VM が含まれます。

次のステップ