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

6 minuto de leitura
0

Não consigo criar um Network Load Balancer ou um Application Load Balancer usando o AWS Load Balancer Controller. Ou o balanceador de carga não é criado depois que eu criei os objetos Service ou Ingress.

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 (Application Load Balancer) ou Service (Network Load Balancer).
  • 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 um perfil do Fargate é criado para o namespace em que reside o objeto Ingress ou Service.
  • Verifique se há dependências não resolvidas.

O AWS Load Balancer Controller gerencia o balanceamento de carga elástico de um cluster do EKS. O controlador provisiona os seguintes recursos:

  • Um Application Load Balancer quando você cria uma entrada do Kubernetes.
  • Um Network Load Balancer quando você cria um serviço do Kubernetes do tipo LoadBalancer. Anteriormente, o Kubernetes Network Load Balancer era usado para destinos de instância e o AWS Load Balancer Controller era usado para destinos IP. Com o AWS Load Balancer Controller versão 2.3.0 ou posterior, você pode criar um Network Load Balancer usando qualquer tipo de destino. Para obter mais informações, consulte Target type (Tipo de destino).

Resolução

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

Para obter uma lista dos pré-requisitos do Application Load Balancer, consulte Balanceamento de carga da aplicação no Amazon EKS. Para obter uma lista dos pré-requisitos do Network Load Balancer, consulte Balanceador de carga da rede no Amazon EKS.

1.    Verifique se o AWS Load Balancer Controller foi provisionado com êxito. É uma prática recomendada usar a versão 2.4.4 ou posterior.

2.    Verifique o número de sub-redes. O Application Load Balancer precisa de pelo menos duas sub-redes em zonas de disponibilidade diferentes. O Network Load Balancer precisa de pelo menos uma sub-rede. As sub-redes devem ter pelo menos oito endereços IP disponíveis. Para obter mais informações, consulte Exibir suas VPCs.

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 Network Load Balancer

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 tags do console do Amazon EC2, consulteTrabalhar com tags usando o console. Para obter informações sobre como adicionar tags usando a AWS Command Line Interface (AWS CLI), consulte Trabalhar com tags usando a linha de comando.

Observação: caso você receba erros ao executar os comandos da AWS CLI, certifique-se de estar utilizando a versão mais recente da AWS CLI.

4.FSP 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 tags a seguir. Sem essas tags, a descoberta automática de sub-redes não funcionará.

Tags 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"

Verificar as anotações do objeto Ingress ou Service

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. Para obter uma lista de todas as anotações disponíveis compatíveis com o AWS Load Balancer Controller for Application Load Balancing, consulte Ingress annotations (Anotações do Ingress) no GitHub. Para obter uma lista de todas as anotações disponíveis compatíveis com o AWS Load Balancer Controller para Network Load Balancing, consulte Service annotations (Anotações de serviço) no GitHub.

Application Load Balancer

Network Load Balancer

  • 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 do Fargate criado para o namespace em que reside o objeto Ingress ou Service

O tipo de destino IP é necessário quando os pods de destino estão sendo executados no Fargate. Execute os seguintes comandos para verificar se um perfil do Fargate foi 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>

Verificar se há dependências não resolvidas

O Amazon EKS adiciona as seguintes regras ao grupo de segurança do nó:

  • Uma regra de entrada para tráfego de clientes
  • Uma regra de entrada para cada sub-rede do balanceador de carga na VPC para cada Network Load Balancer que você criar (para verificações de integridade).

A implantação de um serviço do tipo LoadBalancer pode falhar se o Amazon EKS tentar criar regras que excedam a cota para o número máximo de regras permitido para um grupo de segurança.

Revise a documentação para garantir que todas as dependências sejam atendidas. Para Application Load Balancer, consulte Balanceamento de carga da aplicação no Amazon EKS. Para Network Load Balancer, consulte Balanceamento de carga da rede no Amazon EKS. Por exemplo, se você estiver usando um Application Load Balancer, o objeto Service deverá especificar o NodePort ou o LoadBalancer para usar o modo de tráfego da instância.


AWS OFICIAL
AWS OFICIALAtualizada há um ano