Салтыдык
а, ещё проблему вспомнил про Voyager. Он плодит контроллеры, и первый созданный занимает порт. Второй контроллер не стартанёт на том же порте.
Салтыдык
проблема бы совсем и не была проблемой, если использовать сервисы с типом LoadBalancer, но у меня baremetal
Sergey
ну как бы кубер сильноопирается на облачную инфраструктуру
Sergey
тут да
Sergey
хотя елб то еще гуано у авс
Sergey
https://github.com/kelseyhightower/istio-ingress-tutorial
Sergey
если кто еще не видел
Logan
модераторы?
Anonymous
бампнул Дениса
Салтыдык
https://lyft.github.io/envoy/
L4 тоже нужен
Gleb
там есть
Салтыдык
https://lyft.github.io/envoy/
ну опять-таки, это istio (ingress для Envoy там реализован)
Салтыдык
есть опыт?
Салтыдык
Можно ли терминировать TLS-трафик на контроллере, взять хэш клиентского сертификата, повесить заголовком на реквест и отправить дальше по роуту?
Sergey
Ну истинно изначально для других целей
Ivan
Товарищи, кто нибудь может подсказать как сделать правильно, если мне надо иметь возможность самому выбирать с каким сервером соединяться (игровые сервера), выходит лоад бэлэнсер мне не нужен
Ivan
Как правильно пошарить сервер наружу?
kås
если так, то можно шардировать юзеров по юзер-айди например
Sergey
Клиент сайд сервис Дискавери
kås
шардированием можно в ногу выстрелить позже при масштабироании, надо думать заранее хорошо
bebebe
если так, то можно шардировать юзеров по юзер-айди например
в этом случае нужно ожидать при добавлении нового сервера, нужен ребалансинг в общем случае это не больно, немного неприятно
kås
баду, кажется, на хайлоаде рассказывали про похожий подход
kås
таймкод на распределение запросов https://youtu.be/SU9ETg39FEg?t=9m45s
kås
протокол какой?
Ivan
Udp
Ivan
Сейчас я на азуре ноде руками public ip ставлю, но это костыль
kås
цель балансить юзера при подключении на наименее загруженный сервак на все время его сесии?
Ivan
Да, это делает кастомный сервис. Цель как то спрятать поды за одним эндпойнтом но по разным портам
kås
может попробовать просто nginx, с версии 1.9.13 он может балансить udp.
kås
раунд робином или least_conn может подойдет
Ivan
Робин точно не подойдет
bebebe
openresty + хождение в статистику и выбор балансера
kås
least_conn или hash по айпи юзера может тогда
kås
на lua велосипед написать можно. Решение тут возможно нужно кастомное
bebebe
хотя я бы на вашем месте в протокол внедрил редирект т.е. первый на определенный запрос, был специальный тип пакета, идите туда, типа http 302
kås
в играх скорость нужна. Будет быстро
bebebe
я не знаю насколько там легаси, но все таки делал бы перед входом http/udp/whatever запрос куда слать пакеты
bebebe
а там какую угодно логику можно запилить
kås
ну да, тут смотря почему хотят балансить. Коннектов много или тачки не выдерживают. Тогда можно сходить в метрику и где больше проца avg(15min) туда и отправлять
kås
требования расплывчаты
bebebe
балансить уже второй вопрос, первый это реализовать в протоколе сам метод, типа дайте ip:port
bebebe
а на каком принципе будет их отдавать балансер - дело сугубо личное
bebebe
я не до конца понимаю, какова цена таких изменений
bebebe
и возможны ли они в случае топикстартера
kås
не имел дела с гейм серверами. С одной сторы интересно, с другой - udp мрак
bebebe
мрак не мрак, но как бы контролируемо
Ivan
Ща, домой приеду напишу более подробно требования
Ivan
Ща, домой приеду напишу более подробно требования
Короче игровые сервера представляют собой что-то вроде комнат, по комнатам игроков распределяет отдельный сервис - матчмейкинг. Данный сервис сначала собирает группу игроков на основе ряда параметров, но примерно равных по силе, и затем должен поместить их всех на один сервер. Таким образом матчмейкинг отдаёт клиентам ip:port для соединения и дальше игроки соединяются с сервером. В рамках матча сервер меняться не может. Именно поэтому стандартные балансеры не подходят. Общение с игровым сервером происходит по определенному порту, по udp протоколу. Один сервер может обслуживать только один матч. Поэтому балансировка происходит за счёт поднятия большего количества серверов. В моем понимании каждый сервер - под. При поднятии пода должен быть создан маршрут: сгенеренный порт паблик эндпойнта на порт пода на ноде. Этот маршрут не меняется пока с подом что-то не случится. Я вот не знаю как в азуре при поднятии пода регистрировать такой маршрут
Sergey
Nodeport?
Sergey
https://kubernetes.io/docs/concepts/services-networking/service/#type-nodeport
Sergey
Ну тупо сервис из одного пола
Sergey
Пода
Ivan
Ну это то что я сейчас типа сделал, каждый под запускается с net=host и сам выбирает порт, но я не могу на азуре автоматом генерировать паблик ip для ноды
Ivan
Приходится ручками настраивать
Sergey
Это не то что вы сделали
Sergey
Ну и с ажуром дел не имел давно
Ivan
Можно на ты, если что)
Ivan
В чем моя ошибка?
Ivan
Node port азура не поддерживает
Sergey
Не ошибка просто это не нет хост, это у вас сервис марается на айпи ноды на порт из диапазона выше 3000
Sergey
При чем на все ноды где кубпрокси есть
Sergey
Ну тут вам виднее
Sergey
Я ажур не трогал в разрезе кубера
Sergey
Хотя нодпорт это же базовый функционал
Sergey
Че там в ажуре такое шоб оно не работало?
Sergey
В фаерволе порты не открыты разве что
Sergey
Ну или реально на нодах нет белых айпи.
Ivan
А если надо несколько серверов на ноде запустить, как node port это разрулит? Нужно несколько с Копий сервиса делать?
Logan
балансировщик, нет?
Sergey
Нет сколько сервисов столько портов
Sergey
Там их диапазон
Sergey
А внутри сервиса один или более копий пода
Sergey
Но вам несколько родов в одном сервисе нах не надо я такипонялт
Logan
а нужно трекать весь диапазон, один порт не вариант? С одним можно было бы как-то поиграть, ИМХО