Gateway APIメッシュサポートが安定版に昇格
次世代KubernetesトラフィックルーティングAPIが、サービスメッシュユースケースで一般提供開始となりました。
サービスメッシュにおけるGateway APIのサポートが正式に「安定版」になったことを発表できることを嬉しく思います!このリリース(Gateway API v1.1およびIstio v1.22の一部)により、ユーザーは次世代トラフィック管理APIを、イングレス(「ノースサウス」)とサービスメッシュユースケース(「イーストウエスト」)の両方で使用できるようになります。
Gateway APIとは?
Gateway APIは、Kubernetesの一部であるAPIの集合で、トラフィックルーティングと管理に焦点を当てています。これらのAPIは、KubernetesのIngress
やIstioのVirtualService
およびGateway
APIに触発され、多くの同様の役割を果たしています。
これらのAPIは、Istioと幅広い協業を通じて2020年から開発されており、それ以来大きく進歩しました。APIは当初、イングレスユースケース(昨年GAになりました)のみを対象としていましたが、常にクラスタ内のトラフィックにも同じAPIを使用できるようにすることを想定していました。
このリリースにより、そのビジョンが実現しました。Istioユーザーは、すべてのトラフィックに同じルーティングAPIを使用できるようになりました!
始め方
Istioのドキュメント全体で、Gateway APIの使用方法を示すすべての例が更新されているため、いくつかのタスクを調べて、より深い理解を得てください。
サービスメッシュのGateway APIの使用は、すでにイングレスにGateway APIを使用しているユーザーと、現在サービスメッシュにVirtualService
を使用しているユーザーの両方にとって、なじみのあるものになるはずです。
- イングレス用のGateway APIと比較すると、ルートは
Gateway
ではなくService
をターゲットにします。 VirtualService
と比較すると、ルートは一連のhosts
に関連付けられるのではなく、Service
をターゲットにします。
リクエストヘッダーに基づいてサービスの2つの異なるバージョンへのリクエストをルーティングする方法を示す簡単な例を以下に示します。
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: reviews
spec:
parentRefs:
- group: ""
kind: Service
name: reviews
port: 9080
rules:
- matches:
- headers:
- name: my-favorite-service-mesh
value: istio
filters:
- type: RequestHeaderModifier
requestHeaderModifier:
add:
- name: hello
value: world
backendRefs:
- name: reviews-v2
port: 9080
- backendRefs:
- name: reviews-v1
port: 9080
これを分解すると、いくつかの部分があります。
- まず、一致させるべきルートを特定します。ルートを
reviews
サービスにアタッチすることで、元のreviews
をターゲットにしていたすべてのリクエストにこのルーティング構成を適用します。 - 次に、
matches
は、このルートが処理するトラフィックを選択するための条件を構成します。 - 必要に応じて、リクエストを変更できます。ここでは、ヘッダーを追加しています。
- 最後に、リクエストの宛先を選択します。この例では、アプリケーションの2つのバージョンの中から選択しています。
詳細については、Istioのトラフィックルーティング内部とGateway APIのサービスドキュメントを参照してください。
どのAPIを使用するべきか?
責任(と名前!)が重複しているため、どのAPIを使用するかを選択するのが少し混乱する可能性があります。
以下に概要を示します。
API名 | オブジェクトタイプ | ステータス | 推奨事項 |
---|---|---|---|
Gateway API | HTTPRoute、Gatewayなど | Gateway API v1.0(2023年)で安定版 | 特にアンビエントモードで、新しいデプロイメントに使用します。 |
Istio API | Virtual Service、Gateway | Istio 1.22(2024年)でv1 | 既存のデプロイメント、または高度な機能が必要な場合に使用します。 |
Ingress API | Ingress | Kubernetes v1.19(2020年)で安定版 | レガシデプロイメントにのみ使用します。 |
上記を考慮すると、Istio APIが同時にv1
に昇格した理由について疑問に思うかもしれません。これは、APIの *安定性* を正確に分類するための取り組みの一環でした。Gateway APIをトラフィックルーティングAPIの将来(そして現在!)と見なしていますが、既存のAPIは完全な互換性をもって長期的に存続します。これは、Gateway APIに向けた今後の作業を指示しながら、Ingress
をv1
に昇格させたKubernetesのアプローチを反映しています。
コミュニティ
この安定版への昇格は、プロジェクト全体での数え切れないほどの時間と協業の成果です。APIに関与している組織のリストを見て、これまでにどれほど進歩してきたかを考えると驚くべきことです。
この取り組みにおける共同リーダーであるFlynn、Keith Mattix、Mike Morris、そして関わってくれた多くの人々に特別な感謝を述べたいと思います。
参加、フィードバックの提供にご興味のある方は、IstioのコミュニティページまたはGateway APIの貢献ガイドをご覧ください!