Kubernetes - хостинг игрового сервера с UDP. Как подключить / направить трафик к POD?

Несколько дней я играл с кластером Kubernetes в службе контейнеров Azure с целью размещения на нем игровых серверов Unreal.

После нескольких дней экспериментов и нескольких вопросов по SO, я дошел до того, что смогу разместить несколько серверов на одном узле и подключиться к ним с помощью клиентов.

В моей последней установке я развернул POD напрямую с hostNetwork: true. Добавлен LoadBalancer с общедоступным IP-адресом и вручную сопоставленные порты с узла агента, где модули развернуты в NAT-балансировщике нагрузки.

Пока работает, я не совсем уверен, что это хорошее решение. Хотя он может быть автоматизирован, я не уверен, что он будет масштабируемым под нагрузкой.

  1. Мне нужно подождать, пока не будет создан модуль. Я могу предположить, какой порт нужен, потому что нереально ароматически открывается на порт 7777, а затем увеличивается на единицу, пока не найдет один.

  2. После того, как модуль создан, мне нужно добавить переадресацию портов NAT для балансировки нагрузки (но я не могу сделать это, пока не узнаю, на каком модуле Node расположен модуль).

  3. Добавление новых правил NAT в балансировщик нагрузки требует времени. Совсем немного времени, из того, что я видел до сих пор.

  4. Я использую внешний балансировщик нагрузки для маршрутизации трафика на определенных POD. Вероятно, было бы лучше сделать это изнутри Кубернетеса.

Есть несколько вещей, которые нужно встретить:

  1. Клиент подключается к серверу через UDP.

  2. Было бы лучше, чтобы количество публичных 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

Другие вопросы по тегам