Почему APISIX Ingress Controller является лучшим выбором по сравнению с Traefik?
November 4, 2022
Что такое Apache APISIX Ingress Controller?
Apache APISIX Ingress Controller — это контроллер Ingress для Kubernetes, который использует Apache APISIX в качестве плоскости данных.
Он поддерживает конфигурации с множеством правил:
- Ingress
- APISIX Ingress CRD (пользовательский ресурс)
- Gateway API
В целом, архитектура Apache APISIX Ingress Controller разделяет плоскости данных и управления, позволяя Apache APISIX обрабатывать трафик. Это повышает общую безопасность и значительно снижает риск атак на кластеры Kubernetes из-за атак на плоскость данных.

Что такое Traefik?
Traefik — это открытый обратный прокси-сервер, а также балансировщик нагрузки, разработанный Traefik Labs.
Он поддерживает конфигурации с множеством правил в Kubernetes:
- Ingress
- Traefik IngressRoute (пользовательский ресурс)
- Gateway API
Traefik представляет собой единый бинарный файл, поэтому его плоскость управления и логика проксирования плоскости данных объединены. Таким образом, если происходят атаки на Traefik или эксплуатация уязвимостей удаленного выполнения, кластеры Kubernetes также могут быть атакованы.

Сравнение
В следующих разделах мы сравним APISIX Ingress Controller с Traefik по следующим аспектам.
Поддерживаемые протоколы
Как шлюз для трафика, его основная задача — корректно обрабатывать проксируемый трафик. Apache APISIX Ingress Controller, как Ingress Gateway для кластеров Kubernetes, в основном обрабатывает два типа трафика:
- трафик между клиентом и Ingress
- трафик между Ingress и вышестоящим сервисом (Upstream Service)
Это выглядит следующим образом:
Клиент <----> Ingress <----> Вышестоящий сервис
Сегодня существует множество различных протоколов. Здесь мы приводим простую таблицу, сравнивающую APISIX Ingress Controller и Traefik по поддерживаемым протоколам.
| Протокол | APISIX Ingress Controller | Traefik |
|---|---|---|
| HTTP/HTTPS | Поддержка | Поддержка |
| HTTP/2 | Поддержка | Поддержка |
| HTTP/3 | Не поддерживается | Поддержка |
| TCP | Поддержка | Поддержка |
| UDP | Поддержка | Поддержка |
| WebSocket | Поддержка | Поддержка |
| Dubbo | Поддержка | Не поддерживается |
Кроме того, как APISIX Ingress Controller, так и Traefik поддерживают протоколы через HTTP/2 прокси или TCP прокси, такие как gRPC, MQTT и т.д., поэтому мы не включили их в таблицу выше.
С точки зрения протоколов, как APISIX Ingress Controller, так и Traefik имеют свои сильные стороны. APISIX планирует добавить поддержку HTTP/3 в будущем.
Расширяемость
Расширяемость стала ключевым показателем при выборе технологий из-за разнообразия бизнес-задач. Как Apache Ingress, так и Traefik поддерживают расширение функциональности своими способами. Давайте рассмотрим их по очереди.
Apache APISIX Ingress Controller
Расширение функциональности APISIX Ingress Controller достигается за счет реализации пользовательских плагинов. В настоящее время он поддерживает три основных способа разработки плагинов:
- Разработка плагинов на Lua: Этот способ относительно прост и не требует затрат на производительность;
- Разработка плагинов через
--plugin-runner: В этом режиме пользователи могут разрабатывать плагины, используя различные языки программирования, такие как JAVA/Python/Go, что позволяет им использовать логику текущих проектов без необходимости изучения нового языка; - Разработка плагинов через WASM модули: В этом режиме пользователи могут использовать любой язык программирования, который может компилироваться в WASM модули, для разработки плагинов;
Кроме того, мы можем напрямую писать код на Lua через плагин serverless, чтобы быстро удовлетворять бизнес-задачи.
Конечно, если у вас есть опыт разработки модулей на Lua, вы можете напрямую разрабатывать модули на Lua и загружать их. Однако для этого необходимо добавить следующую конфигурацию:
apisix: ... extra_lua_path: "/path/to/example/?.lua"
Подробные шаги и использование разработки плагинов можно найти в документации по разработке плагинов Apache APISIX и Как APISIX Ingress Controller поддерживает пользовательские плагины.
Traefik
Traefik также предоставляет механизмы плагинов для расширения функциональности. Однако, поскольку Traefik разработан на Go, его плагины также должны быть написаны на Go.
Вы можете сослаться на разработанный плагин, добавив следующие строки в конфигурацию Traefik.
experimental: localPlugins: example: moduleName: github.com/traefik/pluginproviderdemo
Обратите внимание, что имя плагина должно совпадать с именем модуля.
В целом, APISIX Ingress Controller поддерживает несколько способов расширения, и пользователи могут выбрать наиболее подходящий метод в зависимости от ситуации. Кроме того, он позволяет пользователям выбирать предпочтительные инструменты разработки и помогает им более удобно интегрироваться с текущими бизнес-процессами. С другой стороны, Traefik поддерживает только разработку на Golang.
Экосистема
При выборе технологии мы в основном учитываем протоколы, используемые в проекте, принадлежность проекта и то, как мы можем интегрировать контроллер с текущей инфраструктурой.
| Аспект сравнения | APISIX Ingress Controller | Traefik |
|---|---|---|
| Принадлежность | Apache Software Foundation (ASF) | Traefik Labs |
| Лицензия | Apache 2.0 | MIT |
| Дата создания | Июнь 2019 | Август 2015 |
| consul | Поддержка | Поддержка |
| nacos | Поддержка | Не поддерживается |
| Eureka | Поддержка | Не поддерживается |
| etcd | Поддержка | Поддержка |
| zookeeper | Поддержка | Поддержка |
| DNS | Поддержка | Не поддерживается |
Вышеуказанное сравнение включает данные как для плоскости управления, так и для плоскости данных. Кроме того, оба проекта активно работают и интегрируются с другими проектами в экосистеме, такими как Rancher, KubeSphere и т.д.
С этой точки зрения, по сравнению с Traefik, APISIX обладает лучшими возможностями для интеграции с базовыми компонентами.
Вы можете взвесить плюсы и минусы базовых компонентов, которые вы используете, при выборе технологии.
Отзывы пользователей (Кейсы)
Horizon robotics перешли с Traefik на Apache APISIX, в основном учитывая следующие аспекты:
- Конфигурация, добавленная через Annotation, не могла быть легко повторно использована.
- Поведение Traefik по умолчанию отличается от NGINX, что сбивает пользователей с толку при использовании.
После перехода на Apache APISIX Ingress Controller, благодаря богатой экосистеме расширений APISIX Ingress Controller, большинство требований может быть выполнено с помощью внутренних плагинов. Кроме того, пользователи могут напрямую определять конфигурацию плагинов через ресурс ApisixRoute в APISIX Ingress Controller, что очень удобно. Кроме того, пользователи также могут настраивать конфигурацию модуля плагина через ApisixPluginConfig, и она может быть использована в других ресурсах ApisixRoute.

APISIX Ingress Controller обладает отличной производительностью плоскости данных и может эффективно обрабатывать растущий трафик без узких мест в производительности.
Помимо Horizon, такие компании, как igetcool и gwwisdom, также используют APISIX Ingress Controller для замены Traefik. Подробнее о кейсах клиентов можно узнать в разделе Кейсы пользователей.
Кроме того, Apache APISIX имеет активное сообщество, и вы можете получить быстрые ответы и решения на таких каналах, как Github, Slack и т.д.
Заключение
В этой статье мы сравнили Apache APISIX Ingress Controller с Traefik по протоколам, расширяемости и экосистеме.
Apache Ingress имеет определенные преимущества в областях расширяемости и интеграции с экосистемой. Пользователи могут расширять функциональность APISIX Ingress Controller и более эффективно интегрироваться с базовыми компонентами.
Мы надеемся, что эта статья даст вам некоторые подсказки при выборе контроллера Ingress для Kubernetes.