Share via


Snelstartgids: Application Gateway implementeren voor de ALB-controller voor containers

De ALB-controller is verantwoordelijk voor het vertalen van de gateway-API en de API-configuratie voor inkomend verkeer binnen Kubernetes naar taakverdelingsregels binnen Application Gateway for Containers. In de volgende handleiding worden de stappen beschreven die nodig zijn om een ALB-controller in te richten in een nieuw of bestaand AKS-cluster.

Vereisten

U moet de volgende taken uitvoeren voordat u Application Gateway for Containers implementeert in Azure en de ALB-controller installeert op uw cluster:

  1. Bereid uw Azure-abonnement en uw az-cli client voor.

    # 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. Stel een AKS-cluster in voor uw workload.

    Notitie

    Het AKS-cluster moet zich in een regio bevinden waar Application Gateway for Containers beschikbaar is voor een AKS-cluster azure CNI moet gebruiken. Voor een AKS-cluster moet de functie voor workloadidentiteit zijn ingeschakeld. Meer informatie over het inschakelen van workloadidentiteit op een bestaand AKS-cluster.

    Als u een bestaand cluster gebruikt, moet u ondersteuning voor workloadidentiteiten inschakelen op uw AKS-cluster. Workloadidentiteiten kunnen worden ingeschakeld via het volgende:

     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
    

    Als u geen bestaand cluster hebt, gebruikt u de volgende opdrachten om een nieuw AKS-cluster te maken waarvoor Azure CNI en workloadidentiteit is ingeschakeld.

    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 installeren

    Helm is een opensource-verpakkingshulpprogramma dat wordt gebruikt om de ALB-controller te installeren.

    Notitie

    Helm is al beschikbaar in Azure Cloud Shell. Als u Azure Cloud Shell gebruikt, is er geen extra Helm-installatie nodig.

    U kunt ook de volgende stappen gebruiken om Helm te installeren op een lokaal apparaat met Windows of Linux. Zorg ervoor dat u de nieuwste versie van Helm hebt geïnstalleerd.

    Zie de instructies voor installatie voor verschillende installatieopties. Als uw versie van Windows Windows-pakketbeheerder winget heeft geïnstalleerd, kunt u ook de volgende opdracht uitvoeren:

    winget install helm.helm
    

De ALB-controller installeren

  1. Maak een door de gebruiker beheerde identiteit voor de ALB-controller en federeer de identiteit als workloadidentiteit die moet worden gebruikt in het AKS-cluster.

    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"
    

    VOOR DE ALB-controller is een federatieve referentie met de naam van azure-alb-identity vereist. Elke andere federatieve referentienaam wordt niet ondersteund.

    Notitie

    De toewijzing van de beheerde identiteit direct na het maken kan leiden tot een fout dat de principalId niet bestaat. Het duurt ongeveer een minuut voordat de identiteit is gerepliceerd in Microsoft Entra-id voordat u de identiteit delegeert.

  2. ALB-controller installeren met Helm

    Voor nieuwe implementaties

    Als u DE ALB-controller wilt installeren, gebruikt u de helm install opdracht.

    Wanneer de helm install opdracht wordt uitgevoerd, wordt de Helm-grafiek geïmplementeerd in de standaardnaamruimte . Wanneer de alb-controller wordt geïmplementeerd, wordt deze geïmplementeerd in de naamruimte azure-alb-system . Beide naamruimten kunnen naar wens onafhankelijk worden overschreven. Als u de naamruimte wilt overschrijven waarnaar de Helm-grafiek is geïmplementeerd, kunt u de parameter --namespace (of -n) opgeven. Als u de naamruimte azure-alb-system wilt overschrijven die wordt gebruikt door de albController-controller, kunt u de eigenschap albController.namespace instellen tijdens de installatie (--set albController.namespace). Als de parameters --set albController.namespace niet --namespace zijn gedefinieerd, wordt de standaardnaamruimte gebruikt voor de Helm-grafiek en wordt de naamruimte azure-alb-system gebruikt voor de onderdelen van de ALB-controller. Als ten slotte de naamruimte voor de Helm-grafiekresource nog niet is gedefinieerd, moet u ervoor zorgen dat de --create-namespace parameter ook samen met de --namespace of -n parameters is opgegeven.

    DE ALB-controller kan worden geïnstalleerd door de volgende opdrachten uit te voeren:

    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.2 \
         --set albController.namespace=<alb-controller-namespace> \
         --set albController.podIdentity.clientID=$(az identity show -g $RESOURCE_GROUP -n azure-alb-identity --query clientId -o tsv)
    

    Voor bestaande implementaties

    ALB kan worden bijgewerkt door de volgende opdrachten uit te voeren:

    Notitie

    Zorg er tijdens de upgrade voor dat u de --namespace of --set albController.namespace parameters opgeeft als de naamruimten zijn overschreven in de eerder geïnstalleerde installatie. U kunt de helm list opdracht uitvoeren voor de Helm-naamruimte en kubectl get pod -A -l app=alb-controller voor de ALB-controller om te bepalen welke naamruimten u eerder hebt gebruikt.

    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.2 \
        --set albController.namespace=<alb-controller-namespace> \
        --set albController.podIdentity.clientID=$(az identity show -g $RESOURCE_GROUP -n azure-alb-identity --query clientId -o tsv)
    

De installatie van de ALB-controller controleren

  1. Controleer of de ALB-controllerpods gereed zijn:

    kubectl get pods -n azure-alb-system
    

    U ziet nu het volgende:

    NAAM GEREED STATUS HERSTARTEN LEEFTIJD
    alb-controller-bootstrap-6648c5d5c-hrmpc 1/1 Wordt uitgevoerd 0 4d6h
    alb-controller-6648c5d5c-sdd9t 1/1 Wordt uitgevoerd 0 4d6h
    alb-controller-6648c5d5c-au234 1/1 Wordt uitgevoerd 0 4d6h
  2. Controleer of GatewayClass azure-application-lb is geïnstalleerd op uw cluster:

    kubectl get gatewayclass azure-alb-external -o yaml
    

    U ziet dat de GatewayClass een voorwaarde heeft die Geldige GatewayClass leest. Dit geeft aan dat een standaardgatewayklasse is ingesteld en dat alle gatewaybronnen die naar deze GatewayClass verwijzen, automatisch worden beheerd door DE ALB-controller.

    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
    

Volgende stappen

Nu u een ALB-controller in uw cluster hebt geïnstalleerd, kunt u de Application Gateway For Containers-resources inrichten in Azure.

De volgende stap bestaat uit het koppelen van uw ALB-controller aan Application Gateway for Containers. Hoe u deze koppeling maakt, is afhankelijk van uw implementatiestrategie.

Er zijn twee implementatiestrategieën voor het beheer van Application Gateway voor containers:

  • Byo-implementatie (Bring Your Own): In deze implementatiestrategie, implementatie en levenscyclus van de Application Gateway for Containers-resource, koppelingsresource en front-endresource wordt uitgegaan via Azure Portal, CLI, PowerShell, Terraform, enzovoort en waarnaar wordt verwezen in de configuratie binnen Kubernetes.
  • Beheerd door DE ALB-controller: In deze implementatiestrategie is DE ALB-controller die is geïmplementeerd in Kubernetes verantwoordelijk voor de levenscyclus van de Application Gateway for Containers-resource en de bijbehorende subresources. EEN APPLICATION Gateway for Containers-resource wordt gemaakt wanneer een aangepaste ApplicationLoadBalancer-resource in het cluster is gedefinieerd. De levenscyclus van de service is gebaseerd op de levenscyclus van de aangepaste resource.

Application Gateway voor containers en ALB-controller verwijderen

Als u de ALB-controller wilt verwijderen, voert u de volgende stappen uit.

  1. Verwijder de Application Gateway for Containers. U kunt de resourcegroep met de Resources van Application Gateway for Containers verwijderen:
az group delete --resource-group $RESOURCE_GROUP
  1. Verwijder DE ALB-controller en de bijbehorende resources uit uw cluster met de volgende opdrachten:
helm uninstall alb-controller
kubectl delete ns azure-alb-system
kubectl delete gatewayclass azure-alb-external

Notitie

Als er een andere naamruimte is gebruikt voor de installatie van de alb-controller, moet u ervoor zorgen dat u de parameter -n opgeeft in de opdracht Helm uninstall om de juiste naamruimte te definiëren die moet worden gebruikt. Bijvoorbeeld: helm uninstall alb-controller -n unique-namespace