GKE Gateway コントローラによる Kubernetes ネットワーキングの進化
Google Cloud Japan Team
※この投稿は米国時間 2021 年 4 月 30 日に、Google Cloud blog に投稿されたものの抄訳です。
先週、Kubernetes コミュニティは、Kubernetes ネットワーキング API を進化させた Gateway API を発表しました。Google とさまざまな協力者が主導した Gateway API を使用すると、一連の主要な標準リソースのもとにネットワーキングを統合できます。Ingress による実装のエコシステムの作成と似ていますが、Gateway API は範囲がより広く、Ingress やサービス メッシュから得た教訓に基づいた統合を実現します。
本日は、Google Cloud が実装した Gateway API である GKE Gateway コントローラのプレビューをリリースしましたのでお知らせいたします。1 年以上かけて作成された GKE Gateway コントローラは、単一の GKE クラスタまたは GKE クラスタ フリートの内部および外部 HTTP/S 負荷分散を管理します。Gateway API は、一元化された管理のポリシーと制御のもとに、ロードバランサ インフラストラクチャのマルチテナント共有を実現します。Gateway API は表現力が優れているため、トラフィックのシフト、トラフィックのミラーリング、ヘッダー操作といった高度な機能に対応します。以下の使い方ガイドで詳細をご確認ください。
GKE Gateway コントローラの使い方ガイド
GKE Gateway コントローラで最初に確認していただきたい新規リソースが GatewayClass です。GatewayClass は、クラスの機能を記述するテンプレートを提供します。GKE 1.20 以降の各クラスタには、2 つの GatewayClass がプリインストールされています。GKE 1.20 以降のクラスタを起動して、すぐにそれらの GatewayClass をご確認ください。
これらの GatewayClass は、リージョン内部(gke-l7-rilb)とグローバル外部(gke-l7-gxlb)の HTTP(S) ロードバランサに対応しています。これらのロードバランサは、コンテナ ネイティブの負荷分散を提供するよう Gateway コントローラによって調整されます。
ロール指向の設計
Gateway API はマルチテナント向けに設計されています。Gateway API では、次の 2 つの主要リソースが使用されるため、プラットフォーム オーナーとサービス オーナーとの間で問題を分離できます。
Gateway は、ルーティングするトラフィックをリッスンするロードバランサを表します。Gateway は複数設定でき、チームごとに 1 つずつ設定することも、1 つだけ設定して複数のチームで共有することもできます。
ルートは、設定された Gateway に適用されるプロトコル固有のルーティング構成です。現在、GKE では HTTPRoute がサポートされており、TCPRoute と UDPRoute は今後サポートされる予定です。1 つまたは複数のルートを 1 つの Gateway にバインドすると、アプリケーションのルーティング構成をまとめて定義できます。
以下の例(こちらのチュートリアルでデプロイできます)は、クラスタ オペレータが Gateway リソースをデプロイして、Namespace が異なる場合も含めて複数のチームで共有できるようにする方法を示しています。Gateway のオーナーは、ドメインの所有権、TLS 終端、その他のポリシーを、サービス オーナーを関与させずに一元化された方法で定義できます。一方、サービス オーナーは、アプリに固有のルーティング ルールとトラフィック管理を、他のチームやプラットフォーム管理者と調整する必要なく定義できます。Gateway リソースとルートリソースの関係によって、標準の Kubernetes RBAC で管理できる責務が正式に分離されます。
高度なルーティングとトラフィック管理
GKE Gateway コントローラには、ルーティングとトラフィック管理の新機能が導入されています。以下の例では、HTTPRoute が Store チームによってチームの Namespace にデプロイされ、foo.example.com/store のトラフィックを照合して、次のトラフィック ルールを適用します。
クライアント トラフィックの 90% を store-v1 に送信する
クライアント トラフィックの 10% を store-v2 に送信して、次のバージョンの store をカナリア更新する
すべてのクライアント トラフィックを store-v3 にコピー、ミラーリングして、次のバージョンの store のスケーラビリティ テストに使用する
マルチクラスタのネイティブ サポート
GKE Gateway コントローラは、マルチクラスタ GatewayClass を通して内部と外部双方の負荷分散のマルチクラスタをネイティブでサポートするよう構築されています。マルチクラスタ Gateway は、GKE クラスタのフリートにわたりクライアント トラフィックを負荷分散します。対象のユースケースはさまざまで、以下のようなものがあります。
マルチクラスタまたはマルチリージョンの冗長性とフェイルオーバー
クライアントに近接している GKE クラスタを使用した、低レイテンシでのサービス提供
クラスタ間での Blue / Green トラフィック シフト(こちらのチュートリアルをお試しください)
組織上またはセキュリティ上の制約による複数クラスタへの拡張
ハブで Ingress を有効にすると、マルチクラスタ GatewayClass(`-mc` が付いている)が GKE クラスタに追加され、フリートで使用できるようになります。
GKE Gateway コントローラはマルチクラスタ Service と緊密に統合されるため、GKE は North-South と East-West の両方のマルチクラスタ負荷分散を提供できます。マルチクラスタ Gateway は、マルチクラスタ Service のサービス ディスカバリを活用するため、Pod バックエンドの全体像を把握できます。外部マルチクラスタ Gateway はインターネット負荷分散を提供し、内部マルチクラスタ Gateway は内部のプライベート負荷分散を提供します。トラフィック フローが East-West、North-South、パブリック、プライベートであるかどうかにかかわらず、GKE には必要なすべてのマルチクラスタ ネットワーキング機能が用意されており、すぐに利用を開始できます。
GKE Gateway コントローラは、Google Cloud が初めて実装した Gateway API です。疎結合されたリソースモデルにより、TCPRoute、UDPRoute、TLSRoute も Gateway API 仕様にまもなく追加され、この API の機能の範囲がさらに広がる予定です。これは、Kubernetes Service ネットワーキングの新しい章の始まりです。ここから続くはるかな道のりにご期待ください。
詳細
Gateway API の詳細や GKE Gateway コントローラの使用方法についてさまざまなリソースが用意されています。Gateway API のコンセプトに関しては、K8s について学習するための以下のチュートリアルをご確認ください。
-プロダクト マネージャー Mark Church
-Cloud ネットワーキング担当ソフトウェア エンジニア Bowei Du