Envoy(エンボイ)
Lyft 由来 / CNCF Graduated 2018 のクラウドネイティブ HTTP / TCP / gRPC プロキシ。L7 ロードバランサ + サービスメッシュ + API ゲートウェイで Istio / Linkerd 内部 + Anthos / EKS / AKS の中核プロキシ。
概要
Envoy(エンボイ)は、Lyft(米ライドシェア企業、2012 年創業の Uber 競合)社内で 2015 年に Matt Klein(マット・クライン、当時 Lyft プリンシパルエンジニア、現 Lyft Distinguished Engineer + Solo.io Co-Founder)が開発開始、2016 年 9 月にオープンソース公開、2018 年 11 月に CNCF Graduated プロジェクトに昇格したクラウドネイティブ HTTP / TCP / gRPC プロキシです。
開発の背景は、Lyft が 2014-2016 年にモノリシックアプリケーションをマイクロサービスへ分解する大規模リアーキテクチャを実施した際、(1)既存プロキシ(NGINX / HAProxy)は L4-L7 機能 + 動的設定 + 観測性が不足・(2)サービス間通信のレイテンシ + 信頼性 + 観測性が課題に・(3)動的にリロード可能な設定 + サーキットブレーカー + リトライ + 分散トレース統合が必要、という要件から開発されました。
技術仕様は、(1)実装言語: C++14(モダン C++)・(2)アーキテクチャ: イベントドリブン(libevent)+ ノンブロッキング I/O・(3)プロトコル: HTTP/1.1 / HTTP/2 / HTTP/3 / gRPC / WebSocket / TLS / mTLS・(4)動的設定: xDS API(Envoy Discovery Service、CDS / EDS / LDS / RDS / SDS の 5 種類)・(5)機能: L7 ロードバランサ + サーキットブレーカー + リトライ + タイムアウト + 認証 + ログ + メトリクス + 分散トレース・(6)拡張: Lua スクリプト + WebAssembly(WASM)フィルタ + 100+ 公式フィルタ、です。
xDS API(Envoy Discovery Service)は革新的設計で、Envoy 設定をリアルタイムに API 経由で更新できる仕組みです。CDS(Cluster Discovery Service)・EDS(Endpoint Discovery Service)・LDS(Listener Discovery Service)・RDS(Route Discovery Service)・SDS(Secret Discovery Service)の 5 種類のリソースを動的に管理し、Istio / Linkerd / Cilium / AWS App Mesh / Anthos Service Mesh 等のコントロールプレーンが xDS API 経由で Envoy データプレーンを設定する標準アーキテクチャを確立しました。
主な採用は、(1)Istio(Google + IBM + Lyft、2017、Service Mesh の中核データプレーン)・(2)Linkerd 1.x(2017、後年 Rust ベース proxy に置換)・(3)Anthos Service Mesh(Google Cloud)・(4)AWS App Mesh / EKS Service Connect・(5)Microsoft Azure AKS Service Mesh・(6)Tetrate(エンタプライズ Service Mesh ベンダー、2018 創業)・(7)Solo.io Gloo Mesh / Edge(API Gateway + Service Mesh)・(8)Cilium / Cloudflare Service Mesh・(9)Stripe / Square / Pinterest / Spotify(大規模 Web サービスの内部プロキシ)、などです。
派生プロジェクトとして、(1)Envoy Gateway(2024、Kubernetes Gateway API 実装、Ingress Controller の次世代標準)・(2)Envoy Mobile(iOS / Android クライアント側 Envoy、ネットワーク信頼性向上)・(3)Envoy Functions(Serverless 派生)、などが展開され、現代のクラウドネイティブインフラの中核プロキシとして 2018-2026 年に普及拡大中です。
主な特徴・仕組み
- 公開: Lyft 2016 年 9 月、CNCF Graduated 2018 年 11 月。
- 開発主導: Matt Klein(Lyft Distinguished Engineer)。
- 実装言語: C++14、Apache 2.0 ライセンス。
- アーキテクチャ: イベントドリブン + ノンブロッキング I/O(libevent)。
- プロトコル: HTTP/1.1 / 2 / 3 + gRPC + WebSocket + TLS / mTLS。
- xDS API: CDS / EDS / LDS / RDS / SDS 5 種類の動的設定 API。
- 機能: L7 LB + サーキットブレーカー + リトライ + 認証 + 観測性。
- 拡張: Lua + WASM フィルタ + 100+ 公式フィルタ。
- 主要採用: Istio / Linkerd / Anthos / AWS App Mesh / Azure AKS / Cilium / Cloudflare。
- 派生: Envoy Gateway(2024)+ Envoy Mobile + Envoy Functions。
- 大規模採用例: Lyft / Stripe / Square / Pinterest / Spotify / Airbnb / Apple。
Envoy / 競合プロキシ比較
| プロキシ | 提供 | 主な用途 |
|---|---|---|
| Envoy | Lyft / CNCF | クラウドネイティブ + サービスメッシュ |
| NGINX | F5(旧 NGINX Inc.) | Web + LB + Reverse Proxy |
| HAProxy | HAProxy Technologies | エンタプライズ LB |
| Traefik | Traefik Labs | Kubernetes Ingress |
| Caddy | Caddy Technologies | 自動 TLS + シンプル |
| AWS ALB / NLB | AWS | クラウド LB |
自作PCユーザー向けの注意点
Envoy は通常のコンシューマ自作 PC で必要になる技術ではありませんが、ホビーホームラボ + 自宅 Kubernetes 環境 + マイクロサービス開発の上級者には極めて有用です。Docker docker run envoyproxy/envoy:v1.30.0(2024 最新) + 設定ファイル envoy.yaml で簡単起動可能、シングルバイナリ動作で OS 依存性が極小です。
Kubernetes 環境では Istio / Linkerd 経由で間接的に Envoy が動作することが多く、直接 Envoy 設定を扱う機会は少ないですが、Envoy Gateway(2024、Kubernetes Gateway API 実装)が 2025-2026 年に Ingress Controller の標準として広がる見込みで、業務知識習得に重要です。
関連用語との違い
- Istio: Service Mesh、Envoy をデータプレーンとして利用。
- Linkerd: Service Mesh、Envoy 競合 + Rust 製 proxy。
- NGINX: 古典的 Reverse Proxy、Envoy より単純 + 動的設定弱。
- HAProxy: エンタプライズ LB、Envoy より静的設定主軸。
- Envoy Gateway: 2024 年公開、Kubernetes Gateway API 実装。
よくある質問(FAQ)
Q1: Envoy と NGINX どちらを選ぶべきですか? A: クラウドネイティブ + マイクロサービス + 動的設定 → Envoy、伝統的 Web サーバ + 静的設定 + シンプル → NGINX です。Kubernetes 環境では Envoy 系(Istio / Envoy Gateway / Cilium)が主流ですが、レガシー LAMP / Web サイト + シンプル Reverse Proxy では NGINX が依然として優位です。
Q2: xDS API は何が革新的ですか? A: 設定ファイルの再起動なしに、API 経由でリアルタイム更新できる仕組みです。Istio / Linkerd 等のサービスメッシュコントロールプレーンが xDS API 経由で Envoy データプレーンを動的管理することで、デプロイ時の設定変更 + サービス追加削除 + ルーティング変更が瞬時に反映されます。
Q3: 自宅で Envoy を試す方法は?
A: Docker docker run -d -v $(pwd)/envoy.yaml:/etc/envoy/envoy.yaml -p 10000:10000 envoyproxy/envoy:v1.30.0 でシンプル起動可能、設定ファイルで HTTP プロキシ + LB + WASM フィルタ等を学習できます。Kubernetes Helm Chart + Istio Tutorial も豊富で、業務知識習得の優れた選択肢です。
まとめ
- Lyft 2016 年公開 + CNCF Graduated 2018 のプロキシ
- C++14 + xDS API + WASM フィルタの革新的設計
- Istio / Linkerd / Anthos / AWS App Mesh の中核
- Envoy Gateway 2024 で Kubernetes Gateway 標準化