サービスメッシュ

Envoy えんぼい

サービスメッシュプロキシサイドカーパターンロードバランシングIstioxDS API
Envoyについて教えて

簡単に言うとこんな感じ!

Envoyは、マイクロサービス同士の「通信の番人」として働く高性能なプロキシ(中継役)だよ!各サービスの横にこっそり張り付いて、通信の監視・振り分け・リトライを全部やってくれる頼れる助っ人なんだ!


Envoyとは

Envoy(エンボイ)は、米Lyft社が2016年に開発しオープンソースとして公開した、高性能なL4/L7プロキシ(ネットワークの中継役)です。もともとLyftの巨大なマイクロサービス基盤を安定させるために作られたもので、現在はCloud Native Computing Foundation(CNCF)プロジェクトとして多くの企業に採用されています。

Envoyの最大の特徴は「サイドカーパターン」での動作です。各マイクロサービスのコンテナの隣に小さなプロキシとして配置され、アプリ本体のコードをまったく変更せずに、通信の監視・ロードバランシング・リトライ・サーキットブレーカーといった複雑な通信制御を肩代わりします。つまり、アプリ開発者はビジネスロジックだけに集中できる、という分業体制を実現するソフトウェアです。

実務の場面では、IstioAWS App Meshなどのサービスメッシュ(マイクロサービス間通信を統合管理する仕組み)のデータプレーン(実際に通信を処理する部分)として採用されることが多く、「Envoy単体」よりも「サービスメッシュの中心エンジン」として触れるケースが大半です。


Envoyの主な機能・構造

機能カテゴリ内容実務上の効果
ロードバランシングラウンドロビン・最小リクエスト数・ランダムなど複数方式リクエストを複数サーバーに均等分散
サーキットブレーカー障害サービスへの通信を一時遮断障害の連鎖(カスケード障害)を防止
リトライ・タイムアウト失敗リクエストの自動再試行・待ち時間制限一時的な障害を自動回復
TLS終端暗号化通信(HTTPS)の処理を代行サービス間通信の暗号化を自動化
オブザーバビリティメトリクス・トレース・ログを自動収集通信の可視化・障害原因の特定
トラフィック制御カナリアリリースA/Bテスト向けルーティングリスクを抑えた段階的デプロイ

サイドカーパターンの覚え方

側車(サイドカー)付きバイク」をイメージしてください。バイク本体がマイクロサービス(アプリ)、横の側車がEnvoyです。バイクが走る(アプリが動く)ための通信のコントロールは全部サイドカーに任せて、ライダーはハンドルだけ握ればいい、という構造です。

xDS APIとは

Envoyの設定はxDS API(x Discovery Service API)という仕組みで動的に更新できます。サービスが増減しても、Envoyを再起動せずにリアルタイムで設定が反映されるため、大規模な本番環境でも安全に使えます。IstioなどのコントロールプレーンがこのxDS APIを通じてEnvoyを制御します。


歴史と背景

  • 2015年頃 — 米Lyft社の急拡大するマイクロサービス基盤で通信管理が限界に。既存のプロキシ(HAProxy・NGINXなど)では動的設定変更・可観測性が不十分と判断
  • 2016年9月 — Lyftがオープンソースとして公開。L7プロキシとして高い注目を集める
  • 2017年9月CNCF(Cloud Native Computing Foundation)に寄贈。ガバナンスがオープンになり企業採用が加速
  • 2018年 — Googleが主導するIstio 1.0リリース。EnvoyをデータプレーンとしてデフォルトCNCF採用。一気に業界標準の地位へ
  • 2019年〜 — AWS App Mesh・Consul Connect・Kuma・OSMなど多数のサービスメッシュ実装がEnvoyを採用
  • 2021年以降 — エッジプロキシ(Envoy Gateway)やAPIゲートウェイ用途への展開が加速。用途が大幅に拡大

サービスメッシュ内でのEnvoyの位置づけ

サービスメッシュは「コントロールプレーン(司令塔)」と「データプレーン(実際に通信する部分)」に分かれます。Envoyはデータプレーンを担当します。

サービスメッシュにおけるEnvoyの役割 コントロールプレーン(例: Istiod) サービス検出 (どのサービスが) (どこにいるか管理) ポリシー管理 (通信ルールを定義) (認証・認可設定) 証明書管理 (TLS証明書の) (自動発行・更新) xDS API で動的設定配信 データプレーン(Envoy サイドカー群) サービス A アプリ 本体 (コンテナ) ビジネスロジック Envoy サイドカー 通信制御 監視・LB サービス B アプリ 本体 (コンテナ) ビジネスロジック Envoy サイドカー 通信制御 監視・LB サービス C アプリ 本体 (コンテナ) ビジネスロジック Envoy サイドカー 通信制御 監視・LB EnvoyサイドカーはコントロールプレーンからxDS APIで設定を受け取り、通信を処理する

Envoyと他のプロキシの比較

比較項目EnvoyNGINXHAProxy
主な用途サービスメッシュ・サイドカーWebサーバー・リバースプロキシTCPロードバランサー
動的設定◎ xDS APIで無停止変更△ reload必要△ reload必要
L7プロキシ◎ HTTP/2・gRPC対応
オブザーバビリティ◎ 組み込みで豊富△ 別途設定要△ 別途設定要
サービスメッシュ採用◎ 業界標準×
設定の複雑さ△ やや複雑◎ シンプル

関連する規格・RFC

規格・RFC番号内容
RFC 7540HTTP/2(EnvoyがネイティブサポートするHTTPプロトコル)
RFC 9114HTTP/3(Envoyが対応を進めている次世代HTTPプロトコル)
RFC 8446TLS 1.3(EnvoyのmTLS通信に利用されるTLS規格)
RFC 7231HTTP/1.1セマンティクス(Envoyが処理するHTTPの基本仕様)

関連用語