技術
Envoy
クラウドネイティブアプリケーション向けの高性能プロキシ
Envoy は、クラウドネイティブアプリケーション向けに作られた、高性能で拡張可能なプロキシです。レイヤー 3/4 とレイヤー 7 の両方で動作し、通過するトラフィックのロードバランシング、サービスディスカバリー、リトライ、サーキットブレーキング、可観測性を担います。また、最近のほとんどのサービスメッシュや API ゲートウェイの根底にある、データプレーンのプロキシでもあります。
仕組み
Envoy は通常、各アプリケーションインスタンスの隣のサイドカーとして、またはスタンドアロンのエッジプロキシとしてデプロイされます。ディスカバリー API の集合(総称して「xDS」)によって動的に設定されます。コントロールプレーンがリスナー、ルート、クラスター、エンドポイントの設定をプッシュし、Envoy は再起動せずにそれを適用します。高速で汎用的なデータプレーンと、差し替え可能なコントロールプレーンを分離するこの設計が、Istio などのツールが Envoy の上に完全なサービスメッシュを構築できる理由です。
主要な概念
- Listener(リスナー) — Envoy が接続を受け付ける、名前付きのネットワーク上の場所(IP とポート)です。
- Route(ルート) — 受信リクエストに一致させ、どのアップストリームクラスターが処理するかを決定する設定です。
- Cluster(クラスター) — Envoy がトラフィックをロードバランスできる、アップストリームエンドポイントのグループで、ヘルスチェックとコネクションプールの設定も含みます。
- xDS API — コントロールプレーンが Envoy に動的に設定をプッシュするために使う、ディスカバリープロトコルの一群です(LDS、RDS、CDS、EDS など)。
チームが Envoy を採用する理由
- 豊富なレイヤー 7 機能。 HTTP/2、gRPC、リトライ、タイムアウト、サーキットブレーキング、きめ細かなトラフィック分割をネイティブにサポートします。
- 深い可観測性。 詳細なメトリクス、ログ、分散トレーシングが、後付けではなく組み込まれています。
- 動的な設定。 ルーティングやエンドポイントの変更は、再起動や接続の切断なしに適用されます。
- 共通の基盤。 Istio、いくつかの API ゲートウェイ、多くのマネージドな ingress コントローラーの基盤であるため、スキルがツール間で転用できます。
はじめに
Kubernetes のコンテキストでは、Envoy が単独で実行されることはまれです。ほとんどのチームは、Istio のようなサービスメッシュのサイドカープロキシとして、あるいは ingress コントローラーや API ゲートウェイの背後のエンジンとして、これに出会います。以降のガイドでは、そうした一般的なコンテキストでの Envoy の設定方法を説明します。