Краткое руководство: Развертывание контроллера ALB для шлюза приложений для контейнеров с помощью дополнения AKS

Контроллер ALB отвечает за преобразование конфигурации Gateway API и Ingress API в Kubernetes в правила балансировки нагрузки в Application Gateway для контейнеров. В следующем руководстве описаны шаги, необходимые для включения API управляемого шлюза AKS и шлюза приложений для надстроек контроллера ALB контейнеров в новом или существующем кластере Службы Azure Kubernetes (AKS).

Схема, показывающая, как трафик из Интернета попадает в шлюз приложений для контейнеров и перенаправляется в поды бэкенда в AKS; установлен как надстройка AKS.

Предпосылки

Перед включением надстройки контроллера балансировки нагрузки в кластере необходимо выполнить следующие задачи:

  1. Подготовьте подписку Azure и вашего клиента az-cli.

    # Sign in to your Azure subscription.
    SUBSCRIPTION_ID='<your subscription id>'
    az login
    az account set --subscription $SUBSCRIPTION_ID
    
    # Register required resource providers on Azure.
    az provider register --namespace Microsoft.ContainerService
    az provider register --namespace Microsoft.Network
    az provider register --namespace Microsoft.NetworkFunction
    az provider register --namespace Microsoft.ServiceNetworking
    
    # Install Azure CLI extensions.
    az extension add --name alb
    az extension add --name aks-preview 
    
  2. Регистрация дополнительной функции

    # Register required preview features
    az feature register --namespace "Microsoft.ContainerService" --name "ManagedGatewayAPIPreview"
    az feature register --namespace "Microsoft.ContainerService" --name "ApplicationLoadBalancerPreview"
    

Настройте кластер AKS с помощью надстройки AKS

Надстройка AKS может быть включена в новых или существующих кластерах.

Для успешного развертывания надстройки нужны следующие требования к кластеру AKS:

Замечание

Хотя включение надстройки будет регистрировать и развертывать контроллер ALB во всех регионах, подготовка шлюза приложений для контейнеров завершится ошибкой, если он не развернут в регионе, где доступен шлюз приложений для контейнеров.

Новый кластер

Используйте следующие команды для создания нового кластера AKS с Azure CNI, удостоверений рабочей нагрузки, надстройки API шлюза и надстройки Шлюза приложений для контейнеров.

AKS_NAME='<your cluster name>'
RESOURCE_GROUP='<your resource group name>'
LOCATION='northeurope'
VM_SIZE='<the size of the vm in AKS>' # The size needs to be available in your location

az group create --name $RESOURCE_GROUP --location $LOCATION
az aks create \
    --resource-group $RESOURCE_GROUP \
    --name $AKS_NAME \
    --location $LOCATION \
    --node-vm-size $VM_SIZE \
    --network-plugin azure \
    --enable-oidc-issuer \
    --enable-workload-identity \
    --enable-gateway-api \
    --enable-application-load-balancer \
    --generate-ssh-key

Замечание

Чтобы предотвратить конфликт с другими службами с помощью API шлюза, надстройка Application Gateawy для контейнеров требует использования надстройки API шлюза AKS.

Существующий кластер

Добавление необходимых компонентов в существующий кластер

Если используется существующий кластер, убедитесь, что вы включили поддержку Workload Identity в кластере AKS. Идентификаторы рабочей нагрузки можно включить с помощью следующих команд:

AKS_NAME='<your cluster name>'
RESOURCE_GROUP='<your resource group name>'
az aks update -g $RESOURCE_GROUP -n $AKS_NAME --enable-oidc-issuer --enable-workload-identity --no-wait

Установите дополнение контроллера ALB

С помощью существующего кластера можно включить API шлюза и надстройки Шлюза приложений для контейнеров с помощью следующих команд:

AKS_NAME='<your cluster name>'
RESOURCE_GROUP='<your resource group name>'

# Update the AKS cluster
az aks update --name ${AKS_NAME} --resource-group ${RESOURCE_GROUP} --enable-gateway-api --enable-application-load-balancer

Проверка установки контроллера балансировки нагрузки

Проверка модулей pod контроллера ALB

Убедитесь, что pod'ы контроллера ALB работают в kube-system пространстве имен.

kubectl get pods -n kube-system | grep alb-controller

Вы должны увидеть два пода alb-controller в состоянии Running:

ИМЯ ГОТОВО STATUS ПЕРЕЗАПУСКИ ВОЗРАСТ
alb-controller-6648c5d5c-sdd9t 1/1 Бег 0 4 дня 6 часов
alb-controller-6648c5d5c-au234 1/1 Бег 0 4 дня 6 часов
Проверка GatewayClass

Убедитесь, что ШлюзКласс azure-alb-external установлен в кластере:

kubectl get gatewayclass azure-alb-external -o yaml

Вы увидите, что класс Gateway имеет условие, которое гласит Допустимый класс Gateway. Это условие указывает, что GatewayClass по умолчанию настроен, и что все ресурсы шлюза, ссылающиеся на этот GatewayClass, управляются контроллером ALB.

apiVersion: gateway.networking.k8s.io/v1beta1
kind: GatewayClass
metadata:
  creationTimestamp: "2023-07-31T13:07:00Z"
  generation: 1
  name: azure-alb-external
  resourceVersion: "64270"
  uid: 6c1443af-63e6-4b79-952f-6c3af1f1c41e
spec:
  controllerName: alb.networking.azure.io/alb-controller
status:
  conditions:
    - lastTransitionTime: "2023-07-31T13:07:23Z"
    message: Valid GatewayClass
    observedGeneration: 1
    reason: Accepted
    status: "True"
    type: Accepted
Проверка дополнительных ресурсов в портале Azure

Перейдите к группе ресурсов MC_ для вашего кластера AKS. Вы увидите следующие ресурсы, созданные надстройкой:

Управляемая идентичность

Идентификатор applicationloadbalancer-<cluster-name> создается со следующими назначениями ролей:

Role Scope
Участник сети Группа ресурсов MC
AppGw для Диспетчера конфигураций контейнеров Группа ресурсов MC
Читатель Группа ресурсов MC

Удостоверение applicationloadbalancer-<cluster-name> имеет федеративные учетные данные, настроенные со следующими характеристиками:

  • Имя: aksfic
  • Пространство имен: kube-system
  • Учетная запись службы: alb-controller-sa

Предупреждение

При подготовке интеграции с надстройкой не поддерживается изменение удостоверения или пространства имен. Если вы хотите настроить развертывание, рассмотрите развертывание с помощью Helm.

Подсеть

Если надстройка включена в кластере AKS с помощью параметра виртуальной сети, управляемой AKS, автоматически создается подсеть с именем aks-appgateway с поддержкой делегирования для Microsoft.ServiceNetworking/TrafficController.

Дальнейшие шаги

После успешной установки ALB-контроллера в кластере можно подготовить ресурсы шлюза приложений для контейнеров в Azure.

Следующим шагом является связывание контроллера ALB с Шлюзом приложений для контейнеров. Создание этой ссылки зависит от стратегии развертывания.

Существует две стратегии развертывания для управления Шлюзом приложений для контейнеров:

  • Собственное развертывание (BYO): в этой стратегии развертывания развертывание и жизненный цикл ресурса Шлюза приложений для контейнеров, ресурса ассоциации и ресурса внешнего интерфейса осуществляются через портал Azure, CLI, PowerShell, Terraform и т. д. и указываются в конфигурации в Kubernetes.
  • Управляется контроллером ALB: В этой стратегии развертывания контроллер ALB, развернутый в Kubernetes, отвечает за жизненный цикл ресурса Шлюза приложений для контейнеров и его вложенных ресурсов. Контроллер ALB создает шлюз приложений для контейнеров, когда в кластере определяется настраиваемый ресурс ApplicationLoadBalancer. Жизненный цикл службы основан на жизненном цикле пользовательского ресурса.

Примеры сценариев для пробы

Удаление шлюза приложений для контейнеров и контроллера ALB

Если вы хотите удалить надстройку контроллера балансировки нагрузки, выполните следующие действия.

Отключите надстройку контроллера ALB

Отключите дополнение контроллера ALB на кластере:

AKS_NAME='<your cluster name>'
RESOURCE_GROUP='<your resource group name>'

# Update the AKS cluster
az aks update --name ${AKS_NAME} --resource-group ${RESOURCE_GROUP} --disable-gateway-api --disable-application-load-balancer

Удалите группу ресурсов

Чтобы полностью очистить все ресурсы, включая шлюз приложений для контейнеров, удалите группу ресурсов:

az group delete --resource-group $RESOURCE_GROUP