Kubernetes использует iptables для распределения нагрузки между модулями ( режим прокси iptables по умолчанию).
Если у вас есть 2 модуля, они распределяются равномерно с вероятностью 0,5 (50%). Поскольку он не использует циклический перебор, модуль бэкэнда выбирается случайным образом. Это будет даже в более длительные сроки.
Если будет 3 модуля, вероятность изменится на 1/3 (33%), для 4 модулей - 1/4 и т. Д.
Для проверки вы можете запустить sudo iptables-save
.
Пример вывода для 2 модулей (для службы nginx):
sudo iptables-save | grep nginx
-A KUBE-NODEPORTS -p tcp -m comment --comment "default/nginx:" -m tcp --dport 31554 -j KUBE-SVC-4N57TFCL4MD7ZTDA //KUBE-SVC-4N57TFCL4MD7ZTDA is a tag for nginx service
sudo iptables-save | grep KUBE-SVC-4N57TFCL4MD7ZTDA
-A KUBE-SVC-4N57TFCL4MD7ZTDA -m statistic --mode random --probability 0.50000000000 -j KUBE-SEP-SOWYYRHSSTWLCRDY
Если вы хотите убедиться, что нагрузка распределяется равномерно с использованием алгоритма циклического перебора, вы можете использовать IPVS , который по умолчанию использует rr (round-robin). Он работает как балансировщик нагрузки перед кластером и направляет запросы для служб на основе TCP и UDP на реальные серверы, а службы реальных серверов отображаются в виде виртуальных служб на одном IP-адресе. поддерживается в кластере, созданном local-up, kubeadm и GCE.