Info
Content

Getting Started

Concepts

Introduction

Traefik основан на концептах EntryPoints, Routers, Middlewares и Services

Основные функции включают: динамическое конфигурирование, автоматический service discovery и поддержку множества бекендов и протоколов

  1. EntryPoints - это сетевые входные точки внутрь Traefik. Они определяют порт который будет принимать пакеты и протокол TCP/UDP
  2. Routers - Роутер отвечает за подключение входящих запросов к сервисам которые их обслужат
  3. Middlewares - прикрепляются к роутерам и могут модифицировать запросы или ответы перед тем как те будут отправлены твоему сервису
  4. Services - Сервисы отвечают за конфигурирование того как достигать актуальные сервисы которые должны обрабатывать входящие запросы

Edge Router

Traefik это Edge Router, это значит что он дверь в вашу платформу и он слышит и роутит каждый входящий запрос: он знает всю логику и каждое правило которые определяют какие сервисы обрабатывают какие запросы (базируясь на path, host, headers, etc)

Auto Service Discovery

Тогда как традиционные edge router'ы (или reverse proxies) нуждаются в конфиге который должен содержать все возможные маршруты до твоих сервисов, Traefik получает эту информацию из самих же сервисов

Деплоя свои сервисы ты прикрепляешь к ним информацию которая говорит Traefik'у характеристики запросов которые может обработать сервис

Screenshot_2021_02_02-12_49_03-2023-05-16autosd.png

Это значит что когда сервис задеплоен, 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 его обнаружил
Screenshot_2021_02_02-12_49_03-2023-05-17-at-15whoami.png

🚀 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

https://doc.traefik.io/traefik/getting-started/quick-start/#more-instances-traefik-load-balances-them

Kubernetes

https://doc.traefik.io/traefik/getting-started/quick-start-with-kubernetes/

Configuration Introduction

Как происходит магия
Screenshot_2021_02_02-12_49_03-2023-05-18-at-1traefikmagik.png

Конфигурация в Traefik может быть заслана двумя путями:

  • Полностью динамическая конфигурация роутинга (dynamic configuration)
  • Стартовая конфигурация (static configuration)

Элементы статической конфигурации задают подключение к провайдерам и определяют входные точки в Traefik (entrypoints) (эти элементы обычно не меняются)

Динамическая конфигурация содержит все что определяет как будут обрабатываться запросы твоей системой
Эта конфигурация может меняться и бесшовно подгружаться на горячую (без прерывания подключений)

The Dynamic Configuration

Traefik берет динамическую конфигурацию от провайдеров: будь это оркестратор, сервис регистри или простой конфиг файл

The Static Configuration

Здесь есть три взаимоисключающих пути (можно использовать только один в один момент времени) задания статической конфигурации:

  1. Конфиг файл
  2. CLI аргументы
  3. Переменные окружения

Эти варианты применяются в порядке описаном выше

Если значение опции не указано - применяется дефолтное значение
Более того, если опция имеет под-опции, и какая-либо из этих подопций не указано - будет использовано значение по умолчанию (насколько я понял для всей опции, а не только для неуказанной под-опции)

Например, опции --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

FAQ

https://doc.traefik.io/traefik/getting-started/faq/#faq

No Comments
Back to top