Почему APISIX Ingress Controller лучше, чем Emissary-ingress?
Xin Rong
March 17, 2023
Основная информация
Kubernetes Ingress — это объект API, который используется для определения правил маршрутизации внешнего трафика к внутренним сервисам в кластере. Ingress Controller обычно используется для реализации логики ресурса Ingress и централизованного управления этими правилами трафика.

На практике корпоративным пользователям часто требуются функции управления трафиком, такие как mTLS, повторные попытки, ограничение скорости и аутентификация, которые не могут быть реализованы с помощью семантики ресурса Ingress. Поэтому реализации Ingress Controller обычно расширяют функциональность, добавляя дополнительные CRD. Далее будет подробно рассмотрено сравнение различий между реализациями APISIX Ingress Controller и Emissary-Ingress.
Что такое Apache APISIX Ingress Controller
Apache APISIX Ingress Controller — это проект с открытым исходным кодом под эгидой ASF (Apache Software Foundation). Его плоскость управления настраивает и доставляет ресурсы в Kubernetes, в то время как APISIX обрабатывает фактический бизнес-трафик. Для повышения безопасности весь процесс развертывания использует полностью разделенную архитектуру плоскости данных и плоскости управления, что эффективно предотвращает риск утечки прав кластера Kubernetes из-за атак на плоскость данных.

Что такое Emissary-Ingress
Emissary-Ingress — это инкубационный проект CNCF (Cloud Native Computing Foundation). Как плоскость управления прокси Envoy, он отвечает за разбор ресурсов Kubernetes, и весь трафик напрямую обрабатывается Envoy на плоскости данных. Упаковка плоскости управления и плоскости данных в один контейнер делает весь процесс более доступным и простым для развертывания.

Различия между APISIX Ingress Controller и Emissary-Ingress
Помимо поддержки ресурсов Ingress, как APISIX Ingress Controller, так и Emissary-Ingress могут поддерживать конфигурацию через CRD и Gateway API для дополнения ограничений семантики Ingress.
В следующих разделах будут проанализированы различия и преимущества между ними с точки зрения базовой функциональности, обнаружения сервисов и расширяемости.
Базовая функциональность
| Функция | APISIX Ingress | Emissary-ingress | |
| Протоколы | HTTP/HTTPS | ✓ | ✓ |
| gRPC | ✓ | ✓ | |
| TCP | ✓ | ✓ | |
| UDP | ✓ | ✕ | |
| Websockets | ✓ | ✓ | |
| Балансировка нагрузки | Round Robin | ✓ | ✓ |
| Ring Hash | ✓ | ✓ | |
| Least Connections | ✓ | ✓ | |
| Maglev | ✕ | ✓ | |
| Аутентификация | External Auth | ✓ | ✓ |
| Basic | ✓ | ✓ | |
| JWT | ✓ | ✕ | |
| OAuth | ✓ | ✕ | |
| OpenID | ✓ | ✕ | |
| Управление трафиком | Circuit Breaker | ✓ | ✓ |
| Rate Limiting | ✓ | ✓ | |
| Canary | ✓ | ✓ | |
| Fault Injection | ✓ | ✕ | |
| Health Checks | ✓ | ✓ | |
Общие функции шлюза включают управление трафиком, балансировку нагрузки и аутентификацию. Однако следует отметить, что Emissary-Ingress имеет относительно ограниченную поддержку аутентификации, включая только возможности Basic Auth и External Auth.
Обнаружение сервисов
В архитектуре микросервисов приложения обычно разбиваются на несколько микросервисов, которые работают вместе для выполнения определенной бизнес-логики. Поскольку количество экземпляров микросервисов постоянно меняется, необходим механизм, который поможет сервисам находить и определять друг друга.
Обнаружение сервисов относится к способу, с помощью которого микросервисы находят друг друга в сети, получая информацию об обнаружении сервисов через имя сервиса, чтобы определить, на какой экземпляр будет направлен запрос.
Для традиционных фреймворков микросервисов выбор реестра часто основывается на конкретных бизнес-требованиях. Однако миграция существующего компонента регистрации и обнаружения сервисов на механизм обнаружения сервисов на основе DNS в Kubernetes может повлечь определенные затраты на модификации.
С другой стороны, если шлюз поддерживает текущие компоненты регистрации и обнаружения сервисов, такие модификации не требуются, что может обеспечить лучшую поддержку фреймворков микросервисов.
Вот ситуации поддержки двух решений для компонентов обнаружения сервисов:
| Обнаружение сервисов | Apache APISIX Ingress Controller | Emissary-Ingress |
|---|---|---|
| Kubernetes | ✓ | ✓ |
| DNS | ✓ | ✓ |
| Nacos | ✓ | ✕ |
| Eureka | ✓ | ✕ |
| Consul | ✓ | ✓ |
Что касается экосистемы обнаружения сервисов, APISIX Ingress Controller имеет более сильную поддержку, и пользователи могут легко интегрировать его в существующий фреймворк микросервисов через Ingress controller.
Расширяемость
Когда функциональность Kubernetes Ingress controller не удовлетворяет конкретным требованиям, пользователи могут расширить его функциональность с помощью пользовательской разработки. Более персонализированные потребности могут быть удовлетворены путем разработки пользовательских плагинов или модификации существующего кода. Ingress controller с мощной расширяемостью может сделать разработку и настройку функций более простой, обеспечивая лучшую поддержку и решения для конкретных сценариев.
Emissary-Ingress
Расширяемость Emissary-Ingress относительно слабая, так как он не поддерживает расширение через пользовательский Envoy Filter. Поскольку плоскость данных и плоскость управления интегрированы, требуется пользовательская разработка всей системы. Сложность пользовательской разработки для плоскости данных Envoy высока и значительно нагружает разработчиков.
Кроме того, если пользователям требуется более мощный Emissary-Ingress, им необходимо обновить его до коммерческого продукта Ambassador Edge Stack. Некоторые проприетарные функции требуют оплаты для получения поддержки.
APISIX Ingress Controller
Плоскость данных APISIX в основном расширяет свою функциональность через плагины, которые предоставляют более 80 готовых плагинов. APISIX Ingress Controller поддерживает все плагины, предоставляемые APISIX, что может удовлетворить большинство повседневных случаев использования.
Если требуется настройка на основе конкретных бизнес-сценариев, APISIX предлагает несколько вариантов расширения, которые пользователи могут свободно выбирать и комбинировать в зависимости от своих ситуаций. В настоящее время поддерживаются следующие методы расширения:
- Разработка плагинов с использованием языка Lua относительно проста и практически не влияет на производительность. Кроме того, можно использовать плагин serverless для написания кода на Lua напрямую, что позволяет быстро удовлетворить бизнес-требования.
- Помимо родного языка Lua, вы также можете использовать
Plugin RunnerилиWASMплагины для расширения, которые поддерживают разработку пользовательских плагинов на таких языках программирования, как Java, Python и Go. Это позволяет пользователям использовать существующую бизнес-логику и выбирать на основе технологического стека компании или предпочтений разработки, не требуя изучения нового языка.
APISIX Ingress Controller полностью поддерживает вышеуказанные методы расширения без необходимости дополнительной разработки.
Производительность
Как компонент проксирования входящего трафика Kubernetes, он управляет всем входящим трафиком платформы и единообразно управляет различными правилами трафика, что предъявляет более высокие требования к производительности прокси.
В этой статье мы проведем тесты производительности для APISIX Ingress Controller (APISIX: 3.1.0) и Emissary-Ingress 3.4.0 на одном и том же экземпляре (4C 8G).
QPS
QPS (Queries-per-second) означает количество запросов, которые сервис может обработать в секунду. Чем выше число, тем лучше производительность.

- 5000 Ingress Resource QPS

Задержка
Задержка ответа: время, необходимое серверу для ответа. Чем меньше задержка, тем лучше производительность.

График показывает, что APISIX Ingress Controller поддерживает стабильную производительность на разных масштабах ресурсов, демонстрируя сбалансированную производительность.
С другой стороны, Emissary-Ingress значительно влияет на QPS и задержку при работе с большими масштабами ресурсов и различными совпадениями маршрутов, при этом производительность снижается с увеличением количества ресурсов. Поэтому по мере роста бизнес-объемов в реальных производственных средах высокая производительность APISIX становится более заметной.
Заключение
Emissary-Ingress характеризуется простотой и легкостью интеграции, но более сложен для пользовательской разработки. Более того, дополнительные требования к функциональности зависят от связанных компонентов платформы.
В сравнении, APISIX Ingress Controller имеет преимущества в расширяемости и интеграции обнаружения сервисов, обладает мощной расширяемостью и простотой разработки. Кроме того, APISIX Ingress Controller демонстрирует исключительную производительность, особенно в сценариях, где бизнес-масштаб продолжает расти, показывая значительные преимущества.