【えんぼいぷろきし】

Envoy Proxy とは?

最終更新:
💡 サービスメッシュの「通信エンジン」

クラウドネイティブなアプリ向けに作られたオープンソースのプロキシ。サービス同士の通信を仲介し、Istioなどのサービスメッシュのデータプレーンや、入口のプロキシとして使われる。

📌 このページのポイント
Envoy Proxy(サイドカーパターン) Pod A サービスA Envoy Pod B サービスB Envoy mTLS / ロードバランス / リトライ トラフィック制御 可観測性 セキュリティ
Envoy Proxyのイメージ
ひよこ ひよこ
Envoyって、ふつうのプロキシと何が違うの?
ペンギン先生 ペンギン先生
大きな特徴は、設定を動かしながら変えられることだよ。Envoyは全部を設定ファイルに書く使い方もできるけど、xDSというAPIで、接続先のサーバー一覧やルーティングなどを外から受け取れるんだ。Kubernetesのように接続先が頻繁に入れ替わる環境に合っているね。ヘルスチェック、リトライ、サーキットブレーカーといった機能も備えているよ
ひよこ ひよこ
Envoyをサイドカーとして使うとどうなる?
ペンギン先生 ペンギン先生
サイドカーは、アプリのすぐ隣で動かす置き方だよ。Istioのサイドカーモードでは、各サービスの出入りの通信をEnvoyが仲介する。すると、負荷分散、リトライ、通信の暗号化、メトリクスの収集といった処理を、アプリのコードに書かなくてもプロキシ側に任せられるんだ。Envoy自体は独立したプロセスだから、アプリがどの言語で書かれていても使えるよ
ひよこ ひよこ
単体で使うこともある?
ペンギン先生 ペンギン先生
あるよ。外からの通信を受ける入口のプロキシとしても使えるんだ。KubernetesのイングレスコントローラーであるContourや、Kubernetes Gateway APIを実装するEnvoy Gatewayは、Envoyを土台にしたプロジェクトだよ。公式サイトには、Airbnb、Netflix、Uberなどが利用者として載っているんだ
ひよこ ひよこ
WASM拡張って何?
ペンギン先生 ペンギン先生
WebAssemblyで作ったプラグインをEnvoyに読み込ませて、機能を足す仕組みだよ。Proxy-Wasmという仕様に沿って作ったモジュールが対象で、公式ドキュメントにはC++用とRust用のSDKが紹介されている。Envoy本体を作り直さずに独自の処理を入れられるのが利点なんだ。プロキシの中で動くものだから、入れるモジュールの中身や性能への影響は自分たちで確かめる必要があるよ
もっと詳しく知りたい人へ

EnvoyとIstioはどういう関係?

Istioはサービスメッシュ全体を管理するソフトで、Envoyはその中で実際に通信を運ぶプロキシです。Istioのドキュメントは、データプレーンを「サイドカーとして配置されたEnvoyプロキシの集まり」、コントロールプレーンを「そのプロキシを管理・設定する側」と説明しており、IstioはEnvoyを拡張したものを使っています。なお、Istioにはサイドカーを使わないアンビエントモードもあり、そちらでは構成が異なります。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「Envoy Proxy」って出てきたら「サービスメッシュなどで使われる通信の仲介役(プロキシ)」と思えればだいたいOK!
📖 おまけ:英語の意味
「Envoy Proxy」 = 使節プロキシ
💬 envoyは「使節・特使」という意味の英語だよ。サービス同士の通信を取り次ぐ役、と考えると覚えやすいね

参考資料

← 用語集にもどる