×

Публикация приложения во внешнюю сеть

 
Развёртывание приложения в Kubernetes-кластере — это лишь часть задачи. Чтобы сделать его доступным извне, необходимо настроить механизм публикации. Один из способов — использование балансировщика нагрузки (Load Balancer), создаваемого через консоль Cloupard.
 
Балансировщик нагрузки принимает трафик, поступающий на внешний IP-адрес, выделенный для сервиса Kubernetes Flex, и равномерно распределяет входящие запросы между узлами, на которых работают поды приложения. Это упрощает управление трафиком и повышает отказоустойчивость.
 
В этой статье мы рассмотрим, как опубликовать приложение в кластере Kubernetes Flex от Cloupard во внешнюю сеть, используя встроенные механизмы балансировки нагрузки. Предполагается, что приложение уже развёрнуто в подах на двух рабочих узлах и принимает запросы на порт 443 каждого из рабочих узлов и умеет само обрабатывать и принимать HTTPS трафик.
 
Итак, кластер создан и мы видим его в списке кластеров ("Консоль Cloupard" - "Кластеры Kubernetes" - "Kubernetes Flex").
 
1. Нажимаем на раскрывающийся список параметров и видим сетевые параметры кластера. Здесь нам нужно имя виртуальной сети, которая подключена к кластеру. Запоминаем или копируем имя сети.
 
2. Переходим к настройке балансировщика нагрузки. По умолчанию на платформе для кластера создаётся балансировщик нагрузки для управления кластером из публичных сетей, который принимает запросы на внешний IP адрес сети кластера и порт 6443 и распределяет их между мастер узлами кластера.
 
Наша задача - создать ещё одно правило балансировки для приёма и распределения запросов между рабочими узлами, на которых опубликовано приложение. Для примера будем использовать сетевой порт 80.
 
Кластеры Kubernetes Flex создаются на платформе KVM, поэтому переходим в панели управления "Услуги" - "Elastic Cloud KVM" - "Сетевые балансировщики", и добавляем новый балансировщик.
 
3. Выбираем виртуальную сеть, которую запомнили в п.1 и настраиваем новое правило балансировки для приёма запросов с внешнего IP адреса порт 443 и распределения их на группу рабочих узлов порт 443. На фронтенде, мы используем тот же самый внешний IP адрес, который был выделен для кластера, поэтому новый балансировщик получится бесплатным.
 
 
4. Создаём новую группу хостов балансировки и добавляем в неё рабочие узлы кластера, на которых развёрнуты поды нашего приложения.
 
Обратите внимание: здесь мы используем режим балансировщика TCP, т.к. мы предполагаем, что приложение само принимает и  обрабатывает HTTPS трафик. Поэтому баланасировщик в режиме TCP будет транслировать весь трафик как есть, без обработки HTTP заголовков.
Если приложению необходима внешняя обработка HTTPS трафика на уровне L7, то можно использовать режим балансировки HTTP, при котором можно, в том числе, подключить SSL сертификаты.
 
 
5. Добавляем проверку доступности узлов в группе.
 
Т.к. мы используем TCP балансировку, то здесь достаточно проверять фактическую доступность TCP портов рабочих узлов, чтобы убедится, что с приложением всё в порядке.
 
 
 
Теперь мы видим, что у нас появился новый балансировщик (новое правило балансировки), который будет принимать входящие запросы поступающие на внешний IP-адрес, выделенный для кластер Kubernetes Flex и распределять их между рабочими узлами кластера, где далее он будет приниматься и обрабатываться уже сервисами Kubernetes. В случае выхода из строя одного из рабочих узлов или экземпляра приложения на нём, балансировщик это обнаружит с помощью проверки доступности и исключит этот узел из балансировки, продолжая доставлять трафик только на рабочий экземпляр.