Использование балансировщиков нагрузки
Для всех сервисов Kubernetes типа «балансировщик нагрузки» (spec.type: LoadBalancer) платформа VK Cloud может автоматически создавать соответствующий TCP-балансировщик нагрузки с заданным поведением.
Балансировщик может:
-
Иметь публичный IP-адрес, который доступен из интернета, или иметь приватный IP-адрес, который недоступен из интернета. IP-адрес можно назначить балансировщику вручную или автоматически.
-
Использовать разные алгоритмы балансировки соединений между экземплярами приложения:
-
Случайный выбор реплики (по умолчанию).
Балансировщик ведет себя так, потому что
kube-proxyв кластерах Cloud Containers работает в режимеiptables. Подробнее в официальной документации Kubernetes. -
Закрепление реплики за конкретным IP-адресом.
В этом случае балансировщик закрепит за IP-адресом, с которого пришел первый запрос, конкретную реплику приложения. Пока эта реплика остается доступной, все запросы с этого адреса будут пересылаться на нее.
-
-
Разрешать доступ только с определенных IP-адресов.
- Создайте кластер Kubernetes актуальной версии, если это еще не сделано.
- Убедитесь, что вы можете подключиться к кластеру с помощью
kubectl.
Запросы к этому приложению будут обслуживаться балансировщиком нагрузки. Чтобы продемонстрировать поведение балансировщика, приложение будет развернуто в виде StatefulSet из двух реплик. В этом случае все поды приложения будут пронумерованы, и можно будет легко определить, на какую реплику балансировщик направит запрос.
Чтобы создать такое приложение:
-
Создайте файл манифеста:
-
Создайте ресурс Kubernetes на основе манифеста:
kubectl apply -f coffee.yaml
Создайте несколько балансировщиков нагрузки с разным поведением, которые обслуживают развернутое приложение coffee.
На вкладках ниже описаны различные сценарии создания балансировщиков:
- Сценарий 1 — ручное назначение статического публичного адреса со случайным выбором реплики.
- Сценарий 2 — aвтоматическое назначение динамического публичного адреса с закреплением реплики.
- Сценарий 3 — автоматическое назначение динамического публичного адреса, случайный выбор реплики, ограничение доступа.
- Сценарий 4 — автоматическое назначение динамического приватного адреса со случайным выбором реплики.
-
Выберите публичный IP-адрес, который нужно назначить балансировщику или создайте новый. Это можно сделать в личном кабинете VK Cloud.
К IP-адресу не должно быть привязано внутреннего IP-адреса.
-
Создайте файл манифеста
lb-static-public-ip.yaml.В параметре
spec.loadBalancerIPукажите выбранный IP-адрес.apiVersion: v1kind: Servicemetadata:name: coffee-svc-public-static-ipspec:type: LoadBalancerloadBalancerIP: <выбранный IP-адрес>ports:- port: 80targetPort: 8080protocol: TCPname: httpselector:app: coffee -
Создайте ресурс Kubernetes на основе манифеста:
kubectl apply -f lb-static-public-ip.yaml -
Периодически проверяйте статус сервиса командой:
kubectl get svc coffee-svc-public-static-ipДождитесь, когда сервису будет назначен статический публичный IP-адрес, заданный вручную: в столбце таблицы
EXTERNAL-IPвместо<pending>появится IP-адрес.
Подробнее о сервисах и балансировщиках нагрузки в официальной документации Kubernetes.
На вкладках ниже описаны различные сценарии проверки работы балансировщиков:
- Сценарий 1 — балансировщик со статическим публичным адресом и случайным выбором реплики.
- Сценарий 2 — балансировщик с динамическим публичным адресом и закреплением реплики.
- Сценарий 3 — балансировщик с динамическим публичным адресом, случайным выбором реплики и ограничением доступа.
- Сценарий 4 — балансировщик с динамическим приватным адресом и случайным выбором реплики.
-
Получите IP-адрес, назначенный балансировщику:
kubectl get svc coffee-svc-public-static-ipНужный адрес содержится в столбце таблицы
EXTERNAL-IP. -
Выполните несколько раз запрос к приложению через балансировщик нагрузки:
curl http://<IP-АДРЕС_БАЛАНСИРОВЩИКА>Могут отвечать разные поды: и
coffee-0, иcoffee-1. Такое поведение означает, что балансировщик отправляет запросы на случайные реплики приложения.
Работающий кластер тарифицируется и потребляет вычислительные ресурсы. Если ресурсы Kubernetes, созданные для проверки работы балансировщиков нагрузки, вам больше не нужны, удалите их:
-
Удалите созданные сервисы и StatefulSet:
Linux/macOSWindowskubectl delete svc coffee-svc-public-static-ipkubectl delete svc coffee-svc-session-affinitykubectl delete svc coffee-svc-restrict-access-by-ipkubectl delete svc coffee-svc-private-ipkubectl delete statefulset coffee -
Удалите статический публичный IP-адрес, который был назначен сервису
coffee-svc-public-static-ip. -
Остановите созданный кластер, чтобы воспользоваться им позже, или удалите его навсегда.