Traefik - это открытый и современный обратный прокси (reverse proxy) и балансировщик нагрузки (load balancer), который разработан для упрощения управления трафиком в инфраструктуре микросервисов и контейнеризации. Traefik создан для работы с современными архитектурами, такими как контейнеры Docker, и автоматизирует многие задачи, связанные с динамическим управлением конфигурацией и обновлением.
Вот некоторые ключевые черты Traefik:
Автоматическое обнаружение контейнеров: Traefik может автоматически обнаруживать новые контейнеры в среде Docker и обновлять свою конфигурацию соответствующим образом. Это позволяет добавлять и удалять сервисы без ручного вмешательства в конфигурацию Traefik.
Динамическое конфигурирование: Traefik позволяет настраивать правила маршрутизации и балансировки нагрузки динамически, используя метки (labels) Docker, а также другие провайдеры (Consul, Kubernetes, и др.).
Интеграция с Let's Encrypt: Traefik интегрирован с Let's Encrypt, что позволяет автоматически получать и обновлять SSL-сертификаты для ваших доменов.
Поддержка HTTP, TCP, UDP и GRPC: Traefik поддерживает различные протоколы, включая HTTP, TCP, UDP и GRPC, что делает его универсальным вариантом для различных типов сервисов.
Web Dashboard: Traefik предоставляет веб-интерфейс (dashboard) для мониторинга текущего состояния и конфигурации.
Сперва посмотрим на простую конфигурацию docker-compose-traefik.yml для traefik (можно запускать и просто с помощью docker run, но так наглядней):
version: "3.7"
services:
traefik:
image: traefik:v2.10.7 # Последняя стабильная на момент написания статьи
ports:
- "80:80"
- "443:443"
- "8080:8080" # Порт для дашборда traefik
command:
- "--api.insecure=true" # Открыть HTTP API (не рекомендуется для продакшна без аутентификации)
- "--api.dashboard=true" # Включает дашборд traefik
- "--providers.docker.endpoint=unix:///var/run/docker.sock" # Дефолтное решение для доступа к другим контейнерам, но так тоже лучше не делать
- "--providers.docker.exposedByDefault=false" # Опция, которая говорит, что надо игнорировать контейнеры, для которых не прописана метка (labels:) - "traefik.enable=true"
- "--entrypoints.http.address=:80" # Входная точка для http запросов к контейнерам
- "--entrypoints.websecure.address=:443" # Входная точка для https запросов к контейнерам
volumes:
- /var/run/docker.sock:/var/run/docker.sock # Пробрасывает unix socket для получения доступа к другим контейнерам, в частности к их динамической конфигурации
После запуска с помощью команды:
docker-compose -f docker-compose-traefik.yml up -d
дашборд traefik будет доступен на порту 8080.