Come posso etichettare le sottoreti Amazon VPC nel mio cluster Amazon EKS per il rilevamento automatico delle sottoreti tramite sistemi di bilanciamento del carico o controller di ingresso?
Desidero implementare sistemi di bilanciamento del carico o controller di ingresso nelle sottoreti pubbliche o private del mio Amazon Virtual Private Cloud (Amazon VPC). Perché le mie sottoreti non possono essere rilevate da Kubernetes nel mio cluster Amazon Elastic Kubernetes Service (Amazon EKS)?
Breve descrizione
Kubernetes Cloud Controller Manager (cloud-controller-manager) e AWS Load Balancer Controller (aws-load-balancer-controller) interrogano le sottoreti di un cluster per identificarle. Questa query utilizza il seguente tag come filtro:
kubernetes.io/cluster/cluster-name
Nota: Sostituisci cluster-name con il nome del tuo cluster Amazon EKS.
Cloud Controller Manager e AWS Load Balancer Controller richiedono entrambi che le sottoreti abbiano uno dei seguenti tag:
kubernetes.io/role/elb
-oppure-
kubernetes.io/role/internal-elb
Nota: Se non utilizzi i tag precedenti, Cloud Controller Manager determina se una sottorete è pubblica o privata esaminando la tabella di route associata. A differenza delle sottoreti private, le sottoreti pubbliche utilizzano un gateway Internet per ottenere un percorso diretto verso Internet.
Se non associ le tue sottoreti a nessuno dei tag e utilizzi AWS Load Balancer Controller, ricevi un messaggio di errore.
Ad esempio, se stai risolvendo i problemi del servizio Kubernetes ed esegui il comando kubectl describe service your-service-name, ricevi il seguente errore:
Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal EnsuringLoadBalancer 9s (x2 over 14s) service-controller Ensuring load balancer Warning CreatingLoadBalancerFailed 9s (x2 over 14s) service-controller Error creating load balancer (will retry): failed to ensure load balancer for service default/guestbook: could not find any suitable subnets for creating the ELB
Se stai risolvendo i problemi relativi all'Application Load Balancer Ingress Controller ed esegui il comando kubectl logs your-aws-load-balancer-controller-pod-name, allora ricevi il seguente errore:
E0121 22:44:02.864753 1 controller.go:217] 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"}
Nota: Se crei il VPC utilizzando eksctl, tutte le sottoreti in quel VPC hanno i tag kubernetes.io/role/elb e kubernetes.io/role/internal-elb.
Risoluzione
Scegli l'opzione appropriata per etichettare le tue sottoreti:
Per sottoreti pubbliche e private utilizzate dalle risorse del load balancer
Assegna tag a tutte le sottoreti pubbliche e private utilizzate dal cluster per le risorse del load balancer con la seguente coppia chiave-valore:
Key: kubernetes.io/cluster/cluster-name Value: shared
Nota: Sostituisci cluster-name con il nome del tuo cluster Amazon EKS. Il valore condiviso consente a più di un cluster di utilizzare la sottorete.
Per sottoreti private utilizzate dai sistemi di bilanciamento del carico interni
Per consentire a Kubernetes di utilizzare le tue sottoreti private per i bilanciamenti del carico interni, contrassegna tutte le sottoreti private nel tuo VPC con la seguente coppia chiave-valore:
Key: kubernetes.io/role/internal-elb Value: 1
Per sottoreti pubbliche utilizzate da sistemi di bilanciamento del carico esterni
Per consentire a Kubernetes di utilizzare solo sottoreti con tag per il bilanciamento del carico esterni, contrassegna tutte le sottoreti pubbliche nel tuo VPC con la seguente coppia chiave-valore:
Key: kubernetes.io/role/elb Value: 1
Nota: Usa il tag precedente invece di usare una sottorete pubblica in ogni zona di disponibilità.
Informazioni correlate
Requisiti e considerazioni su VPC e sottorete di Amazon EKS
Subnet Auto Discovery sul sito Web di GitHub
Video correlati
Contenuto pertinente
- AWS UFFICIALEAggiornata un anno fa
- AWS UFFICIALEAggiornata un anno fa