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.
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-system
verwenden: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
undalb-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
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:
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.
- 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
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: