Про traefik
При работе с микросервисами часто используются роутеры, которые упрощают работу по пробросу трафика в конкретный контейнер.
В последнее время всё чаще встречаю в реальном мире Traefik. Это прокси, который стал замещать nginx.
Конфигурации путей маршрутизации может задаваться как в отдельном yaml файле, так и через лейблы в Dockerfile.
Кроме простой маршрутизации этот прокси предоставляет возможность навешивать кастомные мидлвары на определенные роуты. Обычно это какая-то логика по работе с заголовками HTTP. Выглядит конфиг примерно так:
whoami:
# A container that exposes an API to show its IP address
image: traefik/whoami
labels:
# Create a middleware named `foo-add-prefix`
- "traefik.http.middlewares.foo-add-prefix.addprefix.prefix=/foo"
# Apply the middleware named `foo-add-prefix` to the router named `router1`
- "traefik.http.routers.router1.middlewares=foo-add-prefix@docker"
А еще там есть возможность навешивать Basic auth. Когда админы забывают убрать из конфига такие параметры:
--api.dashboard=true --api.insecure=true
API становится доступен всем пользователям и можно вытащить полезную информацию о внутрянке, а иногда и креды от некоторых сервисов. Пример лейбла с basic auth:
labels:
- "traefik.http.middlewares.test-auth.basicauth.users=test:$$apr1$$H6uskkkW$$IgXLP6ewTrSuBkTrqE8wj/,test2:$$apr1$$d9hr9HBB$$4HxwgUir3HP4EsggP/QNo0"
Чаще всего даш/API висят на 8080 порту или на отдельном поддомене, вроде traefik.host.
Доступ к мидлварам без дашборда доступен по такому URI:
host/api/http/middlewares?search=&status=&per_page=10&page=1
Примеры из реальной жизни
Сейчас всё еще доступны несколько крупных инстансов с сотней хостов и кредами, доступными всем желающим.
Dork: intitle:traefik inurl:dashboard