Inicio rápido: Implementación del controlador ALB de Application Gateway para contenedores

El controlador ALB se encarga de traducir la configuración de la API de puerta de enlace y de la API de entrada dentro de Kubernetes en reglas de equilibrio de carga dentro de Application Gateway para contenedores. En la siguiente guía se describen los pasos necesarios para aprovisionar un controlador ALB en un clúster de AKS nuevo o existente.

Requisitos previos

Debe completar las siguientes tareas antes de implementar Application Gateway para contenedores en Azure y de instalar el controlador ALB en el clúster:

  1. Prepare la suscripción de Azure y el cliente 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. Establezca un clúster de AKS para la carga de trabajo.

    Nota

    El clúster de AKS debe estar en una región en la que Application Gateway para contenedores esté disponible el clúster de AKS debe usar Azure CNI. El clúster de AKS debe tener habilitada la característica de identidad de carga de trabajo. Aprenda cómo habilitar la identidad de carga de trabajo en un clúster de AKS existente.

    Si usa un clúster existente, asegúrese de habilitar la compatibilidad con la identidad de carga de trabajo en el clúster de AKS. Las identidades de carga de trabajo se pueden habilitar a través de lo siguiente:

     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
    

    Si no tiene un clúster existente, use los siguientes comandos para crear un nuevo clúster de AKS con Azure CNI y la identidad de carga de trabajo habilitada.

    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. Instalación de Helm

    Helm es una herramienta de empaquetado de código abierto que se usa para instalar el controlador ALB.

    Nota

    Helm ya está disponible en Azure Cloud Shell. Si usa Azure Cloud Shell, no es necesario realizar ninguna instalación adicional de Helm.

    También puede usar los pasos siguientes para instalar Helm en un dispositivo local que ejecute Windows o Linux. Asegúrese de tener instalada la versión más reciente de Helm.

    Consulte las instrucciones para la instalación para obtener varias opciones de instalación. Del mismo modo, si la versión de Windows tiene WinGet del Administrador de paquetes de Windows instalado, puede ejecutar el siguiente comando:

    winget install helm.helm
    

Instalación del controlador ALB

  1. Cree una identidad administrada por el usuario para el controlador ALB y federe la identidad como identidad de carga de trabajo para usarla en el clúster de 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"
    

    El controlador ALB requiere una credencial federada con el nombre de azure-alb-identity. No se admite ningún otro nombre de credencial federada.

    Nota

    La asignación de la identidad administrada inmediatamente después de la creación puede producir un error que indica que el valor principalId no existe. Espere aproximadamente un minuto a que la identidad se replique en Microsoft Entra ID antes de delegar la identidad.

  2. Instalación del controlador ALB mediante Helm

    Para nuevas implementaciones

    Para instalar ALB Controller, use el comando helm install.

    Cuando se ejecute el comando helm install, se implementará el gráfico de Helm en el espacio de nombres predeterminado. Cuando se implemente alb-controller, se implementará en el espacio de nombres azure-alb-system. Ambos espacios de nombres se pueden invalidar de forma independiente según sea necesario. Para invalidar el espacio de nombres en el que se implemente el gráfico de Helm, es posible especificar el parámetro --namespace (o -n). Para invalidar el espacio de nombres azure-alb-system usado por alb-controller, se puede establecer la propiedad albController.namespace durante la instalación (--set albController.namespace). Si no se definen los parámetros --namespace o --set albController.namespace, se usará el espacio de nombres predeterminado para el gráfico de Helm y el espacio de nombres azure-alb-system se usará para los componentes del controlador ALB. Por último, si el espacio de nombres del recurso del gráfico de Helm aún no estuviera definido, asegúrese de que el parámetro --create-namespace también se especifique junto con los parámetros --namespace o -n.

    El controlador ALB se puede instalar mediante la ejecución de los siguientes comandos:

    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)
    

    Para implementaciones existentes

    ALB se puede actualizar mediante la ejecución de los siguientes comandos:

    Nota:

    Durante la actualización, asegúrese de especificar los parámetros --namespace o --set albController.namespace si los espacios de nombres se invalidaron en la instalación anterior. Para determinar los espacios de nombres anteriores usados, se puede ejecutar el comando helm list para el espacio de nombres de Helm y kubectl get pod -A -l app=alb-controller para el controlador 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)
    

Compruebe la instalación del controlador ALB

  1. Compruebe que los pods del controlador ALB están listos:

    kubectl get pods -n azure-alb-system
    

    Verá lo siguiente:

    NOMBRE LISTO STATUS REINICIO AGE
    alb-controller-bootstrap-6648c5d5c-hrmpc 1/1 En ejecución 0 4d6h
    alb-controller-6648c5d5c-sdd9t 1/1 En ejecución 0 4d6h
    alb-controller-6648c5d5c-au234 1/1 En ejecución 0 4d6h
  2. Compruebe que GatewayClass azure-application-lb está instalado en el clúster:

    kubectl get gatewayclass azure-alb-external -o yaml
    

    Debería ver que GatewayClass tiene una condición que lee Valid GatewayClass. Esto indica que se ha configurado una clase GatewayClass predeterminada y que los recursos de puerta de enlace que hacen referencia a esta clase GatewayClass se administran automáticamente mediante el controlador 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
    

Pasos siguientes

Ahora que ha instalado correctamente un controlador ALB en el clúster, puede aprovisionar los recursos de Application Gateway para contenedores en Azure.

El siguiente paso consiste en vincular el controlador ALB a Application Gateway para contenedores. La forma de crear este vínculo depende de la estrategia de implementación.

Hay dos estrategias de implementación para la administración de Application Gateway para contenedores:

  • Traiga su propia (BYO) implementación: en esta estrategia de implementación, la implementación y el ciclo de vida del recurso de Application Gateway para contenedores, el recurso de asociación y de front-end se asumen a través de Azure Portal, la CLI, PowerShell, Terraform, etc., y se hace referencia a ellos en la configuración en Kubernetes.
  • Administrado por el controlador ALB: en esta estrategia de implementación, el controlador ALB implementado en Kubernetes es responsable del ciclo de vida del recurso de Application Gateway para contenedores y sus subrecursos. El controlador ALB crea un recurso de Application Gateway para contenedores cuando se define un recurso personalizado ApplicationLoadBalancer en el clúster. El ciclo de vida del servicio se basa en el ciclo de vida del recurso personalizado.

Desinstalación de Application Gateway para contenedores y del controlador ALB

Si desea desinstalar el controlador ALB, complete los pasos siguientes.

  1. Elimine Application Gateway para contenedores; puede eliminar el grupo de recursos que contiene los recursos de Application Gateway para contenedores:
az group delete --resource-group $RESOURCE_GROUP
  1. Para desinstalar el controlador ALB y sus recursos del clúster, ejecute los siguientes comandos:
helm uninstall alb-controller
kubectl delete ns azure-alb-system
kubectl delete gatewayclass azure-alb-external

Nota

Si se usó otro espacio de nombres para la instalación de alb-controller, asegúrese de especificar el parámetro -n en el comando helm uninstall para definir el espacio de nombres adecuado que se va a usar. Por ejemplo: helm uninstall alb-controller -n unique-namespace