Por que meu AWS Load Balancer Controller não consegue encontrar minha sub-rede no Amazon EKS?

Última atualização: 12/1/2023

Meu AWS Load Balancer Controller não consegue encontrar minha sub-rede no Amazon Elastic Kubernetes Service (Amazon EKS).

Breve descrição

Se o AWS Load Balancer Controller não conseguir encontrar sua sub-rede no Amazon EKS, você receberá um erro. Para solucionar o erro, conclua as etapas relevantes para a mensagem de erro que você receber.

O seguinte erro ocorre quando a função do AWS Identity and Access Management (IAM) da sua conta para o AWS Load Balancer Controller não tem as permissões necessárias:

{"level":"error","ts":1621443417.9175518,"logger":"controller","msg":"Reconciler error","controller":"ingress","name":" ingress-2048","namespace":" game-2048","error":"couldn't auto-discover subnets: UnauthorizedOperation: You are not authorized to perform this operation.\n\tstatus code: 403, request id: 72ee57ae-f804-4f81-b069-8b04114b67b0"}

Para solucionar o erro anterior, execute as etapas na seção Solucionar o erro de permissão negada.

-ou-

O seguinte erro ocorre quando o AWS Load Balancer Controller não consegue descobrir pelo menos uma sub-rede:

{"level":"error","ts":1608229710.3212903,"logger":"controller","msg":"Reconciler error","controller":"ingress","name":"ingress-2048","namespace":"game-2048","error":"couldn't auto-discover subnets: unable to discover at least one subnet"}

Para solucionar o erro anterior, execute as etapas na seção Solucionar o erro único de descoberta sub-rede.

-ou-

Os seguintes erros ocorrem quando o AWS Load Balancer Controller não consegue descobrir duas ou mais sub-redes qualificadas:

"msg"="Reconciler error" "error"="failed to build LoadBalancer configuration due to failed to resolve 2 qualified subnet with at least 8 free IP Addresses for ALB
{"level":"error","ts":1606329481.2930484,"logger":"controller","msg":"Reconciler error","controller":"ingress","name":"reciter-ing","namespace":"reciter","error":"InvalidSubnet: Not enough IP space available in subnet-xxxxxxxxxxxxxx. ELB requires at least 8 free IP addresses in each subnet.\n\tstatus code: 400, request id: 2a37780c-f411-xxxxx-xxxxx-xxxxxxxxx"}

Para solucionar os erros anteriores, execute as etapas na seção Solucionar vários erros de descoberta de sub-rede.

Resolução

Solucionar o erro de permissão negada

1.    Digite oi seguinte comando para verificar se sua conta de serviço está associada ao AWS Load Balancer Controller:

$ kubectl get deploy aws-load-balancer-controller -n kube-system -o yaml | grep -i serviceAccount

É obtida uma saída semelhante à descrita a seguir:

serviceAccount: aws-load-balancer-controller
serviceAccountName: aws-load-balancer-controller

Observação: se a implantação for implantada em um namespace diferente, substitua -n kube-system pelo namespace apropriado.

2.    Verifique qual perfil do IAM está vinculado à conta de serviço associada ao AWS Load Balancer Controller:

$ kubectl describe sa aws-load-balancer-controller -n kube-system | grep role-arn

É obtida uma saída semelhante à descrita a seguir:

annotations: eks.amazonaws.com/role-arn: arn:aws:iam::xxxxxxxxxxx:role/eksctl-cluster18-addon-iamserviceaccount-kub-Role1-xxxxxxxxxxxxx

3.    Conceda permissões EC2:DescribeAvailabilityZones à função do IAM identificada na etapa 2.

Solucionar o erro único de descoberta sub-rede

1.    Adicione as etiquetas adequadas a suas sub-redes para permitir que o AWS Load Balancer Ingress Controller crie um balanceador de carga usando a descoberta automática.

Veja a seguir um exemplo de etiquetas de sub-redes privadas:

kubernetes.io/role/internal-elb                Set to 1 or empty tag value for internal load balancers

Veja a seguir um exemplo de etiquetas de sub-redes privadas:

kubernetes.io/role/elb                         Set to 1 or empty tag value for internet-facing load balancers

Observação: você pode atribuir manualmente sub-redes ao balanceador de carga usando a anotação alb.ingress.kubernetes.io/subnets. Para obter mais informações, consulte Inserir anotações no site do AWS Load Balancer Controller.

Veja a seguir um exemplo de uma sub-rede com as etiquetas corretas para um cluster com um balanceador de carga interno (sub-rede privada):

kubernetes.io/role/internal-elb          1

Veja a seguir um exemplo de uma sub-rede com as etiquetas corretas para um cluster com um balanceador de carga público (sub-rede pública):

kubernetes.io/role/elb

2.    Etiquete suas sub-redes com o formato adequado.

Chave: kubernetes.io/cluster/nome-do-seu-cluster

Valor: shared (compartilhado) ou owned (particular)

Importante: se estiver usando o AWS Load Balancer Controller versão v2.1.1 ou anterior, é necessário etiquetar suas sub-redes no formato anterior. A etiquetagem é opcional para as versões 2.1.2 ou posteriores. Uma das práticas recomendadas é etiquetar uma sub-rede se alguma das seguintes situações for verdadeira:

  • Você tem vários clusters em execução na mesma VPC.
  • Você tem vários serviços da AWS que compartilham sub-redes em uma VPC.
  • Você quer ter mais controle sobre onde os balanceadores de carga são provisionados para cada cluster.

Solucionar vários erros de descoberta de sub-rede

1.    Confirme se você tem pelo menos duas sub-redes em duas zonas de disponibilidade diferentes. Esse é um requisito para criar um Application Load Balancer.

Observação: é possível criar um Network Load Balancer com uma única sub-rede.

2.    Para cada sub-rede, especifique um bloco CIDR com um bitmask mínimo de /27 (p. ex.: 10.0.0.0/27) e pelo menos oito endereços IP livres.

3.    Confirme se as etiquetas nas sub-redes estão formatadas corretamente. Por exemplo, as etiquetas não podem ter espaços à esquerda ou à direita.


Este artigo ajudou?


Precisa de ajuda com faturamento ou suporte técnico?