パスベースルーティング
Gateway API の主要な利点の1つは、単一の Gateway から複数の名前空間にまたがる複数のバックエンドサービスにトラフィックをルーティングできることです。このセクションでは、/catalog リクエストを Catalog API に転送する2つ目の HTTPRoute を追加し、既存の UI ルートは引き続き他のすべてのトラフィックを処理します。
現在の状態
現時点では、ui 名前空間に単一の HTTPRoute(ui-route)があり、パスプレフィックス / を持つすべてのトラフィックを UI サービスにルーティングしています:
NAME HOSTNAMES AGE
ui-route 5m
Gateway ALB へのすべてのリクエストは、パスに関係なく現在 UI アプリケーションに到達します。
Catalog HTTPRoute の追加
catalog 名前空間に新しい HTTPRoute を作成し、パスプレフィックス /catalog を持つリクエストを Catalog サービスにルーティングします:
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: catalog-route
namespace: catalog
spec:
parentRefs:
- name: retail-store-gateway
namespace: ui
rules:
- matches:
- path:
type: PathPrefix
value: /catalog
backendRefs:
- name: catalog
port: 80
重要なポイント :
- HTTPRoute は
catalog名前空間に作成され、ルーティング先のサービスと同じ場所に配置されます parentRefsフィールドはui名前空間の Gatewayretail-store-gatewayを参照します — これが名前空間をまたぐルーティングです- ルールはパスプレフィックス
/catalogを持つリクエストをマッチし、それらをcatalogサービスのポート 80 に転送します
Catalog HTTPRoute を適用します:
Catalog ヘルスチェックの設定
catalog サービスは、デフォルトのルートパス / ではなく /health でヘルスエンドポイントを公開します。ALB にヘルスチェック場所を伝えるために TargetGroupConfiguration が必要です:
apiVersion: gateway.k8s.aws/v1beta1
kind: TargetGroupConfiguration
metadata:
name: catalog-tgconfig
namespace: catalog
spec:
targetReference:
name: catalog
kind: Service
defaultConfiguration:
healthCheckConfig:
healthCheckPath: /health
targetReference は catalog Service を識別します
healthCheckPath: /health は ALB に / の代わりに /health をチェックするよう指示します
TargetGroupConfiguration を適用します:
両方のルートを検証
両方の HTTPRoute が Gateway にアタッチされていることを確認します:
NAMESPACE NAME HOSTNAMES AGE
ui ui-route 5m
catalog catalog-route 30s
/catalog パスが Catalog API の JSON を返すことをテストします:
Catalog サービスから製品データを含む JSON レスポンスが返されます。
ルートパス / がまだ UI を返すことを確認します:
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 19973
Connection: keep-alive
Content-Language: en-US
Content-Type: text/html レスポンスは UI サービスが / で応答していることを確認し、Catalog API は /catalog でアクセス可能になりました — 両方とも同じ Gateway ALB を通じて提供されています。
名前空間をまたぐルーティング
このパターンは、Gateway API の従来の Ingress に対する主要な利点の1つを示しています。Ingress では、ルーティングルールとロードバランサー設定が単一のリソースに密結合されており、名前空間をまたいで ALB を共有するには IngressGroup アノテーションのような回避策が必要です。
Gateway API では、アーキテクチャが役割指向です:
- クラスター運用者は1つの名前空間で Gateway(ロードバランサーインフラストラクチャ)を管理します
- アプリケーションチームは自分の名前空間で HTTPRoute を作成し、
parentRefsを介して共有 Gateway を参照します
Catalog チームは、Gateway が存在する ui 名前空間へのアクセスを必要とせずに、catalog 名前空間で独立してルーティングルールを管理できます。Gateway コントローラーは、Gateway がリスナー設定を通じて許可していれば、アタッ チメントを自動的に処理します。
この関心事の分離により、Gateway API は、異なるチームが異なるサービスを所有しながら共通のインフラストラクチャを共有するマルチチームクラスターに自然に適合します。