マルチクラスタ ゲートウェイについて

このドキュメントでは、Google Kubernetes Engine(GKE)内でマルチクラスタ Gateway がどのように動作するかについて説明します。マルチクラスタ Gateway は、複数の GKE クラスタにデプロイされたサービスのトラフィックを管理できる強力なネットワーキング ソリューションです。

このドキュメントは、組織のネットワークを設計するクラウド アーキテクトとネットワーク スペシャリストを対象としています。 Google Cloud のコンテンツで使用されている一般的なロールとタスクの例の詳細については、一般的な GKE Enterprise ユーザーロールとタスクをご覧ください。

概要

マルチクラスタ Gateway は、Kubernetes Gateway API リソースを使用して構成されます。GKE Gateway コントローラは、これらのリソース(Gateway、HTTPRoute)をモニタリングし、必要なGoogle Cloud グローバル ロード バランシング インフラストラクチャを自動的にプロビジョニングして維持します。このインフラストラクチャは、フリート内の複数の GKE クラスタにデプロイされたサービスに対して高度なトラフィック管理を提供します。マルチクラスタ Gateway は、 Google Cloudのグローバル ロード バランシング インフラストラクチャを使用して、アプリケーションに単一の統合エントリ ポイントを提供します。この方法には次のメリットがあります。

  • 管理を簡素化する
  • 信頼性の向上
  • 高度なトラフィック管理機能を有効にする

トラフィック管理機能

マルチクラスタ Gateway は、複数のクラスタ間でトラフィックを管理するための高度な機能を提供します。段階的なロールアウトや Blue/Green 戦略などの高度なルーティング戦略を実装して、変更を安全にデプロイできます。きめ細かい制御を行うには、ヘッダーベースのマッチングを使用して、少量のトラフィックで変更をテストするか、重みでトラフィックを分割して、異なるクラスタ バックエンド間でリクエストを段階的に移行します。

マルチクラスタ Gateway では、トラフィックをミラーリングすることもできます。これにより、ライブ ユーザー リクエストのコピーを新しいサービスに送信して、ユーザーに影響を与えることなくパフォーマンスをテストできます。信頼性を確保し、過負荷を防ぐため、マルチクラスタ Gateway はヘルスベースのフェイルオーバーと容量ベースのロード バランシングをサポートしています。これにより、サービスの定義された容量に基づいてリクエストが分散されます。

マルチクラスタ Gateway の仕組み

マルチクラスタ ゲートウェイの設定に参加するすべての GKE クラスタは、フリートに登録されている必要があります。フリートはクラスタの論理グループを提供します。これにより、クラスタ間で一貫した管理と通信が可能になります。フリート内の 1 つの GKE クラスタが構成クラスタとして指定されます。

構成クラスタは、マルチクラスタ Gateway 構成の一元管理ポイントとして機能します。Gateway や HTTPRoute などのマルチクラスタ Gateway API リソースはすべて、この指定されたクラスタにのみデプロイします。GKE Gateway コントローラは、これらのリソースの構成クラスタの Kubernetes API サーバーを監視します。

構成クラスタを選択するには、リージョン クラスタまたは別の高可用性 GKE クラスタを検討してください。これにより、Gateway API リソースの更新をコントローラで継続的に調整できます。

マルチクラスタ Gateway コントローラは、マルチクラスタ サービス(MCS)を使用して、フリート内の複数の GKE クラスタにまたがる Kubernetes Service を検出してアクセスします。MCS は、フリート内の異なる GKE クラスタで実行されている Service 間のサービス ディスカバリと接続を可能にする GKE の機能です。

MCG は、MCS を使用して、どのクラスタでどの Service が利用可能かを検出し、外部トラフィックを Service にルーティングします。MCG コントローラは、MCS API リソースを使用して Pod を 1 つの Service にグループ化します。この Service はアドレス指定可能で、複数のクラスタにまたがります。

GKE Gateway コントローラは、Gateway API リソースで定義した構成に基づいて、外部アプリケーション ロードバランサまたは内部アプリケーション ロードバランサのいずれかを提供します。このロードバランサは、アプリケーションのフロントエンドとして機能し、ロケーションに関係なく、フリート内の正常な Pod にトラフィックを直接分散します。

次の大まかな手順では、マルチクラスタ Gateway をデプロイするプロセスについて説明します。

  1. Gateway を定義する: マルチクラスタ Gateway の設定では、構成クラスタでトラフィックのエントリ ポイントを定義する Gateway リソースを作成します。Gateway リソースは、グローバル外部アプリケーション ロードバランサやリージョン内部アプリケーション ロードバランサなど、特定のタイプのロードバランサのテンプレートである GatewayClass を指定します。GKE では、次の GatewayClass がマルチクラスタ Gateway をデプロイします。

    • gke-l7-global-external-managed-mc: グローバル外部アプリケーション ロードバランサをプロビジョニングします。
    • gke-l7-regional-external-managed-mc: リージョン外部アプリケーション ロードバランサをプロビジョニングします。
    • gke-l7-cross-regional-internal-managed-mc: 内部アプリケーション ロードバランサをプロビジョニングします。
    • gke-l7-rilb-mc: 内部アプリケーション ロードバランサをプロビジョニングします。
    • gke-l7-gxlb-mc: 従来のアプリケーション ロードバランサをプロビジョニングします。

    Gateway は、公開するネットワーク リスナー(ポートとプロトコル)を指定して、ロードバランサが受信トラフィックをリッスンする方法も定義します。GKE がサポートする Gateway クラスの詳細については、マルチクラスタ サービスをご覧ください。

  2. HTTPRoute を Gateway に接続する: HTTPRoute リソースは、受信した HTTP/S トラフィックを特定のバックエンド サービスにルーティングする方法を定義します。HTTPRoute は Gateway リソースに接続され、ホスト名、パス、ヘッダーなどに基づいてルールを指定します。HTTPRoute は、トラフィック分割やトラフィック ミラーリングなどの高度なトラフィック管理機能もサポートしています。

  3. ロードバランサを作成する: Gateway リソースと HTTPRoute リソースをデプロイすると、GKE Gateway コントローラがこれらの API オブジェクトを解釈し、必要な Google Cloud ロード バランシング インフラストラクチャを動的に構成します。ロードバランサは、Pod がどのクラスタにあるかに関係なく、正しい Pod にトラフィックを転送します。このプロセスにより、トラフィックをルーティングする効率的でスケーラブルな方法が実現します。

トラフィック フロー

次の図は、マルチクラスタ Gateway が、異なるリージョンの 2 つの GKE クラスタにまたがって実行されるアプリケーションの一元化されたロードバランサとしてどのように機能するかを示しています。

GKE のマルチクラスタ Gateway のアーキテクチャ。
図: マルチクラスタ Gateway アーキテクチャ

ロードバランサの動作は、HTTPRoute リソースで定義されたルールに基づいて構成されます。ユーザー トラフィックがプロビジョニングされた Google Cloud ロードバランサの IP アドレス(Gateway リソースで定義されている)に到達すると、Google マネージド プロキシであるロードバランサがトラフィックを転送します。このプロキシ(Google Front End プロキシまたはリージョン プロキシ)は、次の条件に基づいて、正しい GKE クラスタ内の適切なバックエンド サービス エンドポイントにトラフィックを転送します。

  • ヘルスチェック
  • トラフィック分割ルール
  • 容量

トラフィックは、選択したクラスタ内の最適な Pod に直接送信されます。

次のステップ