Envoy Proxy — это современный, высокопроизводительный L4/L7-прокси и коммуникационный слой, разработанный для облачных и микросервисных архитектур. Он изначально создавался с учётом требований к высокой доступности, динамической конфигурации и глубокой телеметрии. Сегодня Envoy является стандартным прокси-компонентом в большинстве Service Mesh-решений, включая Istio, Consul Connect, Kuma и AWS App Mesh.
Envoy чаще всего используется в роли sidecar-прокси: он внедряется в каждый pod Kubernetes и берёт на себя контроль над сетевыми взаимодействиями между сервисами. В этой роли он не только направляет трафик, но и применяет политику маршрутизации, безопасность, метрики и отказоустойчивость — полностью прозрачно для самих приложений.
Ключевые возможности Envoy
- Load Balancing (L4/L7) — распределение трафика между upstream-сервисами с поддержкой различных стратегий (round-robin, least-request, random);
- Health Checking — активная проверка состояния бэкендов перед направлением трафика;
- Service Discovery — интеграция с DNS, xDS API, Consul и Kubernetes;
- Traffic Routing — маршрутизация по заголовкам, путям, SNI, версии, пользовательским правилам;
- mTLS и TLS termination — встроенная поддержка шифрования и аутентификации на уровне соединений;
- Rate Limiting и Retry Policy — контроль перегрузки и надёжности;
- Observability — экспорт метрик (statsd, Prometheus), трассировка (Zipkin, Jaeger, Datadog) и логирование;
- Dynamic config via xDS API — горячее обновление маршрутов, кластеров и правил без перезапуска.
Роль Envoy в Kubernetes и Service Mesh
В кластере Kubernetes Envoy чаще всего применяется в рамках Service Mesh, где он:
- работает как sidecar-контейнер рядом с каждым приложением;
- обеспечивает транспарентную маршрутизацию (приложение общается с , Envoy делает остальное);
localhost
- применяет правила безопасности, например mTLS, без изменений кода приложения;
- собирает и отправляет метрики и логи для наблюдаемости.
Примеры использования:
- Istio: Envoy используется как универсальный прокси с централизованным управлением маршрутизацией и политиками;
- Consul Connect: Envoy может быть sidecar или standalone-посредником между сервисами;
- Standalone Gateway: используется как API-шлюз или edge-proxy (например, перед Kubernetes ingress);
- Hybrid architectures: Envoy способен объединять Kubernetes, VM и внешние API в единую mesh-структуру.
Почему Envoy популярен:
- Высокая производительность — C++-реализация, оптимизированная под минимальные задержки и масштабируемость;
- Мощная архитектура — модульность, расширяемость через фильтры, поддержка WASM;
- Динамичность — возможность управлять конфигурацией в реальном времени через xDS-протокол;
- Широкая поддержка — проект входит в CNCF, используется в продакшене у Google, Lyft, Stripe, eBay, Square, Airbnb и других.
Envoy Proxy — это не просто прокси, а сетевой операционный слой для современных распределённых систем. Он даёт полный контроль над поведением трафика в микросервисной архитектуре, не затрагивая логику самих приложений.
Пример конфигурации Envoy (static_resources)
Файл:
envoy.yaml
static_resources: listeners: - name: listener_http address: socket_address: address: 0.0.0.0 port_value: 8080 filter_chains: - filters: - name: envoy.filters.network.http_connection_manager typed_config: "@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager stat_prefix: ingress_http route_config: name: local_route virtual_hosts: - name: backend domains: ["*"] routes: - match: { prefix: "/" } route: { cluster: backend_service } http_filters: - name: envoy.filters.http.router clusters: - name: backend_service connect_timeout: 0.25s type: logical_dns dns_lookup_family: V4_ONLY load_assignment: cluster_name: backend_service endpoints: - lb_endpoints: - endpoint: address: socket_address: address: backend.local port_value: 80
Этот конфиг проксирует все входящие HTTP-запросы на
backend.local:80
Envoy с динамической конфигурацией (xDS)
xDS — это набор API-протоколов, через которые control plane (например, Istio или custom controller) может управлять:
API | Назначение |
---|---|
LDS | Listeners |
CDS | Clusters (наборы backend’ов) |
RDS | Routes (HTTP/HTTPS маршруты) |
EDS | Endpoints (IP/порт хостов) |
SDS | Secrets (TLS, mTLS сертификаты) |
Envoy запрашивает эти данные у control plane и пересобирает свою конфигурацию в реальном времени — без перезапуска.
Сравнение: Envoy vs NGINX как L7-прокси или Ingress
Характеристика | Envoy Proxy | NGINX / NGINX Plus |
---|---|---|
Производительность | Высокая (C++, event-driven) | Высокая (C, event-loop) |
Статическая конфигурация | Да | Да |
Динамическое управление (xDS) | Да (через gRPC + API) | Только через reload / nginx reload |
Расширяемость (WASM) | Да (WebAssembly) | Нет (в Open Source, есть в Plus) |
Observability | Встроенные метрики, tracing, logging | Есть, но ограничено в open source |
Role в Service Mesh | Основной sidecar-прокси | Не используется |
Транспортные протоколы | HTTP/1.1, HTTP/2, gRPC, TLS/mTLS | HTTP/1.1, HTTP/2, SSL (частично) |
Поддержка HTTP/3 | Да | Частично (в Plus/Dev-билдах) |
Контрольный интерфейс | Admin API, metrics | Нет (только через логи/статистику) |
Вывод:
- NGINX подойдёт для классических ingress-сценариев или API Gateway, если нужна стабильность и простота.
- Envoy — выбор для систем, где важны динамичность, высокая доступность, телеметрия и управление трафиком без ручного вмешательства.