Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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 | FERTIG | AKTUELL | VERFÜGBAR | ALTER | CONTAINER | BILDER | SELECTOR |
|---|---|---|---|---|---|---|---|
| Alb-Controller | 2/2 | 2 | 2 | 18d | Alb-Controller | mcr.microsoft.com/application-lb/images/alb-controller:1.9.13 | app=alb-controller |
In diesem Beispiel ist die ALB-Controllerversion 1.9.13.
Die ALB-Controller-Version kann durch Ausführen des helm upgrade alb-controller-Befehls aktualisiert werden. Weitere Informationen finden Sie im ALB Controller-Installationshandbuch für Add-On oder Helm.
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-systemverwenden:kubectl get pods -n azure-alb-systemDie Ausgabe sollte etwa folgendem Beispiel entsprechen. Podnamen können sich leicht unterscheiden.
NAME FERTIG STATUS NEUSTARTS ALTER alb-controller-6648c5d5c-sdd9t 1/1 Wird ausgeführt 0 4d6h alb-controller-6648c5d5c-au234 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 der einzelnen Alb-Controller-Pods (in diesem Fall:
alb-controller-6648c5d5c-sdd9tundalb-controller-6648c5d5c-au234) und führen Sie den folgenden Befehl aus, um den aktiven Pod zu bestimmen.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-electionErfassen 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-sdd9tEbenso 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
RefNotPermittedund 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.
Symptome
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
Symptome
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:
- Schnellstart: Bereitstellen des ALB-Controllers – Add-On oder Helm