Открыть сервис

Envoy

Envoy — это кроссплатформенный прокси-сервер с открытым исходным кодом, разработанный для современных архитектур микросервисов. Он выступает в роли служебного посредника (service proxy), который управляет сетевым трафиком между сервисами, обеспечивая балансировку нагрузки, маршрутизацию, обнаружение сервисов, шифрование, мониторинг и реализацию политик безопасности. Envoy является одним из ключевых компонентов в экосистеме сервисных сеток (service mesh), таких как Istio, Consul Connect и AWS App Mesh.

История

Проект Envoy был создан инженерами компании Lyft (США) для решения проблем, связанных с ростом числа микросервисов и сложностью управления сетевым взаимодействием между ними. Первая версия была запущена в производство в сентябре 2015 года. В сентябре 2016 года Lyft передала код проекта в Фонд Cloud Native Computing Foundation (CNCF), где он получил статус инкубирующего проекта. В ноябре 2018 года Envoy стал одним из первых проектов, достигших стабильного статуса в CNCF, наряду с Kubernetes и Prometheus. С тех пор проект активно развивается сообществом разработчиков, включая такие компании, как Google, Amazon, Microsoft, Netflix и Apple.

Архитектура и принцип работы

Envoy работает как прозрачный прокси, который перехватывает весь входящий и исходящий трафик приложения. Он не требует изменений в коде самого приложения. Ключевые архитектурные особенности:

1. Модель «Sidecar» и «Edge Proxy»

Envoy может быть развернут двумя основными способами:

  • Sidecar-прокси: запускается как отдельный процесс рядом с каждым экземпляром сервиса (например, в одном pod’е Kubernetes). Он перехватывает весь трафик, идущий к сервису и от него.
  • Edge-прокси (API Gateway): устанавливается на границе сети, обрабатывая трафик от внешних клиентов к внутренним сервисам. В этой роли Envoy может выполнять функции балансировщика нагрузки, кэширования, аутентификации и ограничения скорости.

2. Фильтры и цепочки фильтров

Envoy использует модульную архитектуру на основе фильтров. Каждый фильтр выполняет определённую функцию (например, анализ HTTP-заголовков, проверка TLS-сертификатов, маршрутизация по URL, логирование). Фильтры объединяются в цепочки, которые последовательно обрабатывают каждый пакет или запрос. Это позволяет гибко настраивать поведение прокси без переписывания кода.

3. Динамическая конфигурация (xDS API)

Envoy поддерживает динамическое обновление конфигурации через набор API-интерфейсов, известных как xDS (Discovery Service). К ним относятся:

  • LDS (Listener Discovery Service) — конфигурация слушателей (портов, протоколов).
  • RDS (Route Discovery Service) — правила маршрутизации.
  • CDS (Cluster Discovery Service) — список кластеров (групп серверов).
  • EDS (Endpoint Discovery Service) — список конечных точек (IP-адресов и портов внутри кластера).
  • SDS (Secret Discovery Service) — управление сертификатами и ключами.

Благодаря xDS, Envoy может получать обновления конфигурации в реальном времени от централизованного контроллера (например, Istio Pilot или Consul), что позволяет менять политики маршрутизации, добавлять или удалять сервисы без перезагрузки прокси.

4. Поддержка протоколов

Envoy поддерживает множество протоколов, включая HTTP/1.1, HTTP/2, gRPC, WebSocket, TCP, MongoDB, Redis, Thrift и другие. Он также может выполнять трансляцию протоколов (например, HTTP/1.1 в HTTP/2 или gRPC).

Основные функции

Балансировка нагрузки

Envoy поддерживает несколько алгоритмов балансировки нагрузки, включая:

  • Round robin (циклический).
  • Least request (наименьшее количество активных запросов).
  • Random (случайный).
  • Consistent hashing (консистентное хеширование) для привязки запросов к определённым серверам.
  • Maglev (алгоритм от Google) для быстрой и равномерной балансировки.

Обнаружение сервисов

Envoy может интегрироваться с различными системами обнаружения сервисов, такими как Kubernetes API, Consul, Eureka, ZooKeeper и статическими списками. Он автоматически обновляет список доступных конечных точек.

Управление трафиком

Envoy позволяет реализовывать сложные сценарии маршрутизации, такие как:

  • Разделение трафика (traffic splitting) по весам (например, 90% на старую версию, 10% на новую).
  • Зеркалирование трафика (traffic mirroring) для тестирования.
  • Повторные попытки (retries) и тайм-ауты (timeouts).
  • Ограничение скорости (rate limiting) на уровне запросов или соединений.
  • Circuit breaking (автоматическое отключение неисправных серверов).

Безопасность

Envoy поддерживает:

  • TLS/SSL шифрование как для входящих, так и для исходящих соединений.
  • Взаимную аутентификацию (mTLS) между сервисами.
  • Проверку сертификатов и управление ими через SDS.
  • Интеграцию с внешними системами аутентификации (например, OAuth2, LDAP).
  • Политики контроля доступа на основе атрибутов (ABAC) или ролей (RBAC).

Наблюдаемость (Observability)

Envoy предоставляет детальную телеметрию:

  • Логирование: стандартные логи доступа (access logs) в форматах JSON или текстовом.
  • Метрики: тысячи метрик в формате Prometheus, StatsD или Datadog, охватывающие все аспекты работы (количество запросов, задержки, ошибки, состояние соединений).
  • Трассировка: поддержка распределённой трассировки (distributed tracing) через OpenTelemetry, Jaeger, Zipkin, Lightstep и другие системы.

Применение

Envoy используется в широком спектре сценариев:

1. Сервисные сетки (Service Mesh)

Envoy является основным компонентом многих сервисных сеток. В частности, он используется в:

  • Istio: наиболее популярная сервисная сетка для Kubernetes. Envoy выступает в роли sidecar-прокси для каждого pod’а.
  • Consul Connect: решение от HashiCorp для управления соединениями между сервисами.
  • AWS App Mesh: управляемая сервисная сетка от Amazon Web Services.

2. API Gateway

Envoy часто используется в качестве API-шлюза (edge proxy) для обработки внешнего трафика. На его основе построены такие продукты, как:

  • Gloo Edge (от Solo.io).
  • Kong Gateway (частично использует Envoy).
  • Ambassador Edge Stack.

3. Балансировщик нагрузки

Envoy может выступать в роли программного балансировщика нагрузки, заменяя аппаратные решения или традиционные решения, такие как HAProxy или Nginx. Он особенно эффективен в средах с динамической инфраструктурой (Kubernetes, Nomad).

4. Прокси для gRPC и HTTP/2

Благодаря нативной поддержке gRPC и HTTP/2, Envoy часто используется для маршрутизации и балансировки трафика в системах, использующих эти протоколы.

Преимущества и недостатки

Преимущества

  • Высокая производительность: написан на C++, что обеспечивает низкую задержку и высокую пропускную способность.
  • Масштабируемость: поддерживает тысячи сервисов и миллионов соединений.
  • Гибкость: модульная архитектура и динамическая конфигурация позволяют адаптировать Envoy под любые задачи.
  • Активное сообщество: проект поддерживается CNCF и крупными компаниями, что гарантирует регулярные обновления и исправления.
  • Безопасность: встроенная поддержка mTLS и других механизмов защиты.

Недостатки

  • Сложность настройки: из-за огромного количества параметров и фильтров конфигурация Envoy может быть нетривиальной, особенно для новичков.
  • Потребление ресурсов: sidecar-прокси требует дополнительных ресурсов (CPU, RAM) на каждом узле, что может быть значительным при большом количестве сервисов.
  • Зависимость от xDS: для полноценной работы Envoy обычно требуется централизованный контроллер (например, Istio Pilot), что добавляет дополнительный уровень сложности.

Интересные факты

  • Envoy является одним из самых популярных проектов в CNCF по количеству звёзд на GitHub (более 25 000).
  • Проект используется в производственных средах такими компаниями, как Apple, Google, Netflix, Uber, Airbnb, Pinterest и Stripe.
  • В 2020 году компания Solo.io выпустила коммерческую версию Envoy под названием Gloo Mesh, которая добавляет дополнительные функции управления и мониторинга.
  • Envoy поддерживает протокол WebAssembly (Wasm), что позволяет писать фильтры на языках, отличных от C++, например, на Rust или Go.

Источники

  • Официальная документация проекта Envoy: envoyproxy.io
  • Документация проекта Istio: istio.io
  • Документация проекта Consul Connect: consul.io
  • «Cloud Native Computing Foundation: Envoy Graduation» (2018)
  • «The Envoy Proxy: A Deep Dive» — статья на сайте The New Stack (2019)
  • «Envoy: The Proxy for the Modern Cloud» — книга Мэтта Кляйна (2020)

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →