Сервис Kubernetes с переадресацией портов не балансирует нагрузку

Я болтаю с K8s над своей магистерской диссертацией. Для этого я собираю кластер K8s с помощью KinD. Я также разработал небольшой REST API для колб, который будет отображать ENV var. Теперь я запускаю 3 службы, которые содержат несколько модулей приложения Flask, и они звонят друг другу. Для лучшего понимания у меня есть привет svc, мировой сервис и world2 svc. Все идет нормально. Я успешно развернул их и теперь хочу перенаправить hello svc.

kubectl --namespace test port-forward svc/hello 30000

Это работает нормально, но как только я запускаю свое приложение JMeter для тестирования функций балансировки нагрузки, происходит что-то странное. Как вы можете видеть на панели инструментов Grafana, другие службы успешно балансируют нагрузку трафика, но svc, который перенаправлен на порт, отправляет весь свой трафик в один hello pod.

Это мое развертывание: deployment.yml

Я что-то пропустил? Или я неправильно развернул приложение?

Заранее спасибо!

2 ответа

Переадресация портов позволяет использовать сервисы только для удобства. За кулисами напрямую подключается к одному модулю. Соединение будет прервано, если этот модуль умрет. В перенаправлении портов нет балансировки нагрузки. Выбирается один модуль, выбранный службой, и весь трафик перенаправляется туда в течение всего времени жизни команды перенаправления порта. Я бы предложил использовать службу типа NodePort, если вам нужно протестировать балансировку нагрузки через JMeter из вне кластера кубернетов.

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

Первым делом я установил MetalLB https://mauilion.dev/posts/kind-metallb//

С помощью этого LoadBalancer я объявил диапазон IP-адресов, который совпадает с диапазоном одного из моих узлов. Также услуга, которую я выставляю, получилаtype: LoadBalancer с этой графаной теперь видно равномерное распределение запросов.

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