Perché il mio controller del sistema di bilanciamento del carico AWS non riesce a trovare la sottorete su Amazon EKS?

5 minuti di lettura
0

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

Breve descrizione

Se il controller del sistema di bilanciamento del carico AWS non riesce a trovare la sottorete su Amazon EKS, visualizzi un errore. Per risolvere l'errore, completa i passaggi relativi al messaggio di errore che ricevi.

Si verifica il seguente errore quando il ruolo AWS Identity and Access Management (IAM) del tuo account per il controller del sistema di bilanciamento 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

Si verifica il seguente errore quando il controller del sistema di bilanciamento 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

Si verificano i seguenti errori quando il controller del sistema di bilanciamento 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.    Inserisci il seguente comando per verificare che il tuo account di servizio sia associato al controller del sistema di bilanciamento del carico AWS:

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

Riceverai un output simile al seguente:

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.    Verifica quale ruolo IAM è associato all'account di servizio associato al controller del sistema di bilanciamento del carico AWS:

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

Riceverai un output simile al seguente:

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 sistema di bilanciamento del carico AWS di creare un sistema di bilanciamento del carico utilizzando il rilevamento automatico.

Di seguito è riportato un esempio di tag di sottoreti private:

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

Di seguito è riportato un esempio di tag di sottoreti private:

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

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

Di seguito è riportato un esempio di sottorete con i tag corretti per un cluster con un sistema di bilanciamento del carico interno (sottorete privata):

kubernetes.io/role/internal-elb          1

Di seguito è riportato un esempio di sottorete con i tag corretti per un cluster con un sistema di bilanciamento 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 avere almeno due sottoreti in due diverse zone di disponibilità. Questo è un requisito per poter creare un Application Load Balancer.

Nota: puoi creare un Network Load Balancer 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 sono formattati correttamente. Ad esempio, i tag non possono avere spazi iniziali o finali.


AWS UFFICIALE
AWS UFFICIALEAggiornata 3 mesi fa