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 | PRONTO | ATUALIZADO | DISPONÍVEL | IDADE | CONTENTORES | IMAGENS | SELETOR |
---|---|---|---|---|---|---|---|
ALB-Controlador | 2/2 | 2 | 2 | 18d | ALB-Controlador | mcr.microsoft.com/application-lb/images/alb-controller:1.3.7 | app=controlador alb |
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-controlador-bootstrap |
Neste exemplo, a versão do controlador ALB é 1.3.7.
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.
Gorjeta
A versão mais recente do ALB Controller pode ser encontrada nas notas de versão do ALB Controller.
Coletar logs do controlador ALB
Os logs podem ser coletados do Controlador ALB usando o comando kubectl logs fazendo 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ê deve ver uma saída semelhante ao exemplo a seguir. Os nomes dos pods podem diferir ligeiramente.
NOME PRONTO ESTADO REINÍCIOS IDADE controlador alb-6648c5d5c-sdd9t 1/1 Em Execução 0 4d6h controlador alb-6648c5d5c-au234 1/1 Em Execução 0 4d6h alb-controlador-bootstrap-6648c5d5c-hrmpc 1/1 Em Execução 0 4d6h O controlador ALB usa uma eleição fornecida pelo gerenciador de tempo de execução do controlador para determinar um pod ativo e em espera para alta disponibilidade.
Copie o nome de cada pod alb-controller (não o pod de 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ê deve ver o seguinte se o pod for primário:
successfully acquired lease azure-alb-system/alb-controller-leader-election
Coletar os logs
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, 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:
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.
- 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
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".
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 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
Verifique se as credenciais federadas da identidade gerenciada para o pod do Controlador ALB fazer 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: