Skip to content
EN

Что такое Envoy

Коротко:

Envoy — high-performance L7 proxy, originally от Lyft (2016), CNCF graduated. Основа most popular service mesh implementations (Istio, AWS App Mesh, Consul Connect). C++ rewrite всех best ideas из nginx/HAProxy. Features: HTTP/2, gRPC, WebSocket, advanced routing, circuit breakers, observability. Configuration через YAML + xDS API для dynamic config.

Ниже: подробности, пример, смежные термины, FAQ.

Проверить свой сайт →

Подробности

  • Listeners: принимают connections на порту
  • Filters: chain handlers (HTTP filter, network filter)
  • Clusters: группы upstream servers
  • xDS API: dynamic config (CDS, LDS, RDS, EDS) через gRPC
  • Admin API: :9901 для stats, config dump, health

Пример

# Envoy listener config
listeners:
- address:
    socket_address: { address: 0.0.0.0, port_value: 80 }
  filter_chains:
  - filters:
    - name: envoy.filters.network.http_connection_manager
      typed_config:
        stat_prefix: ingress_http
        route_config:
          name: local_route
          virtual_hosts:
          - name: backend
            domains: ["*"]
            routes:
            - match: { prefix: "/" }
              route: { cluster: service_backend }

Смежные термины

Что такое Envoy и его роль в прокси и сервисной сетке

Envoy — это высокопроизводительный прокси-сервер, который также функционирует как плоскость данных для сервисной сетки. Он обеспечивает управление трафиком, мониторинг и безопасность между микросервисами, что делает его идеальным решением для современных распределенных приложений. Основная задача Envoy заключается в обработке сетевого трафика, что позволяет снизить сложность взаимодействия между сервисами и улучшить их производительность.

Основные функции и возможности Envoy

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

  • Балансировка нагрузки: Envoy поддерживает различные алгоритмы балансировки нагрузки, такие как round-robin, least-request и random, что позволяет эффективно распределять трафик между сервисами.
  • Обработка ошибок: Envoy может автоматически повторять запросы при временных сбоях и управлять политиками отказоустойчивости.
  • Мониторинг и трассировка: Интеграция с системами мониторинга, такими как Prometheus и Jaeger, позволяет отслеживать производительность микросервисов и выявлять узкие места.
  • Безопасность: Envoy поддерживает mTLS для шифрования трафика между сервисами, а также управление доступом на основе политик.

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

Практическое применение Envoy в проекте

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

static_resources:  
  listeners:  
  - name: listener_0  
    address:  
      socket_address:  
        address: 0.0.0.0  
        port_value: 10000  
    filter_chains:  
    - filters:  
      - name: envoy.filters.network.http_connection_manager  
        config:  
          codec_type: AUTO  
          stat_prefix: ingress_http  
          route_config:  
            name: local_route  
            virtual_hosts:  
            - name: local_service  
              domains:  
              - '*'  
              routes:  
              - match:  
                  prefix: /  
                route:  
                  cluster: service_a  
          http_filters:  
          - name: envoy.filters.http.router  
  clusters:  
  - name: service_a  
    connect_timeout: 0.25s  
    type: STRICT_DNS  
    lb_policy: ROUND_ROBIN  
    load_assignment:  
      cluster_name: service_a  
      endpoints:  
      - lb_endpoints:  
        - endpoint:  
            address:  
              socket_address:  
                address: service_a_address  
                port_value: service_a_port  

В этом примере мы настраиваем слушатель на порту 10000, который будет принимать запросы и перенаправлять их на кластер service_a. Обратите внимание, что мы используем алгоритм ROUND_ROBIN для балансировки нагрузки и указываем connect_timeout в 250 миллисекунд, что позволяет минимизировать задержки при взаимодействии с сервисами.

Эта конфигурация является основой, которую можно расширять в зависимости от потребностей вашего проекта, добавляя дополнительные фильтры, маршруты и кластеры.

Больше по теме

Часто задаваемые вопросы

Envoy vs nginx?

nginx: battle-tested, simple config, strong static file serving. Envoy: better для microservices (gRPC, dynamic config, mesh-ready).

Standalone Envoy — use case?

Front proxy / API gateway (replaces nginx + HAProxy). Или edge proxy для Kubernetes ingress.

Configuration — complex?

Да. Envoy YAML verbose. В service mesh deploys — конфиг генерируется control plane'ом автоматически.

Запустить инструмент, который описан в этой статье

Бесплатный тариф — 10 мониторов, проверки каждые 5 мин, без карты. Платные тарифы — интервал от 1 минуты и проверки из нескольких регионов.