Comments 31
Все это время пользовался связкой webproxy для докеров, но у нее есть бага, когда при перезапуске хоста не всегда корректно исправляется файл конфигурации, а айпи адреса у контейнеров меняются. В итоге получаем 503 и приходилось идти и дергать все руками. На траефик смотрел искоса, но с этой статьей однозначно пойду пробовать. Спасибо!
кстати, в файле data/custom/host.yml ошибка. отступ в строке services: — он должен быть на ровне с роутерами и миделварями.
Если у читателя создалось впечатление что таким образом создается единая точка отказа всей системы, то так и есть
Честно говоря если использовать не LE сертификат, то все остальное вполне себе можно задублировать: вешаете по контейнеру на ноду, оба инстанса будут обновлять конфигурацию и перенаправлять трафик при обращении. Sticky Sessions реализованы так, что traefik на основе куки перенаправляет трафик, тоесть сам инстанс не хранит информации о сессиях.
В своей конфигруации на SWARM один инстанс traefik дополнил VRRP и правилом, чтобы VIP адрес бегал за запущенным контейнером. Даже в самом худшем раскладе простой получается 10 секунд, что для меня приемлемо. Чтобы получить нулевой простой, достаточно на каждой ноде с VRRP добавить по инстансу.
вопрос с LE только в пробросе файла acme.json — который можно бросать на каждую такую вашу ноду сотнями вариантов.
и, да, не платить за EE версию ))
SWARM тут не учитывался, а так да, можно вполне задублировать, спасибо за дополнение
В ваших словах есть доля истины, да.
Облачные сервисы мне тоже не особо импонируют, traefik у меня используется на домашнем сервере (проксирует доступ к GitLab и Minio, и ещё по мелочи), взял его просто потому что показался удобным.
Насчет принуждения к покупке платной версии, не видел никаких тенденций, разве только если удалят все имеющиеся докер образы и тп, по мне так слабо реалистичный сценарий.
Другие продукты не менее удобны, а часто даже более гибки и часто более безопасны, так что выбор, Слава Богу, всегда есть тут-)
Насчет докер образов-это кстати еще один огромный риск, который невелировать в данной ситуации также сложно, в том и суть. Еще как могут удалить, и не сомневайтесь(ситуация в мире и вцелом свидетельствует о многом), и даже если просто есть потенциальная возможность-ее всегда надо учитывать, и очень ответственно.
Ну во-первых защититься от такой ситуации не слишком-то сложно, всего-то форк и приватный docker registry, а во-вторых статья именно об этом конкретном реверс-прокси, я не претендую на охват всего спектра подобных решений. Я освоил Traefik и он меня пока полностью устраивает, вот и поделился с читателями опытом.
А у вас батенька паранойя
На данном этапе можно пересоздать контейнер (нужно так как мы меняли 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»
тоже самое с 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
по идее это аналогично приведенному в статье
— «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»
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
У меня, почему-то, не получается зайти на дашборд: не принимает мои логин и пароль... В чём может быть дело? Подробности показал здесь: 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.
Введение в Traefik 2.0