Getting Started
Concepts
Introduction
Traefik основан на концептах EntryPoints, Routers, Middlewares и Services
Основные функции включают: динамическое конфигурирование, автоматический service discovery и поддержку множества бекендов и протоколов
- EntryPoints - это сетевые входные точки внутрь Traefik. Они определяют порт который будет принимать пакеты и протокол TCP/UDP
- Routers - Роутер отвечает за подключение входящих запросов к сервисам которые их обслужат
- Middlewares - прикрепляются к роутерам и могут модифицировать запросы или ответы перед тем как те будут отправлены твоему сервису
- Services - Сервисы отвечают за конфигурирование того как достигать актуальные сервисы которые должны обрабатывать входящие запросы
Edge Router
Traefik это Edge Router, это значит что он дверь в вашу платформу и он слышит и роутит каждый входящий запрос: он знает всю логику и каждое правило которые определяют какие сервисы обрабатывают какие запросы (базируясь на path, host, headers, etc)
Auto Service Discovery
Тогда как традиционные edge router'ы (или reverse proxies) нуждаются в конфиге который должен содержать все возможные маршруты до твоих сервисов, Traefik получает эту информацию из самих же сервисов
Деплоя свои сервисы ты прикрепляешь к ним информацию которая говорит Traefik'у характеристики запросов которые может обработать сервис
Это значит что когда сервис задеплоен, Traefik замечает его немедленно и обновляет свои правила роутинга в реальном времени. Аналогично, когда сервис удален из инфраструктуры, соответствующее правило также удаляется
Тебе больше не требуется создавать и синхронизировать конфиги загроможденные айпишниками и другими правилами
Quick Start
Docker
Launch Traefik With the Docker Provider
Создай файл docker-compose.yml
в котором опиши сервис reverse-proxy
который использует официальный образ Traefik
version: '3'
services:
reverse-proxy:
# The official v2 Traefik docker image
image: traefik:v2.10
# Enables the web UI and tells Traefik to listen to docker
command: --api.insecure=true --providers.docker
ports:
# The HTTP port
- "80:80"
# The Web UI (enabled by --api.insecure=true)
- "8080:8080"
volumes:
# So that Traefik can listen to the Docker events
- /var/run/docker.sock:/var/run/docker.sock
Запусти следующей командой:
docker-compose up -d reverse-proxy
Дальше ты можешь открыть в браузере http://localhost:8080/api/rawdata и увидеть Traefik'овый API
(7tech.local:default) vandud@192-168-0-106: ~ 🚀 curl -s http://172.28.103.198:8080/api/rawdata | jq
{
"routers": {
"api@internal": {
"entryPoints": [
"traefik"
],
"service": "api@internal",
"rule": "PathPrefix(`/api`)",
"priority": 2147483646,
"status": "enabled",
"using": [
"traefik"
]
},
...
"wordpress@docker": {
"entryPoints": [
"http"
],
"service": "wordpress-wordpress-1-75b7desrqbkk8g5mmncpzeati",
"rule": "Host(`wordpress.docker`)",
"status": "enabled",
"using": [
"http"
]
}
},
"middlewares": {
"dashboard_redirect@internal": {...},
"dashboard_stripprefix@internal": {...},
},
"services": {
"api@internal": {
"status": "enabled",
"usedBy": [
"api@internal"
]
},
...
"wordpress-wordpress-1-75b7desrqbkk8g5mmncpzeati@docker": {
"loadBalancer": {
"servers": [
{
"url": "http://10.0.11.6:80"
}
],
"passHostHeader": true
},
"status": "enabled",
"usedBy": [
"wordpress@docker"
],
"serverStatus": {
"http://10.0.11.6:80": "UP"
}
}
}
}
Traefik Detects New Services and Creates the Route for You
Теперь когда у нас поднят Traefik мы будем деплоить новые сервисы
Добавь в docker-compose:
whoami:
image: traefik/whoami
labels:
- "traefik.http.routers.whoami.rule=Host(`wordpress.docker`) && PathPrefix(`/whoami`)"
whoami
это простой сервис который выдает информации о машине на которую он задеплоен
Деплоим и видим что traefik его обнаружил
🚀 curl -s http://wordpress.docker/whoami
Hostname: 102031f395a3
IP: 127.0.0.1
IP: 10.0.11.16
IP: 172.18.0.5
RemoteAddr: 10.0.11.9:60988
GET /whoami HTTP/1.1
Host: wordpress.docker
User-Agent: curl/7.87.0
Accept: */*
Accept-Encoding: gzip
X-Forwarded-For: 10.0.0.2
X-Forwarded-Host: wordpress.docker
X-Forwarded-Port: 80
X-Forwarded-Proto: http
X-Forwarded-Server: 72df34ecb3e3
X-Real-Ip: 10.0.0.2
More Instances? Traefik Load Balances Them
Kubernetes
https://doc.traefik.io/traefik/getting-started/quick-start-with-kubernetes/
Configuration Introduction
Конфигурация в Traefik может быть заслана двумя путями:
- Полностью динамическая конфигурация роутинга (dynamic configuration)
- Стартовая конфигурация (static configuration)
Элементы статической конфигурации задают подключение к провайдерам и определяют входные точки в Traefik (entrypoints) (эти элементы обычно не меняются)
Динамическая конфигурация содержит все что определяет как будут обрабатываться запросы твоей системой
Эта конфигурация может меняться и бесшовно подгружаться на горячую (без прерывания подключений)
The Dynamic Configuration
Traefik берет динамическую конфигурацию от провайдеров: будь это оркестратор, сервис регистри или простой конфиг файл
The Static Configuration
Здесь есть три взаимоисключающих пути (можно использовать только один в один момент времени) задания статической конфигурации:
- Конфиг файл
- CLI аргументы
- Переменные окружения
Эти варианты применяются в порядке описаном выше
Если значение опции не указано - применяется дефолтное значение
Более того, если опция имеет под-опции, и какая-либо из этих подопций не указано - будет использовано значение по умолчанию (насколько я понял для всей опции, а не только для неуказанной под-опции)
Например, опции --providers.docker
достаточно для того чтобы включить docker провайдер, несмотря на то что существует другие под-опции такие как --providers.docker.endpoint
. После установки этот параметр устанавливает (и сбрасывает) все значения по умолчанию для вложенных параметров --providers.docker
Configuration File
При старте Traefik ищет статическую конфигурацию в файле traefik.yml
(или traefik.yaml
или traefik.toml
) который ожидает найти в:
/etc/traefik
$XDG_CONFIG_HOME/
$HOME/.config/
.
(the working directory)
Положение конфигурационного файла можно переопределить через опцию configFile
traefik --configFile=foo/bar/myconfigfile.yml
Arguments
Список всех доступных аргументов можно посмотреть в выводе опции --help
traefik --help
# or
docker run traefik[:version] --help
# ex: docker run traefik:v2.10 --help
Либо в https://doc.traefik.io/traefik/reference/static-configuration/cli/
Environment Variables
Все доступные переменные окружения можно посмотреть в https://doc.traefik.io/traefik/reference/static-configuration/env/
Available Configuration Options
Все конфигурационные опции задокументированы в связанных с ними секциях
Ты можешь просмотреть доступные функции в меню, providers, или routing section
Install Traefik
Ты можешь установить Traefik следующими способами:
- Используя официальный Docker image
- Используя Helm Chart
- Используя готовый бинарь
- Скомпилировать свой собственный бинарь из исходников
Use the Official Docker Image
https://doc.traefik.io/traefik/getting-started/install-traefik/#use-the-official-docker-image
Use the Helm Chart
https://doc.traefik.io/traefik/getting-started/install-traefik/#use-the-helm-chart
Exposing the Traefik dashboard
https://doc.traefik.io/traefik/getting-started/install-traefik/#exposing-the-traefik-dashboard
Use the Binary Distribution
https://doc.traefik.io/traefik/getting-started/install-traefik/#use-the-binary-distribution
Compile your Binary from the Sources
https://doc.traefik.io/traefik/getting-started/install-traefik/#compile-your-binary-from-the-sources
No Comments