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 — выбор для систем, где важны динамичность, высокая доступность, телеметрия и управление трафиком без ручного вмешательства.