Como posso solucionar problemas ao criar um balanceador de carga usando o AWS Load Balancer Controller?

Última atualização: 29/10/2021

Não consigo criar um balanceador de carga da rede (NLB) ou um balanceador de carga da aplicação (ALB) usando o AWS Load Balancer Controller (anteriormente conhecido como ALB Ingress Controller). Ou o balanceador de carga não é criado depois que eu criei os objetos Service ou Ingress. Como posso solucionar isso?

Breve descrição

Para solucionar problemas de criação do balanceador de carga, faça o seguinte:

  • Certifique-se de que todos os pré-requisitos sejam atendidos.
  • Verifique as anotações do objeto Ingress (ALB) ou Service (NLB).
  • Consulte os logs do pod do AWS Load Balancer Controller para obter informações adicionais.
  • Se o cluster for executado no AWS Fargate, verifique se há um perfil Fargate criado para o namespace em que reside o objeto Ingress ou Service.
  • Verifique se há dependências não endereçadas.

Resolução

Certifique-se de que todos os pré-requisitos sejam atendidos

Para obter uma lista dos pré-requisitos do ALB, consulte Balanceador de carga da aplicação no Amazon Elastic Kubernetes Service (Amazon EKS). Para obter uma lista dos pré-requisitos do NLB, consulte Balanceador de carga da rede no Amazon EKS.

1.    Verifique se o AWS Load Balancer Controller foi provisionado com êxito.

2.    Verifique o número de sub-redes. O ALB precisa de pelo menos duas sub-redes, e o NLB precisa de pelo menos uma sub-rede. Para obter mais informações, consulteExibir sua sub-rede.

3.    Você deve usar a seguinte etiqueta em determinados cenários:

  • Chave: "kubernetes.io/cluster/cluster-name"
  • Valor: "compartilhado" ou "particular"

Se você estiver usando um Balanceador de carga da aplicação

Você deve marcar exatamente um grupo de segurança nos seguintes cenários:

  • Você está usando vários grupos de segurança anexados ao nó de processamento.
  • Você está usando o controlador do AWS Load Balancer versão v2.1.1 ou anterior.

Se você estiver usando um balanceador de carga da rede

Se você estiver usando o AWS Load Balancer Controller versão v2.1.1 ou anterior, as sub-redes deverão ser marcadas.

Para obter informações sobre como adicionar etiquetas do console do Amazon EC2, consulteTrabalhar com etiquetas usando o console. Para obter informações sobre como adicionar etiquetas usando a AWS Command Line Interface, consulteTrabalhar com etiquetas usando a linha de comando.

Observação: se você receber erros ao executar comandos da AWS CLI, certifique-se de usar a versão mais recente da AWS CLI.

4.    A menos que os IDs de sub-rede sejam explicitamente especificados como anotações no objeto Service ou Ingress, verifique se as sub-redes têm as seguintes etiquetas. Sem essas etiquetas, aDescoberta automática da sub-rede não funcionará.

Etiquetas de sub-redes privadas:

  • Chave: "kubernetes.io/role/internal-elb"
  • Valor: “1"

Etiquetas de sub-redes públicas:

  • Chave: "kubernetes.io/role/elb"
  • Valor: “1"

Verifique as anotações do objeto Ingress (ALB) ou Service (NLB)

Verifique as anotações no objeto Service ou as anotações no objeto Ingress. As anotações necessárias para configurar um balanceador de carga são as seguintes:

Observação: Outras anotações usam valores padrão.

Balanceador de carga da aplicação

  • kubernetes.io/ingress.class: alb (garante que os objetos Ingress usem o AWS Load Balancer Controller)

Balanceador de carga da rede

  • Com destinos IP: service.beta.kubernetes.io/aws-load-balancer-type: serviço “externo”. beta.kubernetes.io/aws-load-balancer-nlb-target-type: “ip”
  • Com destinos de instância: service.beta.kubernetes.io/aws-load-balancer-type: serviço “externo”. beta.kubernetes.io/aws-load-balancer-nlb-target-type: “instance”

Execute um dos seguintes comandos para exibir o objeto Service ou Ingress. No exemplo a seguir, substitua SERVICE-NAME/INGRESS-NAME e NAMESPACE pelos valores corretos para seu caso de uso.

kubectl describe service <SERVICE-NAME> -n <NAMESPACE>
kubectl describe ingress <INGRESS-NAME> -n <NAMESPACE>

Execute um dos seguintes comandos para editar o objeto Service ou Ingress. Nos exemplos a seguir, substitua SERVICE-NAME/INGRESS-NAME e NAMESPACE pelos valores corretos para seu caso de uso:

kubectl edit service <SERVICE-NAME> -n <NAMESPACE>
kubectl edit ingress <INGRESS-NAME> -n <NAMESPACE>

Consulte os logs do pod do AWS Load Balancer Controller para obter informações adicionais

Execute o seguinte comando para revisar os logs do AWS Load Balancer Controller:

kubectl logs -n kube-system deployment.apps/aws-load-balancer-controller

Se nenhum dos pods do controlador mostrar logs, verifique se os pods do controlador estão sendo executados:

kubectl get deployment -n kube-system aws-load-balancer-controller

Se o cluster for executado no Fargate, verifique se há um perfil Fargate criado para o namespace em que reside o objeto Ingress ou Service

Execute os seguintes comandos para verificar se há um perfil Fargate criado para o namespace em que reside o objeto Ingress ou Service. No exemplo a seguir, substitua CLUSTER-NAME pelo nome do cluster.

eksctl get fargateprofile --cluster <CLUSTER-NAME> -o yaml

Para criar um perfil do Fargate, execute o seguinte comando. No exemplo a seguir, substitua CLUSTER-NAME, REGION, FARGATE-PROFILE-NAME e NAMESPACE pelos valores corretos para seu caso de uso.

eksctl create fargateprofile --cluster <CLUSTER-NAME> --region <REGION> --name <FARGATE-PROFILE-NAME> --namespace <NAMESPACE>

Verifique se há dependências não endereçadas

Revise a documentação para garantir que todas as dependências sejam atendidas. Para ALB, consulteBalanceador de carga da aplicação no EKS. Para NLB, consulteBalanceador de carga da rede no Amazon EKS.

Por exemplo, se você estiver usando ALB, o objeto Service deverá especificar o NodePort ou o LoadBalancer para usar o modo de tráfego da instância.


Este artigo ajudou?


Precisa de ajuda com faturamento ou suporte técnico?