Por que meu AWS Load Balancer Controller não consegue encontrar minha sub-rede no Amazon EKS?
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.

Conteúdo relevante
- AWS OFICIALAtualizada há 8 meses
- AWS OFICIALAtualizada há um ano
- AWS OFICIALAtualizada há 9 meses