Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Служба Azure Kubernetes (AKS) обычно подготавливает одну стандартную подсистему балансировки нагрузки (SLB) для всех LoadBalancer служб в кластере. Так как каждый сетевой адаптер узла ограничен 300 правилами балансировки нагрузки входящего трафика и 8 служб приватного канала, крупные кластеры или рабочие нагрузки с большим количеством портов могут быстро исчерпать эти ограничения.
Многократная предварительная версия SLB устраняет узкие места, позволяя создавать несколько SLB в одном кластере и распределять узлы и Сервисы между ними. Вы определяете конфигурации балансировщика нагрузки, каждая из которых привязана к основному пулу агентов и к необязательным пространствам имен, меткам или селекторам узлов, при этом AKS автоматически размещает узлы и службы на соответствующем балансировщике нагрузки. Поведение исходящего SNAT не изменяется, если outboundTypeloadBalancer. Исходящий трафик по-прежнему проходит через первый SLB.
Используйте эту функцию для:
- Масштабируйте свыше 300 входящих правил без добавления кластеров.
- Изоляция трафика клиента или рабочей нагрузки путем привязки выделенной подсистемы балансировки нагрузки к собственному пулу агентов.
- Распределяйте службы с приватным подключением между несколькими системами балансировки нагрузки (SLB) при приближении к ограничению на балансировку нагрузки.
Предпосылки
-
aks-previewextension 18.0.0b1 или более поздней версии. - Зарегистрирован флаг
Microsoft.ContainerService/MultipleStandardLoadBalancersPreviewкомпонента подписки. - Kubernetes версии 1.28 или более поздней.
- Кластер создан с
--load-balancer-backend-pool-type nodeIP, или обновлён и существует кластер сaz aks update.
Установите расширение Azure CLI aks-preview
Это важно
Предварительные версии функций AKS доступны на условиях самообслуживания и добровольного выбора. Предварительные версии предоставляются "как есть" и "при наличии". На них не распространяются соглашения об уровне обслуживания и ограниченная гарантия. Предварительные версии AKS сопровождаются частичной поддержкой клиентов на основе принципа лучших усилий. Как таковые, эти функции не предназначены для использования в производстве. Для получения дополнительной информации ознакомьтесь со следующими статьями поддержки:
Установите расширение aks-preview с помощью
az extension addкоманды.az extension add --name aks-previewОбновите до последней версии расширения, выпущенной с использованием команды
az extension update.az extension update --name aks-preview
Регистрация флага компонента MultipleStandardLoadBalancersPreview
Зарегистрируйте флаг функции
MultipleStandardLoadBalancersPreviewс помощью командыaz feature register.az feature register --namespace "Microsoft.ContainerService" --name "MultipleStandardLoadBalancersPreview"Через несколько минут отобразится состояние Registered (Зарегистрировано).
Проверьте состояние регистрации с помощью
az feature showкоманды:az feature show --namespace "Microsoft.ContainerService" --name "MultipleStandardLoadBalancersPreview"Когда состояние отражает зарегистрировано, обновите регистрацию поставщика ресурсов Microsoft.ContainerService с помощью
az provider registerкоманды.az provider register --namespace Microsoft.ContainerService
Как AKS выбирает подсистему балансировки нагрузки (размещение узлов и служб)
AKS использует несколько входных данных для определения места узлов и предоставления служб LoadBalancer. Эти входные данные определяются в каждой конфигурации подсистемы балансировки нагрузки и влияют на выбор SLB для каждого ресурса.
| Тип входных данных | Применимо к | Описание |
|---|---|---|
Пул первичных агентов--primary-agent-pool-name |
Узлы | Обязательное. Все узлы в этом пуле всегда добавляются в серверный пул SLB. Гарантирует, что каждый SLB имеет по крайней мере один работоспособный узел. |
Селектор узлов--node-selector |
Узлы | Необязательно. Добавляет любой узел с соответствующими метками в SLB в дополнение к основному пулу. |
Селектор пространства имен службы--service-namespace-selector |
Услуги | Необязательно. Для этого SLB рассматриваются только службы в пространствах имен с соответствующими метками. |
Селектор меток службы--service-label-selector |
Услуги | Необязательно. Только службы с соответствующими метками имеют право использовать этот SLB. |
Заметка службыservice.beta.kubernetes.io/azure-load-balancer-configurations |
Услуги | Необязательно. Ограничивает размещение одной или нескольких явно именованных конфигураций SLB. Без него любая соответствующая конфигурация может быть использована. |
Замечание
Селекторы определяют допустимость. Аннотация (если используется) ограничивает контроллер определенным подмножеством SLB.
Как AKS использует эти входные данные
Плоскость управления AKS постоянно согласовывает узлы и состояние службы с помощью приведенных выше правил:
Размещение узла
При добавлении или обновлении узла AKS проверяет, какие подходящие стандартные балансировщики нагрузки (SLB) соответствуют на основе первичного пула и селектора узлов.
- Если совпадает несколько SLB, контроллер выбирает тот с меньшим количеством текущих узлов.
- Узел добавляется в серверный пул SLB.
Размещение служб
При создании или обновлении службы LoadBalancer:
- AKS находит SLB, пространство имен и селекторы меток которых соответствуют службе.
- Если аннотация службы присутствует, рассматриваются только те именованные SLBs.
- SLBs, имеющие allowServicePlacement=false или превышающие ограничения Azure (300 правил или 8 служб Private Link) исключаются.
- Среди допустимых опций выбирается SLB с меньшим количеством правил.
Поведение параметра externalTrafficPolicy (ETP)
AKS обрабатывает службы по-разному в зависимости от значения externalTrafficPolicy.
| Режим | Как работает выбор подсистемы балансировки нагрузки | Как формируется членство в серверном пуле | Примечания. |
|---|---|---|---|
| Кластер (по умолчанию) | Контроллер следует стандартным правилам размещения, описанным выше. Одно правило балансировки нагрузки предназначено для общего серверного пула Kubernetes на выбранном SLB. | Все узлы в пуле SLB kubernetes являются здоровыми целевыми объектами. Узлы без сопоставления модулей Pod автоматически удаляются пробами работоспособности. |
То же поведение, что и сегодня в кластерах с одной подсистемой балансировки нагрузки. |
| Локальная среда | Контроллер по-прежнему использует алгоритм на основе селектора для выбора SLB, но создает выделенный внутренний пул для каждой службы вместо использования общего пула. | Членство синхронизируется с объектами EndpointSlice службы, поэтому добавляются только узлы, которые действительно участвуют в размещении готовых подов. Проверки работоспособности продолжают использовать healthCheckNodePort, чтобы отключать неработоспособные узлы. |
Гарантирует сохранение IP-адресов клиента и избегает маршрутизации через узлы, которые не имеют модулей Pod, даже если узлы сегментируются по нескольким SLB. |
Почему выделенный пул для ETP Local?
В режиме множественных SLB узлы, размещающие Pods для данной службы, могут находиться на разных SLB по сравнению с виртуальным IP-адресом, ориентированным на клиента. Общий серверный пул часто содержит ноль подходящих узлов, что приводит к сбоям в работе трафика. Выделяя пул служб и синхронизируя его изEndpointSlice, AKS гарантирует, что подсистема балансировки нагрузки службы всегда указывает на правильные узлы.
Влияние на квоты
- Каждая локальная служба ETP добавляет один пул серверов и одно правило балансировки нагрузки в свой SLB.
- Эти правила засчитываются в ограничение на 300 правил, поэтому отслеживайте их расходование при наличии большого количества локальных служб ETP.
Нет изменений в исходящем трафике
Исходящий SNAT по-прежнему выполняется через первый SLB aksOutboundBackendPooloutboundTypeloadBalancer, независимо от параметров ETP.
Необязательно. Перебалансирование
Вы можете повторно сбалансировать распределение узлов вручную позже с помощью az aks loadbalancer rebalance.
Эта конструкция позволяет определять гибкую маршрутизацию на основе меток как для инфраструктуры, так и для рабочих нагрузок, а AKS автоматически обрабатывает размещение, чтобы поддерживать баланс и избежать проблем с квотами.
Добавление первой конфигурации подсистемы балансировки нагрузки
Добавьте конфигурацию с именем kubernetes и привязать ее к основному пулу агентов , который всегда имеет по крайней мере один узел. Удаление всех конфигураций переключает кластер обратно в режим single‑SLB.
Это важно
Чтобы включить режим с несколькими подсистемами балансировки нагрузки , необходимо добавить конфигурацию kubernetes подсистемы балансировки нагрузки и подключить ее к основному пулу агентов, который всегда имеет по крайней мере один готовый узел.
Наличие этой конфигурации переключает поддержку мульти‑SLB; в выборе службы она не имеет особого приоритета и обрабатывается как любая другая конфигурация балансировщика нагрузки.
При удалении каждой конфигурации подсистемы балансировки нагрузки кластер автоматически возвращается в режим одноранговой балансировки нагрузки, что может кратко нарушить маршрутизацию служб или потоки SNAT.
Задайте переменные среды для использования в этом руководстве. Вы можете заменить все значения заполнителей собственными, за исключением
DEFAULT_LB_NAMEтого, что должно оставаться какkubernetes.RESOURCE_GROUP="rg-aks-multislb" CLUSTER_NAME="aks-multi-slb" LOCATION="westus" DEFAULT_LB_NAME="kubernetes" PRIMARY_POOL="nodepool1"Создайте группу
az group createресурсов с помощью команды.az group create --name $RESOURCE_GROUP --location $LOCATIONСоздайте кластер AKS с помощью
az aks createкоманды.\az aks create --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME \ --load-balancer-backend-pool-type nodeIP \ --node-count 3Добавьте подсистему балансировки нагрузки по умолчанию с помощью
az aks loadbalancer addкоманды.az aks loadbalancer add --resource-group $RESOURCE_GROUP --cluster-name $CLUSTER_NAME \ --name $DEFAULT_LB_NAME \ --primary-agent-pool-name $PRIMARY_POOL \ --allow-service-placement true
Добавление дополнительных подсистем балансировки нагрузки
Создайте конфигурации для конкретного клиента, указав другой первичный пул, а также необязательные пространства имен, метки или селекторы узлов.
Команда 1 будет запускать собственные рабочие нагрузки в отдельном пуле нод.
tenant=team1Назначьте метку, чтобы рабочие нагрузки могли быть запланированы с помощью селекторов:TEAM1_POOL="team1pool" TEAM1_LB_NAME="team1-lb"Создайте второй пул узлов для команды 1 с помощью
az aks nodepool addкоманды.az aks nodepool add --resource-group $RESOURCE_GROUP --cluster-name $CLUSTER_NAME \ --name $TEAM1_POOL \ --labels tenant=team1 \ --node-count 2Создайте подсистему балансировки нагрузки для команды 1 с помощью
az aks loadbalancer addкоманды.az aks loadbalancer add --resource-group $RESOURCE_GROUP --cluster-name $CLUSTER_NAME \ --name $TEAM1_LB_NAME \ --primary-agent-pool-name $TEAM1_POOL \ --service-namespace-selector "tenant=team1" \ --node-selector "tenant=team1"Обозначьте целевое пространство имен (например,
team1-apps), чтобы сопоставить его с селектором с помощью командыaz aks command invoke.az aks command invoke \ --resource-group $RESOURCE_GROUP \ --name $CLUSTER_NAME \ --command " kubectl create namespace team1-apps --dry-run=client -o yaml | kubectl apply -f - kubectl label namespace team1-apps tenant=team1 --overwrite "Теперь вы можете перечислить подсистемы балансировки нагрузки в кластере, чтобы просмотреть несколько конфигураций с помощью
az aks loadbalancer listкоманды.az aks loadbalancer list --resource-group $RESOURCE_GROUP --cluster-name $CLUSTER_NAME --output tableПример выходных данных:
AllowServicePlacement ETag Name PrimaryAgentPoolName ProvisioningState ResourceGroup ----------------------- ------- ---------- ---------------------- ------------------- --------------- True <ETAG> kubernetes nodepool1 Succeeded rg-aks-multislb True <ETAG> team1-lb team1pool Succeeded rg-aks-multislb
Развертывание службы в определенной подсистеме балансировки нагрузки
Добавьте заметку service.beta.kubernetes.io/azure-load-balancer-configurations с разделенным запятыми списком имен конфигурации. Если аннотация не указана, контроллер выбирается автоматически.
az aks command invoke \
--resource-group $RESOURCE_GROUP \
--name $CLUSTER_NAME \
--command "
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Service
metadata:
name: lb-svc-1
namespace: team1-apps
labels:
app: nginx-test
annotations:
service.beta.kubernetes.io/azure-load-balancer-configurations: \"team1-lb\"
# service.beta.kubernetes.io/azure-load-balancer-internal: "true" # If you want to create an internal load balancer.
spec:
selector:
app: nginx-test
ports:
- name: port1
port: 80
targetPort: 80
protocol: TCP
type: LoadBalancer
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-test
namespace: team1-apps
labels:
app: nginx
spec:
replicas: 1
selector:
matchLabels:
app: nginx-test
template:
metadata:
labels:
app: nginx-test
spec:
containers:
- image: nginx
imagePullPolicy: Always
name: nginx
ports:
- containerPort: 80
protocol: TCP
resources:
limits:
cpu: \"150m\"
memory: \"300Mi\"
EOF
"
Перебалансировать узлы (необязательно)
Выполните операцию перебалансирования после масштабирования, если количество правил становится несбалансировано с помощью az aks loadbalancer rebalance команды. Эта команда нарушает активные потоки, поэтому запланируйте его во время периода обслуживания.
az aks loadbalancer rebalance --resource-group $RESOURCE_GROUP --cluster-name $CLUSTER_NAME
Мониторинг и устранение неполадок
- Проверьте события контроллера (
kubectl get events …), чтобы убедиться, что службы согласованы. - Если внешнее подключение заблокировано, откройте оболочку узла и выполните curl для VIP службы, чтобы подтвердить маршрутизацию через kube-proxy.
Ограничения и известные проблемы
| Ограничение | Сведения |
|---|---|
| Исходящий SNAT | Всегда использует первую подсистему балансировки нагрузки; Исходящие потоки не сегментированы. |
| Тип пула бэкенда | Создание или обновление существующего кластера для использования nodeIP пулов серверов. |
| Автоматическое масштабирование до нуля | Основной пул агентов не может масштабироваться до 0 узлов. |
Рост правил ETP local |
Каждая служба ETP local использует собственное правило и внутренний пул, поэтому количество правил может увеличиваться быстрее, чем в cluster режиме. |
| Перебалансировка сбоев | Удаление узла из внутреннего пула удаляет подключения в тестовом режиме. Планирование периодов обслуживания. |
| Время перезагрузки конфигурации | После выполнения az aks loadbalancer изменения могут не вступить в силу сразу. Операция AKS завершается быстро, но на применение обновлений диспетчером облачных контроллеров может потребоваться больше времени. Подождите, пока событие EnsuredLoadBalancer подтвердит, что изменения активны. |
Очистите ресурсы
Удалите группу ресурсов после завершения удаления кластера и подсистем балансировки нагрузки с помощью az group delete команды.
az group delete --name $RESOURCE_GROUP --yes --no-wait
Дальнейшие шаги
Функция нескольких SLB помогает масштабировать и изолировать рабочие нагрузки на сетевом уровне, сохраняя простоту благодаря конфигурации, управляемой Azure. Дополнительные сведения см. в следующих ресурсах: