Come posso scoprire automaticamente le sottoreti utilizzate dal mio Application Load Balancer in Amazon EKS?
Desidero scoprire automaticamente le sottoreti utilizzate dal mio Application Load Balancer (ALB) in Amazon Elastic Kubernetes Service (Amazon EKS).
Breve descrizione
Per identificare la sottorete utilizzata dall'Application Load Balancer, AWS Load Balancer Controller aws-load-balancer-controller eseguire query sulle sottoreti del cluster. La query utilizza i seguenti tag come filtro:
kubernetes.io/cluster/cluster-name shared kubernetes.io/role/elb 1 OR kubernetes.io/role/internal-elb 1
Nota: Sostituisci cluster-name con il nome del tuo cluster Amazon EKS.
Per consentire all'AWS Load Balancer Controller di rilevare automaticamente le sottoreti utilizzate dall'Application Load Balancer, assegna un tag alle sottoreti.
Risoluzione
Nota: se ricevi errori quando esegui i comandi dell'Interfaccia della linea di comando AWS (AWS CLI), consulta Risoluzione degli errori per AWS CLI. Inoltre, assicurati di utilizzare la versione più recente di AWS CLI.
Aggiungi tag alle sottoreti
Completa i seguenti passaggi:
- Distribuisci AWS Load Balancer Controller nel cluster Amazon EKS.
- Per verificare di aver installato correttamente AWS Load Balancer Controller, esegui questo comando:
Nota: se hai distribuito AWS Load Balancer Controller in un namespace diverso, sostituisci -n kube-system con il namespace corretto.kubectl get deployment -n kube-system aws-load-balancer-controller - Crea una risorsa Ingress Kubernetes nel cluster con la seguente annotazione:
Nota: AWS Load Balancer Controller aiuta a creare bilanciatori del carico. La risorsa Ingress configura l'Application Load Balancer per indirizzare il traffico HTTP(S) verso Pod diversi all'interno del cluster.annotations: kubernetes.io/ingress.class: alb - Nelle annotazioni dell'oggetto Ingress, inserisci internal per creare un bilanciatore del carico interno o Internet-facing per creare un bilanciatore del carico pubblico:
-oppure-alb.ingress.kubernetes.io/scheme: internal
Nota: puoi utilizzare i tag per il rilevamento automatico delle sottoreti anziché l'annotazione manuale alb.ingress.kubernetes.io/subnets.alb.ingress.kubernetes.io/scheme: internet-facing
Per le versioni del cluster 1.18 e precedenti, Amazon EKS aggiunge il seguente tag a tutte le sottoreti che Amazon EKS passa durante la creazione del cluster:
Nota: sostituisci CLUSTER_NAME con il nome del tuo cluster.kubernetes.io/cluster/CLUSTER_NAME
Il tag kubernetes.io/cluster/CLUSTER_NAME è richiesto solo se utilizzi AWS Load Balancer Controller versione 2.1.1 o precedente. Amazon EKS non aggiunge o rimuove automaticamente il tag. Sebbene il tag fosse richiesto per i cluster prima della versione 1.19, rimane nelle sottoreti anche dopo l'aggiornamento del cluster. - Per verificare che le sottoreti abbiano i tag corretti, esegui questo comando AWS CLI describe-subnets:
Nota: sostituisci your-subnet-abcdefghxyz con l'ID della tua sottorete.aws ec2 describe-subnets --subnet-ids your-subnet-abcdefghxyz - Per distribuire un esempio di applicazione, esegui questo comando:
Nota: il comando precedente crea un Application Load Balancer per la presenza dell'oggetto Ingress.kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/main/docs/examples/2048/2048_full.yaml - Per verificare che Amazon EKS abbia creato la risorsa Ingress e un Application Load Balancer associato, esegui questo comando:
kubectl get ingress/2048-ingress -n game-2048
Risolvi gli errori relativi ai tag
Esegui queste azioni in base all'errore che ricevi quando utilizzi i tag per rilevare automaticamente le sottoreti.
Problemi relativi ad autorizzazioni negate
Il ruolo AWS Identity and Access Management (AWS IAM) dell'account AWS per AWS Load Balancer Controller deve avere le autorizzazioni richieste. In caso contrario, ricevi il seguente messaggio di errore:
"{"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 il problema, completa i seguenti passaggi:
-
Per verificare che l'account di servizio sia associato ad AWS Load Balancer Controller, esegui questo comando:
kubectl get deploy aws-load-balancer-controller -n kube-system -o yaml | grep -i serviceAccountNota: se hai distribuito AWS Load Balancer Controller in un namespace diverso, sostituisci -n kube-system con il namespace corretto.
Esempio di output:serviceAccount: aws-load-balancer-controller serviceAccountName: aws-load-balancer-controller -
Per identificare il ruolo IAM collegato all'account di servizio associato ad AWS Load Balancer Controller, esegui questo comando:
kubectl describe sa aws-load-balancer-controller -n kube-system | grep role-arnEsempio di output:
annotations: eks.amazonaws.com/role-arn: arn:aws:iam::abcdefxyz:role/eksctl-cluster18-addon-iamserviceaccount-kub-Role1-abcdefxyz
Nota: se non utilizzi i ruoli IAM per gli account di servizio (IRSA), assicurati che il ruolo IAM del nodo worker di Amazon EKS abbia le autorizzazioni richieste. Per visualizzare le autorizzazioni richieste, consulta iam_policy.json sul sito web GitHub.
Problema di rilevamento di una singola sottorete
Quando AWS Load Balancer Controller non rileva almeno una sottorete, ricevi uno dei seguenti messaggi di errore:
"{"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"}"
-oppure-
"kubebuilder/controller "msg"="Reconciler error" "error"="failed to build LoadBalancer configuration due to
retrieval of subnets failed to resolve 2 qualified subnets. Le sottoreti devono contenere il tag kubernetes.io/cluster/\u003ccluster name\u003e con il valore condiviso o di proprietà e il tag kubernetes.io/role/elb che indica che deve essere utilizzato per gli ALB. Inoltre, devono essere presenti almeno 2 sottoreti con zone di disponibilità uniche, come richiesto dagli ALB. 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"}"
Per risolvere il problema, aggiungi tag alle sottoreti per consentire ad AWS Load Balancer Controller di creare un bilanciatore del carico utilizzando il rilevamento automatico.
Per le sottoreti private, aggiungi il seguente tag:
kubernetes.io/role/internal-elb 1
Per le sottoreti pubbliche, aggiungi il seguente tag:
kubernetes.io/role/elb 1
Nota: puoi assegnare manualmente le sottoreti al bilanciatore del carico con l'annotazione alb.ingress.kubernetes.io/subnets. Per visualizzare le autorizzazioni richieste, consulta iam_policy.json sul sito web GitHub.
Etichetta le sottoreti con il seguente formato senza spazi iniziali o finali:
- In Chiave, inserisci kubernetes.io/cluster/your-cluster-name.
- In Valore, inserisci shared o owned.
Se utilizzi AWS Load Balancer Controller versione 2.1.1 o precedente, devi etichettare le sottoreti nel formato precedente. L'etichettatura è opzionale per le versioni 2.1.2 o successive.
È consigliabile etichettare una sottorete nei seguenti scenari:
- Hai più cluster che vengono eseguiti nello stesso cloud privato virtuale (VPC).
- Hai più servizi AWS che condividono sottoreti in un VPC.
- Desideri un maggiore controllo su dove sono allocati i load balancer per ogni cluster.
Errori di rilevamento di più sottoreti
Quando AWS Load Balancer Controller non rileva due o più sottoreti qualificate, ricevi il seguente messaggio di errore:
"{"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)"}"
Per risolvere il problema, completa i seguenti passaggi:
- Verifica di avere almeno due sottoreti in due diverse zone di disponibilità.
Nota: questo è un requisito per creare un Application Load Balancer. Puoi creare un Network Load Balancer con una sola sottorete. - Per ogni sottorete, specifica un blocco CIDR con una bitmask che sia almeno /27, ad esempio 10.0.0.0/27, e abbia almeno otto indirizzi IP liberi.
- Verifica di aver formattato correttamente i tag nelle sottoreti. Ad esempio, i tag non possono avere spazi iniziali o finali.
- Argomenti
- Containers
- Lingua
- Italiano
Video correlati


Contenuto pertinente
AWS UFFICIALEAggiornata 3 anni fa