Глобальная настройка безопасности в Traefik для Docker
Начиная с версии 1.5, Traefik предоставляет возможность настройки безопасности для каждого сервиса.
Эти параметры доступны здесь https://docs.traefik.io/configuration/backends/docker/ и должны быть установлены в разделе меток каждой службы, определенной в файле docker-compose.
Интересно, как я могу добавить эти параметры в глобальном порядке?
2 ответа
Так что просто для потомков, вот как это сделать, используя файл шаблона:
- Получить шаблон
docker.tmpl
из источника и убедитесь, что это для вашей точной версии. Самый простой способ - просто нажмите на номер сборки в правом верхнем углу интерфейса и перейдите к/template
папка. Используйте имя файла без версии. Говоря о версиях - добавьте следующее к вашему
traefik.toml
:[docker] filename = "docker.tmpl" templateVersion = 2
и вы должны добавить
-v /path/docker.tmpl:/docker.tmpl:ro
в ваш контейнер тоже!Теперь у вас должна быть возможность перезапустить Traefik, и все должно работать как обычно. Чтобы добавить ваши конкретные заголовки для всех автоматически сгенерированных интерфейсов, отредактируйте
docker.tmpl
и как раз перед следующим до последнего{{end}}
это для{{if $headers }}
добавить это (интервал сохраняется):{{else}} [frontends."frontend-{{ $frontendName }}".headers] STSSeconds = 315360000 STSIncludeSubdomains = true STSPreload = true CustomFrameOptionsValue = "SAMEORIGIN" ContentTypeNosniff = true BrowserXSSFilter = true
Это добавит перечисленные заголовки для каждого автоматически сгенерированного внешнего интерфейса на основе найденных контейнеров, как при установке по умолчанию. Если у контейнера есть какие-либо пользовательские метки, он выполнит предыдущую логику и пропустит их.
Я сделал это таким образом, чтобы обеспечить предсказуемость работы контейнеров и максимально упростить процесс обновления до новой версии. Просто вставка в определенный раздел позволит вам выполнить обновление без обработки конфликтов слияния и новой логики.
Вы можете пойти дальше и создать более надежную версию, которая будет обрабатывать перезапись глобальной конфигурации, но это потребует больше работы во время обновлений.
Поскольку dtomcej отвечает мне на github, нет возможности установить заголовок безопасности в глобальном режиме.
Мы должны переопределить шаблон докера по умолчанию, как описано в документе.
Я нахожу это решение немного рискованным. Поэтому пока я дублирую свою безопасность заголовка конфигурации в каждой конфигурации контейнера, которая в этом нуждается.
В конце у меня есть что-то вроде этого:
version: '3'
services:
my-service:
build: my-service
labels:
- traefik.enable=true
- traefik.backend=my-service
- traefik.frontend.rule=Host:exemple.com;PathPrefix:/service
- traefik.port=80
- traefik.frontend.headers.SSLRedirect=true
- traefik.frontend.headers.SSLHost=exemple.com
- traefik.frontend.headers.STSSeconds=315360000
- traefik.frontend.headers.STSIncludeSubdomains=true
- traefik.frontend.headers.STSPreload=true
- traefik.frontend.headers.frameDeny=true
- traefik.frontend.headers.browserXSSFilter=true