Démarrage rapide : Déployer l’application Gateway pour le contrôleur ALB de conteneurs

Le contrôleur ALB est responsable de la traduction de la configuration de l’API de passerelle et de l’API d’entrée au sein de Kubernetes vers les règles d’équilibrage de charge dans Application Gateway pour les conteneurs. Le guide suivant décrit les étapes nécessaires pour approvisionner un contrôleur ALB dans un cluster AKS nouveau ou existant.

Prérequis

Vous devez effectuer les tâches suivantes avant de déployer Application Gateway pour les conteneurs sur Azure et d’installer le contrôleur ALB sur votre cluster :

  1. Préparez votre abonnement Azure et votre az-cli client.

    # 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. Définissez un cluster AKS pour votre charge de travail.

    Notes

    Le cluster AKS doit se trouver dans une région où Application Gateway pour les conteneurs est disponible. Le cluster AKS doit utiliser Azure CNI. La fonctionnalité d’identité de charge de travail doit être activée pour le cluster AKS. Découvrez comment activer l’identité de charge de travail sur un cluster AKS existant.

    Si vous utilisez un cluster existant, assurez-vous d’activer le support de l’identité de charge de travail sur votre cluster AKS. Les identités de charge de travail peuvent être activées via les éléments suivants :

     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 vous n’avez pas de cluster existant, utilisez les commandes suivantes pour créer un cluster AKS avec Azure CNI et l’identité de charge de travail activée.

    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. Installer Helm

    Helm est un outil d’empaquetage open source utilisé pour installer le contrôleur ALB.

    Notes

    Helm est déjà disponible dans Azure Cloud Shell. Si vous utilisez Azure Cloud Shell, aucune installation Helm supplémentaire n’est nécessaire.

    Vous pouvez également utiliser les étapes suivantes pour installer Helm sur un appareil local exécutant Windows ou Linux. Vérifiez que la dernière version de Helm est installée.

    Consultez les instructions d’installationpour les différentes options d’installation. De même, si le Gestionnaire de package Windows winget est installé dans votre version de Windows, vous pouvez exécuter la commande suivante :

    winget install helm.helm
    

Installer le contrôleur ALB

  1. Créez une identité gérée par l’utilisateur pour le contrôleur ALB, puis fédérez l’identité en tant qu’identité Charge de travail à utiliser dans le cluster 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"
    

    Le contrôleur ALB nécessite des informations d’identification fédérées portant le nom d’azure-alb-identity. Tout autre nom d’informations d’identification fédérées n’est pas pris en charge.

    Notes

    L’attribution de l’identité managée immédiatement après sa création peut entraîner une erreur indiquant que le principalId n’existe pas. Laissez environ une minute de temps s’écouler pour que l’identité soit répliquée dans Microsoft Entra ID avant de déléguer l’identité.

  2. Installer le contrôleur ALB avec Helm

    Pour les nouveaux déploiements

    Pour installer le contrôleur ALB, utilisez la commande helm install.

    Lorsque la helm install commande est exécutée, elle déploie le graphique helm dans l’espace de noms par défaut. Lorsque alb-controller est déployé, il est déployé dans l’espace de noms azure-alb-system. Ces deux espaces de noms peuvent être remplacés indépendamment comme vous le souhaitez. Pour remplacer l’espace de noms sur lequel le graphique Helm est déployé, vous pouvez spécifier le paramètre --namespace (ou -n). Pour remplacer l’espace de noms azure-alb-system utilisé par alb-controller, vous pouvez définir la propriété albController.namespace pendant l’installation (--set albController.namespace). Si aucun des --namespace paramètres ou --set albController.namespace n’est défini, l’espace de noms par défaut est utilisé pour le graphique helm et l’espace de noms azure-alb-system est utilisé pour les composants du contrôleur ALB. Enfin, si l’espace de noms de la ressource helm chart n’est pas encore défini, vérifiez que le --create-namespace paramètre est également spécifié avec les --namespace paramètres ou -n .

    Vous pouvez installer le contrôleur ALB en exécutant les commandes suivantes :

    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)
    

    Pour les déploiements existants

    ALB peut être mis à jour en exécutant les commandes suivantes :

    Remarque

    Pendant la mise à niveau, veillez à spécifier les --namespace paramètres ou --set albController.namespace si les espaces de noms ont été remplacés dans l’installation précédemment installée. Pour déterminer les espaces de noms précédents utilisés, vous pouvez exécuter la helm list commande pour l’espace de noms helm et kubectl get pod -A -l app=alb-controller pour le contrôleur 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)
    

Vérifier l’installation du contrôleur ALB

  1. Vérifiez que les pods du contrôleur ALB sont prêts :

    kubectl get pods -n azure-alb-system
    

    Les éléments suivants doivent s’afficher :

    NOM PRÊT STATUT REDÉMARRAGES AGE
    alb-controller-bootstrap-6648c5d5c-hrmpc 1/1 Exécution en cours 0 4d6h
    alb-controller-6648c5d5c-sdd9t 1/1 Exécution en cours 0 4d6h
    alb-controller-6648c5d5c-au234 1/1 Exécution en cours 0 4d6h
  2. Vérifiez que GatewayClass azure-application-lb est installé sur votre cluster :

    kubectl get gatewayclass azure-alb-external -o yaml
    

    Vous devez voir que GatewayClass a une condition qui lit Valid GatewayClass. Cela indique que un GatewayClass par défaut a été configurée et que toutes les ressources de passerelle qui font référence à ce GatewayClass sont gérées automatiquement par le contrôleur 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
    

Étapes suivantes

Maintenant que vous avez correctement installé un contrôleur ALB sur votre cluster, vous pouvez approvisionner les ressources pour Application Gateway pour les conteneurs dans Azure.

L’étape suivante consiste à lier votre contrôleur ALB à Application Gateway pour les conteneurs. La façon dont vous créez ce lien dépend de votre stratégie de déploiement.

Il existe deux stratégies de déploiement pour la gestion de l’application Gateway pour les conteneurs :

  • Apportez votre propre déploiement (BYO) : dans cette stratégie de déploiement, le déploiement et le cycle de vie de la ressource pour Application Gateway pour les conteneurs, la ressource d’association et frontale, sont implémentés via le portail Azure, CLI, PowerShell, Terraform, etc., et sont référencés dans la configuration dans Kubernetes.
  • Managé par le contrôleur ALB : dans cette stratégie de déploiement, le contrôleur ALB déployé dans Kubernetes est responsable du cycle de vie de la ressource pour Application Gateway pour les conteneurs et de ses sous-ressources. Le contrôleur ALB crée une ressource pour Application Gateway pour les conteneurs lorsqu’une ressource personnalisée ApplicationLoadBalancer est définie sur le cluster. Le cycle de vie du service est basé sur le cycle de vie de la ressource personnalisée.

Désinstaller Application Gateway pour les conteneurs et le contrôleur ALB

Si vous souhaitez désinstaller le contrôleur ALB, effectuez les étapes suivantes.

  1. Supprimez l’Application Gateway pour les conteneurs. Vous pouvez supprimer le groupe de ressources contenant les ressources pour Application Gateway pour les conteneurs :
az group delete --resource-group $RESOURCE_GROUP
  1. Désinstallez le contrôleur ALB et ses ressources de votre cluster en exécutant les commandes suivantes :
helm uninstall alb-controller
kubectl delete ns azure-alb-system
kubectl delete gatewayclass azure-alb-external

Notes

Si un autre espace de noms a été utilisé pour l’installation d’alb-controller, veillez à spécifier le paramètre -n dans la commande de désinstallation helm pour définir l’espace de noms approprié à utiliser. Par exemple : helm uninstall alb-controller -n unique-namespace