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?

4 minuti di lettura
0

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

Bilanciamento del carico delle applicazioni su Amazon EKS

AWS UFFICIALE
AWS UFFICIALEAggiornata un anno fa