
- はじめに
- 準備
- 1. AKSクラスターの作成
- 2. サンプルアプリのデプロイ
- 3. EnvoyGatewayのインストール
- 4. GatewayClass, Gatewayをデプロイする。
- 5.サンプルアプリの為のルーティングのHTTPRouteをデプロイする。
- 5. まとめ
- ACS事業部のご紹介
はじめに
皆様、こんにちは。ACS事業部 木戸と申します。
今回は AKS 環境で Gateway API を利用するために EnvoyGateway を導入し、HTTPRoute を利用してURLのパスに応じたルーティングが行えるかを検証してみました。
準備
事前にWindowsのローカル環境のWSLに作成したUbuntu環境に、以下のツールをインストールしています。
・az cli ・kubectl ・helm
1. AKSクラスターの作成
Azure 上に AKS クラスターを作成します。
以下のコマンドを実行し Azure CNI Powered by Cilium をサポートした状態でAKSを構築します。
learn.microsoft.com
// Azure環境へのログイン
az login
// AKS構築
az aks create \
--name {AKSの名前} \
--resource-group {リソースグループ名} \
--location {リージョン} \
--network-plugin azure \
--network-plugin-mode overlay \
--pod-cidr {IPアドレス} \
--network-dataplane cilium \
--generate-ssh-keys

AKSが構築できたら以下のコマンドでアクセス資格情報を取得しておきます。
az aks get-credentials --resource-group {リソースグループ名} --name {AKSの名前}
2. サンプルアプリのデプロイ
サンプルアプリは フロントエンド(Next.js-React)とバックエンド(Express-Node.js)の構成で実装しました。
デプロイの方法等は割愛しますが、ContainerRegistryに各コンテナをプッシュしKubernetesのマニフェストをデプロイして準備をしております。

// サンプルアプリのデプロイ状況 kubectl get svc -n sample-1 <結果> NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE sampleapp-backend-service ClusterIP xx.xx.xx.xx <none> 4000/TCP 7m55s sampleapp-next-service ClusterIP xx.xx.xx.xx <none> 3000/TCP 8m5s
3. EnvoyGatewayのインストール
EnvoyGatewayの公式に用意されているHelm Chartを利用してインストールを行いました。
以下のコマンドを実行し、インストール後にenvoy-gateway用のServiceが出力されることを確認しました。
// HelmによるEnvoyGatewayのインストール helm install eg oci://docker.io/envoyproxy/gateway-helm --version v1.7.0 -n envoy-gateway-system --create-namespace // Serviceの確認 kubectl get svc -n envoy-gateway-system <結果> envoy-gateway ClusterIP xx.xx.xx.xx <none> 18000/TCP,18001/TCP,18002/TCP,19001/TCP,9443/TCP 7d23h
4. GatewayClass, Gatewayをデプロイする。
EnvoyGatewayでは主に以下のオブジェクトを実装することで Gateway API の機能を提供します。
GatewayClass
コントローラーとの紐付けやインフラの構成などを定義します。
Gateway
GatewayClassに基づいたロードバランサーとして、待ち受けポート(Listener)を定義します。
HttpRoute
特定のパスへのアクセスをどの名前空間のサービスに流すかなどのルーティングルールを定義します。
以下のYAMLファイルを適用することで、GatewayClass, Gateway を実装していきます。
# Gateway Class
apiVersion: gateway.networking.k8s.io/v1
kind: GatewayClass
metadata:
name: eg-class
spec:
controllerName: gateway.envoyproxy.io/gatewayclass-controller
---
# サンプルアプリ用 Gateway
apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
name: sample-eg-gateway
namespace: sample-1
spec:
gatewayClassName: eg-class
listeners:
- name: http
protocol: HTTP
port: 80
実装後に以下のコマンドでgatewayが実装されていることを確認できました。
kubectl get gateway -n sample-1 <結果> NAMESPACE NAME CLASS ADDRESS PROGRAMMED AGE sample-1 sample-eg-gateway eg-class xx.xx.xx.xx True 4h38m
5.サンプルアプリの為のルーティングのHTTPRouteをデプロイする。
以下のHttpRouteのルールを適用し、URLのパスで通信を振り分けるように設定します。
最終的にAKS上に図のような環境を構築しています。

# サンプルアプリ用 HttpRoute
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: sample-app-route
namespace: sample-1
spec:
parentRefs:
- name: sample-eg-gateway
namespace: sample-1
rules:
# Backend API ルーティング
- matches:
- path:
type: PathPrefix
value: /api
backendRefs:
- group: ""
kind: Service
name: sampleapp-backend-service
port: 4000
weight: 1
# Frontend ルーティング
- matches:
- path:
type: PathPrefix
value: /
backendRefs:
- group: ""
kind: Service
name: sampleapp-next-service
port: 3000
weight: 1
Gatewayに設定されたアドレスにブラウザでアクセスし、サンプルアプリが起動することを確認できました。
メッセージの登録、一覧表示のデータが出力されており、パスのルーティングによりバックエンドからデータを取得できています。

5. まとめ
今回は、AKS 上で Envoy Gateway と Gateway API(GatewayClass、Gateway、HTTPRoute)を使い、パスベースルーティングの基本動作を確認しました。
シンプルな構成であれば導入しやすい一方、実運用では Namespace 設計や Gateway の分割方針、セキュリティポリシーとの整合を設計しておく事が重要だと感じました。
ACS事業部のご紹介
私達ACS事業部はクラウドネイティブ技術、Azure AI サービス、Platform Engineering、AI駆動開発支援などを通して、攻めのDX成功に向けた開発者体験・開発生産性の向上・内製化のご支援をしております。
www.ap-com.co.jp
また、一緒に働いていただける仲間も募集中です!
今年もまだまだ組織規模拡大中なので、ご興味持っていただけましたらぜひお声がけください。
www.ap-com.co.jp