Когда речь заходит о небольших кластерах K3s (edge, dev, staging, компактные production‑сервисы), ingress‑контроллер — это фактически точка входа во все приложения. От него зависят задержки, стабильность соединений, корректность TLS, логирование и трейсинг. По умолчанию K3s ставит Traefik, но многие админы традиционно тянутся к Nginx Ingress или рассматривают HAProxy ради «железобетонной» производительности и продвинутых L4/L7‑возможностей. Ниже — практичное сравнение: что выбрать под конкретные задачи, на что смотреть в бенчмарках и как избегать типичных ловушек.
Контекст K3s: почему выбор ingress особенно важен
K3s оптимизирован под малые ресурсы, быстрый старт и упрощённую эксплуатацию. Часто это 1–3 узла (часто VDS) с ограниченной памятью и CPU, локальным хранилищем и минимальным набором аддонов. В таком окружении ingress должен:
- быть экономным по памяти и CPU;
- делать zero‑downtime перезагрузки конфигурации без «дрожания» соединений;
- поддерживать стандартный Ingress API Kubernetes и/или понятные CRD, чтобы не упереться в функциональные ограничения;
- иметь предсказуемую модель логирования, метрик и алертинга;
- давать управляемую производительность и стабильность под реальной нагрузкой (HTTP/1.1, HTTP/2, WebSocket, gRPC, TCP/UDP).
Короткая характеристика участников
Traefik
Go‑бинарник с динамической конфигурацией, из коробки дружит с Kubernetes CRD (IngressRoute, Middleware), имеет встроенные метрики и удобные механизмы TLS (включая автоматизацию через ACME). В K3s это дефолт, поэтому «заводится» быстрее всех и требует меньше танцев для базовой схемы маршрутизации. Хорошо подходит, когда нужно много маршрутов, быстрые правки без reload, гибкие middleware (переписывание путей, заголовки, rate limit) и минимум возни с внешними компонентами.
Nginx Ingress
Классика для Kubernetes: контроллер генерирует конфиг для Nginx и делает reload по изменениям. Сильная сторона — богатая экосистема аннотаций и привычные для админов возможности Nginx: тонкая настройка буферов, таймаутов, client body size, TCP/UDP через отдельные манифесты, модульная интеграция с WAF на базе ModSecurity. Подходит, когда нужны проверенные временем фичи Nginx и совместимость с существующими практиками.
HAProxy (Ingress)
Высокопроизводительный L4/L7 балансировщик с мощными возможностями: stick‑tables для лимитов/сессий, предсказуемое поведение под нагрузкой, гибкая маршрутизация. В Kubernetes используется через haproxy‑ingress контроллер. Особенно интересен там, где помимо HTTP нужно уверенно балансировать TCP/UDP, нужна строгая SLA по латентности и контроль за соединениями до байта и миллисекунды.

API и модель конфигурации
- Стандартный Ingress API: поддерживается всеми, но полнота фич различается. В Nginx Ingress многие продвинутые опции оформлены аннотациями и ConfigMap. В HAProxy Ingress аналогично — аннотации и глобальная конфигурация. Traefik умеет работать и с Ingress, и со своими CRD (
IngressRoute,Middleware,TraefikService), что удобнее для сложной маршрутизации. - Динамика vs reload: Traefik применяет изменения без перезапуска воркеров; Nginx Ingress делает graceful reload; HAProxy может вносить часть изменений через runtime API, но часто всё равно требуется перегенерация конфигурации контроллером.
- Прозрачность: если команда привыкла к Nginx, путь миграции с классических конфигов на Nginx Ingress наиболее короткий. Если важны CRD и декларативные middleware — Traefik часто удобнее. Для детальной L4‑семантики выбор склоняется к HAProxy.
Производительность: на что смотреть в бенчмарках
Единых «лучших» цифр не бывает: на результат влияет профиль нагрузки (статический контент, API с проксированием на upstream, gRPC, WebSocket), размеры тел, задержки бэкендов, лимиты буферов, TLS‑криптография, keepalive и ядро ОС. Поэтому сравнения «в отрыве» мало полезны. Гораздо важнее понимать драйверы производительности:
- Обработка TLS: число рукопожатий, кэш сессий, выбор шифров, HTTP/2 ALPN. Разница между контроллерами проявляется в overhead TLS termination и реакции на burst.
- Буферизация и backpressure: как контроллер ведёт себя при медленном upstream, какие есть лимиты на
client_body_buffer_size/proxy_buffering(в Nginx),buffer-sizeи очереди в HAProxy, и соответствующие опции в Traefik middleware. - Модель reload: при частых деплоях reload Nginx может давать кратковременный рост потребления памяти и дескрипторов, тогда как Traefik обычно применяет изменения без дёргания воркеров. В больших конфигурациях это заметно.
- TCP/UDP и gRPC: всем трём важен корректный HTTP/2 и passthrough; различается глубина настроек и чувствительность к timeouts/keepalive.
При равных условиях и корректных настройках все три решения держат высокий RPS. Разница проявляется с «грязной» реальностью: медленные клиенты, большой body, всплески трафика и изобилие маршрутов.
Ресурсы: память и CPU
- Traefik: обычно экономен на старте, линейный рост по мере добавления маршрутов и middleware; хорош для маленьких узлов.
- Nginx Ingress: предсказуем, но может потребовать больше памяти из‑за воркеров и буферов. Хорошо тюнингуется.
- HAProxy: эффективен, даёт низкую латентность под TCP‑нагрузкой и при больших коннектах.
TLS и HTTP/3
- Traefik: умеет автоматизировать выдачу сертификатов, гибко настраивает TLS‑профили, HTTP/3 включается отдельно. В K3s это минимальный friction.
- Nginx Ingress: сертификаты часто управляются через Secrets и сторонние инструменты; HTTP/3 доступен в новых релизах и требует явного включения и тестов.
- HAProxy: зрелая TLS‑обработка, расширенные настройки кэширования сессий и OCSP stapling; HTTP/3 в новых версиях, чаще помечен как экспериментальный.
Не забывайте про корректный выпуск и ротацию сертификатов. Если нужен быстрый старт с DV/OV, посмотрите SSL-сертификаты.
Наблюдаемость: логи, метрики, трассировка
- Метрики: все интегрируются с Prometheus. У Traefik метрики встроены. Для Nginx часто используют экспортер. У HAProxy есть stats/Prometheus endpoint.
- Логи: JSON‑форматы упрощают парсинг в Loki/ELK. Приведите поля к единому виду: trace id, x‑forwarded‑for, user agent, latency.
- Трассировка: у Traefik проще включается OpenTelemetry/Zipkin. Для Nginx/HAProxy чаще добавляют сторонние агенты.
Функциональность L7: переписывания, канареечные релизы, сессии, лимиты
- Переписывания путей и заголовков: у Traefik это middleware первого класса. В Nginx Ingress — аннотации и snippets. В HAProxy — правила frontend/backend и аннотации.
- Canary/Blue‑Green: Nginx Ingress — канареечные сервисы аннотациями; Traefik — weight‑based маршрутизация; HAProxy — динамические веса и ACL.
- Sticky sessions: есть у всех; у HAProxy дополнительно сильная модель stick‑tables.
- Rate limiting: в Nginx Ingress — аннотации; у Traefik — middleware; у HAProxy — мощные лимиты на базе stick‑tables (см. разбор stick‑tables для rate limiting).
- WAF: чаще встречается связка Nginx Ingress + ModSecurity (OWASP CRS). У HAProxy — варианты через Lua/специализированные решения. У Traefik — плагины и middleware.
TCP/UDP и нестандартные протоколы
В K3s нередко проксируют не только HTTP: базы, очереди, MQTT, gRPC‑стримы и т.д. Все три контроллера умеют TCP/UDP, но глубина тюнинга у HAProxy традиционно выше (fine‑grained timeouts, maxconn, tune.bufsize). Если в миксе трафика значим TCP/UDP, HAProxy почти всегда проще довести до стабильной низкой латентности.
Установка и особенности в K3s
K3s ставит Traefik по умолчанию. Чтобы использовать альтернативу, его отключают на этапе запуска сервера и деплоят собственный контроллер через манифесты или Helm. Базовые действия выглядят так:
# Пример: отключить Traefik при старте сервера K3s
k3s server --disable traefik
# Далее устанавливаем выбранный ingress-контроллер (Helm или манифесты)
# kubectl apply -f ...
С точки зрения сетевого стека K3s, все три решения работают одинаково: внешний трафик приходит на NodePort/LoadBalancer, далее — в pod ingress‑контроллера, потом в сервисы/Pods. Не забудьте про корректную обработку real IP (проброс X-Forwarded-For и настройку доверенных сетей) и синхронизацию timeouts с параметрами приложений.
Типовые манифесты (сравнение подходов)
Ниже — упрощённые примеры, чтобы почувствовать разницу в конфигурациях. Они не предназначены для production как есть.
Nginx Ingress: стандартный Ingress + аннотации
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: web
annotations:
nginx.ingress.kubernetes.io/proxy-body-size: "16m"
nginx.ingress.kubernetes.io/proxy-read-timeout: "60"
nginx.ingress.kubernetes.io/ssl-redirect: "true"
spec:
ingressClassName: nginx
rules:
- host: example.test
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: web-svc
port:
number: 80
Traefik: CRD IngressRoute + Middleware
apiVersion: traefik.io/v1alpha1
kind: Middleware
metadata:
name: add-hdr
spec:
headers:
customRequestHeaders:
X-Request-ID: "{seq}"
---
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
name: web
spec:
entryPoints:
- websecure
routes:
- match: Host(`example.test`) && PathPrefix(`/`)
kind: Rule
services:
- name: web-svc
port: 80
middlewares:
- name: add-hdr
tls:
secretName: tls-web
HAProxy Ingress: аннотации и глобальные настройки
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: web
annotations:
haproxy.org/timeout-server: "60s"
haproxy.org/limit-connections: "2000"
spec:
ingressClassName: haproxy
rules:
- host: example.test
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: web-svc
port:
number: 80

Надёжность и поведение при сбоях
- Graceful reload: у Nginx Ingress это зрелый механизм, но при очень частых изменениях больших конфигов возможны временные пики памяти. Traefik применяет изменения потоково, что снижает «дрожание» под деплои с высокой частотой. HAProxy устойчив при больших количествах коннектов, но важно согласовать параметры очередей и таймаутов.
- Бэкенды с ошибками: следите за health‑checks. У HAProxy гибкая проверка HTTP/TCP; у Nginx — стандартные active/passive проверки; у Traefik — встроенные проверки сервисов. Агрессивные проверки ускоряют фейловер, но могут забивать логи и плодить флаппинг.
- Длинные запросы и стриминг: настраивайте лимиты body и буферы. Для gRPC/стриминга избегайте лишней буферизации, согласуйте таймауты с приложением.
Безопасность
- mTLS до бэкендов и клиентов: поддерживается везде, но отличается удобство включения и ротации сертификатов.
- Заголовки безопасности: проще включать через middleware (Traefik) или аннотации/наборы сниппетов (Nginx/HAProxy). Приведите к единым политикам HSTS, X‑Frame‑Options, CSP.
- WAF: для жёстких требований чаще берут Nginx Ingress + ModSecurity. Это добавляет overhead, планируйте ресурсы.
Миграция между контроллерами
- Traefik → Nginx Ingress: заменяйте
IngressRouteна стандартныйIngress, middleware переносите в аннотации или вConfigMapс шаблонами. Проверьте переписывания и sticky‑сессии. - Nginx Ingress → HAProxy: большинство аннотаций имеют аналоги, но названия другие. Особое внимание — таймаутам, лимитам соединений и sticky‑механике.
- HAProxy → Traefik: переносите правила в CRD и middleware. Рекомендуется временный параллельный запуск через разные ingressClass и канареечный трафик.
Как тестировать «свою» производительность
- Соберите профиль нагрузки: процентильные размеры тела запроса/ответа, средняя и пиковая конкарренси, доля keepalive, доля HTTP/2, WebSocket/gRPC.
- Мерьте p50/p90/p99.9 латентности, ошибки по классам, RPS, утилизацию CPU/Memory, длины очередей и количество активных коннектов.
- Тестируйте «грязные» сценарии: медленные клиенты, медленные бэкенды, burst в 10–20 раз выше среднего, большое количество маршрутов и частые деплои.
- Проверяйте поведение при reload/динамической конфигурации: нет ли обрывов, скачков памяти, роста 5xx.
Итоговое сравнение и рекомендации
- Нужен быстрый старт в K3s, минимум накладных расходов, удобные middleware и автоматизация TLS — начинайте с Traefik. Это наименее болезненный путь в небольших кластерах, отлично подходит для dev/staging и многих продов.
- Нужны привычные возможности Nginx, WAF ModSecurity, тонкий контроль буферов/таймаутов и устоявшиеся аннотации — берите Nginx Ingress. Хороший выбор при миграции из «монолитного Nginx».
- Критична низкая латентность на L4/L7, много TCP/UDP, нужны stick‑tables и жёсткие лимиты соединений — присмотритесь к HAProxy Ingress. Полезен для высоконагруженных API‑шлюзов, очередей, брокеров и миксов HTTP+TCP.
Правило 80/20: для большинства сценариев в K3s достаточно возможностей Traefik. Финальное решение делайте по результатам собственных тестов с вашим профилем нагрузки.
Чек‑лист перед финальным выбором
- Какой трафик доминирует: HTTP/1.1, HTTP/2, gRPC, WebSocket, TCP/UDP?
- Нужен ли WAF на базе ModSecurity прямо сейчас?
- Сколько маршрутов и как часто меняется конфигурация?
- Какие минимальные и пиковые ресурсы есть на узлах K3s (CPU/RAM)?
- Насколько важна автоматизация TLS (ACME) без внешних компонентов?
- Какие метрики и формат логов нужны для SOC/observability?
- Нужны ли продвинутые механизмы canary/blue‑green и sticky‑сессии?
- Есть ли строгие требования по p99 латентности и throughput под burst?
Вывод
В контексте K3s любой из трёх ingress‑контроллеров можно довести до production‑качества. Traefik — отличный базовый ориентир: быстрый старт, удобные CRD и middleware, достойная производительность и наблюдаемость. Если нужен «старый добрый» Nginx Ingress с его экосистемой и WAF — это не ошибка, просто заложите время на тюнинг и тесты reload под большими конфигами. Когда критична минимальная латентность и детальный контроль соединений на L4/L7 — HAProxy будет самым предсказуемым выбором. И главное — подтверждайте выбор собственными тестами.


