Kubernetes Ingressは、ルーティング、TLS終端、ロードバランシングといった機能を備え、クラスター外部へサービスを公開する従来の標準的な手法として使われてきました。しかし、Kubernetes内のネットワーク要件が複雑化するにつれて、マルチテナント環境や高度なトラフィック制御、拡張性などの面でIngressの限界が見えてきました。
そこで登場したのがGateway APIです。Ingressの次世代後継として設計されたGateway APIは、より豊富な機能と柔軟性を備え、Kubernetesらしいアプローチで外部トラフィックを扱えます。ネットワークリソースに対するロールベースアクセス、トラフィックポリシーを定義するための標準化された方法、サービスメッシュパターンへの対応など、重要な機能を提供します。
IngressとGateway APIのどちらを使うべきかは、プロジェクトの要件次第です。複雑なルーティングや厳格なセキュリティ要件にはGateway APIが、Kubernetesネイティブなシンプルな構成にはIngressが向いています。本記事では、ingress2gatewayツールを取り上げ、IngressからGateway APIへの移行をどのように支援してくれるのかを解説します。
**ingress2gateway**とは?
Ingress2gatewayは、Kubernetes Ingressリソースからよりパワフルかつ表現力豊かなGateway APIへの移行を簡単にするためのツールです。堅牢な自動変換プロセスにより、影響を最小限に抑えつつスムーズな移行を実現します。
主な機能と特長:
✅ 自動変換
- 既存のIngressリソースを解析し、Gateway、HTTPRoute、BackendPolicyなど対応するGateway APIの設定を自動生成します。
- 複雑なIngressルールやアノテーション、構成にも対応し、Gateway APIの仕様へ変換します。
✅ ルーティングルールを保持:
- IngressルールのURLパス、ホスト名、バックエンドサービスを正確にHTTPRouteルールへマッピングします。
- 移行後もトラフィックルーティングの挙動が変わらないため、想定外のサービス停止を防げます。
- パスマッチング(プレフィックス、完全一致、正規表現)、ホスト名マッチング、ヘッダーベースのルーティングなど、幅広いルーティング機能をサポートします。
✅ 多様なIngressコントローラーに対応
- 現在、apisix、cilium、ingress-nginx、istio、gce、kong、openapiのプロバイダーに対応しており、コミュニティでは新たなプロバイダー追加の取り組みも積極的に進められています。
✅ 段階的な移行をサポート:
- Ingressリソースを必要なものから順に変換できるため、Gateway APIを段階的に導入できます。
- クラスターへ変更を適用する前に変換結果を確認できる、ドライランモードに対応しています。
- IngressリソースとGateway APIリソースを並行稼働させた検証も可能です。
Ingress2gatewayを実際に使ってみる
このツールを試すには、Gateway APIがインストール済みのKubernetesクラスターが必要です。Gateway APIに対応したプロジェクトはいくつかあり、フルマネージドの実装を提供しているクラウドプロバイダーもあります。
以下の例では、Google Kubernetes Engineと、GKEのデフォルトIngressコントローラーであるingress-gceを使用しています。
サンプルworkloadとIngressリソースのデプロイ
- サンプルのhttpbin workloadをデプロイします。
---
apiVersion: v1
kind: Service
metadata:
name: httpbin
labels:
app: httpbin
spec:
ports:
- name: http
port: 8000
targetPort: 80
selector:
app: httpbin
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: httpbin
spec:
replicas: 1
selector:
matchLabels:
app: httpbin
template:
metadata:
labels:
app: httpbin
spec:
containers:
- image: docker.io/kennethreitz/httpbin
imagePullPolicy: IfNotPresent
name: httpbin
ports:
- containerPort: 80

サンプルのKubernetes DeploymentとService
- httpbin Deployment向けのIngressリソースを作成します。
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: httpbin-ingress
namespace: default
spec:
rules:
- host: httpbin.example.com
http:
paths:
- backend:
service:
name: httpbin
port:
number: 8000
path: /
pathType: Prefix

サンプルのIngressリソース
ingress2gatewayのインストールと実行
- インストールドキュメントに従ってingress2gatewayをインストールするか、リリースページからバイナリをダウンロードします。
- 利用しているプロバイダー向けにingress2gatewayを実行します。Kubernetesクラスターまたはファイルから、Ingressリソースやプロバイダー固有のCRDを読み込み、対応するGateway APIリソースをYAML/JSON形式で標準出力に書き出します。
出力は次のようになります:

ingress2gatewayが生成したGateway APIリソースのサンプル
注:ingress2gatewayは、IngressのアノテーションをそのままGateway APIへコピーするツールではありません。アノテーションはGateway CRDに変換されますが、広く使われているプロバイダー固有のアノテーションやCRDの中には、まだサポートされていないものもあります。現時点で対応しているプロバイダーとそのドキュメントについては、supported providersをご参照ください。

サンプルのGateway APIリソース
- 本番環境に適用する前に、生成されたマニフェストに必要な設定がすべて含まれているか確認してください。既存のIngressリソースを削除する前には、必ずエンドツーエンドのテストを実施しましょう。
従来のIngressも十分役立ってきましたが、Gateway APIはKubernetesのトラフィック管理に新たなレベルの制御性と柔軟性をもたらします。高度なトラフィックルーティング、より優れたセキュリティポリシー、マルチテナンシーへのネイティブ対応を備えたGateway APIは、進化するクラウドネイティブネットワーキングのニーズに応えるべく設計されています。移行の準備はできていますか?コミュニティ主導のingress2gatewayapiを使えば、移行プロセスをシンプルにし、スムーズな切り替えを実現できます。
本記事がお役に立てば幸いです。さらに詳しく知りたい方や当社のサービスにご関心のある方は、お気軽にこちらからお問い合わせください。