GKE Gateway API
GKE の LB の一つ
Ingress と違って複数 namespace に紐付けられたりするらしい
https://cloud.google.com/kubernetes-engine/docs/concepts/gateway-api
https://medium.com/google-cloud-jp/gke-gateway-4150649d8c37
https://cloud.google.com/kubernetes-engine/docs/concepts/gateway-api#ingress
https://medium.com/google-cloud-jp/gke-gateway-4150649d8c37
2022/2/15 時点で v1Alpha1 なため、v1Beta1 までは大幅な変更が想定される。本番で使うことは非推奨
概要
Kubernetes Gateway API の GKE 版実装
https://gateway-api.sigs.k8s.io/
https://techblog.zozo.com/entry/gke-controller-verification#Kubernetes-Gateway-API%E3%81%AE%E9%96%8B%E7%99%BA%E8%83%8C%E6%99%AF%E3%81%A8%E7%89%B9%E5%BE%B4
Ingress のスーパーセットというイメージ
https://cloud.google.com/kubernetes-engine/docs/concepts/gateway-api#ingress
Ingress にはない機能
マルチ cluster、マルチ namespace
カスタムヘッダーベースのルーティング
トラフィックの重み付け
クラスタとルーティング設定の権限分離
クラスタ管理者とアプリケーション管理者がいたときに、Gateway, HTTPRoute それぞれで RBAC で権限管理できる
Gateway API とは以下のリソースを包含する
GatewayClass
クラスタごとに用意する LB (l4/l7)のテンプレート
Gateway
LB でトラフィックのリッスン設定
HTTPRoute
Gateway → k8s Service のルーティング
header base ルーティングの例
https://gist.github.com/kazshinohara/a660d410e9346e3c30b25010060a983e#file-i-gw-httproute-header-rewrite-yaml
weight 付けルーティングの例
https://gist.github.com/kazshinohara/05fd3f9873d7f297dec475f271d85ac5#file-i-gw-httproute-split-yaml
Ingress は Gateway + HTTP Route と対応するリソースになる
また、Preview のため 2022/2/16 時点でまだ色々使えない機能/問題がある
https://cloud.google.com/kubernetes-engine/docs/how-to/deploying-gateways#limitations
現在、Gateway によって作成された Google Cloud ロードバランサのリソースは Google Cloud Console UI に表示されません。
Google マネージド SSL 証明書の自動生成はサポートされていません
予め手動で作った証明書は利用可能
BackendConfig は利用できるが、GA前に置き換えられるらしい
https://cloud.google.com/kubernetes-engine/docs/how-to/gatewayclass-capabilities#service
料金
リージョナルは追加料金無し
マルチクラスタはかかる
https://cloud.google.com/kubernetes-engine/pricing#multi-cluster-ingress
感想
Blue-Green Deployment / Canary Deploy について
現状の機能で実現はできるが、重みの変更やスイッチングは手動で kube apply する感じになる
所謂 Progressive Deployment の仕組みはないので、自動でそのあたりもやってくれる Argo Rollouts の方が良さそう
今後 Gateway API をラップする形で Argo Rollouts とか他のツールが使えるようになるとかはあるかも