Dela via


Snabbstart: Distribuera Application Gateway for Containers ALB Controller

ALB-kontrollanten ansvarar för att översätta gateway-API och ingress-API-konfiguration i Kubernetes till belastningsutjämningsregler i Application Gateway för containrar. Följande guide går igenom de steg som krävs för att etablera en ALB-styrenhet i ett nytt eller befintligt AKS-kluster.

Förutsättningar

Du måste utföra följande uppgifter innan du distribuerar Application Gateway för containrar i Azure och installerar ALB Controller i klustret:

  1. Förbered din Azure-prenumeration och din az-cli klient.

    # 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. Ange ett AKS-kluster för din arbetsbelastning.

    Kommentar

    AKS-klustret måste finnas i en region där Application Gateway för containrar är tillgängligt AKS-kluster bör använda Azure CNI. AKS-klustret bör ha funktionen för arbetsbelastningsidentitet aktiverad. Lär dig hur du aktiverar arbetsbelastningsidentitet i ett befintligt AKS-kluster.

    Om du använder ett befintligt kluster ska du aktivera stöd för arbetsbelastningsidentitet i ditt AKS-kluster. Arbetsbelastningsidentiteter kan aktiveras via följande:

    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
    

    Om du inte har ett befintligt kluster använder du följande kommandon för att skapa ett nytt AKS-kluster med Azure CNI och arbetsbelastningsidentitet aktiverad.

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

    Helm är ett paketeringsverktyg med öppen källkod som används för att installera ALB-styrenheten.

    Kommentar

    Helm är redan tillgängligt i Azure Cloud Shell. Om du använder Azure Cloud Shell krävs ingen ytterligare Helm-installation.

    Du kan också använda följande steg för att installera Helm på en lokal enhet som kör Windows eller Linux. Se till att du har den senaste versionen av helm installerad.

    Se installationsanvisningarna för olika installationsalternativ. På samma sätt kan du köra följande kommando om windows-versionen har Windows Package Manager-winget installerad:

    winget install helm.helm
    

Installera ALB-styrenheten

  1. Skapa en användarhanterad identitet för ALB-styrenhet och federera identiteten som arbetsbelastningsidentitet som ska användas i AKS-klustret.

    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-styrenheten kräver en federerad autentiseringsuppgift med namnet på azure-alb-identity. Andra federerade autentiseringsuppgifter stöds inte.

    Kommentar

    Tilldelning av den hanterade identiteten omedelbart efter skapandet kan leda till ett fel om att principalId inte finns. Tillåt ungefär en minuts tid för identiteten att replikeras i Microsoft Entra-ID innan identiteten delegeras.

  2. Installera ALB-styrenhet med Helm

    För nya distributioner

    Om du vill installera ALB-styrenheten använder du helm install kommandot .

    helm install När kommandot körs distribueras helm-diagrammet till standardnamnområdet. När alb-controller distribueras distribueras den till namnområdet azure-alb-system . Båda dessa namnområden kan åsidosättas oberoende av varandra efter behov. Om du vill åsidosätta namnområdet som helm-diagrammet distribueras till kan du ange parametern --namespace (eller -n). Om du vill åsidosätta det azure-alb-systemnamnområde som används av alb-controller kan du ange egenskapen albController.namespace under installationen (--set albController.namespace). Om varken parametrarna --namespace --set albController.namespace eller definieras används standardnamnområdet för helm-diagrammet och namnområdet azure-alb-system används för ALB-styrenhetskomponenterna. Om namnområdet för helm-diagramresursen ännu inte har definierats kontrollerar du slutligen att parametern --create-namespace också anges tillsammans med parametrarna --namespace eller -n .

    ALB-styrenhet kan installeras genom att köra följande kommandon:

    HELM_NAMESPACE='<namespace for deployment>'
    CONTROLLER_NAMESPACE='azure-alb-system'
    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_NAMESPACE \
         --version 1.3.7 \
         --set albController.namespace=$CONTROLLER_NAMESPACE \
         --set albController.podIdentity.clientID=$(az identity show -g $RESOURCE_GROUP -n azure-alb-identity --query clientId -o tsv)
    

    För befintliga distributioner

    ALB kan uppgraderas genom att köra följande kommandon:

    Kommentar

    Under uppgraderingen måste du ange parametrarna --namespace eller --set albController.namespace om namnrymderna har åsidosatts i den tidigare installerade installationen. För att fastställa vilka tidigare namnområden som användes kan du köra helm list kommandot för helm-namnområdet och kubectl get pod -A -l app=alb-controller för ALB-kontrollanten.

    HELM_NAMESPACE='<your cluster name>'
    CONTROLLER_NAMESPACE='azure-alb-system'
    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_NAMESPACE \
        --version 1.3.7 \
        --set albController.namespace=$CONTROLLER_NAMESPACE \
        --set albController.podIdentity.clientID=$(az identity show -g $RESOURCE_GROUP -n azure-alb-identity --query clientId -o tsv)
    

Verifiera installationen av ALB Controller

  1. Kontrollera att ALB Controller-poddarna är klara:

    kubectl get pods -n azure-alb-system
    

    Du bör se följande:

    NAMN KLAR STATUS OMSTARTER ÅLDER
    alb-controller-bootstrap-6648c5d5c-hrmpc 1/1 Körs 0 4d6h
    alb-controller-6648c5d5c-sdd9t 1/1 Körs 0 4d6h
    alb-controller-6648c5d5c-au234 1/1 Körs 0 4d6h
  2. Kontrollera att GatewayClass azure-application-lb är installerat i klustret:

    kubectl get gatewayclass azure-alb-external -o yaml
    

    Du bör se att GatewayClass har ett villkor som läser Valid GatewayClass. Detta anger att en standard-GatewayClass har konfigurerats och att alla gatewayresurser som refererar till denna GatewayClass hanteras automatiskt av ALB-styrenheten.

    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
    

Nästa steg

Nu när du har installerat en ALB-styrenhet i klustret kan du etablera Application Gateway for Containers-resurser i Azure.

Nästa steg är att länka ALB-styrenheten till Application Gateway för containrar. Hur du skapar den här länken beror på distributionsstrategin.

Det finns två distributionsstrategier för hantering av Application Gateway for Containers:

  • Byo-distribution (Bring Your Own): I den här distributionsstrategin förutsätts distribution och livscykel för Application Gateway for Containers-resursen, associationsresursen och klientdelsresursen via Azure Portal, CLI, PowerShell, Terraform osv. och refereras till i konfigurationen i Kubernetes.
  • Hanteras av ALB-kontrollant: I den här distributionsstrategin ansvarar ALB-styrenheten som distribueras i Kubernetes för livscykeln för application gateway för containrar-resursen och dess underresurser. ALB-styrenheten skapar en Application Gateway for Containers-resurs när en anpassad ApplicationLoadBalancer-resurs definieras i klustret. Tjänstens livscykel baseras på livscykeln för den anpassade resursen.

Avinstallera Application Gateway för containrar och ALB-styrenhet

Om du vill avinstallera ALB-styrenheten utför du följande steg.

  1. Ta bort Application Gateway för containrar. Du kan ta bort resursgruppen som innehåller Resurser för Application Gateway för containrar:
az group delete --resource-group $RESOURCE_GROUP
  1. Avinstallera ALB-styrenheten och dess resurser från klustret kör följande kommandon:
helm uninstall alb-controller
kubectl delete ns azure-alb-system
kubectl delete gatewayclass azure-alb-external

Kommentar

Om ett annat namnområde användes för installation av alb-controller kontrollerar du att du anger parametern -n i helm-avinstallationskommandot för att definiera rätt namnområde som ska användas. Exempelvis: helm uninstall alb-controller -n unique-namespace