Perché il mio controller bilanciatore del carico AWS non riesce a trovare il mio sottorete su Amazon EKS?

Ultimo aggiornamento: 06-10-2021

Il controller del bilanciatore del carico AWS non riesce a trovare la sottorete in Amazon Elastic Kubernetes Service (Amazon EKS).

Breve descrizione

Visualizzi un errore se il controller del bilanciatore del carico AWS non riesce a trovare la sottorete su Amazon EKS.

Se ricevi il seguente errore, il ruolo AWS Identity and Access Management (IAM) del tuo account di servizio per il controller del bilanciatore del carico AWS non dispone delle autorizzazioni richieste:

{"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"}

Per risolvere l'errore precedente, completa i passaggi descritti nella sezione Risolvi l'errore di autorizzazione negata:

-oppure-

Se visualizzi il seguente errore, il controller del bilanciatore del carico AWS non è in grado di rilevare almeno una sottorete:

{"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"}

Per risolvere l'errore precedente, completa i passaggi descritti nella sezione Risolvi l'errore singolo di rilevamento della sottorete:

-oppure-

Se ricevi uno dei seguenti errori, il controller del bilanciatore del carico AWS non è in grado di rilevare due o più sottoreti qualificate.

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

Per risolvere gli errori precedenti, completa i passaggi descritti nella sezione Risolvi gli errori multipli di rilevamento delle sottoreti:

Risoluzione

Risolvi l'errore di autorizzazione negata

1.    Verifica che il tuo account di servizio sia associato al controller del bilanciatore del carico AWS:

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

Output:

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

Nota: se l'implementazione è distribuita in uno spazio dei nomi diverso, sostituisci -n kube-system con lo spazio dei nomi appropriato.

2.    Scopri quale ruolo IAM è associato all'account di servizio associato al controller del bilanciatore del carico AWS:

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

Output:

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

3.    Concedi le autorizzazioni ec2:DescribeAvailabilityZones al ruolo IAM identificato nel passaggio 2.

Risolvi l'errore singolo di rilevamento della sottorete

1.    Aggiungi i tag appropriati nelle sottoreti per consentire al controller di ingresso del bilanciatore del carico di AWS di creare un bilanciatore del carico utilizzando il rilevamento automatico.

Esempio di tag di sottoreti private:

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

Esempio di tag di sottoreti pubbliche:

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

Nota: puoi assegnare manualmente sottoreti al bilanciatore del carico utilizzando l'annotazione alb.ingress.kubernetes.io/subnets. Per ulteriori informazioni, consulta Annotazioni di ingresso sul sito Web del controller del bilanciatore del carico AWS.

Esempio di sottorete con i tag corretti per un cluster con un bilanciatore del carico interno (sottorete privata):

kubernetes.io/role/internal-elb          1

Esempio di sottorete con i tag corretti per un cluster con un bilanciatore del carico pubblico (sottorete pubblica):

kubernetes.io/role/elb

2.    Tagga le sottoreti con il formato appropriato.

Chiave: kubernetes.io/cluster/your-cluster-name

Valore: condiviso o di proprietà

Importante: se utilizzi il controller del bilanciatore del carico AWS versione 2.1.1 o precedente, devi taggare le sottoreti nel formato precedente. L'assegnazione di tag è facoltativa per le versioni 2.1.2 o successive. È best practice taggare una sottorete se si verifica una delle seguenti condizioni:

  • Sono presenti più cluster in esecuzione nello stesso VPC.
  • Hai più servizi AWS che condividono sottoreti in un VPC.
  • Desideri un maggiore controllo sulla posizione in cui vengono assegnati i bilanciatori del carico per ogni cluster.

Risolvi gli errori multipli di rilevamento delle sottoreti

1.    Verifica di disporre di almeno due sottoreti in due zone di disponibilità diverse, requisito necessario per la creazione di un Application Load Balancer.

Nota: puoi creare un bilanciatore del carico di rete con una sottorete singola.

2.    Per ogni sottorete, specifica un blocco CIDR con almeno una maschera di bit /27 (ad esempio: 10.0.0.0/27) e almeno otto indirizzi IP liberi.

3.    Conferma che i tag sulle sottoreti siano formattati correttamente. Ad esempio, i tag non devono avere spazi iniziali o finali.


Questo articolo è stato utile?


Hai bisogno di supporto tecnico o per la fatturazione?