Краткое руководство. Развертывание Шлюза приложений для контроллера ALB контейнеров

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

Необходимые компоненты

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

  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
    
  2. Задайте кластер AKS для рабочей нагрузки.

    Примечание.

    Кластер AKS должен находиться в регионе, где Шлюз приложений для контейнеров доступен кластер AKS, должен использовать Azure CNI. Кластер AKS должен включать функцию удостоверения рабочей нагрузки. Узнайте, как включить удостоверение рабочей нагрузки в существующем кластере AKS.

    Если используется существующий кластер, убедитесь, что вы включите поддержку удостоверений рабочей нагрузки в кластере 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
    

    Если у вас нет существующего кластера, используйте следующие команды, чтобы создать новый кластер AKS с включенной идентификацией azure CNI и рабочей нагрузки.

    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 \
        --generate-ssh-key
    
  3. Установка Helm

    Helm — это средство упаковки с открытым исходным кодом, которое используется для установки контроллера балансировки нагрузки.

    Примечание.

    Helm уже доступен в Azure Cloud Shell. Если вы используете Azure Cloud Shell, дополнительная установка Helm не требуется.

    Вы также можете выполнить следующие действия, чтобы установить Helm на локальном устройстве под управлением Windows или Linux. Убедитесь, что установлена последняя версия helm.

    Инструкции по установке для различных вариантов установки. Аналогичным образом, если версия Windows установлена Диспетчер пакетов Windows winget, можно выполнить следующую команду:

    winget install helm.helm
    

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

  1. Создайте управляемое удостоверение пользователя для контроллера ALB и федеративное удостоверение в качестве удостоверения рабочей нагрузки для использования в кластере AKS.

    RESOURCE_GROUP='<your resource group name>'
    AKS_NAME='<your aks cluster name>'
    IDENTITY_RESOURCE_NAME='azure-alb-identity'
    
    mcResourceGroup=$(az aks show --resource-group $RESOURCE_GROUP --name $AKS_NAME --query "nodeResourceGroup" -o tsv)
    mcResourceGroupId=$(az group show --name $mcResourceGroup --query id -otsv)
    
    echo "Creating identity $IDENTITY_RESOURCE_NAME in resource group $RESOURCE_GROUP"
    az identity create --resource-group $RESOURCE_GROUP --name $IDENTITY_RESOURCE_NAME
    principalId="$(az identity show -g $RESOURCE_GROUP -n $IDENTITY_RESOURCE_NAME --query principalId -otsv)"
    
    echo "Waiting 60 seconds to allow for replication of the identity..."
    sleep 60
    
    echo "Apply Reader role to the AKS managed cluster resource group for the newly provisioned identity"
    az role assignment create --assignee-object-id $principalId --assignee-principal-type ServicePrincipal --scope $mcResourceGroupId --role "acdd72a7-3385-48ef-bd42-f606fba81ae7" # Reader role
    
    echo "Set up federation with AKS OIDC issuer"
    AKS_OIDC_ISSUER="$(az aks show -n "$AKS_NAME" -g "$RESOURCE_GROUP" --query "oidcIssuerProfile.issuerUrl" -o tsv)"
    az identity federated-credential create --name "azure-alb-identity" \
        --identity-name "$IDENTITY_RESOURCE_NAME" \
        --resource-group $RESOURCE_GROUP \
        --issuer "$AKS_OIDC_ISSUER" \
        --subject "system:serviceaccount:azure-alb-system:alb-controller-sa"
    

    Контроллер ALB требует федеративных учетных данных с именем azure-alb-identity. Любое другое федеративное имя учетных данных не поддерживается.

    Примечание.

    Назначение управляемого удостоверения сразу после создания может привести к ошибке, что субъект-идентификатор не существует. Разрешите около минуты времени, чтобы удостоверение реплика te в идентификаторе Microsoft Entra ID до делегирования удостоверения.

  2. Установка контроллера ALB с помощью Helm

    Для новых развертываний

    Чтобы установить контроллер ALB, используйте helm install команду.

    helm install При выполнении команды она развернет диаграмму helm в пространстве имен по умолчанию. При развертывании контроллера alb-controller он будет развернут в пространстве имен azure-alb-system . Оба этих пространства имен могут быть переопределены независимо по мере необходимости. Чтобы переопределить пространство имен, в который развертывается диаграмма helm, можно указать параметр --namespace (или -n). Чтобы переопределить пространство имен azure-alb-system , используемое контроллером alb-controller, можно задать свойство albController.namespace во время установки (--set albController.namespace). Если ни какие --namespace параметры --set albController.namespace не определены, пространство имен по умолчанию будет использоваться для диаграммы helm, а пространство имен azure-alb-system будет использоваться для компонентов контроллера ALB. Наконец, если пространство имен для ресурса диаграммы helm еще не определено, убедитесь --create-namespace , что параметр также указан вместе с --namespace параметрами или -n параметрами.

    Контроллер ALB можно установить, выполнив следующие команды:

    az aks get-credentials --resource-group $RESOURCE_GROUP --name $AKS_NAME
    helm install alb-controller oci://mcr.microsoft.com/application-lb/charts/alb-controller \
         --namespace <helm-resource-namespace> \
         --version 1.0.0 \
         --set albController.namespace=<alb-controller-namespace> \
         --set albController.podIdentity.clientID=$(az identity show -g $RESOURCE_GROUP -n azure-alb-identity --query clientId -o tsv)
    

    Для существующих развертываний

    ALB можно обновить, выполнив следующие команды:

    Примечание.

    Во время обновления укажите --namespace или --set albController.namespace параметры, если пространства имен были переопределены в ранее установленной установке. Чтобы определить предыдущие пространства имен, можно выполнить helm list команду для пространства имен helm и kubectl get pod -A -l app=alb-controller контроллера ALB.

    az aks get-credentials --resource-group $RESOURCE_GROUP --name $AKS_NAME
    helm upgrade alb-controller oci://mcr.microsoft.com/application-lb/charts/alb-controller \
        --namespace <helm-resource-namespace> \
        --version 1.0.0 \
        --set albController.namespace=<alb-controller-namespace> \
        --set albController.podIdentity.clientID=$(az identity show -g $RESOURCE_GROUP -n azure-alb-identity --query clientId -o tsv)
    

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

  1. Убедитесь, что модули pod контроллера ALB готовы:

    kubectl get pods -n azure-alb-system
    

    Вы увидите следующее:

    ИМЯ ГОТОВО СОСТОЯНИЕ ПЕРЕЗАПУСКИ ВОЗРАСТ
    alb-controller-bootstrap-6648c5d5c-hrmpc 1/1 Выполняется 0 4d6h
    alb-controller-6648c5d5c-sdd9t 1/1 Выполняется 0 4d6h
    alb-controller-6648c5d5c-au234 1/1 Выполняется 0 4d6h
  2. Убедитесь, что ШлюзКласс azure-application-lb установлен в кластере:

    kubectl get gatewayclass azure-alb-external -o yaml
    

    Вы увидите, что ШлюзКласс имеет условие, которое считывает допустимый класс GatewayClass . Это означает, что шлюз шлюза по умолчанию настроен и что все ресурсы шлюза, ссылающиеся на этот шлюзClass, управляются контроллером 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
    

Next Steps

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

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

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

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

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

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

  1. Удалите Шлюз приложений для контейнеров, вы можете удалить группу ресурсов, содержащую Шлюз приложений для ресурсов контейнеров:
az group delete --resource-group $RESOURCE_GROUP
  1. Удалите контроллер ALB и его ресурсы из кластера, выполнив следующие команды:
helm uninstall alb-controller
kubectl delete ns azure-alb-system
kubectl delete gatewayclass azure-alb-external

Примечание.

Если для установки контроллера балансировки нагрузки использовалось другое пространство имен, убедитесь, что в команде удаления helm укажите параметр -n, чтобы определить правильное пространство имен для использования. Например: helm uninstall alb-controller -n unique-namespace