Partilhar via


Solução de problemas no Application Gateway for Containers

Este artigo fornece algumas orientações para ajudá-lo a solucionar problemas comuns no Application Gateway for Containers.

Encontre a versão do ALB Controller

Antes de iniciar a solução de problemas, determine a versão do controlador ALB que está implantada. Você pode determinar qual versão do ALB Controller está sendo executada usando o seguinte comando kubectl (certifique-se de substituir seu namespace se não estiver usando o namespace padrão de azure-alb-system):

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

Saída de exemplo:

NOME READY ATUALIZADO AVAILABLE IDADE CONTAINERS IMAGENS SELECTOR
alb-controller 2/2 2 2 18d alb-controller mcr.microsoft.com/application-lb/images/alb-controller:1.5.2 app=alb-controller
alb-controller-bootstrap 1/1 1 1 18d alb-controller-bootstrap mcr.microsoft.com/application-lb/images/alb-controller-bootstrap:1.5.2 app=alb-controller-bootstrap

In this example, the ALB controller version is 1.5.2.

A versão do controlador ALB pode ser atualizada executando o helm upgrade alb-controller comando. Para obter mais informações, consulte Instalar o controlador ALB.

Tip

A versão mais recente do ALB Controller pode ser encontrada nas notas de versão do ALB Controller.

Recolha os logs do controlador ALB

Os registos podem ser recolhidos do controlador ALB usando o comando kubectl logs referindo-se ao pod do controlador ALB.

  1. Get the running ALB Controller pod name

    Execute o seguinte comando kubectl. Certifique-se de substituir seu namespace se não estiver usando o namespace padrão de azure-alb-system:

    kubectl get pods -n azure-alb-system
    

    Você deve ver uma saída semelhante ao exemplo a seguir. Pod names might differ slightly.

    NOME READY STATUS REINÍCIOS IDADE
    alb-controller-6648c5d5c-sdd9t 1/1 Running 0 4 dias e 6 horas
    alb-controller-6648c5d5c-au234 1/1 Running 0 4 dias e 6 horas
    alb-controller-bootstrap-6648c5d5c-hrmpc 1/1 Running 0 4 dias e 6 horas

    ALB controller uses an election provided by controller-runtime manager to determine an active and standby pod for high availability.

    Copie o nome de cada pod alb-controller (não o pod de bootstrap, neste caso: alb-controller-6648c5d5c-sdd9t e alb-controller-6648c5d5c-au234) e execute o seguinte comando para determinar o pod ativo.

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

    You should see the following if the pod is primary: successfully acquired lease azure-alb-system/alb-controller-leader-election

  2. Collect the logs

    Os logs do controlador ALB são retornados no formato JSON.

    Execute the following kubectl command, replacing the name with the pod name returned in step 1:

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

    Da mesma forma, você pode redirecionar a saída do comando existente para um arquivo especificando o sinal maior que (>) e o nome do arquivo para gravar os logs:

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

Erros de configuração

O Application Gateway for Containers retorna o código de status 500

Os cenários em que você notaria um código de erro 500 no Application Gateway for Containers são os seguintes:

  1. Entradas de back-end inválidas: um back-end é definido como inválido nos seguintes cenários:

    • Refere-se a um tipo de recurso desconhecido ou sem suporte. Nesse caso, o status do HTTPRoute tem uma condição com razão definida como InvalidKind e a mensagem explica qual tipo de recurso é desconhecido ou não é suportado.
    • Refere-se a um recurso que não existe. Nesse caso, o status do HTTPRoute tem uma condição com razão definida como BackendNotFound e a mensagem explica que o recurso não existe.
    • Ele se refere a um recurso em outro namespace quando a referência não é explicitamente permitida por um ReferenceGrant (ou conceito equivalente). Nesse caso, o status do HTTPRoute tem uma condição com razão definida como RefNotPermitted e a mensagem explica qual referência de namespace cruzado não é permitida.

    Por exemplo, se um HTTPRoute tiver dois backends especificados com pesos iguais e um for inválido, 50% do tráfego deverá receber um 500.

  2. Nenhum ponto de extremidade encontrado para todos os backends: quando não há pontos de extremidade encontrados para todos os backends referenciados em um HTTPRoute, um código de erro 500 é obtido.

O recurso personalizado do Application Load Balancer não reflete o status Pronto

Sintomas

A mensagem de status do recurso personalizado do ApplicationLoadBalancer diz continuamente "O recurso Application Gateway for Containers-name Application Gateway for Containers está passando por uma atualização".

The following logs are repeated by the primary alb-controller pod.

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

O recurso Gateway do Kubernetes não consegue obter o token da cadeia de credenciais

Sintomas

Nenhuma alteração em HttpRoutes está sendo aplicada ao Application Gateway for Containers.

A seguinte mensagem de erro é retornada no recurso Kubernetes Gateway e nenhuma alteração é refletida para quaisquer recursos 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

Solução

Certifique-se de que as credenciais federadas da identidade gerida para o pod do Controlador ALB, necessárias para efetuar alterações no Application Gateway for Containers, estão configuradas no Azure. Instruções sobre como configurar credenciais federadas podem ser encontradas nos guias de início rápido: