#kubernetes
#kubernetes
Вопрос:
Как я могу видеть на диаграмме ниже, я выяснил, что в kubernetes у нас есть два балансировщика нагрузки. Один из них балансирует нагрузку между узлами, а другой — между модулями.
Если я использую их оба, у меня будет два балансировщика нагрузки.
Представьте, что какой-то пользователь хочет подключиться к 10.32.0.5
тому, кому kubernetes отправляет свой запрос node1(10.0.0.1)
, а затем отправить запрос в pod (10.32.0.5)
в nod3(10.0.0.3)
, но это бесполезно, потому что лучший маршрут — отправить запрос nod3(10.0.0.3)
напрямую.
Почему NodePort недостаточен для балансировки нагрузки?
Почему порт узла не является LoadBalancer?(это балансировка нагрузки между модулями в разных узлах, но зачем нам нужен другой балансировщик нагрузки?)
примечание: Я знаю, что если я использую NodePort и узел выходит из строя, это создает проблему, но я могу сказать, что я могу использовать keepalived для этого. Вопрос в том
зачем нам балансировка нагрузки между узлами? keepalived привлекает все запросы к одному IP. Почему у нас два балансировщика нагрузки?
Ответ №1:
Наличие у вас двух балансировщиков нагрузки зависит от ваших настроек.
В вашем примере у вас есть 3 модуля nginx и 1 служба nginx для доступа к модулям. Сервис создает уровень абстракции, поэтому вам не нужно знать, сколько существует модулей и какие у них IP-адреса. Вам просто нужно поговорить со службой, и она будет балансировать нагрузку на один из модулей (docs).
Теперь от ваших настроек зависит, как вы получаете доступ к сервису:
- возможно, вы захотите опубликовать службу через NodePort. Затем вы можете напрямую получить доступ к сервису на узле.
- вы также можете опубликовать его через LoadBalancer. Это дает вам еще один уровень абстракции, и вызывающему абоненту нужно меньше знать о фактической настройке вашего кластера.
Подробности см. в документах.
Комментарии:
1. почему мы используем два из них?
2. почему мы не можем использовать NodePort в качестве балансировщика нагрузки? я где-то читал, что NodePort не является loadbalancer