Как запустить два сервера minecraft с помощью kubernetes ingress

Я изучаю, как развернуть игровой сервер с помощью kubernetes, но столкнулся с проблемой, связанной с тем, что модули, на которых запущена игра, доступны в Интернете без LoadBalancer. Поскольку запуск балансировщика нагрузки для каждого модуля невозможен, мне сказали использовать вход с портами узлов, чтобы сделать их доступными через Интернет.

Я могу создать кластер и все модули распределить по узлам так, как я хочу, но я не могу сделать их доступными. Я создал репозиторий github, ссылка на раздел kubernetes, в котором есть весь код для локального запуска сервера, если вы хотите его протестировать. Что касается запуска проекта в облаке, я не могу заставить его работать. В Readme у меня есть шаги, которые я прошел, и файлы с кодом, которые у меня есть до сих пор. Кто-нибудь знает, где я ошибаюсь?

Я пропустил файл или какую-то концептуальную идею, которая приходит мне в голову при настройке nodeports?


person mjwrazor    schedule 06.05.2020    source источник


Ответы (2)


Я обнаружил, что мне нужно использовать ClusterIP вместо NodePort. Я также обнаружил, что мне нужно исправить не только входное развертывание, но также нужно исправить входную службу, чтобы включить порты данных tcp-services, которые, как я говорил, были доступны во входном развертывании.

person mjwrazor    schedule 07.05.2020

Ваш README.md показывает команду, используемую для создания пула узлов, как:

az aks nodepool add --resource-group mwK8ResourceGroup --cluster-name cluster-1 --name gamenodepool --node-count 2 --kubernetes-version 1.15.7 --labels "workload=game-selector" --node-taints "key1=value1:NoExecute" --node-osdisk-size 30 --node-vm-size Standard_DS2_v2 --debug

При настройке службы типа NodePort служба предоставляется путем прямого доступа к узлу через IP-адрес. Я ожидаю, что ваша команда создания будет включать --enable-node-public-ip, чтобы ваш пример кода работал как есть.

Подробнее см. в этом разделе документации по kubernetes: https://kubernetes.io/docs/concepts/services-networking/connect-applications-service/#exposing-the-service

Вы также можете запустить отдельный балансировщик нагрузки, который перенаправляет трафик на каждый/любой узел на порту, предоставляемом службой(ами) NodePort.

Если вы предоставили службу с помощью ресурса «Ingress», вы получили бы доступ к службе через IP-адрес кластера, а не через IP-адрес отдельного узла.

person bpdohall    schedule 06.05.2020
comment
Когда вы говорите clusterIP, вы имеете в виду адрес входного контроллера? У каждого пода свой кластер IP. - person mjwrazor; 07.05.2020
comment
--enable-node-public-ip сейчас не вариант, я предполагаю, что документы Microsoft устарели. - person mjwrazor; 07.05.2020
comment
@mjwrazon - IP-адрес кластера будет общедоступным балансировщиком нагрузки, который указывает на ваш кластер. Служба NodePort должна быть доступна с отдельного узла. Вы видели эти диаграммы: docs.microsoft.com/en- мы/azure/aks/concepts-network#services - person bpdohall; 07.05.2020
comment
Я пытаюсь сделать каждый отдельный модуль доступным извне, каждый модуль находится на своем узле. Ни clusterIP, ни NodePort не позволяют этого. Во всяком случае, не на Azure. @bpdohall - person mjwrazor; 07.05.2020
comment
@mjwrazor - похоже, вам не хватает компонента для преодоления разрыва между общедоступным Интернетом и вашими частными конечными точками. Пробовали ли вы настроить балансировщик нагрузки Azure для предоставления доступа к вашим конечным точкам? - person bpdohall; 07.05.2020
comment
Если вы прочитаете мой первоначальный вопрос, вы увидите, что я работаю над тем, чтобы избежать балансировщика нагрузки для каждого, поскольку я уже заставил это работать, но хочу избежать затрат и ограничений. Я работаю над использованием Ingress и изначально прошу помощи в этом. @bpdohall - person mjwrazor; 07.05.2020
comment
Похоже, мое понимание вопроса менялось, когда мы ходили туда-сюда. Сначала я подумал, что вы хотите полностью отказаться от балансировщика нагрузки. Рад, что ты разобрался. Ваше здоровье! - person bpdohall; 08.05.2020
comment
Для справки: вы также можете подключить свой ресурс Ingress к службе NodePort, используя имя службы, как показано в этом примере: github.com/kubernetes/kubernetes/issues/ - person bpdohall; 08.05.2020