Private Service Connect について


このドキュメントでは、Google Kubernetes Engine(GKE)クラスタでの Private Service Connect の概要を説明します。先に進む前に、VPC ネットワークとネットワーキングの基本(IP アドレスなど)を理解しておいてください。

概要

Private Service Connect(PSC)は Google Cloud のネットワーキング インフラストラクチャの一部であり、Google Cloud またはオンプレミス環境でホストされているサービスを、一般公開することなく、安全かつ非公開で GKE クラスタが利用できるようにします。PSC を使用すると、Google Cloud はコントロール プレーンに内部 IP アドレスを割り当て、GKE クラスタ管理 API にリクエストを転送します。これにより、トラフィックがパブリック インターネットを経由することなくクラスタを管理できます。PSC は、サービス ネットワーキング アプローチによって異なるネットワークの接続を支援する一貫したフレームワークを提供し、サービス プロデューサーとコンシューマが VPC 内部の内部 IP アドレスを使って通信できるようにします。

PSC インフラストラクチャを使用する GKE クラスタでは、クラスタ コントロール プレーンとノード間のすべての通信が非公開で行われます。また、複雑な VPC ピアリング構成を管理しなくても、コントロール プレーン レベルとノードプール レベルでクラスタを分離することもできます。

Private Service Connect で有効にしたクラスタのメリット

セキュリティ: PSC は、GKE クラスタ コントロール プレーンとノードの間にプライベート接続を確立し、トラフィックを完全に Google のネットワーク内に保持して、公共のインターネットから隔離します。これにより、不正アクセスのリスクを最小限に抑えることができます。

接続の簡素化: PSC クラスタの場合、コントロール プレーン エンドポイントの特定のサブネットを管理する必要はありません。PSC エンドポイントはクラスタ ネットワーク内に完全に配置されるため、複雑なネットワーク構成は不要です。

スケーラビリティ: 最大 1,000 個のクラスタを作成して PSC で有効にし、難しいリソース要件を満たすことができます。一方、VPC ネットワーク ピアリングを使用するクラスタの場合は、ゾーンまたはリージョンあたり最大 75 個のクラスタしか作成できません。

カスタマイズ可能な構成: PSC を使用すると、クラスタのコントロール プレーン、ノードプール、ワークロードの分離を個別に制御できるため、クラスタのスケーラビリティとセキュリティが向上します。クラスタ内にプライベートとパブリックのノードプールが混在する構成も可能です。

柔軟性: クラスタの作成後、いつでも分離設定を変更できます。新しいクラスタを作成しなくても、コントロール プレーンへのパブリック アクセスとプライベート アクセスの切り替えや、ノードプールとワークロードへのインターネットからのアクセスの変更が可能です。

制限事項

コントロール プレーンには、内部エンドポイントと外部エンドポイントの両方があります。コントロール プレーンの内部エンドポイントは、構成した Webhook の URL の内部 IP アドレスをサポートしていません。URL に内部 IP アドレスを含む Webhook がある場合は、次の手順でこの非互換性を軽減できます。

  1. セレクタなしでヘッドレス サービスを作成して、この Service がトラフィックを転送するエンドポイントを手動で管理します。次の例は、ポート 3000 でリッスンしている Webhook を含む Service を示しています。

    apiVersion: v1
    kind: Service
    metadata:
      name: <service-name>
    spec:
      clusterIP: None
      ports:
      - port: 3000
        targetPort: 3000
    
  2. 必要な宛先に対応するエンドポイントを作成します。たとえば、Webhook が URL で内部 IP アドレス 10.0.0.1 を使用する場合は、次のエンドポイントを作成できます。

    apiVersion: v1
    kind: Endpoints
    metadata:
      name: <service-name>
    subsets:
    - addresses:
      - ip: 10.0.0.1
      ports:
      - port: 3000
    
  3. Webhook 構成を更新する: Webhook 構成で、内部 IP アドレスを含む URL を削除し、最初の手順で作成した Service を追加します。例:

    ...
    kind: ValidatingWebhookConfiguration
    ...
    webhooks:
    - name: <webhook-name>
    ...
      clientConfig:
        service:
          name: <service-name>
          namespace: <namespace>
          path: "/validate"
          port: 3000
    

    上の例では、Webhook のパスは /validate で、ポート 3000 でリッスンしています。

  4. Webhook を確認する: Webhook が API サーバー リクエストを引き続き受信でき、カスタム ロジックに基づいてリクエストを承認、拒否、または変更できることを確認します。Webhook の検証中にエラーが発生した場合は、新しい証明書を作成し、新しい証明書の詳細を使用して Webhook の構成を更新する必要があります。次に例を示します。

    ...
    kind: ValidatingWebhookConfiguration
    ...
    webhooks:
    - name: <webhook-name>
    ...
      clientConfig:
        ...
        caBundle: <new-certificate>
    ...
    

アーキテクチャ

次の図は、PSC を使用するクラスタのアーキテクチャの概要を示しています。

GKE の Private Service Connect のアーキテクチャ。
図: Private Service Connect のアーキテクチャ

PSC で有効にされたクラスタのコア コンポーネントは次のとおりです。

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

コントロール プレーンには、内部クラスタ通信用の内部エンドポイント(Private Service Connect エンドポイント)と外部エンドポイントの両方があります。外部エンドポイントは無効にすることもできます。ノードとコントロール プレーンの間のトラフィックは、すべて内部 IP アドレスを使用してルーティングされます。クラスタ構成の詳細については、コントロール プレーンの構成を確認するをご覧ください。

VPC ネットワーク: クラスタのノードと Pod 専用の内部 IP アドレス範囲を持つサブネットを作成する仮想ネットワークです。

Private Service Connect エンドポイント: プロジェクトの VPC ネットワークにあるクラスタ コントロール プレーンの内部エンドポイントです。PSC エンドポイントは、クラスタ コントロール プレーンにアクセスするためのエントリ ポイントとして機能します。

サービス アタッチメント: VPC ネットワークとプロデューサー VPC ネットワークの間に安全なプライベート接続を確立するリソースです。上の図に示すように、PSC エンドポイントはプライベート接続を介してサービス アタッチメントにアクセスし、ノードとコントロール プレーン間でトラフィックが流れるようにします。

クラスタ アクセスの構成

PSC 対応クラスタでコントロール プレーン アクセスとノードアクセスを構成するには、いくつか方法があります。これらの構成は、クラスタの作成後にいつでも変更できます。クラスタ アクセスを構成するには、ネットワーク分離をカスタマイズするをご覧ください。

コントロール プレーン アクセス

  • DNS ベースのエンドポイントのみを使用してコントロール プレーンにアクセスします(推奨)。コントロール プレーンへのアクセスをリクエストするには、IAM 許可ポリシーを作成します。

  • IP ベースのエンドポイントのみを使用してコントロール プレーンにアクセスします。コントロール プレーンの外部エンドポイントと内部エンドポイントの両方を使用するか、外部エンドポイントを無効にして Google が予約した IP アドレス(クラスタ管理用)と GKE クラスタの内部 IP アドレスからのアクセスのみを許可するかを選択できます。

    IP アドレスを使用している場合は、承認済みネットワークを使用して、クラスタのコントロール プレーンへのアクセスを制限することをおすすめします。承認済みネットワークを使用すると、Google Cloud 外部 IP をソースとする Google Cloud VM、Cloud Run、Cloud Run functions からのコントロール プレーンへのアクセスをブロックすることもできます。

  • DNS ベースのエンドポイントと IP ベースのエンドポイントを使用してコントロール プレーンにアクセスします。

クラスタノードへのアクセス

PSC 対応クラスタを使用すると、混在モードのクラスタを構成できます。内部または外部アクセスのあるノードを持つようにクラスタを構成できます。また、使用するクラスタのタイプに応じて、ノード ネットワーク構成を変更することもできます。

  • Autopilot クラスタでは、一部のワークロードをプライベート ノードで実行し、他のワークロードをパブリック ノードで実行するように構成できます。たとえば、クラスタ内でインターネット アクセスを必要とするワークロードとそうでないワークロードが混在しているような場合です。外部 IP アドレスを持つノードにワークロードをデプロイし、そのようなワークロードのみにパブリックへのアクセスを許可できます。

  • Standard クラスタでは、一部のノードに内部 IP アドレスをプロビジョニングしつつ、他のノードで外部 IP アドレスを使用できます。

Private Service Connect を使用したクラスタ

クラスタが Private Service Connect を使用しているかどうかを確認するには、gcloud container clusters describe コマンドを実行します。クラスタで Private Service Connect を使用している場合、privateClusterConfig リソースには次の値が設定されています。

  • peeringName フィールド: 空、または存在しません。
  • privateEndpoint フィールド: 値が割り当てられています。

PSC でクラスタを有効にするには、バージョン 1.29 以降でクラスタを作成します。それ以外の場合は、バージョン 1.28 以前で、プライベート ノードを有効化せずにクラスタを作成します。この設定は、クラスタの作成後にいつでも更新してプライベート ノードを有効にできます。

次のステップ