Como descubro automaticamente as sub-redes usadas pelo Application Load Balancer no Amazon EKS?
Quero descobrir automaticamente as sub-redes que meu Application Load Balancer usa no Amazon Elastic Kubernetes Service (Amazon EKS).
Breve descrição
Para identificar a sub-rede que seu Application Load Balancer usa, o AWS Load Balancer Controller aws-load-balancer-controller consulta as sub-redes do cluster. A consulta usa as seguintes tags como filtro:
kubernetes.io/cluster/cluster-name shared kubernetes.io/role/elb 1 OR kubernetes.io/role/internal-elb 1
Observação: substitua cluster-name pelo nome do seu cluster do Amazon EKS.
Para permitir que o AWS Load Balancer Controller descubra automaticamente as sub-redes usadas pelo Application Load Balancer, marque suas sub-redes.
Resolução
Observação: se você receber erros ao executar comandos da AWS Command Line Interface (AWS CLI), consulte Solução de problemas da AWS CLI. Além disso, verifique se você está usando a versão mais recente da AWS CLI.
Adicionar tags a sub-redes
Conclua as etapas a seguir:
- Implante o AWS Load Balancer Controller em seu cluster do Amazon EKS.
- Para verificar se você instalou corretamente o AWS Load Balancer Controller, execute o seguinte comando:
Observação: se você implantou o AWS Load Balancer Controller em um namespace diferente, substitua -n kube-system pelo namespace correto.kubectl get deployment -n kube-system aws-load-balancer-controller - Crie um recurso do Kubernetes Ingress em seu cluster com a seguinte anotação:
Observação: o AWS Load Balancer Controller ajuda a criar balanceadores de carga. O recurso Ingress configura o Application Load Balancer para rotear o tráfego HTTP e HTTPS para diferentes pods em seu cluster.annotations: kubernetes.io/ingress.class: alb - Nas anotações do objeto Ingress, insira internal para criar um balanceador de carga interno ou internet-facing para criar um balanceador de carga público:
-ou-alb.ingress.kubernetes.io/scheme: internal
Observação: é possível usar tags para descoberta automática de sub-rede em vez da anotação manual alb.ingress.kubernetes.io/subnets.alb.ingress.kubernetes.io/scheme: internet-facing
Para clusters versões 1.18 e anteriores, o Amazon EKS adiciona a seguinte tag a todas as sub-redes transmitidas pelo Amazon EKS durante a criação do cluster:
Observação: substitua CLUSTER_NAME pelo nome do seu cluster.kubernetes.io/cluster/CLUSTER_NAME
A tag kubernetes.io/cluster/CLUSTER_NAME só é obrigatória se você usar o AWS Load Balancer Controller versão 2.1.1 ou anterior. O Amazon EKS não adiciona nem remove automaticamente essa tag. Embora a tag fosse necessária para clusters antes da versão 1.19, ela permanece nas sub-redes mesmo após as atualizações do cluster. - Para verificar se suas sub-redes têm as tags corretas, execute o seguinte comando describe-subnets da AWS CLI:
Observação: substitua your-subnet-abcdefghxyz pelo ID da sua sub-rede.aws ec2 describe-subnets --subnet-ids your-subnet-abcdefghxyz - Para implantar a aplicação de amostra, execute o seguinte comando:
Observação: o comando anterior cria um Application Load Balancer por causa do objeto Ingress.kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/main/docs/examples/2048/2048_full.yaml - Para verificar se o Amazon EKS criou o recurso Ingress e um Application Load Balancer associado, execute o seguinte comando:
kubectl get ingress/2048-ingress -n game-2048
Solucionar erros de tag
Execute as ações a seguir com base no erro que você recebe ao usar tags para descobrir sub-redes automaticamente.
Problemas de permissões negadas
O perfil do AWS Identity and Access Management (AWS IAM) da sua conta da AWS para o AWS Load Balancer Controller deve ter as permissões necessárias. Se isso não acontecer, você receberá a seguinte mensagem de erro:
"{"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 esse problema, conclua as etapas a seguir:
-
Para verificar se sua conta de serviço está associada ao AWS Load Balancer Controller, execute o seguinte comando:
kubectl get deploy aws-load-balancer-controller -n kube-system -o yaml | grep -i serviceAccountObservação: se você implantou o AWS Load Balancer Controller em um namespace diferente, substitua -n kube-system pelo namespace correto.
Exemplo de saída:serviceAccount: aws-load-balancer-controller serviceAccountName: aws-load-balancer-controller -
Para identificar o perfil do IAM vinculado à conta de serviço que você associou ao AWS Load Balancer Controller, execute o seguinte comando:
kubectl describe sa aws-load-balancer-controller -n kube-system | grep role-arnExemplo de saída:
annotations: eks.amazonaws.com/role-arn: arn:aws:iam::abcdefxyz:role/eksctl-cluster18-addon-iamserviceaccount-kub-Role1-abcdefxyz
Observação: se você não usa perfis do IAM para contas de serviço (IRSA), certifique-se de que o perfil do IAM do nó de processamento do Amazon EKS tenha as permissões necessárias. Para ver as permissões necessárias, consulte iam_policy.json no site do GitHub.
Problema de descoberta de sub-rede única
Você recebe uma das seguintes mensagens de erro quando o AWS Load Balancer Controller não descobre 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 resolve at least one subnet"}"
-ou-
"kubebuilder/controller "msg"="Reconciler error" "error"="failed to build LoadBalancer configuration due to
retrieval of subnets failed to resolve 2 qualified subnets. Subnets must contain the kubernetes.io/cluster/\u003ccluster name\u003e tag with a value of shared or owned and the kubernetes.io/role/elb tag signifying it should be used for ALBs Additionally, there must be at least 2 subnets with unique availability zones as required by ALBs. Either tag subnets to meet this requirement or use the subnets annotation on the ingress resource to explicitly call out what subnets to use for ALB creation. The subnets that did resolve were []" "controller"="alb-ingress-controller" "request"={"Namespace":"default","Name":"2048-ingress"}"
Para resolver esse problema, adicione as tags às suas sub-redes para permitir que o AWS Load Balancer Controller use a descoberta automática para criar um balanceador de carga.
Para sub-redes privadas, adicione a seguinte tag:
kubernetes.io/role/internal-elb 1
Para sub-redes públicas, adicione a seguinte tag:
kubernetes.io/role/elb 1
Observação: é possível atribuir manualmente sub-redes ao seu balanceador de carga com a anotação alb.ingress.kubernetes.io/subnets. Para ver as permissões necessárias, consulte iam_policy.json no site do GitHub.
Identifique suas sub-redes com o seguinte formato, sem espaços iniciais ou finais:
- Em Chave, digite kubernetes.io/cluster/your-cluster-name.
- Em Valor, insira compartilhado ou próprio.
Se você usar o AWS Load Balancer Controller versão 2.1.1 ou anterior, deverá marcar suas sub-redes no formato anterior. A marcação é opcional para versões 2.1.2 ou posteriores.
É uma prática recomendada marcar uma sub-rede nos seguintes cenários:
- Você tem vários clusters executados na mesma nuvem privada virtual (VPC).
- Você tem vários serviços da AWS que compartilham sub-redes em uma VPC.
- Você deseja mais controle sobre onde os balanceadores de carga são alocados para cada cluster.
Vários erros de descoberta de sub-rede
Você recebe a seguinte mensagem de erro quando o AWS Load Balancer Controller não descobre duas ou mais sub-redes qualificadas:
"{"level":"error","ts":"2024-08-12T19:01:27Z","msg":"Reconciler error","controller":"ingress","object":{"name":"ingress-2048","namespace":"game-2048"},"namespace":"game-2048","name":"ingress-2048","reconcileID":"1234567","error":"couldn't auto-discover subnets: unable to resolve at least one subnet (2 match VPC and tags: [kubernetes.io/role/internal-elb], 2 have fewer than 8 free IPs)"}"
Para solucionar esse problema, conclua as etapas a seguir:
- Confirme se você tem pelo menos duas sub-redes em duas zonas de disponibilidade diferentes.
Observação: este é um requisito para criar um Application Load Balancer. É possível criar um Network Load Balancer com uma única sub-rede. - Para cada sub-rede, especifique um bloco CIDR com pelo menos uma máscara de bits /27, como 10.0.0.0/27, e pelo menos oito endereços IP livres.
- Confirme se você formatou corretamente as tags nas sub-redes. Por exemplo, as tags não podem ter espaços no início ou no final.
- Tópicos
- Containers
- Idioma
- Português
Vídeos relacionados


Conteúdo relevante
feita há 10 meses
feita há um ano