Как стать автором
Поиск
Написать публикацию
Обновить

Комментарии 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.

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

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

Публикации