Пишу в общей теме Reverse proxy и без тега т.е. не нашел ничего по traefik, может @admin создаст и подправит
Релиз облачного прокси-сервера с открытым исходным кодом Traefik 3.6 «Ramequin»
Основные изменения и дополнения в Traefik 3.6:
- появилась многоуровневая маршрутизация. В проекте реализована иерархическая структура маршрутизаторов, которая позволяет выполнять обработку запросов последовательно. Родительский маршрутизатор может аутентифицировать запрос или добавлять заголовки, в то время как дочерние маршрутизаторы используют обогащённые данные для принятия окончательного решения о маршрутизации. В результате устраняется необходимость дублировать логику аутентификации между сервисами или использовать отдельные прокси-серверы для разных этапов запроса. Также реализованы шаблоны маршрутизации, такие как направление трафика на основе ролей пользователей, уровней подписки или оценки флагов функций, в простой декларативной конфигурации;
- интеграция с Knative. Теперь Traefik может управлять трафиком сервисов Knative, используя ту же модель провайдера, что и для контейнеров или виртуальных машин. Поставщик Knative отвечает за обнаружение сервисов, масштабирование событий до нуля и маршрутизацию запросов к бессерверным рабочим нагрузкам, устраняя необходимость в дополнительных компонентах шлюза;
- поддержка Gateway API v1.4, обеспечивая более строгий контроль маршрутизации для облачных рабочих нагрузок. Функции, BackendTLSPolicy и SupportedFeatures переведены из экспериментальной в стабильные. BackendTLSPolicy обеспечивает сквозной TLS между шлюзом и бэкенд-сервисами, повышая безопасность внутреннего трафика. SupportedFeatures обеспечивает совместимость функций через поля статуса Kubernetes, предоставляя операторам более чёткое представление о том, что поддерживает реализация;
- новые проверки работоспособности TCP, которые позволяют Traefik напрямую оценивать не-HTTP-сервисы, в то время как пассивные проверки работоспособности определяют работоспособность сервисов на основе фактических схем трафика;
- обновлённые параметры балансировки нагрузки включают алгоритмы Least Time и Highest Random Weight для более детального распределения трафика. AWS ECS получает полную поддержку IPv6, а поставщик Docker теперь может обнаруживать неработающие контейнеры;
- расширенная поддержка ExternalName в Kubernetes, новые параметры резолвера ACME, настраиваемые размеры таблиц HTTP/2 HPACK, поддержку системных вызовов для плагинов, более компактные таблицы панели управления и улучшенное логирование запуска на уровне провайдера (provider-level startup logging);
- опубликована документация по миграции на новую версию, а также улучшены переводы.
Хотелось бы остановиться на многоуровневой маршрутизации
Я выяснил, что в consul оно не работает
Вот пример
http:
routers:
# Root router - matches all API requests and applies auth
api-parent:
rule: "Host(`api.example.com`) && PathPrefix(`/`)"
middlewares:
- auth-with-tier
entryPoints:
- websecure
tls: {}
# No service defined - this is a parent router
# Leaf router - routes enterprise customers to stable
api-enterprise:
rule: "HeaderRegexp(`X-Customer-Tier`, `(enterprise|business)`)"
service: stable-backend
parentRefs:
- api-parent
# Leaf router - routes free tier to canary
api-free:
rule: "Header(`X-Customer-Tier`, `free`)"
service: new-version
parentRefs:
- api-parent
middlewares:
auth-with-tier:
forwardAuth:
address: "http://auth-service:8080/validate"
authResponseHeaders:
- X-Customer-Tier
- X-Customer-Id
- X-User-Email
services:
stable-backend:
loadBalancer:
servers:
- url: "http://api-v1-stable:8080"
new-version:
loadBalancer:
servers:
- url: "http://api-v2-canary:8080"
Здесь мы создали корневой маршрутизатор (Root Routers) api-parent
- связали его с точкой подключения
- Указали домен и префикс пути
- Добавили мидлварку аутентификации
Созлали 2 дочерних маршрута (Leaf Routers): api-enterprise и api-free, каждый из них
- Имеет ссылку на родительский маршрутизатор
- Имеет дополнительные правила
- Ссылается на свой сервис
Что позволяет сократить дублирование конфигов и реализовать сложные правила маршрутизации, например, в версии 3.5 это выглядело бы так
http:
routers:
api-enterprise:
rule: "Host(`api.example.com`) && PathPrefix(`/`) && HeaderRegexp(`X-Customer-Tier`, `(enterprise|business)`)"
middlewares:
- auth-with-tier
entryPoints:
- websecure
tls: {}
service: stable-backend
api-free:
rule: "Host(`api.example.com`) && PathPrefix(`/`) && Header(`X-Customer-Tier`, `free`)"
middlewares:
- auth-with-tier
entryPoints:
- websecure
tls: {}
service: new-version
middlewares:
auth-with-tier:
forwardAuth:
address: "http://auth-service:8080/validate"
authResponseHeaders:
- X-Customer-Tier
- X-Customer-Id
- X-User-Email
services:
stable-backend:
loadBalancer:
servers:
- url: "http://api-v1-stable:8080"
new-version:
loadBalancer:
servers:
- url: "http://api-v2-canary:8080"
Поддержка Knative
Для начала включаем провайдера в самом traefik
experimental:
knative: true
providers:
knative:
namespaces:
- "serverless-apps"
- "production"
И описываем сервис
---
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: whoami
namespace: default
spec:
template:
spec:
containers:
- image: traefik/whoami
ports:
- containerPort: 80
env:
- name: WHOAMI_NAME
value: "Knative Test Service"
Выполняем запрос к сервису
$ curl http://whoami.default.example.com
Name: Knative Test Service
На текущий момент времени уже версия 3.6.1