Как стать автором
Обновить

Комментарии 31

спасибо, как раз не хватало вменяемого мана по 2.0
да, поддерживаю, сейчас живу на 1.7, со второй версией все лень разобраться было, а теперь вот пора)

Все это время пользовался связкой webproxy для докеров, но у нее есть бага, когда при перезапуске хоста не всегда корректно исправляется файл конфигурации, а айпи адреса у контейнеров меняются. В итоге получаем 503 и приходилось идти и дергать все руками. На траефик смотрел искоса, но с этой статьей однозначно пойду пробовать. Спасибо!

кстати, в файле data/custom/host.yml ошибка. отступ в строке services: — он должен быть на ровне с роутерами и миделварями.

Спасибо, исправил, копипаста меня победила

и тоже самое в итоговом docker-compose.yml


  • "traefik.http.routers.traefik-secure.middlewares=traefik-auth" — не пойдет.
    нужно
  • "traefik.http.routers.traefik.middlewares=traefik-auth"
    роут неверный.

Спасибо, поправил

Если у читателя создалось впечатление что таким образом создается единая точка отказа всей системы, то так и есть

Честно говоря если использовать не LE сертификат, то все остальное вполне себе можно задублировать: вешаете по контейнеру на ноду, оба инстанса будут обновлять конфигурацию и перенаправлять трафик при обращении. Sticky Sessions реализованы так, что traefik на основе куки перенаправляет трафик, тоесть сам инстанс не хранит информации о сессиях.


В своей конфигруации на SWARM один инстанс traefik дополнил VRRP и правилом, чтобы VIP адрес бегал за запущенным контейнером. Даже в самом худшем раскладе простой получается 10 секунд, что для меня приемлемо. Чтобы получить нулевой простой, достаточно на каждой ноде с VRRP добавить по инстансу.

вопрос с LE только в пробросе файла acme.json — который можно бросать на каждую такую вашу ноду сотнями вариантов.
и, да, не платить за EE версию ))

В этом случае каждый инстанс может пытатсья обновить этот файл, что может вылиться в неоднозначное поведение.

SWARM тут не учитывался, а так да, можно вполне задублировать, спасибо за дополнение

Честно говоря, доверия к подобным полупроприетарным продуктам не всегда и очень много(в том числе потому, что производители ПО будут склонять вас купить платную версию рано или поздно тем или иным способом), пусть они и качественно реализованы вцелом, к тому же есть прекрасная альтернатива в виде той же ha-proxy и других решений. А traefik — это уже не совсем опенсорс, а тенденция перевода процессов администрирования на devops-процессинг неслучайна, это попытка коммерциализировать ИТ отрасль как можно глубже и сильнее, при этом поставив ее под контроль глобальных служб слежения силовых ведомств некоторых мировых сил, известно каких кстати, чьи там облачные сервисы любят заманивать к себе всех подряд под видом «удобств и автоматизации»-))) Devops-это отчасти удобство, часто эфемерное, в ущерб безопасности, ведь постоянный деплой кода и версий-это злостный враг безопасности вцелом. И это неопровержимый и очевидный факт, кто в теме пентеста и вайтбокс в курсе о чем речь. Всякое решение должно быть разумно и иметь целесообразность.

В ваших словах есть доля истины, да.
Облачные сервисы мне тоже не особо импонируют, traefik у меня используется на домашнем сервере (проксирует доступ к GitLab и Minio, и ещё по мелочи), взял его просто потому что показался удобным.
Насчет принуждения к покупке платной версии, не видел никаких тенденций, разве только если удалят все имеющиеся докер образы и тп, по мне так слабо реалистичный сценарий.

А они вас и не будут открыто к этому принуждать, только ситуативно, тоесть создавая ситуацию, когда вам это станет крайне необходимо, обычная тактика.
Другие продукты не менее удобны, а часто даже более гибки и часто более безопасны, так что выбор, Слава Богу, всегда есть тут-)

Насчет докер образов-это кстати еще один огромный риск, который невелировать в данной ситуации также сложно, в том и суть. Еще как могут удалить, и не сомневайтесь(ситуация в мире и вцелом свидетельствует о многом), и даже если просто есть потенциальная возможность-ее всегда надо учитывать, и очень ответственно.

Ну во-первых защититься от такой ситуации не слишком-то сложно, всего-то форк и приватный docker registry, а во-вторых статья именно об этом конкретном реверс-прокси, я не претендую на охват всего спектра подобных решений. Я освоил Traefik и он меня пока полностью устраивает, вот и поделился с читателями опытом.

Защититься то можно, но совершенно точно сделать это гораздо сложнее, и рисков в любом случае на порядок больше. Это было очевидно еще тогда, а сейчас и подавно видно.

Devops — это удобно, и это эволюция процесса деплоя ПО.
А у вас батенька паранойя
На данном этапе можно пересоздать контейнер (нужно так как мы меняли docker-compose.yml):
sudo docker-compose down && sudo docker-compose up -d

Небольшое замечание: для этого не обязательно делать docker-compose down, достаточно docker-compose up -d, и, если были изменения в файле, то docker-compose пересоздаст контейнеры с новыми параметрами.

— «traefik.http.middlewares.traefik-auth.basicauth.users=admin:$$apr1$$vDSqkf.v$$GTJOtsd9CBiAFFnHTI2Ds1»
— «traefik.http.routers.traefik.middlewares=traefik-auth»

А auth удобнее прописывать в file provider и в labels прописывать ссылку типа:
— «traefik.http.routers.jupyter.middlewares=jupyter@file»
Почему-то в данной конфигурации не работает перенаправление траффика c http на https, буду разбираться.
сам вот только крутил эту штуку. нашел простое решение: написать единую точку входа на http, а на сервисах — только https. работает.
тоже самое с file-провайдером. там можно отдельный файлик положить, прописав что-то типа

http:
routers:
redirs:
rule: hostregexp(`{host:.+}`)
entrypoints:
- http
middlewares:
- redirect-to-https
service: noop
middlewares:
redirect-to-https:
redirectScheme:
scheme: https
permanent: false
services:
noop:
loadBalancer:
servers:
- url: "http://127.0.0.1"


а, на сервисах уходить только в:


entryPoints:
- https

по идее это аналогично приведенному в статье

ну все верно. и в документации так же. и работает.
а сначала я не делал так. заворачивал каждый сервис (в том числе и file-провайдера) в свой middleware и давал обе entryPoints. и не работало.
можете пошарить свои файлы? а то уже день разбираюсь и единую точку входа для редиректов сделать не могу. Приходится к каждому контейнеру дописывать
— «traefik.http.middlewares.mywebserver-redirect-https.redirectscheme.scheme=https»
— «traefik.http.routers.mywebserver-web.middlewares=mywebserver-redirect-https»
— «traefik.http.routers.mywebserver-web.rule=Host(`wp1.test`)»
— «traefik.http.routers.mywebserver-web.entrypoints=http»
— «traefik.http.routers.mywebserver-https.rule=Host(`wp1.test`)»
# — «traefik.http.routers.mywebserver-https.tls.certresolver=letsEncrypt»
— «traefik.http.routers.mywebserver-https.tls=true»
— «traefik.http.routers.mywebserver-https.entrypoints=https»
# if you have multiple ports exposed on the service, specify port in the websecure service
— «traefik.http.services.mywebserver-https.loadbalancer.server.port=80»
хм. да там ничего сложного. просто в папке с custom файлами ложу еще один милдваре
 http:
  middlewares:
    redirect-to-https:
      redirectScheme:
        scheme: https
        permanent: true


это если про файлы, а если про докеры, то так:
в самом docker-compose который запускает траефик
      # global redirect to https
      - "traefik.http.routers.http-catchall.rule=hostregexp(`{host:.+}`)"
      - "traefik.http.routers.http-catchall.entrypoints=http"
      - "traefik.http.routers.http-catchall.middlewares=redirect-to-https"

не совсем про файлы. это я в конфиге траефика прописываю.

чтобы один раз и для всех

у меня та же проблема ((
что-то хитрое еще нужно дописать
Я весь вечер с этим мучался. Оказывается есть другой вариант, причем из документации:
stackoverflow.com/a/61902804
Спасибо за доступный мануал по Traefik v2. Пару лет назад пришлось разобраться с v1.x. Теперь же добавились роутеры, провайдеры и посредники (middleware), что вполне логично, с точки зрения расширяемости кода. Улучшили внутреннюю архитектуру решения, правда немного «усложнив» конфигурирование.

У меня, почему-то, не получается зайти на дашборд: не принимает мои логин и пароль... В чём может быть дело? Подробности показал здесь: https://stackoverflow.com/questions/68792623/docker-i-cant-login-into-dashboard-for-traefik-v2-5-lets-encrypt Буду весьма признателен, если сможете подсказать, как исправить проблему. Спасибо за статью!

"traefik.http.middlewares.traefik-auth.basicauth.users=admin:p@ssw0rd"

дело в том, что ты невнимательно читал документацию, видимо, и прописал в этом параметре нехэшированный пароль, а согласно докам, тут должен быть hash

https://doc.traefik.io/traefik/middlewares/basicauth/

The users option is an array of authorized users. Each user must be declared using the name:hashed-password format.

Понял, спасибо. Заработало.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Изменить настройки темы

Истории