Condividi tramite


Risoluzione dei problemi relativamente al gateway applicativo per contenitori (anteprima)

Questo articolo fornisce alcune indicazioni utili per risolvere i problemi comuni nel gateway applicazione per i contenitori.

Trovare la versione del controller ALB

Prima di iniziare la risoluzione dei problemi, determinare la versione del controller ALB distribuito. È possibile determinare quale versione del controller ALB è in esecuzione usando il comando kubectl seguente (assicurarsi di sostituire lo spazio dei nomi se non si usa lo spazio dei nomi predefinito di azure-alb-system):

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

Output di esempio:

NOME READY AGGIORNATO AVAILABLE AGE CONTENITORI IMMAGINI SELETTORE
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 questo esempio la versione del controller ALB è 1.3.7.

È possibile aggiornare la versione del controller ALB eseguendo il comando helm upgrade alb-controller. Per altre informazioni, vedere Installare il controller ALB.

Suggerimento

La versione più recente del controller ALB è disponibile nelle note sulla versione del controller ALB.

Raccogliere i log del controller ALB

I log possono essere raccolti dal controller ALB usando il log kubectl comando che fa riferimento al pod del controller ALB.

  1. Ottenere il nome del pod del controller ALB in esecuzione

    Eseguire il comando kubectl seguente. Assicurarsi di sostituire lo spazio dei nomi se non si usa lo spazio dei nomi predefinito di azure-alb-system:

    kubectl get pods -n azure-alb-system
    

    L'output dovrebbe essere simile all'esempio seguente. I nomi dei pod potrebbero essere leggermente diversi.

    NOME READY STATO RIAVVII AGE
    alb-controller-6648c5d5c-sdd9t 1/1 In esecuzione 0 4d6h
    alb-controller-6648c5d5c-au234 1/1 In esecuzione 0 4d6h
    alb-controller-bootstrap-6648c5d5c-hrmpc 1/1 In esecuzione 0 4d6h

    Il controller ALB usa un'elezione fornita dal gestore controller-runtime per determinare un pod attivo e di standby per una disponibilità elevata.

    Copiare il nome di ogni pod alb-controller (non del pod bootstrap, in questo caso, alb-controller-6648c5d5c-sdd9t e alb-controller-6648c5d5c-au234) ed eseguire il comando seguente per determinare il pod attivo.

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

    Se il pod è primario, dovrebbe essere visualizzato quanto segue: successfully acquired lease azure-alb-system/alb-controller-leader-election

  2. Raccogliere i log

    I log relativi al controller ALB vengono restituiti in formato JSON.

    Eseguire il comando kubectl seguente, sostituendo il nome con il nome del pod del passaggio 1:

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

    Analogamente, è possibile reindirizzare l'output del comando esistente a un file specificando il segno maggiore di (>) e il nome file in cui scrivere i log:

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

Errori di configurazione

Il gateway applicazione per contenitori da come risultato il codice di stato 500

Gli scenari in cui si avrà un codice di errore 500 nel gateway applicazione per contenitori sono i seguenti:

  1. Voci back-end non valide : un back-end non è valido negli scenari seguenti:

    • Si riferisce a un tipo di risorsa sconosciuto o non supportato. In questo caso, lo stato di HTTPRoute ha una condizione con motivo impostato su InvalidKind e il messaggio spiega quale tipo di risorsa è sconosciuto o non supportato.
    • Fa riferimento a una risorsa che non esiste. In questo caso, lo stato di HTTPRoute ha una condizione con motivo impostato su BackendNotFound e il messaggio spiega che la risorsa non esiste.
    • Fa riferimento a una risorsa in un altro spazio dei nomi quando il riferimento non è consentito in modo esplicito da una Concessione di Riferimento (o concetto equivalente). In questo caso, lo stato di HTTPRoute ha una condizione con motivo impostato su RefNotPermitted e il messaggio spiega quale riferimento tra spazi dei nomi non è consentito.

    Ad esempio, se un HTTPRoute ha due back-end specificati con pesi uguali e uno non è valido il 50% del traffico deve ricevere un 500.

  2. Nessun endpoint trovato per tutti i back-end: quando non sono stati trovati endpoint per tutti i back-end a cui viene fatto riferimento in un HTTPRoute, si ha un codice di errore 500.

La risorsa personalizzata di Load Balancer applicazione non riflette lo stato Pronto

Sintomi

Il messaggio di stato della risorsa personalizzata ApplicationLoadBalancer indica continuamente "Il gateway applicativo per contenitori per la risorsa Application Gateway for Containers-name è in fase di aggiornamento".

I log seguenti vengono ripetuti dal pod alb-controller primario.

{"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"}

La risorsa del gateway Kubernetes non riesce a ottenere il token dalla catena di credenziali

Sintomi

Non vengono applicate modifiche a HttpRoutes al gateway applicazione per i contenitori.

Nella risorsa gateway Kubernetes viene restituito il messaggio di errore seguente e non vengono applicate modifiche per le risorse 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

Soluzione

Assicurarsi che le credenziali federate dell'identità gestita per il pod del controller ALB per apportare modifiche al gateway applicazione per i contenitori siano configurate in Azure. Le istruzioni su come configurare le credenziali federate sono disponibili nelle guide introduttive: