Kubernetes - хостинг игрового сервера с UDP. Как подключить / направить трафик к POD?
Несколько дней я играл с кластером Kubernetes в службе контейнеров Azure с целью размещения на нем игровых серверов Unreal.
После нескольких дней экспериментов и нескольких вопросов по SO, я дошел до того, что смогу разместить несколько серверов на одном узле и подключиться к ним с помощью клиентов.
В моей последней установке я развернул POD напрямую с hostNetwork: true. Добавлен LoadBalancer с общедоступным IP-адресом и вручную сопоставленные порты с узла агента, где модули развернуты в NAT-балансировщике нагрузки.
Пока работает, я не совсем уверен, что это хорошее решение. Хотя он может быть автоматизирован, я не уверен, что он будет масштабируемым под нагрузкой.
Мне нужно подождать, пока не будет создан модуль. Я могу предположить, какой порт нужен, потому что нереально ароматически открывается на порт 7777, а затем увеличивается на единицу, пока не найдет один.
После того, как модуль создан, мне нужно добавить переадресацию портов NAT для балансировки нагрузки (но я не могу сделать это, пока не узнаю, на каком модуле Node расположен модуль).
Добавление новых правил NAT в балансировщик нагрузки требует времени. Совсем немного времени, из того, что я видел до сих пор.
Я использую внешний балансировщик нагрузки для маршрутизации трафика на определенных POD. Вероятно, было бы лучше сделать это изнутри Кубернетеса.
Есть несколько вещей, которые нужно встретить:
Клиент подключается к серверу через UDP.
Было бы лучше, чтобы количество публичных IP-адресов было минимальным.
Каков наилучший способ напрямую выставлять POD через UDP внешним клиентам? Переадресация портов не так уж и плоха (хотя она ограничена количеством POD, которые я могу выставить через один публичный ip, по крайней мере, мне так кажется). Я хотел бы либо подключить клиента напрямую к серверу, либо перенаправить клиентский трафик на определенный POD (т. Е. Сценарий router->service->pod приемлем, но чем меньше косвенных адресов, тем лучше).
Я прочитал это: http://www.compoundtheory.com/scaling-dedicated-game-servers-with-kubernetes-part-1-containerising-and-deploying/ И это хороший источник информации, хотя я не уверен если сервер подключен через UDP (что должно быть требование для меня). Или как именно клиент Unity подключается напрямую к внутреннему IP-адресу POD.
1 ответ
Предлагаю вам взглянуть на контроллер Ingresses, я знаю, что Nginx one поддерживает UDP-маршрутизацию.
Итак, вы открываете Nginx-вход с IP-адресом балансировщика нагрузки и создаете UDP-конфигурацию для маршрутизации прямо на ваши модули.
Вы должны попробовать.
https://github.com/kubernetes/contrib/tree/master/ingress/controllers/nginx/examples/udp