Gateway


このページでは、Google Kubernetes Engine(GKE)での Kubernetes Gateway API の実装方法について説明します。Gateway API の使用方法については、Gateway のデプロイをご覧ください。

Gateway API は Ingress などの既存の標準を改良したもので、次のような利点があります。

  • ロール指向: Gateway は、クラスタ オペレータ、デベロッパー、インフラストラクチャ プロバイダの組織のロールに対応する API リソースで構成されます。これにより、クラスタ オペレータは、異なる個別のデベロッパー チームによる共有インフラストラクチャの使用方法を定義できます。

    次の図は、Gateway API クラスとその使用者を示しています。

    GKE には Gateway クラスがあります。クラスタ オペレータは、これらのクラスに基づいて Gateway リソースを作成します。アプリケーション デベロッパーは、Gateway リソースにバインドする HTTPRoute リソースを作成します。

  • ポータビリティ: Gateway API は多くの実装を備えたオープンソース標準です。適合性に優れ、環境や実装のネイティブ機能をサポートする柔軟性と拡張性を備えた設計になっているため、Ingress のように移植性の高いコア API として使用できます。実装と環境全体でコンセプトとコアリソースの整合性が維持されるため、複雑さを軽減し、使いやすさを向上させることができます。

  • 豊富な機能: Gateway API リソースを使用すると、Ingress ではカスタム アノテーションが必要になるヘッダーベースの照合やトラフィックの重み付けなどを組み込み機能で実現できます。

Gateway API リソース

Gateway API には次のリソースタイプがあります。

  • GatewayClass: クラスタ スコープ リソースを定義します。これは、クラスタにロードバランサを作成する際のテンプレートになります。GKE は、GKE クラスタで使用できる GatewacyClasses を提供します。
  • Gateway: ロードバランサがトラフィックをリッスンする場所と方法を定義します。クラスタ オペレータは GatewayClass に基づいてクラスタに Gateway を作成します。GKE は、Gateway リソースで定義された構成を実装するロードバランサを作成します。
  • HTTPRoute: Gateway から Kubernetes Services にリクエストをルーティングするためのプロトコル固有のルールを定義します。GKE は、HTTP(S) ベースのトラフィック ルーティング用の HTTPRoutes をサポートしています。アプリケーション デベロッパーは HTTPRoutes を作成し、Gateway を使用して HTTP アプリケーションを公開します。

以降のセクションでは、Gateway API リソースについて詳しく説明します。

GatewayClass

GatewayClass は、Kubernetes クラスタ内の TCP / UDP(レベル 4)ロードバランサと HTTP(S)(レベル 7)ロードバランサのテンプレートを定義するリソースです。GKE は、クラスタ スコープ リソースとして GatewayClasses を提供します。クラスタ オペレータは、クラスタで Gateway を作成する際に GatewayClass を指定します。

GatewayClass によって対応する Google Cloud ロードバランサが異なります。GatewayClass を使用して Gateway を作成すると、対応する構成が作成され、指定した構成が実装されます。一部の GatewayClass はマルチクラスタ負荷分散をサポートしています。

次の表に、GKE クラスタで使用可能な GatewayClass と、その基になるロードバランサ タイプを示します。GatewayClass の詳細については、GatewayClass の機能と仕様をご覧ください。

クラス名 説明
gke-l7-rilb 内部 HTTP(S) 負荷分散上に構築されたリージョン内部 HTTP(S) ロードバランサ
gke-l7-gxlb 外部 HTTP(S) 負荷分散上に構築されたグローバル外部 HTTP(S) ロードバランサ
gke-l7-rilb-mc 内部 HTTP(S) 負荷分散上に構築されたマルチクラスタ リージョンのロードバランサ
gke-l7-gxlb-mc 外部 HTTP(S) 負荷分散上に構築されたマルチクラスタ グローバル ロードバランサ

GatewayClass には、基盤となるロードバランサの制限が適用されます。

Gateway

クラスタ オペレータは Gateway を作成して、ロードバランサがトラフィックをリッスンする場所と方法を定義します。Gateway は、関連付けられている GatewayClass から動作(つまり、どのように実装されるか)を引き継ぎます。

Gateway の仕様には、Gateway の GatewayClass、リッスンするポートとプロトコル、Gateway にバインドできるルートを定義します。Gateway は Route メタデータ(Route リソースの種類、Namespace、ラベルなど)に基づいてルートを選択します。

Gateway のデプロイ例については、Gateway のデプロイをご覧ください。マルチクラスタ Gateway のデプロイ例については、マルチクラスタ Gateway のデプロイをご覧ください。

HTTPRoute

HTTPRoute では、Gateway が受信した HTTP リクエストと HTTPS リクエストを Service に転送する方法を定義します。アプリケーション デベロッパーは HTTPRoute を作成し、Gateway を使用してアプリケーションを公開します。

HTTPRoute では、トラフィックのルーティング先となる Gateway、ルーティング先の Service、HTTPRoute のトラフィック照合ルールを定義します。Gateway と Route のバインディングは双方向です。つまり、両方のリソースをバインドするには、お互いのリソースを選択する必要があります。HTTPRoute は、リクエスト ヘッダーの詳細に基づいてリクエストを照合できます。

1 つのルートを 1 つ以上の Gateway にバインドでき、1 つの Gateway を複数のルートにバインドできます。

GKE Gateway コントローラ

GKE Gateway コントローラは、Google が Cloud Load Balancing に実装した Gateway API です。GKE Ingress コントローラと同様に、Gateway コントローラは Gateway API リソースの Kubernetes API を監視し、Cloud Load Balancing リソースを調整して、Gateway リソースで指定されたネットワーク動作を実装します。

GKE Gateway コントローラには 2 つのバージョンがあります。

  • リージョン: 単一クラスタ Gateway を管理します。
  • グローバル: マルチクラスタ Gateway を管理します。

どちらの Gateway コントローラも Google がホストするコントローラで、GKE クラスタの Kubernetes API を監視します。GKE Ingress コントローラとは異なり、Gateway コントローラは GKE コントロール プレーンにホストされていないため、よりスケーラブルで堅牢です。

コントローラ リージョン Gateway コントローラ グローバル Gateway コントローラ
管理者 Google Google
クラスタのスコープ 単一クラスタ Gateway 複数クラスタ Gateway
デプロイする場所 GKE クラスタと同じリージョンにデプロイされます。 複数の Google Cloud リージョンにグローバルにデプロイされます。
有効にする方法 GKE では、デフォルトで有効になっています。 マルチクラスタ Ingress API を使用して有効にし、Environ に登録します。マルチクラスタ Gateway の有効化をご覧ください。
サポートされている GatewayClass
  • gke-l7-rilb
  • gke-l7-gxlb
  • gke-l7-rilb-mc
  • gke-l7-gxlb-mc

GKE クラスタでは、複数の Gateway コントローラ(Google が提供していないコントローラも含む)を同時に使用できます。どの GatewayClass も 1 つの Gateway コントローラのみでサポートされているため、単一クラスタとマルチクラスタの負荷分散を同時に使用できます。

Ingress と Gateway の比較

Gateway と Ingress はどちらもトラフィックのルーティングに使用されるオープンソース標準です。Gateway は Kubernetes コミュニティによって設計され、Ingress とサービス メッシュのエコシステムから得られた知見を活用しています。Gateway は、同じ機能を提供する Ingress の進化であり、Ingress 機能のスーパーセットとして機能します。どちらも競合なく同時に使用できますが、時間の経過とともに Gateway リソースと Route リソースで Ingress に提供されない機能が増えるため、Ingress を使用しているユーザーも Gateway に切り替えるようになります。

Gateway API 標準は現在 v1Alpha1 ステージです。現時点ではまだ試験運用版で、評価目的で使用されます。Gateway API のベータ版がリリースされるまでに API の大幅な変更が想定されます。同様に、GKE Gateway コントローラもプレビュー リリースで、試験運用版として提供されています。お寄せいただいたフィードバックは GKE Gateway コントローラの進化に欠かせないもので、一般提供のリリースに活用させていただきます。ご意見やご質問がございましたら、gke-gateway-feedback@google.com までお気軽にお問い合わせください。ご連絡をお待ちしております。

料金

Gateway コントローラを介してデプロイされたすべての Compute Engine リソースは、GKE クラスタが存在するプロジェクトに対して課金されます。リージョン Gateway コントローラは、GKE Standard と Autopilot の一部として追加料金なしで提供されます。プレビュー期間中、グローバル Gateway コントローラは追加料金なしで使用できます。GKE グローバル Gateway コントローラの料金の詳細については、マルチクラスタ Gateway の有効化をご覧ください。

次のステップ