R-omk
он будет слушать сворм, и при появлении сервисов релоадить конфиг
R-omk
ну докер по https слушать на порту, в общем собитыя от докера
Evgeny
кстати, один из самый простых вариантов использовать proxy-nginx
Да, у меня сервис дискавери именно это и делает
R-omk
вот этот дружок, и он простой как палка
R-omk
https://github.com/jwilder/nginx-proxy
R-omk
не нужен ни консул ни регистратор, вообще нихрена, я даже letsencrypt обновлялку под сворм запилил
Evgeny
Для межсерсивных запросов внутри сети нужно
R-omk
ну так может и нужен, но если просто сервисы , то этого хватит
R-omk
хотя внутри сети я даже не знаю... может быть просто haproxy поставил и все , как только сервис в обычном днс докера появится так и радость, хотя даже этогоже nginx proxy может хватить
Evgeny
днс докера иногда залипает на несколько секунд, плюс не умеет раундробин между интсансами одного сервиса
R-omk
раунд кажись умеет
Oleg
Фигня какая-то proxy-nginx
R-omk
фигня потому что на баше? =)
R-omk
днс докера иногда залипает на несколько секунд, плюс не умеет раундробин между интсансами одного сервиса
я бы на днс не полагался, лучше реально upstream грамотный, с учетом количесва соединений
Evgeny
Они возвращают все А, а если использовать glibc для резолва - оно не рабоатет
Oleg
Потому что sock. Как оно отследит что на хрен знает каких нодах ещё двадцать микросервисов поднялось?
R-omk
Потому что sock. Как оно отследит что на хрен знает каких нодах ещё двадцать микросервисов поднялось?
а тебе не нужен сок в сворме, тебе нужно указать адрес и порт докера, тоесть сворм мэнеджера
R-omk
Почему на днс не надо полагаться?
ну как минимум из за желания считать соединения и балансировать соответствующе
Evgeny
Ты про доступ снаружи? Или для кросс-сервисного? Я говорю сейчас про кучу микросервисов которые друг с другом общаются
R-omk
ну да , про внутреннюю для сервисов
R-omk
роунд появился в 1.11 , поясни что не так с ним
Evgeny
google: RFC3484 (rule 9) glibc.getaddrinfo если кратко - все получаемые А сортируются и берется первый
R-omk
тоесть докер их не крутит покругу? а просто все возвращает в одинаковой сортировке каждый раз?
Evgeny
Крутит, но смысла в этом мало
Evgeny
Это на клиенте уже происходит
R-omk
а... клиент сортирует? а нафига?
Evgeny
RFC3484 (rule 9) все дела
Oleg
в общем моя текущая конфигурация это swarm+consul. На каждой ноде стоит registrator, который в консул сливает такущие запущенные контейнеры на ноде. Приложение включает ладбалансер на hanzel/load-balancing-swarm и микросервисы в своей подсети. Есть главный ревер-прокси, который единственный торчит наружу и также находится в одной подсети со всеми лоадбалансерами всех приложений
R-omk
сцука, ну все равн, если тот же nginx взятьвзять то он нормальный раунд робин сделает
Oleg
сейчас приходится ручками на главном реверс-прокси добавлять апстим для нового приложения, и это как-то не по-людски. Хочется автомата
R-omk
ну так это примерно и есть то что в proxy-nginx, как только в докере ктото ххочет в апстрим так специальная штука ему конфиг строит на реверспрокси
R-omk
точнее тебе нужно посмотреть именно https://github.com/jwilder/docker-gen там он как раз конфиги строит на основании текущего состояния докера
Evgeny
Может прокси это умеет, правда
R-omk
ну nginx точно умеет строить апстрим из одного домена выковыряв все ip адреса, но в бесплатной версии не умеет это (динамически релоад) делать автоматом, я хочу для этого haproxy попробовать
Evgeny
Это в момент запуска апстрима, а у меня полностью динамическая конфигурация
Oleg
автомат делать это надо заниматься, я все жду что кто-нибудь напилит и будет это мейнтенить
R-omk
могу по своему опыту сказать что пули не бывает
Oleg
да блин, это задача буквально всем нужна. Я ищу стандартные решения
Oleg
в общем понял, пока ручками буду проксировать )
Oleg
пока не появится стандартных решений
R-omk
я не пойму почему docker-gen не подходит, ведь он делает имено то что что нужно
Evgeny
Видимо надо больше автоматизации
R-omk
куда еще больше??
R-omk
что бы получился кубернетс? да нунах
Oleg
да не в докер-ген вообще говоря дело. тут надо вначале с лоадбалансера приложения передавать параметры для реверс-прокси, хотя бы на уровне имени домена. чтобы потом реверс-прокси знал на какой лоадбалансер проксировать
R-omk
воот...!
Evgeny
А почему нельзя опять таки через дискавери сделать прокси?
R-omk
"лоадбалансер приложения" запускается в сворме, докер-ген это дело улавливает, и строит ровно такой конфиг какой нужно
Evgeny
Ну для меня сворм это очень удобный менеджер сетей и кластера.
Evgeny
Я имел в виду - сделать абсолютно такой-же прокси через "resolver <ip>;" и дальше проксировать по имени домена
Evgeny
Тогда ничего вообще не придется переконфигурить
R-omk
ну да, а еще его преимущество в том что у него api докера, когда я пытался кластер без сорма сделать тогда был дискавери который реально знал на каком хосту и на каком порту сбиндился контейнер
R-omk
Я имел в виду - сделать абсолютно такой-же прокси через "resolver <ip>;" и дальше проксировать по имени домена
а как тогда вообще понять что появилось новое приложение и какой у него dns?
R-omk
Тогда ничего вообще не придется переконфигурить
хотя чего уж там , у меня так и есть, просто сеть на приложение и каждый компонент точно знает где искать другого, ... то есть там вообще ничего не нужно
Evgeny
Через резолвер по имени домена. Например мы деплоим приложение у которого есть один или несколько экспоженых портов и указано что у него домен namename,ru. Тогда если мы сделаем что-то вроде set $backend "http://$hostname.discovery"; proxy_pass $backend$request_uri; он будет туда автоматом проксировать
Oleg
объясни как docker-gen работает
Evgeny
Ну а у меня много разных микросервисов которые связаны по именам, и когда появляется новый инстанс он автоматов появляется в dns
Anonymous
Как записи в днс попадают?
Oleg
вот мой условный конфиг приложения
Oleg
version: '2' services: lb: image: hanzel/load-balancing-swarm container_name: lb expose: - "80" environment: - APP_NAME=hello - CONSUL_URL=${KV_IP}:8500 depends_on: - web networks: - proxy-net - app-net web: image: eeacms/hello expose: - "80" networks: - app-net networks: proxy-net: external: name: proxy-net app-net: driver: overlay
R-omk
объясни как docker-gen работает
слушает докер через апи, слушает события, как только появляется событие запуска или останова контейнера из докера вытягивается информация обо всех запущенных контейнерах, в этой информации можно читать env labels и прочие данные, на основании этих данных строится конфиг
R-omk
мне хватает пока что
Evgeny
Как записи в днс попадают?
у меня сервис дискавери слушает сварм апи и автоматом добавляет \ удаляет записи
R-omk
Как записи в днс попадают?
а я использую штатный днс, потому что там без проблем можно алиасы задавать как кие хочешь в разных сетях
R-omk
я смогу ему сказать что мне нужны только лоадбалансеры приложения и вытянуть их ENV?
если посмотреть как работает nginx-proxy то там видно, что у контейнера который ты хочешь проксировать нужно установить определенный ENV, а именно VIRTUAL_HOST, как только докер-ген увидит изменения в стостоянии контейнеров (запустится или остановится любой контейнер в кластере ) он просто просканурует все контейры на наличие этих ENV , и построит конфиг с нуля
R-omk
честно говоря вот самый понятный конфиг
R-omk
https://github.com/fatk/docker-letsencrypt-nginx-proxy-companion-examples/blob/master/docker-compose/v2/simple-site/docker-compose.yml
R-omk
но это пример для letsencrypt-nginx-proxy-companion , но от этого он не менее понятный
R-omk
letsencrypt-nginx-proxy-companion для сворма не очень подходит, поэтому мы сделали свой
R-omk
подобный подход с получинием инфы из ENV и LABELS контейнеров я планирую в будщем использовать для установления задач по расписанию и бэкапов, тоесть когда cервисы вещают в окружающую среду свои "намерения" а другие обслуживающие сервисы делают настройку , как в примере с проксированием, делитесь мыслями если у кого то есть идеи по нормальныйм кластерным бэкапам и кронам
Oleg
ну хз. очередь нужна и чтобы все слушали. Ты же видимо хочешь это делать как-то взаимосвязанно с бизнес-логикой приложения а не по расписанию