Traefik — це Edge Router з відкритим вихідним кодом, який автоматично виявляє та налаштовує маршрути до ваших сервісів, безпосередньо інтегруючись з оркестраторами, такими як Docker та Kubernetes, діючи як динамічний зворотний проксі та балансувальник навантаження.
Основні Концепції
Traefik працює на моделі динамічної конфігурації, усуваючи необхідність ручного оновлення файлів та перезапуску сервісів при зміні бекенд-сервісів. Ця адаптивність у реальному часі досягається за допомогою кількох взаємопов'язаних компонентів.
Провайдери
Провайдери — це конектори, які дозволяють Traefik взаємодіяти з вашою інфраструктурою. Вони відстежують API базового оркестратора на предмет змін, таких як нові контейнери, сервіси або розгортання.
Поширені провайдери включають:
* Docker: Відстежує події демона Docker та мітки контейнерів.
* Kubernetes: Відстежує Kubernetes API на наявність ресурсів Ingress, IngressRoute, Service та Endpoint.
* File: Зчитує конфігурацію зі статичних файлів YAML або TOML.
* Consul, etcd, ZooKeeper: Інтегрується зі сховищами ключ-значення для динамічної конфігурації.
Конфігурація Маршрутизації
Traefik обробляє вхідні запити через визначений потік маршрутизації:
- EntryPoints: Це мережеві слухачі, які визначають порти, на яких Traefik прослуховує (наприклад,
webна порту 80,websecureна порту 443). - Routers: Маршрутизатори аналізують вхідні запити на основі визначених правил (наприклад,
Host(),PathPrefix(),Headers()). Якщо запит відповідає правилу маршрутизатора, він пересилається. Маршрутизатори також вказують, які EntryPoints вони прослуховують, і можуть застосовувати Middlewares. - Middlewares: Middlewares — це компоненти, які можуть змінювати запити до того, як вони досягнуть сервісу, або змінювати відповіді до того, як вони будуть надіслані назад клієнту. Їх можна об'єднувати в ланцюжки.
- Services: Сервіси визначають, як досягти фактичних екземплярів бекенд-додатків. Сервіс зазвичай вказує на одну або кілька IP-адрес та портів вашого додатка. Traefik може балансувати навантаження запитів між кількома екземплярами сервісу.
Потік такий: Запит -> EntryPoint -> Router -> Middleware(s) -> Service -> Backend Application.
Ключові Особливості
Автоматичне Виявлення Сервісів
Traefik безпосередньо інтегрується з оркестраторами, такими як Docker та Kubernetes. Він автоматично виявляє сервіси, зчитуючи метадані (наприклад, мітки Docker, анотації Kubernetes або Custom Resources), та динамічно оновлює свою конфігурацію маршрутизації без будь-якого ручного втручання чи перезапусків. Це усуває необхідність підтримки окремих файлів конфігурації проксі.
Завершення SSL/TLS
Traefik пропонує вбудовану підтримку завершення SSL/TLS. Він може автоматично надавати та поновлювати сертифікати за допомогою Let's Encrypt через протокол ACME (Automatic Certificate Management Environment), підтримуючи виклики HTTP-01, TLS-ALPN-01 та DNS-01. Також можна налаштувати власні сертифікати.
Балансування Навантаження
Traefik діє як балансувальник навантаження, розподіляючи вхідний трафік між кількома екземплярами сервісу.
Доступні стратегії балансування навантаження включають:
* Round Robin: Розподіляє запити послідовно до кожного сервера.
* Weighted Round Robin: Дозволяє призначати ваги серверам для контролю розподілу трафіку.
* Sticky Sessions: Гарантує, що запити від певного клієнта завжди направляються на той самий сервер.
Middlewares
Middlewares надають гнучкий спосіб модифікації запитів або відповідей. Їх можна застосовувати до конкретних маршрутизаторів або глобально.
Приклади поширених middlewares включають:
* Аутентифікація: Базова аутентифікація (BasicAuth), Digest-аутентифікація.
* Обмеження Швидкості (Rate Limiting): Контролює кількість запитів,