Термин | Описание |
---|---|
VIP | Виртуальный IP-адрес (VIP) — это IP-адрес, назначаемый MetalLB для внутренней маршрутизации типа LoadBalancer, обеспечивающий единый точку доступа для внешнего трафика к сервисам внутри кластера. |
ARP | Протокол разрешения адресов (ARP) используется для сопоставления IP-адресов сетевого уровня с MAC-адресами канального уровня. |
GARP | Gratuitous ARP (GARP) — это специальный ARP-запрос, используемый для информирования других узлов в сети о привязке IP-адреса к MAC-адресу. В отличие от обычных ARP-запросов, GARP не ожидает ответов, а активно рассылает информацию по сети. |
ARP Responder | Компонент MetalLB, отвечающий на ARP-запросы, сопоставляя VIP с MAC-адресом узла. Когда узлу необходимо связаться с VIP, он отправляет ARP-запросы для получения MAC-адреса, соответствующего VIP. Каждый доступный узел имеет ARP Responder, который отвечает на эти запросы, сопоставляя VIP с MAC-адресом узла. |
Controller | Компонент MetalLB, который динамически выделяет VIP из пула внешних адресов для внутренней маршрутизации типа LoadBalancer. Controller отслеживает события создания и удаления внутренних маршрутов в кластере для выделения или освобождения VIP по мере необходимости. |
Speaker | Компонент MetalLB, который на основе политик или алгоритмов определяет, должны ли узлы размещать VIP и отправлять GARP. Он обеспечивает определённый уровень баланса между узлами, и при недоступности одного узла другие узлы могут взять на себя VIP и отправить GARP, обеспечивая тем самым высокую доступность. |
По умолчанию платформа использует ARP-режим MetalLB, а конкретный процесс реализации и принципы следующие:
Компонент Controller MetalLB выбирает IP-адрес из пула внешних адресов и выделяет его для внутренней маршрутизации типа LoadBalancer в качестве VIP.
MetalLB выбирает доступный узел для размещения VIP на основе алгоритма, который затем перенаправляет трафик.
Компонент Speaker на этом узле активно отправляет GARP, устанавливая связь между VIP и MAC-адресом на всех узлах.
Узлы в одной подсети, узнав о сопоставлении VIP с MAC-адресом доступного узла, будут напрямую взаимодействовать с этим узлом при обращении к VIP.
Узлы в разных подсетях сначала направляют трафик на шлюз своей подсети, который затем перенаправляет трафик на узел, размещающий VIP.
При сбое этого узла MetalLB выбирает другой доступный узел для размещения VIP, обеспечивая тем самым высокую доступность.
Попав на узел, Kube-Proxy перенаправляет трафик соответствующему Pod.
MetalLB хеширует все доступные узлы, соответствующие пулу внешних адресов, вместе с VIP и сортирует их по определённому алгоритму, выбирая первым доступным узлом для размещения VIP.
Создайте пул внешних адресов и добавьте доступные узлы. Все доступные узлы поддерживают резервные отношения, то есть только узел, размещающий VIP, может перенаправлять трафик, и он должен обрабатывать весь трафик для VIP из пула внешних адресов.
Формула: Количество пулов внешних адресов = ceil(n-vip / n-node), где ceil — округление вверх.
Примечание: При использовании виртуальных машин количество виртуальных машин = Количество пулов внешних адресов * n. Здесь n должно быть больше 2, при этом допускается отказ не более одного узла.
n-vip: количество VIP.
n-node: количество VIP, которое может обслуживать один узел.
Если в компании 10 VIP, и каждый доступный узел может обслуживать 5 VIP, при этом допускается отказ одного узла, как компании спланировать количество пулов внешних адресов и доступных узлов?
Анализ:
Требуется всего два пула внешних адресов и четыре доступных узла.
Каждый доступный узел может обслуживать максимум 5 VIP, значит один пул внешних адресов может вместить 5 VIP, следовательно, для 10 VIP требуется два пула внешних адресов.
При допущении отказа одного узла каждый пул должен включать один узел, размещающий VIP, и один резервный узел, что даёт по два доступных узла для каждого из двух пулов внешних адресов.