Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
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.
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
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"
You should see the following if the pod is primary:
successfully acquired lease azure-alb-system/alb-controller-leader-election
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:
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".
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: