Envoy Proxy (Высокопроизводительный прокси для микросервисов)

⌘K

Envoy Proxy (Высокопроизводительный прокси для микросервисов)

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-контейнер рядом с каждым приложением;
  • обеспечивает транспарентную маршрутизацию (приложение общается с
    localhost
    , Envoy делает остальное);
  • применяет правила безопасности, например 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Назначение
LDSListeners
CDSClusters (наборы backend’ов)
RDSRoutes (HTTP/HTTPS маршруты)
EDSEndpoints (IP/порт хостов)
SDSSecrets (TLS, mTLS сертификаты)

Envoy запрашивает эти данные у control plane и пересобирает свою конфигурацию в реальном времени — без перезапуска.


Сравнение: Envoy vs NGINX как L7-прокси или Ingress

ХарактеристикаEnvoy ProxyNGINX / 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/mTLSHTTP/1.1, HTTP/2, SSL (частично)
Поддержка HTTP/3ДаЧастично (в Plus/Dev-билдах)
Контрольный интерфейсAdmin API, metricsНет (только через логи/статистику)

Вывод:

  • NGINX подойдёт для классических ingress-сценариев или API Gateway, если нужна стабильность и простота.
  • Envoy — выбор для систем, где важны динамичность, высокая доступность, телеметрия и управление трафиком без ручного вмешательства.

Мы за стабильность

Оплатите VPS на год и получите месяц в подарок по промокоду

Месяц в подарок
COPIED
NEWCOM COPIED