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