Freigeben über


Problembehandlung für Application Gateway für Container

Dieser Artikel enthält einige Anleitungen, mit denen Sie häufig auftretende Probleme im Application Gateway für Container beheben können.

Suchen der Version von ALB-Controller

Bevor Sie mit der Problembehandlung beginnen, bestimmen Sie die bereitgestellte Version des ALB-Controllers. Sie können mithilfe des folgenden Kubectl-Befehls ermitteln, welche Version des ALB-Controllers ausgeführt wird (stellen Sie sicher, dass Sie Ihren Namespace ersetzen, wenn sie nicht den Standardnamespace von azure-alb-system verwenden):

kubectl get deployment -n azure-alb-system -o wide

Beispielausgabe:

NAME BEREIT AKTUELL VERFÜGBAR AGE CONTAINER IMAGES SELECTOR
Alb-Controller 2/2 2 2 18d Alb-Controller mcr.microsoft.com/application-lb/images/alb-controller:1.3.7 app=alb-controller
alb-controller-bootstrap 1/1 1 1 18d alb-controller-bootstrap mcr.microsoft.com/application-lb/images/alb-controller-bootstrap:1.3.7 app=alb-controller-bootstrap

In diesem Beispiel ist die ALB Controller-Version 1.3.7.

Die ALB-Controller-Version kann durch Ausführen des helm upgrade alb-controller-Befehls aktualisiert werden. Weitere Informationen finden Sie unter Installieren des ALB-Controllers.

Tipp

Die neueste ALB Controller-Version finden Sie in den ALB-Controller-Versionshinweisen.

Erfassen von ALB-Controllerprotokollen

Logs können vom ALB-Controller mit dem Befehl kubectl logs gesammelt werden, der auf den ALB- Controller-Pod verweist.

  1. Abrufen des Namen des ausgeführten ALB-Controller-Pods

    Führen Sie den folgenden kubectl-Befehl aus. Stellen Sie sicher, dass Sie Ihren Namespace ersetzen, wenn sie nicht den Standardnamespace von azure-alb-systemverwenden:

    kubectl get pods -n azure-alb-system
    

    Die Ausgabe sollte etwa folgendem Beispiel entsprechen. Podnamen können sich leicht unterscheiden.

    NAME BEREIT STATUS RESTARTS AGE
    alb-controller-6648c5d5c-sdd9t 1/1 Wird ausgeführt 0 4d6h
    alb-controller-6648c5d5c-au234 1/1 Wird ausgeführt 0 4d6h
    alb-controller-bootstrap-6648c5d5c-hrmpc 1/1 Wird ausgeführt 0 4d6h

    Der ALB-Controller verwendet eine vom Controller-Laufzeitmanager bereitgestellte Auswahl, um einen aktiven und einen Standby-Pod für hohe Verfügbarkeit zu bestimmen.

    Kopieren Sie den Namen jedes Alb-Controller-Pods (nicht den Bootstrap-Pod, in diesem Fall: alb-controller-6648c5d5c-sdd9t und alb-controller-6648c5d5c-au234) und führen Sie den folgenden Befehl aus, um den aktiven Pod zu ermitteln.

    kubectl logs alb-controller-6648c5d5c-sdd9t -n azure-alb-system -c alb-controller | grep "successfully acquired lease"
    

    Wenn der Pod primär ist, sollte Folgendes angezeigt werden: successfully acquired lease azure-alb-system/alb-controller-leader-election

  2. Erfassen der Protokolle

    Protokolle vom ALB-Controller werden im JSON-Format zurückgegeben.

    Führen Sie den folgenden Kubectl-Befehl aus, und ersetzen Sie den Namen durch den in Schritt 1 zurückgegebenen Podnamen:

    kubectl logs -n azure-alb-system alb-controller-6648c5d5c-sdd9t
    

    Ebenso können Sie die Ausgabe des vorhandenen Befehls an eine Datei umleiten, indem Sie das größer als (>)-Zeichen und den Dateinamen angeben, in den die Protokolle geschrieben werden sollen:

    kubectl logs -n azure-alb-system alb-controller-6648c5d5c-sdd9t > alb-controller-logs.json
    

Konfigurationsfehler

Anwendungsgateway für Container gibt 500 Statuscode zurück

Szenarien, in denen Sie feststellen würden, dass ein 500-Fehlercode im Anwendungsgateway für Container wie folgt lautet:

  1. Ungültige Back-End-Einträge : Ein Back-End ist in den folgenden Szenarien als ungültig definiert:

    • Sie bezieht sich auf eine unbekannte oder nicht unterstützte Art von Ressource. In diesem Fall weist der Status von HTTPRoute eine Bedingung mit dem Grund, gesetzt auf InvalidKind. In der Meldung wird erläutert, welche Art von Ressource unbekannt oder nicht unterstützt wird.
    • Sie bezieht sich auf eine Ressource, die nicht vorhanden ist. In diesem Fall weist der Status von HTTPRoute eine Bedingung mit dem Grund, gesetzt auf BackendNotFound. In der Meldung wird erläutert, dass die Ressource nicht existiert.
    • Sie bezieht sich auf eine Ressource in einem anderen Namespace, wenn der Verweis nicht explizit von einem ReferenceGrant (oder gleichwertigen Konzept) zulässig ist. In diesem Fall hat der HTTPRoute-Status eine Bedingung mit dem Grund gesetzt auf RefNotPermitted und die Nachricht erklärt, welcher namensraumübergreifende Verweis nicht erlaubt ist.

    Wenn beispielsweise eine HTTPRoute zwei Back-Ends mit gleicher angegebener Gewichtung hat und eins ungültig ist, 50 Prozent des Datenverkehrs muss 500 bekommen.

  2. Für alle Back-Ends wurden keine Endpunkte gefunden: Wenn keine Endpunkte für alle Back-Ends gefunden werden, auf die in einer HTTPRoute verwiesen wird, wird ein 500-Fehlercode abgerufen.

Benutzerdefinierte Ressource für den Application Load Balancer zeigt nicht den Status "Bereit" an.

Problembeschreibung

ApplicationLoadBalancer benutzerdefinierte Ressourcenstatusmeldung zeigt kontinuierlich: „Application Gateway for Containers-Ressource Application Gateway for Containers-name wird aktualisiert.“

Die folgenden Protokolle werden vom primären Alb-Controller-Pod wiederholt.

{"level":"info","version":"x.x.x","Timestamp":"2024-02-26T20:31:53.760150719Z","message":"Stream opened for config updates"}
{"level":"info","version":"x.x.x","operationID":"aaaa0000-bb11-2222-33cc-444444dddddd","Timestamp":"2024-02-26T20:31:53.760313623Z","message":"Successfully sent config update request"}
{"level":"error","version":"x.x.x","error":"rpc error: code = PermissionDenied desc = ALB Controller with object id 'aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb' does not have authorization to perform action on Application Gateway for Containers resource.Please check RBAC delegations to the Application Gateway for Containers resource.","Timestamp":"2024-02-26T20:31:53.769444995Z","message":"Unable to capture config update response"}
{"level":"info","version":"x.x.x","Timestamp":"2024-02-26T20:31:53.769504489Z","message":"Retrying to open config update stream"}
{"level":"info","version":"x.x.x","Timestamp":"2024-02-26T20:31:54.461487406Z","message":"Stream opened up for endpoint updates"}
{"level":"info","version":"x.x.x","operationID":"808825c2-b0a8-476b-b83a-8e7357c55750","Timestamp":"2024-02-26T20:31:54.462070039Z","message":"Successfully sent endpoint update request"}
{"level":"error","version":"x.x.x","error":"rpc error: code = PermissionDenied desc = ALB Controller with object id 'aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb' does not have authorization to perform action on Application Gateway for Containers resource.Please check RBAC delegations to the Application Gateway for Containers resource.","Timestamp":"2024-02-26T20:31:54.470728646Z","message":"Unable to capture endpoint update response"}
{"level":"info","version":"x.x.x","Timestamp":"2024-02-26T20:31:54.47077373Z","message":"Retrying to open up endpoint update stream"}

Kubernetes-Gatewayressource kann keine Token aus der Anmeldeinformationskette abrufen

Problembeschreibung

Es werden keine Änderungen an HttpRoutes auf das Anwendungsgateway für Container angewendet.

Die folgende Fehlermeldung wird für die Kubernetes-Gatewayressource zurückgegeben, und für die HttpRoute-Ressourcen werden keine Änderungen angezeigt.

status:
  conditions:
  - lastTransitionTime: "2023-04-28T22:08:34Z"
    message: The Gateway is not scheduled
    observedGeneration: 2
    reason: Scheduled
    status: "False"
    type: Scheduled
  - lastTransitionTime: "2023-04-28T22:08:34Z"
    message: "No addresses have been assigned to the Gateway : failed to get token
      from credential chain: [FromAssertion(): http call(https://login.microsoftonline.com/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/oauth2/v2.0/token)(POST)
      error: reply status code was 401:\n{\"error\":\"unauthorized_client\",\"error_description\":\"AADSTS70021:
      No matching federated identity record found for presented assertion. Assertion
      Issuer: 'https://azureregion.oic.prod-aks.azure.com/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/'.
      Assertion Subject: 'system:serviceaccount:azure-application-lb-system:gateway-controller-sa'.
      Assertion Audience: 'api://AzureADTokenExchange'. https://docs.microsoft.com/en-us/azure/active-directory/develop/workload-identity-federation\\r\\nTrace
      ID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\\r\\nCorrelation ID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\\r\\nTimestamp:
      2023-04-28 22:08:46Z\",\"error_codes\":[70021],\"timestamp\":\"2023-04-28 22:08:46Z\",\"trace_id\":\"0000aaaa-11bb-cccc-dd22-eeeeee333333\",\"correlation_id\":\"aaaa0000-bb11-2222-33cc-444444dddddd\",\"error_uri\":\"https://login.microsoftonline.com/error?code=70021\"}
      DefaultAzureCredential: failed to acquire a token.\nAttempted credentials:\n\tEnvironmentCredential:
      incomplete environment variable configuration. Only AZURE_TENANT_ID and AZURE_CLIENT_ID
      are set\n\tManagedIdentityCredential: IMDS token request timed out\n\tAzureCLICredential:
      fork/exec /bin/sh: no such file or directory]"
    observedGeneration: 2
    reason: AddressNotAssigned
    status: "False"
    type: Ready

Lösung

Stellen Sie sicher, dass die Verbundanmeldeinformationen der verwalteten Identität für den ALB-Controller-Pod, um am Anwendungsgateway für Container Änderungen vorzunehmen, in Azure konfiguriert sind. Anweisungen zum Konfigurieren von Verbundanmeldeinformationen finden Sie in den Schnellstart-Anleitungen: