Сервис 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
с этой графаной теперь видно равномерное распределение запросов.