Как предоставить доступ к нескольким службам Kubernetes через один балансировщик нагрузки Azure?

Я хочу предоставить доступ к нескольким службам через один балансировщик нагрузки. Каждая служба указывает ровно на одну капсулу.

Пока я пытался:

kubectl expose <podName> --port=7000 

И на портале Azure, чтобы вручную установить правила балансировки нагрузки или правила Inbound Nat, указывая на открытый модуль. Пока я могу подключиться к модулю, используя внешний IP-адрес и указанный порт.


person Łukasz Baran    schedule 17.01.2018    source источник


Ответы (4)


Зависит от того, как вы хотите разделить службы на одном IP. Мне на ум приходят два способа:

  • используйте службы NodePort, а затем сопоставьте некоторые порты от LB с этой частью на узлах кластера. Это дает разделение по портам.
  • На мой взгляд, более интересным способом является использование Ingress / IngressController. Вы должны выставить только IC на стандартных портах, таких как 80 и 443, а затем он будет отображаться на ваши службы по имени хоста и uri.
person Radek 'Goblin' Pieczonka    schedule 17.01.2018

В службе контейнеров Azure Azure будет использовать балансировщик нагрузки для предоставления служб k8s, например:

root@k8s-master-E27AE453-0:~# kubectl get svc
NAME         CLUSTER-IP    EXTERNAL-IP     PORT(S)          AGE
jasonnginx   10.0.41.194   52.226.33.200   8080:32011/TCP   4m
kubernetes   10.0.0.1      <none>          443/TCP          11m
mynginx      10.0.144.49   40.71.230.60    80:32366/TCP     5m
yournginx    10.0.147.28   40.71.226.23    80:32289/TCP     4m
root@k8s-master-E27AE453-0:~# 

На портале Azure проверьте IP-конфигурацию внешнего интерфейса балансировщика нагрузки Azure (другой IP-адрес):

введите здесь описание изображения

ACS создаст Load Balancer rules и добавит rontend IP адрес автоматически.

Как предоставить доступ к нескольким службам Kubernetes через один балансировщик нагрузки Azure?

ACS предоставляет доступ к службам k8s через этот балансировщик нагрузки Azure. Вы имеете в виду, что хотите предоставлять службы k8s с одним общедоступным IP-адресом?

Если вы хотите предоставлять службы k8s с одного публичного IP-адреса, как сказал Радек, возможно, вам следует использовать Nginx Ingress Controller.

Контроллер Ingress работает так:

введите здесь описание изображения

person Jason Ye    schedule 18.01.2018

Спасибо ребята. Думаю, я нашел жизнеспособное решение своей проблемы. Я должен был быть более конкретным в том, что я собираюсь делать.

Я хочу разместить игровой сервер через UDP. Таким образом, любой контроллер входящего трафика Kubernetes на самом деле не вариант, поскольку они редко поддерживают маршрутизацию UDP. Мне также не нужно размещать множество сервисов на одной машине. 1-4 модуля на один узел, вероятно, максимум.

Я узнал об использовании:

hostNetwork: true 

в конфигурации yaml, и это действительно хорошо работает для этого сценария. Я получаю IP прямо с хост-узла. Затем я могу выбрать соответствующий узел в балансировщике нагрузки и создать правило NAT или балансировки нагрузки.

person Łukasz Baran    schedule 18.01.2018
comment
Можете ли вы расширить это решение, например опубликовать полный yaml для настройки службы? - person Choco; 08.02.2021

Создайте несколько служб типа nodePort и исправьте nodePort. И облачный балансировщик нагрузки, установите несколько групп слушателей. Порт прослушивания такой же, как порт узла службы, а целью являются все рабочие узлы.

person yixing yan    schedule 19.02.2021