Глобальная настройка безопасности в Traefik для Docker

Начиная с версии 1.5, Traefik предоставляет возможность настройки безопасности для каждого сервиса.

Эти параметры доступны здесь https://docs.traefik.io/configuration/backends/docker/ и должны быть установлены в разделе меток каждой службы, определенной в файле docker-compose.

Интересно, как я могу добавить эти параметры в глобальном порядке?

2 ответа

Так что просто для потомков, вот как это сделать, используя файл шаблона:

  1. Получить шаблонdocker.tmpl из источника и убедитесь, что это для вашей точной версии. Самый простой способ - просто нажмите на номер сборки в правом верхнем углу интерфейса и перейдите к /template папка. Используйте имя файла без версии.
  2. Говоря о версиях - добавьте следующее к вашему traefik.toml:

    [docker]
    filename = "docker.tmpl"
    templateVersion = 2
    

    и вы должны добавить -v /path/docker.tmpl:/docker.tmpl:ro в ваш контейнер тоже!

  3. Теперь у вас должна быть возможность перезапустить 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
Другие вопросы по тегам