このドキュメントでは、Google Kubernetes Engine(GKE)内でのマルチクラスタ Gateway の動作について説明します。マルチクラスタ Gateway は、複数の GKE クラスタにデプロイされたサービスのトラフィックを管理できる強力なネットワーキング ソリューションです。
このドキュメントは、組織のネットワークを設計するクラウド アーキテクトとネットワーク スペシャリストを対象としています。のコンテンツで使用されている一般的な ロールとタスクの例の詳細については、 一般的な GKE Enterprise ユーザーロールと タスクをご覧ください。 Google Cloud
概要
マルチクラスタ Gateway は、Kubernetes Gateway API リソースを使用して構成されます。GKE Gateway Controller はこれらのリソース (Gateway、HTTPRoute)を監視し、必要な Google Cloud グローバル ロード バランシング インフラストラクチャを自動的にプロビジョニングして維持します。このインフラストラクチャは、フリート内の複数の GKE クラスタにデプロイされたサービスに対して高度なトラフィック管理を提供します。マルチクラスタ Gateway は Google Cloudのグローバル ロード バランシング インフラストラクチャを使用して、アプリケーションの単一の統合エントリ ポイントを提供します。この方法には次のメリットがあります。
- 管理が簡素化される
- 信頼性が向上する
- 高度なトラフィック管理機能が有効になる
トラフィック管理機能
マルチクラスタ Gateway には、複数のクラスタ間でトラフィックを管理するための高度な機能が用意されています。段階的なロールアウトや Blue/Green 戦略などの高度なルーティング戦略を実装して、変更を安全にデプロイできます。きめ細かい制御を行うには、ヘッダーベースのマッチングを使用して、少量のトラフィックで変更をテストしたり、重みでトラフィックを分割して、異なるクラスタ バックエンド間でリクエストを徐々に移行したりできます。
マルチクラスタ Gateway では、トラフィックのミラーリングも可能です。これにより、ライブ ユーザー リクエストのコピーを新しいサービスに送信して、ユーザーに影響を与えることなくパフォーマンスをテストできます。 信頼性を確保して過負荷を防ぐため、マルチクラスタ Gateway はヘルスベースのフェイルオーバーと容量ベースのロード バランシングをサポートしています。これにより、サービスに定義された容量に基づいてリクエストが分散されます。
マルチクラスタ Gateway の仕組み
マルチクラスタ Gateway の設定に参加するすべての GKE クラスタは、フリートに登録する必要があります。フリートはクラスタの論理グループを提供し、クラスタ間で一貫した管理と通信を可能にします。フリート内の 1 つの GKE クラスタが構成クラスタとして指定されます。
構成クラスタ は、マルチクラスタ Gateway 構成の一元的な制御ポイントとして機能します。Gateway や HTTPRoute などのマルチクラスタ Gateway API リソースは、この指定されたクラスタにのみデプロイします。GKE Gateway Controller は、構成クラスタの Kubernetes API サーバーでこれらのリソースを監視します。
構成クラスタを選択するには、リージョン クラスタまたは別の 高可用性 GKE クラスタを検討してください。これにより、Gateway API リソースの更新をコントローラで継続的に調整できます。
マルチクラスタ Gateway Controller は、マルチクラスタ サービス(MCS)を使用して、フリート内の複数の GKE クラスタ間で Kubernetes Service を検出してアクセスします。MCS は、フリート内の異なる GKE クラスタで実行される Service 間のサービス ディスカバリと接続を可能にする GKE の機能です。
MCG は MCS を使用して、外部トラフィックを Service にルーティングするために、どのクラスタでどの Service が利用可能かを検出します。MCG Controller は MCS API リソースを使用して、Pod をアドレス指定可能で複数のクラスタにまたがる単一の Service にグループ化します。
Gateway API リソースで定義した構成に基づいて、GKE Gateway Controller は外部アプリケーション ロードバランサまたは内部アプリケーション ロードバランサを提供します。このロードバランサはアプリケーションのフロントエンドとして機能し、場所に関係なく、フリート内の正常な Pod にトラフィックを直接分散します。
マルチクラスタ Gateway をデプロイするプロセスは、次の大まかな手順で説明します。
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 がサポートする GatewayClass の詳細については、 マルチクラスタ サービスをご覧ください。
HTTPRoute を Gateway に接続する: HTTPRoute リソースは、 着信 HTTP/S トラフィックを特定のバックエンド サービスにルーティングする方法を定義します。HTTPRoute は Gateway リソースに接続され、ホスト名、パス、ヘッダーなどに基づいてルールを指定します。HTTPRoute は、トラフィック分割やトラフィック ミラーリングなどの高度なトラフィック管理機能もサポートしています。
ロードバランサを作成する: Gateway リソースと HTTPRoute リソースをデプロイすると、 GKE Gateway Controller はこれらの API オブジェクトを解釈し、 必要な Google Cloud ロード バランシング インフラストラクチャを動的に構成します。ロードバランサは、Pod がどのクラスタにあるかに関係なく、トラフィックを正しい Pod に転送します。このプロセスにより、トラフィックをルーティングする効率的でスケーラブルな方法が提供されます。
トラフィック フロー
次の図は、異なるリージョンの 2 つの GKE クラスタで実行されるアプリケーションの中央ロードバランサとして、マルチクラスタ Gateway がどのように機能するかを示しています。
ロードバランサの動作は、HTTPRoute リソースで定義されたルールに基づいて構成されます。ユーザー トラフィックがプロビジョニングされたロードバランサの IP アドレス(Gateway リソースで定義)に到達すると、 Google マネージド プロキシであるロードバランサがトラフィックをルーティングします。 Google Cloud このプロキシ(Google Front End プロキシまたはリージョン プロキシ)は、次の条件に基づいて、正しい GKE クラスタ内の適切なバックエンド サービス エンドポイントにトラフィックを転送します。
- ヘルスチェック
- トラフィック分割ルール
- 容量
トラフィックは、選択したクラスタ内の最適な Pod に直接転送されます。
次のステップ
- マルチクラスタ Gateway を 有効にする方法を確認する。
- GKE での Gateway の仕組みの概要を確認する。