Udostępnij za pośrednictwem


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.

  1. 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-systemprzestrzeni 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 i alb-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

  2. 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:

  1. 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.

  2. 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: