Перейти к содержимому
Гайды 5 мин чтения 2 просмотров

Envoy Proxy

Статья исследует роль Envoy Proxy как ключевого элемента современных архитектур микросервисов. Освещаются его функции балансировки, безопасности и наблюдаемости.

Envoy Proxy — это высокопроизводительный, открытый прокси-сервер уровня 3/4 и 7, разработанный для современных облачных приложений и архитектур микросервисов, обеспечивающий надежное управление трафиком, наблюдаемость и безопасность.

Envoy Proxy был создан инженерами Lyft для решения проблем, возникающих при эксплуатации крупномасштабной микросервисной архитектуры. Он функционирует как универсальный прокси для всех сетевых коммуникаций, как входящих (ingress), так и исходящих (egress), а также для межсервисного взаимодействия (mesh).

Ключевые особенности Envoy Proxy

Envoy выделяется на фоне традиционных прокси благодаря своей архитектуре и набору функций, специально адаптированных для динамичных и распределенных сред.

Высокая производительность и низкая задержка

Envoy написан на C++11, что обеспечивает высокую производительность и низкую задержку. Он использует асинхронную, многопоточную архитектуру, способную обрабатывать большое количество одновременных соединений.

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

Одной из фундаментальных особенностей Envoy является его способность динамически обновлять конфигурацию без перезапуска. Это достигается за счет набора API, известных как xDS (Discovery Services):

  • LDS (Listener Discovery Service): Динамическое обнаружение слушателей (портов и протоколов).
  • RDS (Route Discovery Service): Динамическое обнаружение правил маршрутизации HTTP/HTTPS запросов.
  • CDS (Cluster Discovery Service): Динамическое обнаружение кластеров (групп однотипных upstream-серверов).
  • EDS (Endpoint Discovery Service): Динамическое обнаружение конечных точек (экземпляров) внутри кластеров.
  • SDS (Secret Discovery Service): Динамическое обнаружение секретов (сертификатов TLS, ключей).

Эта динамическая конфигурация позволяет системам управления, таким как Istio, централизованно управлять тысячами экземпляров Envoy.

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

Envoy предоставляет расширенные возможности управления трафиком на уровне приложений (HTTP/2, gRPC):

  • Балансировка нагрузки: Поддерживает различные алгоритмы (Round Robin, Least Request, Ring Hash, Maglev) и интеллектуальные режимы, такие как "zone-aware" и "panic mode".
  • Маршрутизация: Гибкие правила маршрутизации на основе заголовков, URL-путей, методов HTTP.
  • Таймауты и ретраи: Настраиваемые таймауты для различных этапов запроса и политики повторных попыток.
  • Circuit Breaking: Автоматическое отключение неисправных upstream-хостов для предотвращения каскадных сбоев.
  • Fault Injection: Внедрение задержек или ошибок для тестирования устойчивости системы.
  • Rate Limiting: Ограничение частоты запросов.
  • Traffic Mirroring: Зеркалирование части трафика для тестирования новых версий сервисов.

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

Envoy является мощным инструментом для обеспечения наблюдаемости в микросервисных архитектурах:

  • Метрики: Генерирует подробные метрики о трафике, производительности, ошибках и состоянии системы. Интегрируется с Prometheus.
  • Распределенная трассировка: Поддерживает форматы трассировки, такие как OpenTracing, Zipkin, Jaeger, автоматически добавляя необходимые заголовки для сквозной трассировки запросов.
  • Логирование доступа: Детальные логи каждого запроса, включая информацию о маршрутизации, ошибках и времени ответа.

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

Envoy предлагает ряд функций безопасности:

  • TLS/SSL: Поддержка TLS для входящего и исходящего трафика, а также mTLS (взаимная TLS-аутентификация) для межсервисного взаимодействия.
  • Аутентификация и авторизация: Интеграция с внешними сервисами аутентификации (например, OPA).
  • Управление секретами: Динамическое обновление сертификатов через SDS.

Расширяемая архитектура

Архитектура Envoy основана на фильтрах, которые могут быть добавлены в цепочку обработки запросов. Это позволяет расширять функциональность прокси, добавляя пользовательские фильтры или используя существующие для различных задач (например, сжатие, кэширование, модификация заголовков).

Сценарии использования Envoy Proxy

Sidecar Proxy в Service Mesh

Наиболее распространенный сценарий использования Envoy — в качестве Sidecar-прокси в Service Mesh (например, Istio, Linkerd). В этом случае каждый экземпляр сервиса сопровождается своим экземпляром Envoy, который перехватывает весь входящий и исходящий сетевой трафик для этого сервиса. Это позволяет:
* Применять политики трафика (маршрутизация, балансировка нагрузки) прозрачно для приложений.
* Собирать метрики и трассировку без изменения кода приложения.
* Обеспечивать безопасность (mTLS) на уровне сети.

graph TD
    subgraph Microservice A
        A[App A] --> |localhost:port| E1[Envoy A]
    end

    subgraph Microservice B
        B[App B] --> |localhost:port| E2[Envoy B]
    end

    E1 --> |mTLS| E2

Edge Proxy / API Gateway

Envoy может выступать в роли входного прокси (Edge Proxy) или API Gateway, обрабатывая внешний трафик, поступающий в кластер микросервисов. Он способен:
* Маршрутизировать запросы к соответствующим внутренним сервисам.
* Выполнять TLS-терминацию.
* Применять глобальные политики (rate limiting, аутентификация).
* Предоставлять единую точку входа для мониторинга и логирования.

Внутренний балансировщик нагрузки

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

Конфигурация Envoy

Конфигурация Envoy обычно описывается в формате YAML или JSON. Для динамической конфигурации используется xDS API, где управляющий сервер (Control Plane) предоставляет актуальные данные.

Пример базовой конфигурации Envoy для проксирования HTTP-трафика:

static_resources:
  listeners:
  - name: listener_0
    address:
      socket_address:
        protocol: TCP
        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
          codec_type: AUTO
          route_config:
            name: local_route
            virtual_hosts:
            - name: backend
              domains: ["*"]
              routes:
              - match:
                  prefix: "/"
                route:
                  cluster: service_cluster
          http_filters:
          - name: envoy.filters.http.router
            typed_config:
              "@type": type.googleapis.com/envoy.extensions.filters.http.router.v3.Router
  clusters:
  - name: service_cluster
    connect_timeout: 0.5s
    type: LOGICAL_DNS
    # lb_policy: ROUND_ROBIN # Динамически обнаруживается через EDS
    dns_lookup_family: V4_ONLY
    load_assignment:
      cluster_name: service_cluster
      endpoints:
      - lb_endpoints:
        - endpoint:
            address:
              socket_address:
                address: your_backend_service_host
                port_value: 80

В этом примере Envoy слушает на порту 8080, маршрутизирует все входящие запросы к кластеру service_cluster, который в данном случае указывает на your_backend_service_host:80. В реальных Service Mesh load_assignment и lb_policy будут динамически предоставляться через EDS.

Envoy Proxy против традиционных прокси

Envoy разработан с учетом современных облачных и микросервисных паттернов, что отличает его от более старых решений.

Характеристика Nginx / HAProxy (традиционный) Envoy Proxy (современный)
Основное назначение Веб-сервер, обратный прокси, балансировщик нагрузки Прокси для микросервисов, компонент Service Mesh
Архитектура Обычно статическая конфигурация, перезагрузка для изменений Динамическая конфигурация через xDS API, горячие обновления
Управление трафиком L4/L7, базовые возможности маршрутизации L4/L7, продвинутые возможности (Circuit Breaking, Fault Injection, Traffic Mirroring)
Производительность Высокая Высокая, оптимизирован для распределенных систем
Наблюдаемость Базовые логи, метрики (через модули) Встроенная поддержка метрик, трассировки (OpenTracing), детальное логирование
Расширяемость Модули, Lua-скрипты (Nginx) Система фильтров, C++ API для расширений
Поддержка HTTP/2, gRPC Присутствует Встроенная, нативная поддержка
Service Mesh Требует ручной интеграции Разработан как краеугольный камень Service Mesh
mTLS Возможно, но сложнее в управлении Встроенная, легко настраиваемая через SDS

Почему Envoy?

Envoy Proxy является предпочтительным выбором для микросервисных архитектур благодаря следующим преимуществам:
* Универсальность: Работает как Sidecar, Edge Proxy, внутренний балансировщик.
* Динамизм: Горячая перезагрузка конфигурации, адаптация к изменениям в инфраструктуре.
* Наблюдаемость: Сокращает усилия по внедрению мониторинга и трассировки в приложениях.
* Надежность: Функции устойчивости, такие как Circuit Breaking и Fault Injection, повышают стабильность системы.
* Стандартизация: Предоставляет единый уровень сетевых возможностей для всех сервисов, упрощая управление.

Использование Envoy Proxy позволяет разработчикам сосредоточиться на бизнес-логике, делегируя сложные задачи сетевого взаимодействия и обеспечения надежности специализированному инструменту.

Обновлено: 04.03.2026
Назад к категории

Попробуйте наши прокси

20,000+ прокси в 100+ странах мира