AKS LoadBalancer отправляет трафик только на один модуль - PullRequest
0 голосов
/ 10 января 2019

У меня есть служба, настроенная как LoadBalancer, работающая в кластере с пятью узлами, работающем 1.9.11. LoadBalancer находится перед тремя модулями, на которых запущено веб-приложение ASP.NET Core (которое, в свою очередь, обращается к очереди сообщений NATS, из которой слушатель получает сообщения и сохраняет их в базе данных SQL Azure). Для всех модулей установлены запросы ресурсов и ограничения, и все находится в выделенном пространстве имен.

Я использую сценарий PowerShell, чтобы веб-приложение генерировало сообщение для очереди NATS каждые 50 миллисекунд. Из нескольких способов видно, что Loadbalancer отправляет трафик только на один модуль: во-первых, графики ЦП на панели мониторинга k8s не показывают активности для двух модулей, а во-вторых, я отслеживаю среду. MachineName из веб-приложения проходит прямо к полю в базе данных, и я вижу, что это только одно имя MachineName. Если я удаляю модуль, который получает трафик, новый модуль немедленно помечается получающим трафик, но это все равно только один модуль из трех.

Насколько я понимаю, это не то, как LoadBalancer предназначен для работы, то есть LoadBalancer должен отправлять трафик на все модули. Это правильно, и если да, то есть ли какие-то подсказки относительно того, что я делаю неправильно? Мой сервисный файл выглядит следующим образом:

apiVersion: v1
kind: Service
metadata:
  name: megastore-web-service
spec:
  selector:
    app: megastore-web
  ports:
  - port: 80
  type: LoadBalancer

1 Ответ

0 голосов
/ 10 января 2019

Мне кажется, что ваш балансировщик нагрузки работает правильно. Когда трафик поступает в LB, LB автоматически направляет трафик на первый доступный узел. Тот факт, что вы можете отключить POD и перенаправить трафик, - это то, что и следовало ожидать.

Это хорошая статья, которая помогает объяснить, как работает LB

https://blogs.msdn.microsoft.com/cie/2017/04/19/how-to-fix-load-balancer-not-working-in-round-robin-fashion-for-your-cloud-service/

Чтобы проверить это дальше, я бы посоветовал вам попробовать открыть порт на одном из POD, но не на других. Например, порт 88 на POD2. Затем подключитесь с помощью loadbalancer: 88 и посмотрите, маршрутизируется ли подключение к правильному POD.

...