Udostępnij za pomocą


Szybki przewodnik: Wdrażanie bramy aplikacyjnej dla kontenerów ALB Controller

Kontroler ALB jest odpowiedzialny za tłumaczenie konfiguracji API bramy (Gateway API) i API wejściowego (Ingress API) w Kubernetes na reguły równoważenia obciążenia w Application Gateway for Containers. W poniższym przewodniku przedstawiono kroki wymagane do aprowizacji kontrolera usługi ALB w nowym lub istniejącym klastrze usługi Azure Kubernetes Service (AKS).

Wymagania wstępne

Przed wdrożeniem usługi Application Gateway for Containers na platformie Azure i zainstalowaniu kontrolera usługi ALB w klastrze należy wykonać następujące zadania:

  1. Przygotuj subskrypcję platformy Azure i klienta 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. Skonfiguruj klaster AKS dla swojego obciążenia.

    Uwaga

    Klaster usługi AKS musi znajdować się w regionie, w którym usługa Application Gateway dla kontenerów jest dostępna. Powinien używać Azure CNI lub Azure CNI Overlay. Klaster usługi AKS powinien mieć włączoną funkcję tożsamości obciążenia. Dowiedz się, jak włączyć tożsamość zadania w istniejącym klastrze usługi AKS.

    Jeśli korzystasz z istniejącego klastra, upewnij się, że włączyłeś obsługę Workload Identity w klastrze AKS. Tożsamości obciążeń można włączyć za pomocą następujących poleceń:

    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
    

    Jeśli nie masz istniejącego klastra, użyj następujących poleceń, aby utworzyć nowy klaster AKS z włączoną tożsamością obciążenia roboczego i usługą 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. Instalowanie narzędzia Helm

    Helm to narzędzie do pakietowania typu open source, które służy do instalowania kontrolera ALB.

    Uwaga

    Program Helm jest już dostępny w usłudze Azure Cloud Shell. Jeśli używasz usługi Azure Cloud Shell, nie jest konieczna żadna dodatkowa instalacja programu Helm.

    Aby zainstalować program Helm na urządzeniu lokalnym z systemem Windows lub Linux, możesz również użyć poniższych kroków. Upewnij się, że masz zainstalowaną najnowszą wersję programu Helm.

    Zapoznaj się z instrukcjami dotyczącymi instalacji dla różnych opcji instalacji. Podobnie, jeśli masz zainstalowany Menedżer pakietów systemu Windows (winget), możesz wykonać następujące polecenie:

    winget install helm.helm
    

Zainstaluj kontroler ALB

  1. Utwórz zarządzaną tożsamość użytkownika dla kontrolera ALB i sfederuj tożsamość jako Workload Identity do użycia w klastrze 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"
    

    Kontroler ALB wymaga poświadczeń federacyjnych o nazwie azure-alb-identity. Każda inna nazwa poświadczeń federacyjnych nie jest obsługiwana.

    Uwaga

    Przypisanie tożsamości zarządzanej bezpośrednio po utworzeniu może spowodować błąd, że identyfikator principalId nie istnieje. Poczekaj około minuty, zanim tożsamość zostanie zreplikowana w identyfikatorze Entra firmy Microsoft przed delegowaniem tożsamości.

  2. Zainstaluj kontroler ALB przy użyciu programu Helm

    W przypadku nowych wdrożeń

    Aby zainstalować kontroler usługi ALB, użyj polecenia helm install.

    Po uruchomieniu polecenia helm install wdrażany jest diagram helm w domyślnej przestrzeni nazw . Gdy alb-kontroler jest wdrażany, wdrażany jest do przestrzeni nazw azure-alb-system. Obie te przestrzenie nazw mogą być zastępowane niezależnie zgodnie z potrzebami. Aby zastąpić przestrzeń nazw, w której jest wdrażany wykres helm, możesz określić parametr --namespace (lub -n). Aby zastąpić azure-alb-system przestrzeń nazw używaną przez alb-controller, można ustawić właściwość albController.namespace podczas instalacji (--set albController.namespace). Jeśli ani parametry --namespace ani --set albController.namespace nie są zdefiniowane, domyślna przestrzeń nazw jest używana dla chartu Helm, a przestrzeń nazw jest używana dla składników kontrolera ALB. Jeśli przestrzeń nazw dla zasobu chart Helm nie jest jeszcze zdefiniowana, upewnij się, że parametr --create-namespace jest również określony wraz z parametrami --namespace lub -n.

    Kontroler usługi ALB można zainstalować, uruchamiając następujące polecenia:

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

    W przypadku istniejących wdrożeń

    Usługę ALB można uaktualnić, uruchamiając następujące polecenia:

    Uwaga

    Podczas uaktualniania upewnij się, że określasz parametry --namespace lub --set albController.namespace, jeśli przestrzenie nazw zostały zmienione w poprzednio zainstalowanej wersji. Aby określić poprzednio używane przestrzenie nazw, możesz uruchomić polecenie helm list dla przestrzeni nazw helm oraz polecenie kubectl get pod -A -l app=alb-controller dla kontrolera ALB.

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

Weryfikowanie instalacji kontrolera ALB

  1. Sprawdź, czy pody kontrolera ALB są gotowe:

    kubectl get pods -n azure-alb-system
    

    Powinny zostać wyświetlone następujące dane wyjściowe:

    NAZWA GOTOWE STAN Ponowne uruchomienia Wiek
    alb-controller-6648c5d5c-sdd9t 1/1 W trakcie działania 0 4 dni 6 godzin
    alb-controller-6648c5d5c-au234 1/1 W trakcie działania 0 4 dni 6 godzin
  2. Sprawdź, czy klasa GatewayClass azure-alb-external jest zainstalowana w klastrze:

    kubectl get gatewayclass azure-alb-external -o yaml
    

    Powinno być widoczne, że GatewayClass ma warunek, który brzmi Valid GatewayClass. Ten warunek wskazuje, że skonfigurowano domyślną klasę GatewayClass i że wszystkie zasoby bramy odwołujące się do tej GatewayClass są automatycznie zarządzane przez 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
    

Następne kroki

Po pomyślnym zainstalowaniu kontrolera usługi ALB w klastrze możesz aprowizować zasoby usługi Application Gateway for Containers na platformie Azure.

Następnym krokiem jest połączenie kontrolera ALB z Bramą Aplikacji dla Kontenerów. Sposób tworzenia tego linku zależy od strategii wdrażania.

Istnieją dwie strategie wdrożenia zarządzania dla usługi Application Gateway for Containers:

  • Wdrożenie "Przynieś własne" (BYO): W tej strategii wdrażania zakłada się, że wdrożenie i cykl życia zasobu Application Gateway for Containers, zasobu powiązań oraz zasobu warstwy frontendowej będzie realizowane za pośrednictwem portalu Azure, CLI, PowerShell, Terraform itp., i będą odniesione w konfiguracji w ramach Kubernetes.
  • Zarządzane przez kontroler usługi ALB: W tej strategii wdrażania kontroler usługi ALB wdrożony w usłudze Kubernetes jest odpowiedzialny za cykl życia zasobu usługi Application Gateway for Containers i jego zasobów podrzędnych. Kontroler ALB tworzy zasób Application Gateway dla kontenerów, gdy w klastrze zdefiniowany jest niestandardowy zasób ApplicationLoadBalancer. Cykl życia usługi opiera się na cyklu życia zasobu niestandardowego.

Odinstaluj Application Gateway dla kontenerów i kontrolera ALB

Jeśli chcesz odinstalować kontroler usługi ALB, wykonaj następujące kroki.

  1. Usuń usługę Application Gateway dla kontenerów. Możesz usunąć grupę zasobów zawierającą zasoby usługi Application Gateway for Containers:

    az group delete --resource-group $RESOURCE_GROUP
    
  2. Odinstaluj kontroler usługi ALB i jego zasoby z klastra, uruchamiając następujące polecenia:

    helm uninstall alb-controller
    kubectl delete ns azure-alb-system
    kubectl delete gatewayclass azure-alb-external
    

Uwaga

Jeśli do instalacji kontrolera alb-controller użyto innej przestrzeni nazw, upewnij się, że określono parametr -n w poleceniu dezinstalacji programu Helm, aby zdefiniować właściwą przestrzeń nazw do użycia. Na przykład: helm uninstall alb-controller -n unique-namespace