Rozwiązywanie problemów w usłudze Application Gateway dla kontenerów
Ten artykuł zawiera wskazówki ułatwiające rozwiązywanie typowych problemów w usłudze Application Gateway for Containers.
Znajdowanie wersji kontrolera usługi ALB
Przed rozpoczęciem rozwiązywania problemów określ wersję wdrożonego kontrolera usługi ALB. Możesz określić, która wersja kontrolera usługi ALB jest uruchomiona, używając następującego polecenia kubectl (upewnij się, że zastąpisz przestrzeń nazw, jeśli nie używasz domyślnej przestrzeni nazw azure-alb-system
):
kubectl get deployment -n azure-alb-system -o wide
Przykładowe wyjście:
NAZWA | GOTOWY | AKTUALNY | DOSTĘPNE | AGE | KONTENERY | OBRAZY | SELEKTOR |
---|---|---|---|---|---|---|---|
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 |
W tym przykładzie kontroler usługi ALB ma wersję 1.3.7.
Wersję kontrolera usługi ALB można uaktualnić, uruchamiając helm upgrade alb-controller
polecenie . Aby uzyskać więcej informacji, zobacz Instalowanie kontrolera usługi ALB.
Napiwek
Najnowszą wersję kontrolera usługi ALB można znaleźć w informacjach o wersji kontrolera usługi ALB.
Zbieranie dzienników kontrolera usługi ALB
Dzienniki można zbierać z kontrolera usługi ALB przy użyciu polecenia kubectl logs odwołującego się do zasobnika kontrolera usługi ALB.
Uzyskiwanie uruchomionej nazwy zasobnika kontrolera usługi ALB
Uruchom następujące polecenie kubectl. Upewnij się, że zastąpisz przestrzeń nazw, jeśli nie używasz domyślnej
azure-alb-system
przestrzeni nazw :kubectl get pods -n azure-alb-system
Powinny zostać wyświetlone dane wyjściowe podobne do poniższego przykładu. Nazwy zasobników mogą się nieco różnić.
NAZWA GOTOWY STAN PONOWNE URUCHOMIENIA AGE alb-controller-6648c5d5c-sdd9t 1/1 Uruchomiono 0 4d6h alb-controller-6648c5d5c-au234 1/1 Uruchomiono 0 4d6h alb-controller-bootstrap-6648c5d5c-hrmpc 1/1 Uruchomiono 0 4d6h Kontroler usługi ALB używa wyborów dostarczonych przez menedżera środowiska uruchomieniowego kontrolera do określenia aktywnego i rezerwowego zasobnika w celu zapewnienia wysokiej dostępności.
Skopiuj nazwę każdego zasobnika alb-controller (a nie zasobnika bootstrap, w tym przypadku:
alb-controller-6648c5d5c-sdd9t
ialb-controller-6648c5d5c-au234
) i uruchom następujące polecenie, aby określić aktywny zasobnik.kubectl logs alb-controller-6648c5d5c-sdd9t -n azure-alb-system -c alb-controller | grep "successfully acquired lease"
Jeśli zasobnik jest podstawowy, powinien zostać wyświetlony następujący komunikat:
successfully acquired lease azure-alb-system/alb-controller-leader-election
Zbieranie dzienników
Dzienniki z kontrolera usługi ALB są zwracane w formacie JSON.
Wykonaj następujące polecenie kubectl, zastępując nazwę zasobnika nazwą zwróconą w kroku 1:
kubectl logs -n azure-alb-system alb-controller-6648c5d5c-sdd9t
Podobnie można przekierować dane wyjściowe istniejącego polecenia do pliku, określając znak większy niż (>) i nazwę pliku w celu zapisania dzienników do:
kubectl logs -n azure-alb-system alb-controller-6648c5d5c-sdd9t > alb-controller-logs.json
Błędy konfiguracji
Usługa Application Gateway dla kontenerów zwraca kod stanu 500
Scenariusze, w których można zauważyć kod błędu 500 w usłudze Application Gateway dla kontenerów, są następujące:
Nieprawidłowe wpisy zaplecza : zaplecze jest zdefiniowane jako nieprawidłowe w następujących scenariuszach:
- Odnosi się do nieznanego lub nieobsługiwanego rodzaju zasobu. W takim przypadku stan usługi HTTPRoute ma warunek z ustawioną
InvalidKind
przyczyną, a komunikat wyjaśnia, jakiego rodzaju zasób jest nieznany lub nieobsługiwany. - Odwołuje się on do zasobu, który nie istnieje. W takim przypadku stan usługi HTTPRoute ma warunek z ustawioną przyczyną,
BackendNotFound
a komunikat wyjaśnia, że zasób nie istnieje. - Odwołuje się on do zasobu w innej przestrzeni nazw, gdy odwołanie nie jest jawnie dozwolone przez element ReferenceGrant (lub równoważne pojęcie). W tym przypadku stan usługi HTTPRoute ma warunek z ustawioną
RefNotPermitted
przyczyną, a komunikat wyjaśnia, które odwołanie między przestrzeniami nazw nie jest dozwolone.
Jeśli na przykład usługa HTTPRoute ma dwa zaplecza określone z równymi wagami, a jeden jest nieprawidłowy 50% ruchu musi otrzymać 500.
- Odnosi się do nieznanego lub nieobsługiwanego rodzaju zasobu. W takim przypadku stan usługi HTTPRoute ma warunek z ustawioną
Nie znaleziono punktów końcowych dla wszystkich zapleczy: jeśli nie znaleziono punktów końcowych dla wszystkich zapleczy, do których odwołuje się usługa HTTPRoute, zostanie uzyskany kod błędu 500.
Zasób niestandardowy usługi Application Load Balancer nie odzwierciedla stanu Gotowe
Objawy
Niestandardowy komunikat o stanie zasobu ApplicationLoadBalancer stale informuje o tym, że "zasób Application Gateway for Containers-name
usługi Application Gateway dla kontenerów przechodzi aktualizację".
Następujące dzienniki są powtarzane przez podstawowy zasobnik alb-controller.
{"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"}
Zasób usługi Kubernetes Gateway nie może pobrać tokenu z łańcucha poświadczeń
Objawy
W usłudze Application Gateway for Containers nie są stosowane żadne zmiany w usłudze HttpRoutes.
Następujący komunikat o błędzie jest zwracany w zasobie usługi Kubernetes Gateway i nie są uwzględniane żadne zmiany dla żadnych zasobów usługi HttpRoute.
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
Rozwiązanie
Upewnij się, że poświadczenia federacyjne tożsamości zarządzanej dla zasobnika kontrolera usługi ALB w celu wprowadzenia zmian w usłudze Application Gateway for Containers są skonfigurowane na platformie Azure. Instrukcje dotyczące konfigurowania poświadczeń federacyjnych można znaleźć w przewodnikach Szybki start: