» » » Доменные имена с валидным SSL для локальных Docker-контейнеров

 

Доменные имена с валидным SSL для локальных Docker-контейнеров

Автор: admin от 11-02-2019, 11:30, посмотрело: 22

Доменные имена с валидным SSL для локальных Docker-контейнеров



Использование Docker в процессе разработки стало уже стандартом де-факто. Запускать приложение со всеми его зависимостями, используя всего одну команду — становится всё более и более привычным действием. Если приложение предоставляет доступ используя web-интерфейс или какое-либо HTTP API — скорее всего "фронтовой" контейнер пробрасывает свой, уникальный (среди остальных приложений, разработкой которых вы занимаетесь параллельно) порт в хост, постучавшись на который мы можем взаимодействовать с приложением в контейнере.



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



А потом ещё тебе хочется проверить работу по https — и приходится либо использовать свой корневой сертификат, либо всегда использовать curl --insecure ..., а когда над приложениями работают различные команды — количество запар начинает возрастать в геометрической прогрессии.



Столкнувшись с такой проблемой в очередной раз — в голове промелькнула мысль "Хватит это терпеть!", и результатом работы на паре выходных стал сервис, который решает эту проблему на корню, о чем будет рассказано ниже. Для нетерпеливых, традиционно —

Ок, теперь у нас есть и валидный SSL сертификат (пускай и на 3 месяца, и только для под-доменов одного уровня). Остается как-то научиться проксировать все запросы, что приходят на локалхост в нужный контейнер.



И тут нам на помощь приходит [leech=https://traefik.io/]Traefik (спойлер — он прекрасен). Запустив его локально, пробросив в его контейнер через volume докер-сокет — он умеет проксировать запросы в тот контейнер, у которого есть необходимый docker label. Таким образом, нам нет необходимости в какой-либо дополнительной конфигурации, кроме как при запуске указать нужный label у контейнера (и docker сеть, но при запуске без docker-compose даже это не обязательно, хотя и очень желательно), к которому мы хотим получить доступ по доменному имени и с валидным SSL!



Проделав весь этот путь свет увидел докер-контейнер с этим самым пред-настроенным Traefik-ом и wildcard SSL сертификатом (да, он публичный).



Приватный ключ от SSL в публичном контейнере?



Да, но я считаю что это не страшно, так как он на доменную зону, которая всегда резольвит локалхост. MitM в этом случае не имеет особого смысла в принципе.



Что делать когда сертификат протухнет?



Просто стянуть свежий образ, перезапустив контейнер. У проекта настроен CI, который в автоматическом режиме, раз в месяц (на данный момент) обновляет сертификат и публикует свежий образ.



Хочу попробовать!



Нет ничего проще. Первым делом, убедись что локальные порты 80 и 443 у тебя свободны, и выполни:



# Создаём docker-сеть для нашего реверс-прокси
$ docker network create localhost-tools-network

# Запускаем сам реверс-прокси
$ docker run -d --rm 
    -v /var/run/docker.sock:/var/run/docker.sock 
    --network localhost-tools-network 
    --name localhost.tools 
    -p 80:80 -p 443:443 
    tarampampam/localhost

# Запускаем nginx, говоря ему откликаться на "my-nginx.localhost.tools"
$ docker run -d --rm 
    --network localhost-tools-network 
    --label "traefik.frontend.rule=Host:my-nginx.localhost.tools" 
    --label "traefik.port=80" 
    nginx:latest


И теперь можем потестировать:



$ curl -sS http://my-nginx.localhost.tools | grep Welcome
<title>Welcome to nginx!</title>
<h1>Welcome to nginx!</h1>

$ curl -sS https://my-nginx.localhost.tools | grep Welcome
<title>Welcome to nginx!</title>
<h1>Welcome to nginx!</h1>


Как видим — работает :)



Где живёт документация, описание?



Всё, как не сложно догадаться, живёт по адресу [url=https://localhost.tools/]https://localhost.tools[/leech]. Более того, морда — отзывчивая, и умеет смотреть запущен ли у тебя локально демон реверс-прокси, и выводить список запущенных и доступных для взаимодействия (если таковые имеются) контейнеров.



Сколько стоит?



Нисколько. Совсем. Сделав данную штуку для себя и своей команды пришло понимание того, что она может пригодиться и другим разработчикам/ops-ам. Более того — денег стоит только доменное имя, всё остальное — юзается без необходимости в оплате.



P.S. Сервис ещё в beta, посему — если будут найдены какие-либо недочёты, опечатки и т.д. — просто черканите в личку. Хабы "Программирование" и "Разработка веб-сайтов" указаны по причине того, что данный подход может быть полезен в первую очередь в этих отраслях.


Источник: Хабр / Интересные публикации

Категория: Google

Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Добавление комментария

Имя:*
E-Mail:
Комментарий:
Полужирный Наклонный текст Подчеркнутый текст Зачеркнутый текст | Выравнивание по левому краю По центру Выравнивание по правому краю | Вставка смайликов Выбор цвета | Скрытый текст Вставка цитаты Преобразовать выбранный текст из транслитерации в кириллицу Вставка спойлера
Введите два слова, показанных на изображении: *