Compartilhar via


Solução de problemas no Gateway de Aplicativos para contêineres

Este artigo fornece algumas diretrizes para ajudar você a solucionar problemas comuns no Gateway de Aplicativos para contêineres.

Encontre a versão do Controlador ALB

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 Controlador ALB está em execução 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

Exemplo de saída:

NOME PRONTO ATUALIZADO AVAILABLE IDADE CONTÊINERES IMAGENS SELETOR
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

Neste exemplo, a versão do controlador ALB é 1.3.7.

A versão do Controlador ALB pode ser atualizada com a execução do comando helm upgrade alb-controller. Para obter mais informações, confira Instalar o Controlador ALB.

Dica

A versão mais recente do Controlador ALB pode ser encontrada nas notas sobre a versão do Controlador ALB.

Coletar os Registros do Controlador ALB

Os logs podem ser coletados do Controlador ALB usando o comando kubectl logs que faz referência ao pod do Controlador ALB.

  1. Obter o nome do pod do Controlador ALB em execução

    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ê deverá ver uma saída semelhante ao exemplo a seguir. Os nomes dos pods podem ser ligeiramente diferentes.

    NOME PRONTO STATUS REINÍCIOS IDADE
    alb-controller-6648c5d5c-sdd9t 1/1 Executando 0 4d6h
    alb-controller-6648c5d5c-au234 1/1 Executando 0 4d6h
    alb-controller-bootstrap-6648c5d5c-hrmpc 1/1 Executando 0 4d6h

    O controlador ALB usa uma seleção fornecida pelo gerenciador de runtime do controlador para determinar um pod ativo e um pod em espera para alta disponibilidade.

    Copie o nome de cada pod alb-controller (não o pod 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"
    

    Você deverá ver o seguinte se o pod for primário: successfully acquired lease azure-alb-system/alb-controller-leader-election

  2. Coletar os registros

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

    Execute o seguinte comando kubectl, substituindo o nome pelo nome do pod retornado na etapa 1:

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

    Da mesma forma, é possível redirecionar a saída do comando existente para um arquivo especificando o sinal de maior que (>) e o nome do arquivo no qual gravar os registros:

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

Erros de configuração

O Gateway de Aplicativo para contêineres retorna o código de status 500

Os cenários em que você notaria um código de erro 500 no Gateway de Aplicativos para contêineres 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 o motivo definido como InvalidKind e a mensagem explica que tipo de recurso é desconhecido ou sem suporte.
    • Ele se refere a um recurso que não existe. Nesse caso, o status do HTTPRoute tem uma condição com motivo definido 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 o motivo definido como RefNotPermitted e a mensagem explica qual referência entre espaços de nomes não é permitida.

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

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

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

Sintomas

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

Os logs a seguir são repetidos pelo pod alb-controller primário.

{"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 falha ao obter o token da cadeia de credenciais

Sintomas

Nenhuma alteração em HttpRoutes está sendo aplicada ao Gateway de Aplicativos para contêineres.

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 gerenciada do pod do Controlador ALB para fazer alterações no Gateway de Aplicativo para Contêineres estejam configuradas no Azure. As instruções sobre como configurar as credenciais federadas podem ser encontradas nos guias de início rápido: