Como soluciono problemas de balanceadores de carga criados pelo controlador de serviço Kubernetes no Amazon EKS?

7 minuto de leitura
0

Não consigo criar um serviço Kubernetes impulsionado por um balanceador de carga no Amazon Elastic Kubernetes Service (Amazon EKS).

Breve descrição

O Amazon EKS usa um dos dois controladores para gerenciar um balanceador de carga: controlador do balanceador de carga da AWS ou controlador de serviço Kubernetes. As etapas de solução de problemas a seguir se aplicam somente aos balanceadores de carga gerenciados pelo controlador de serviço Kubernetes. Para obter mais informações, consulte The Service Controller no site do Kubernetes AWS Cloud Provider e Tipo LoadBalancer no site do Kubernetes.

Para solucionar problemas com seu balanceador de carga de serviço, verifique se você tem as seguintes configurações:

  • As tags corretas para suas sub-redes Amazon Virtual Private Cloud (Amazon VPC)
  • As permissões necessárias do AWS Identity and Access Management (IAM) para o perfil do IAM do seu cluster
  • Uma definição de serviço válida do Kubernetes
  • Balanceadores de carga que permanecem dentro do limite da sua conta
  • Endereços IP livres suficientes em suas sub-redes
  • Um balanceador de carga configurado corretamente para evitar problemas de tempo limite de conexão
  • Destinos saudáveis do balanceador de carga

Se você ainda tiver um problema depois de verificar todos os itens anteriores, siga as etapas na seção Experimente etapas adicionais de solução de problemas.

Resolução

As etapas a seguir se aplicam ao Classic Load Balancer e ao Network Load Balancer. Para o Application Load Balancer, consulte Balanceamento de carga de aplicativos no Amazon EKS.

Observação: se você receber erros ao executar comandos da AWS Command Line Interface (AWS CLI), certifique-se de estar usando a versão mais recente da AWS CLI.

Use as tags corretas para suas sub-redes do Amazon VPC

1.    Abra o console do Amazon VPC.

2.    No painel de navegação, escolha Sub-redes.

3.    Escolha a guia Tags para cada sub-rede e confirme se existe uma tag. Por exemplo:

Key: kubernetes.io/cluster/yourEKSClusterName  
Value: shared

Observação: nesse caso, o Valor pode ser compartilhado ou possuído.

Por padrão, o controlador descobre automaticamente as sub-redes. Se houver várias sub-redes por zona de disponibilidade, o controlador priorizará as sub-redes na seguinte ordem:

  • Sub-redes com a tag de perfil correta: kubernetes.io/role/elb para sub-redes públicas e kubernetes.io/role/internal-elb para sub-redes privadas
  • Sub-redes com a tag de cluster: kubernetes.io/cluster/CLUSTER_NAME
  • A sub-rede que é a primeira em ordem lexicográfica

4.    Para suas sub-redes públicas, confirme se a seguinte tag existe:

Key: kubernetes.io/role/elb  
Value: 1

Observação: para ver se uma sub-rede é pública, verifique a tabela de rotas associada à sub-rede. Uma sub-rede pública tem uma rota para um gateway da Internet (igw-xxxxxxxxxxx). Uma sub-rede privada tem uma rota para a Internet por meio de um gateway NAT ou instância NAT, ou nenhuma rota para a Internet.

Importante: é necessário ter a tag na etapa 4 para criar um serviço de balanceador de carga voltado para a Internet. Um balanceador de carga voltado para a Internet encaminha pela Internet solicitações de clientes para destinos.

5.    Para suas sub-redes privadas, confirme se a seguinte tag existe:

Key: kubernetes.io/role/internal-elb  
Value: 1

Importante: é necessário ter a tag na etapa 5 para criar um serviço de balanceador de carga interno. Um balanceador de carga interno usa endereços IP privados para encaminhar solicitações para destinos.

Defina as permissões necessárias do AWS Identity and Access Management (IAM) para o perfil do IAM do seu cluster

1.    Abra o console do Amazon EKS.

2.    No painel de navegação, escolha Clusters.

3.    Selecione seu cluster e, em seguida, anote seu ARN de perfil do IAM do cluster.

  1.    Abra o console do IAM.

5.    No painel de navegação, escolha Perfis.

6.    Selecione o perfil que corresponde ao ARN de perfil do IAM do cluster que você identificou na etapa 3.

7.    Confirme se a política gerenciada pela AWS AmazonEKSClusterPolicy está atribuída ao seu perfil.

Observação: o ambiente de gerenciamento do Amazon EKS considera o perfil do IAM anterior para criar um balanceador de carga para seu serviço.

Usar uma definição de serviço Kubernetes válida

No arquivo YAML do seu serviço Kubernetes, verifique se spec.type está definido como LoadBalancer.

Veja o exemplo a seguir de um serviço Kubernetes que é impulsionado por um balanceador de carga:

apiVersion: v1  
kind: Service  
metadata:  
  annotations:  
    # This annotation is only required if you are creating an internal facing ELB. Remove this annotation to create public facing ELB.  
    service.beta.kubernetes.io/aws-load-balancer-internal: "true"  
  name: nginx-elb  
  labels:  
    app: nginx  
spec:  
  type: LoadBalancer  
  ports:  
  - name: "http"  
    port: 80  
    targetPort: 80  
  selector:  
    app: nginx

Observação: para personalizar seu serviço com uma anotação diferente, consulte Balanceador de carga interno e Suporte a TLS na AWS no site do Kubernetes.

Por padrão, o controlador de serviço integrado do Kubernetes cria um Classic Load Balancer. Para provisionar o Network Load Balancer, o serviço deve ter a anotação service.beta.kubernetes.io/aws-load-balancer-type: "nlb". Para obter mais detalhes, consulte Suporte ao Network Load Balancer na AWS no site do Kubernetes.

Verificar se seus balanceadores de carga estão dentro do limite da sua conta

Por padrão, uma conta da AWS tem no máximo 20 balanceadores de carga por região da AWS.

Para verificar quantos balanceadores de carga você tem, abra o console do Amazon Elastic Compute Cloud (Amazon EC2). Em seguida, escolha Load Balancers no painel de navegação.

Se você atingir o número máximo de balanceadores de carga, poderá solicitar um aumento em Service Quotas.

Verificar se há endereços IP livres suficientes em suas sub-redes

Para criar um balanceador de carga, cada sub-rede desse balanceador de carga deve ter no mínimo oito endereços IP livres. Isso é necessário tanto para o Classic Load Balancer quanto para o Network Load Balancer.

Problemas de tempo limite de conexão

Se seu balanceador de carga estiver enfrentando problemas de tempo limite intermitentes ou constantes, talvez haja um problema com a configuração do balanceador de carga. Isso pode acontecer quando o serviço de back-end não consegue lidar com o tráfego de entrada ou quando muitas solicitações são enviadas ao balanceador de carga. Para obter mais informações, consulte Como soluciono os erros de “Tempo limite de conexão esgotado” do Elastic Load Balancing?

Verificar as verificações de integridade do balanceador de carga

Se você não configurar corretamente o endpoint ou se o serviço de back-end não estiver respondendo às solicitações de verificação de integridade, ocorrerão problemas de verificação de integridade do balanceador de carga.

Para verificar se o balanceador de carga está apontando para o endpoint correto, execute o comando describe-target-health da CLI da AWS:

aws elbv2 describe-target-health --target-group-arn arn:aws:elasticloadbalancing:us-west-2:1234567890:targetgroup/my-targets/6d0ecf831eec9f09

Para verificar a configuração da verificação de integridade do grupo de destino, execute o comando describe-target-groups da CLI da AWS:

aws elbv2 describe-target-groups --target-group-arns arn:aws:elasticloadbalancing:us-west-2:1234567890:targetgroup/my-targets/6d0ecf831eec9f09

Para obter mais informações, consulte Verificação de integridade para seus grupos de destino.

Experimente etapas adicionais de solução de problemas

Para verificar se há uma mensagem de erro no serviço Kubernetes que possa ajudar você a solucionar o problema, execute o seguinte comando describe-service:

$ kubectl describe service my-elb-service

Se o serviço for criado com êxito, você receberá uma saída semelhante ao exemplo a seguir:

...  
...  
Events:  
  Type    Reason                Age   From                Message  
  ----    ------                ----  ----                -------  
  Normal  EnsuringLoadBalancer  47s   service-controller  Ensuring load balancer  
  Normal  EnsuredLoadBalancer   44s   service-controller  Ensured load balancer

Se o serviço não for criado com êxito, você receberá uma mensagem de erro.

Para obter mais informações sobre mensagens de erro, verifique os seguintes recursos:

Informações relacionadas

Por que uma sub-rede usada por balanceadores de carga na minha VPC não tem endereços IP suficientes?

Solução de problemas do Amazon EKS

Solucionar problemas do Application Load Balancer

Solucionar problemas do Classic Load Balancer

AWS OFICIAL
AWS OFICIALAtualizada há um ano