このページの本文へ

FIXER Tech Blog - Cloud

FIXER cloud.config Tech Blog

KubernetesネイティブなAPIゲートウェイ、Emissary-Ingressをローカルで動かす

2025年05月16日 17時00分更新

文● 中島悠太/FIXER

  • この記事をはてなブックマークに追加
  • 本文印刷

 本記事はFIXERが提供する「cloud.config Tech Blog」に掲載された「Emissary-Ingress をローカルで動かしてみた」を再編集したものです。

はじめに

 Emissary-Ingress とはトラフィックルーティングやロードバランシングなどの機能を提供する、Envoy Proxy ベースの Kubernetes ネイティブな API Gateway です。また、Emissary-Ingress は CNCF プロジェクトにて2021年4月13日にIncubating レベルのプロジェクトと認定されたプロジェクトです。

Emissary-Ingress was accepted to CNCF on April 13, 2021 at the Incubating maturity level.

引用元: CNCF | Emissary-Ingress

 本記事では、Emissary-Ingress quick start を参考に、Minikube を使用してローカル環境の Kubernetes クラスターに Emissary-Ingress をセットアップし、簡単なデモアプリケーションへのルーティングを設定する手順を試します。

 想定されるインフラ構成は下図のとおりです。

前提条件

・Kubernetes クラスター v1.32.0
・Minikube v1.35.0
・kubectl v1.33.0
・Helm v3.17.3
・Emissary-Ingress の Helm Chart v8.12.2
・Emissary-Ingress の アプリケーション v3.12.2

1. Kubernetes クラスターの起動

 Minikube を使用して下記のコマンドを実行し、Kubernetes クラスターを起動します。
 今回は driver に docker を選択することにします。

$ minikube start --driver=docker

 起動が完了したら、

$ kubectl config current-context

 を実行して、接続先のクラスターが Minikube のクラスターとなっていることを確認します。
 確認ができたら、別のウィンドウのシェルで下記のコマンドを実行します。

$ minikube tunnel

 このコマンドを実行しないと以降の手順で Emissary-Ingress を起動しても下記の通り、EXTERNAL_IP が pending 状態で、公開 IP が割り当てられなくなってしまうので注意する必要があります。

NAME                     TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)                      AGE
emissary-ingress         LoadBalancer   ${CLUSTER-IP}        80:30753/TCP,443:30383/TCP   Xs

2. Emissary-Ingressのインストール

 Helm を使用して Emissary-Ingress をインストールします。

# ローカルに Emissary-Ingress のリポジトリへの紐付けを追加する。
$ helm repo add datawire https://app.getambassador.io
$ helm repo update

# 名前空間の追加とCRDのインストール
$ kubectl create namespace emissary && kubectl apply -f https://app.getambassador.io/yaml/emissary/3.9.1/emissary-crds.yaml
$ kubectl wait --timeout=90s --for=condition=available deployment emissary-apiext -n emissary-system
# Emissary-Ingress のインストール
$ helm install emissary-ingress --namespace emissary datawire/emissary-ingress && kubectl -n emissary wait --for condition=available --timeout=90s deploy -lapp.kubernetes.io/instance=emissary-ingress

 ここまで完了すると Emissary-Ingress の本体の起動と Emissary-Ingress が使用する CRD のインストールが完了します。

3. トラフィックルーティングの設定

 Emissary-Ingress は、Kubernetes Custom Resource Definitions (CRDs)を使用して設定を行います。まず、HTTP通信を受け付けるための Listener リソースを作成します。

 この Listener は、クラスター内のすべてのHost と関連付けられ、ポート 8080 で HTTP リクエストを受け付けるように設定されています。

 kubectl apply 時に使用するマニフェストはHere Document を使用する意外に、マニフェストファイルとして設定を記述し、そのファイルを読み込むことで Listener を作成することも可能です。

4. デモアプリケーションのデプロイ

 次に、「Quote」というデモサービスをデプロイします。

$ kubectl apply -f https://app.getambassador.io/yaml/v2-docs/3.9.1/quickstart/qotm.yaml

 上記コマンドにて、サービスとデプロイメントがデフォルト名前空間に作成されます。
 実際に、以下のコマンドで実行することでこれらの状態を確認することが可能です。

$ kubectl get services,deployments quote

5. Mapping リソースの作成

 Emissary-Ingress に、/backend/ パスへのリクエストを Quote サービスにルーティングする Mapping リソースを作成します。

 これで事前の準備が完了しました。
 実際にローカル環境で Emissary-Ingress へアクセスをして動作確認をします。

6. サービスへのアクセス

 以下のコマンドを実行して、ステータスコード 200 がレスポンスとして得ることができればローカルで Emissary-Ingress を動かしてみる作業は完了です。

# 実行コマンド
$ curl -i http://localhost/backend/
# レスポンス(返されるデータはリクエストごとに異なります)
 HTTP/1.1 200 OK
 content-type: application/json
 date: Mon, 28 Apr 2025 15:16:47 GMT
 content-length: 140
 x-envoy-upstream-service-time: 25
 server: envoy
 {
   "server": "mirthful-blackberry-4wk3ol8l",
   "quote": "A small mercy is nothing at all?",
   "time": "2025-04-28T15:16:47.205112Z"
 }

まとめ

 今回は Emissary-Ingress を Minikube を使用したローカル環境の Kubernetes クラスターにインストールし、簡単なルーティング設定を行いました。Emissary-Ingressには、非常に高度な Kubernetes ネイティブ API Gateway ソリューションを提供しています。

 そのため、実際に本番環境で使用する場合には、以下を一例とした高度な機能の設定追加を検討することが可能です。

・TLS/SSL証明書の設定
・認証・認可の設定
・レート制限
・サーキットブレーカー

 Emissary-Ingressは、これらの機能をサポートしており、マイクロサービスアーキテクチャにおけるエッジプロキシとして非常に優れた選択肢になると考えられました。

 使用機会があれば、ぜひ本番環境 Emissary-Ingress を使用してみたいと思います。

参考リンク

Ambassador 公式ドキュメント | Emissary-ingress
Ambassador 公式ドキュメント | Emissary ingress quick start
CNCF | Emissary-Ingress
GitHub リポジトリ | emissary-ingress/emissary
ArtifactHUB | emissary-ingress

中島 悠太/FIXER
2023年度新卒で入社。エンジニア1年生。
社内での担当はまだ未定。
社外では42Tokyoという場所でエンジニアとしてのスキルを研鑽しています。

カテゴリートップへ

この連載の記事