Envoy
https://gyazo.com/a478663ed7a327dbf59c804024ab86cb
主にService Meshやマイクロサービスで使われるOSSのProxy Server
website
github
#wip
GPT-4.icon
主な特徴
L4 Proxy, L7 Proxy
TCP (L4), HTTP/HTTP2/gRPC (L7) を扱える
Service Discovery
動的にバックエンドサービスの一覧を更新できる
ロードバランシング
ラウンドロビン、重み付き分散などを内蔵
ヘルスチェック
バックエンドの正常性を監視できる
Observability
メトリクス、トレース(Zipkin, Jaegerなど)、ログに対応
gRPCサポート
gRPC通信もネイティブに扱える
xDS API
動的に設定を変更できる(Istioなどが使うAPI)
GPT-4.icon
🧱 基本構成要素
Listener
外部からの接続を待ち受けるエンドポイント(IPアドレス+ポート)を定義。受信したリクエストをどのルートで処理するか決定する。
Filter Chain
Listener に紐づくリクエスト処理チェーン。リクエストのプロトコルや条件で分岐可能。
Network Filter
L4レイヤー(TCP/UDP)の処理に使われるフィルター(例: tcp_proxy, tls_inspector)。
HTTP Filter
L7レイヤーのリクエスト処理用のフィルター(例: router, jwt_authn, cors)。順番に通過する。
Route Configuration
HTTPリクエストのパス・ヘッダなどに基づいて、どのクラスタに転送するかを定める設定。
Virtual Host
Route Configuration 内で、ドメイン名ごとのルーティングをまとめたもの。
Route
特定のパスやメソッドなどにマッチするルールを定義し、クラスタへのルーティングを指定する。
Cluster
実際にリクエストを転送する上流サーバ群の論理的な集合。バックエンドのロードバランス対象。
Endpoint
Cluster に属する具体的なホスト(IP + ポート)。Envoy はここにリクエストを転送する。
⚙️ サービスディスカバリ・構成管理
xDS API
Envoy の設定を gRPC や REST 経由で動的に行うための API 群(LDS, CDS, RDS, EDS など)。
LDS (Listener Discovery Service)
Listener の設定を動的に提供。
CDS (Cluster Discovery Service)
Cluster の設定を動的に提供。
RDS (Route Discovery Service)
HTTP のルート設定を動的に提供。
EDS (Endpoint Discovery Service)
Cluster に属する Endpoint のリストを提供。
ADS (Aggregated Discovery Service)
複数の xDS API をまとめて提供するサービス。
xDS Server
Envoy に設定を配信するコンポーネント(多くの場合、Control Plane)。
🔒 セキュリティ・認証
table:_
TLS Context TLS の証明書・鍵・CA などの設定をまとめたもの。
SDS (Secret Discovery Service) TLS 証明書などの機密情報を Envoy に動的に提供するためのサービス。
mTLS (Mutual TLS) クライアントとサーバ間で相互に証明書を検証する TLS モード。
JWT Authn Filter JWT の署名検証やクレームの検証を行う HTTP フィルター。
🔍 観測・トレース
table:_
Access Log リクエストの詳細情報を出力するログ(形式は JSON, text など)
Stats / Metrics Envoy がエクスポートするメトリクス(リクエスト数、エラー数、レイテンシなど)。Prometheus 連携可。
Tracing Zipkin や Jaeger などの分散トレーシングとの統合が可能。 tracing 設定で有効化。
🚀 高度な機能・実験的機能
table:_
Rate Limit Filter 外部の Rate Limit サーバと連携し、リクエスト制限を行う。
Lua Filter Lua スクリプトを用いてリクエスト/レスポンスを動的に操作可能。
WASM Filter WebAssembly による高度なカスタムフィルター拡張。
Fault Injection 遅延やエラーを意図的に発生させ、耐障害性をテストできる。
🧪 運用・管理関連
table:_
Admin Interface /stats, /config_dump, /clusters などを提供する HTTP 管理 UI(ローカルポートで起動)。
Hot Restart サービス無停止で Envoy プロセスを再起動できる機能。ゼロダウンタイムを実現。
Drain Listener や Cluster を段階的に無効化し、接続を終了するプロセス。
RyuichiWatanabe@gurasan (@ryuichi_1208)
DropboxがNginxからEnvoyに移行した話。内製したプロキシサーバじゃない理由やNginxが抱えていたパフォーマンスや開発プロセスの課題などはなるほどとなった。Nginxのロギングがブロッキングなのは知っていたが課題と思ったことはないな。(isuconとかだと有効なんだっけかな)
https://dropbox.tech/infrastructure/how-we-migrated-dropbox-from-nginx-to-envoy
/mrsekut-book-4873119014/224: 9.8 Envoy
概要しか書いてないが