マルチクラスタ Gateway について

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

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

概要

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

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

トラフィック管理機能

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

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

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

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

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

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

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

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

Gateway API リソースで定義した構成に基づいて、GKE Gateway コントローラは外部アプリケーション ロードバランサまたは内部アプリケーション ロードバランサを提供します。このロードバランサはアプリケーションのフロントエンドとして機能し、ロケーションに関係なく、フリート内の正常な 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 クラスの詳細については、マルチクラスタ Service をご覧ください。

  2. HTTPRoute を Gateway に接続する: HTTPRoute リソースは、受信した HTTP/HTTPS トラフィックを特定のバックエンド サービスにルーティングする方法を定義します。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 フロントエンド プロキシまたはリージョン プロキシ)は、次の条件に基づいて、トラフィックを正しい GKE クラスタ内の適切なバックエンド サービス エンドポイントに転送します。

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

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

次のステップ