Envoy vs Nginx vs Node.js Proxy. Анализируем прокси серверы

Envoy, Nginx и Node.js Proxy являются популярными решениями для проксирования трафика в современных веб-приложениях. В этой статье мы проведем сравнительный анализ этих трех инструментов, чтобы определить их сильные и слабые стороны.

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

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

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

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

Преимущества Nginx:
— Nginx имеет простой и понятный интерфейс конфигурации, что делает его легким в использовании даже для новичков.
— Nginx известен своей стабильностью и способностью обрабатывать большие объемы трафика без сбоев.
— Nginx является проектом с открытым исходным кодом, что позволяет пользователям вносить свой вклад в его развитие.

Недостатки Nginx:
— По сравнению с другими прокси, такими как Envoy, Nginx может иметь ограниченный набор функций.
— Nginx может быть менее гибким в управлении трафиком, чем некоторые другие прокси.

Node.js Proxy
Node.js Proxy — это модульный прокси-сервер для Node.js, написанный на JavaScript с использованием Node.js. Это позволяет разработчикам создавать свои собственные прокси-серверы с помощью знакомого языка программирования. Node.js Proxy также поддерживает различные функции, такие как балансировка нагрузки и кэширование.

Преимущества Node.js Proxy:
— Node.js Proxy позволяет разработчикам создавать специализированные прокси-серверы, которые могут быть адаптированы под конкретные нужды.
— Если ваше приложение уже использует Node.js, использование Node.js Proxy может упростить интеграцию.
— Благодаря большому сообществу разработчиков Node.js, существует множество библиотек, которые могут расширить функциональность вашего прокси.

Недостатки Node.js Proxy:
— Node.js может быть менее производительным по сравнению с другими языками программирования, такими как Go, которые используются в Envoy.
— Поскольку Node.js Proxy написан на JavaScript, он может быть уязвимым для некоторых видов атак, таких как XSS.

Установка Envoy из репозитория на различных операционных системах

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

Установка на MacOS
Обновите список пакетов:
brew update

И установите Envoy:
brew install envoy

Установка на Debian
Для установки Envoy на Debian выполните следующие шаги:
sudo apt update
sudo apt install debian-keyring debian-archive-keyring apt-transport-https curl lsb-release

Затем добавьте ключ подписи репозитория GetEnvoy:
curl -sL 'https://deb.dl.getenvoy.io/public/gpg.8115BA8E629CC074.key' | sudo gpg --dearmor -o /usr/share/keyrings/getenvoy-keyring.gpg

Проверьте контрольную сумму ключа:
echo a077cb587a1b622e03aa4bf2f3689de14658a9497a9af2c427bba5f4cc3c4723 /usr/share/keyrings/getenvoy-keyring.gpg | sha256sum --check

Добавьте строку источника в файл «sources.list»:
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/getenvoy-keyring.gpg] https://deb.dl.getenvoy.io/public/deb/debian $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/getenvoy.list

Обновите список пакетов:
sudo apt update

И установите Envoy:
sudo apt install getenvoy-envoy

Установка на CentOS
Для установки Envoy на CentOS выполните следующие шаги:
sudo yum install yum-utils

Затем импортируйте ключ подписи репозитория GetEnvoy:
sudo rpm --import 'https://rpm.dl.getenvoy.io/public/gpg.CF716AF503183491.key'

Создайте файл конфигурации репозитория:
curl -sL 'https://rpm.dl.getenvoy.io/public/config.rpm.txt?distro=el&codename=7' > /tmp/tetrate-getenvoy-rpm-stable.repo

Добавьте репозиторий в систему:
sudo yum-config-manager --add-repo '/tmp/tetrate-getenvoy-rpm-stable.repo'

Обновите список пакетов:
sudo yum makecache --disablerepo='*' --enablerepo='tetrate-getenvoy-rpm-stable'

И установите Envoy:
sudo yum install getenvoy-envoy

Установка на Ubuntu
Для установки Envoy на Ubuntu выполните следующие шаги:
sudo apt update
sudo apt install apt-transport-https gnupg2 curl lsb-release

Затем добавьте ключ подписи репозитория GetEnvoy:
curl -sL 'https://deb.dl.getenvoy.io/public/gpg.8115BA8E629CC074.key' | sudo gpg --dearmor -o /usr/share/keyrings/getenvoy-keyring.gpg

Проверьте контрольную сумму ключа:
echo a077cb587a1b622e03aa4bf2f3689de14658a9497a9af2c427bba5f4cc3c4723 /usr/share/keyrings/getenvoy-keyring.gpg | sha256sum --check

Добавьте строку источника в файл «sources.list»:
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/getenvoy-keyring.gpg] https://deb.dl.getenvoy.io/public/deb/ubuntu $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/getenvoy.list

Обновите список пакетов:
sudo apt update

И установите Envoy:
sudo apt install -y getenvoy-envoy

Начальное конфигурирование Envoy
Создайте файл конфигурации:
touch /etc/envoy/envoy.yaml

И вставьте в него следующее содержание:
static_resources:
  listeners:
  - name: listener_0
    address:
      socket_address: { address: 0.0.0.0, port_value: 80 }
    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:
            virtual_hosts:
            - name: backend
              domains: ["*"]
              routes:
              - match: { prefix: "/" }
                route:
                  cluster: service_cluster
          http_filters:
          - name: envoy.filters.http.router

  clusters:
  - name: service_cluster
    connect_timeout: 0.25s
    type: LOGICAL_DNS
    lb_policy: ROUND_ROBIN
    dns_lookup_family: V4_ONLY
    load_assignment:
      cluster_name: service_cluster
      endpoints:
      - lb_endpoints:
        - endpoint:
            address:
              socket_address:
                address: service_host
                port_value: 80

Создание сервиса
Создайте файл конфигурации:
nano /etc/systemd/system/envoy.service

И вставьте в него содержимое:
[Unit]
Description=Envoy Proxy
Documentation=https://www.envoyproxy.io/
After=network-online.target

[Service]
User=root
Restart=on-failure
ExecStart=/usr/bin/envoy -c /etc/envoy/envoy.yaml
[Install]
WantedBy=multi-user.target

Запуск Envoy
Добавьте Envoy в запуск:
sudo systemctl enable envoy

И запустите сервис:
sudo systemctl start envoy

Проверьте что все работает:
sudo systemctl status envoy


Админ-интерфейс
Когда все будет готово, зайдите в админ-интерфейс в браузере по адресу:
http://127.0.0.1:9901/