Come posso risolvere gli errori di creazione di gruppi di nodi gestiti da Amazon EKS?

6 minuti di lettura
0

La creazione del gruppo di nodi gestito da Amazon Elastic Kubernetes Service (Amazon EKS) non è riuscita. I nodi non possono entrare nel cluster e ho ricevuto un errore simile al seguente: "Instances failed to join the kubernetes cluster." (Le istanze non sono riuscite a entrare nel cluster Kubernetes.)

Risoluzione

Usa il runbook di automazione per individuare i problemi più comuni

Usa il runbook AWSSupport-TroubleshootEKSWorkerNode per trovare i problemi più comuni.

Importante: per il funzionamento dell'automazione, i nodi worker devono disporre dell'autorizzazione ad accedere ad AWS Systems Manager e quest'ultimo deve essere in esecuzione. Per concedere l'autorizzazione, collega la policy gestita da AWS AmazonSSMManagedInstanceCore al ruolo AWS Identity and Access Management (IAM) che corrisponde al profilo dell'istanza Amazon Elastic Compute Cloud (EC2). Questa è la configurazione predefinita per i gruppi di nodi gestiti di Amazon EKS creati tramite eksctl.

Completa i passaggi seguenti:

  1. Apri il runbook.
  2. Verifica che la regione AWS nella Console di gestione AWS sia impostata sulla stessa regione del tuo cluster.
    Nota: consulta la sezione Dettagli del runbook per ulteriori informazioni sul runbook.
  3. Nella sezione Parametri di input specifica il nome del cluster nel campo ClusterName e l'ID dell'istanza nel campo WorkerID.
  4. (Facoltativo) Nel campo AutomationAssumeRole specifica il ruolo IAM per consentire a Systems Manager di eseguire operazioni. Se non specificato, per eseguire le operazioni nel runbook verranno usate le autorizzazioni IAM dell'entità IAM corrente.
  5. Scegli Esegui.
  6. Controlla la sezione Output per scoprire perché il nodo worker non riesce a entrare nel cluster e i passaggi che puoi intraprendere per risolvere l'errore.

Verifica i requisiti di traffico del gruppo di sicurezza del nodo worker

Verifica che il gruppo di sicurezza del tuo piano di controllo e il gruppo di sicurezza del nodo worker siano configurati con i requisiti per il traffico in entrata e in uscita. Per impostazione predefinita, Amazon EKS applica il gruppo di sicurezza del cluster alle istanze del gruppo di nodi per facilitare la comunicazione tra i nodi e il piano di controllo. Se specifichi gruppi di sicurezza personalizzati nel modello di avvio per il tuo gruppo di nodi gestito, Amazon EKS non aggiunge il gruppo di sicurezza del cluster.

Verifica le autorizzazioni IAM del nodo worker

Assicurati che al ruolo dell'istanza IAM associato al nodo worker siano collegate le policy AmazonEKSWorkerNodePolicy e AmazonEC2ContainerRegistryReadOnly.

Nota: devi collegare la policy gestita da Amazon AmazonEKS_CNI_Policy a un ruolo IAM. Puoi collegarlo al ruolo dell'istanza del nodo. Tuttavia, è consigliabile collegare la policy a un ruolo associato all'account del servizio Kubernetes aws-node nello spazio dei nomi kube-system. Per ulteriori informazioni, consulta Configure Amazon VPC CNI plugin to use IRSA.

Verifica che l'Amazon VPC del cluster supporti un nome host e una risoluzione DNS

Dopo aver configurato l'accesso privato per l'endpoint del cluster EKS, devi attivare un nome host DNS e una risoluzione DNS per il tuo Amazon Virtual Private Cloud (Amazon VPC). Quando attivi l'accesso privato agli endpoint, Amazon EKS crea automaticamente una zona ospitata privata di Amazon Route 53. Quindi Amazon EKS la associa all'Amazon VPC del cluster. Per ulteriori informazioni, consulta Control network access to cluster API server endpoint.

Aggiorna la ConfigMap aws-auth con il NodeInstanceRole dei tuoi nodi worker

Verifica che la ConfigMap aws-auth sia configurata correttamente con il ruolo IAM dei tuoi nodi worker, non con il profilo dell'istanza.

Imposta i tag per i tuoi nodi worker

Per la proprietà Tag dei tuoi nodi worker, imposta la chiave su kubernetes.io/cluster/clusterName e imposta il valore su owned.

Verifica che le sottoreti Amazon VPC per il nodo worker abbiano indirizzi IP disponibili

Se il tuo Amazon VPC esaurisce gli indirizzi IP, associa un CIDR secondario al tuo Amazon VPC esistente. Per ulteriori informazioni, consulta View Amazon EKS networking requirements for VPC and subnets.

Verifica che i tuoi nodi worker Amazon EKS possano raggiungere l'endpoint del server API per il tuo cluster

Puoi avviare nodi worker in qualsiasi sottorete all'interno del tuo cluster VPC o sottorete in peering se esiste un percorso internet attraverso i seguenti gateway:

  • NAT
  • Internet
  • Transit

Se i tuoi nodi worker vengono avviati in una rete privata con restrizioni, verifica che i nodi worker possano raggiungere l'endpoint del server API Amazon EKS. Per ulteriori informazioni, consulta i requisiti per eseguire Amazon EKS in un cluster privato senza accesso a internet in uscita.

Nota: per i nodi che si trovano in una sottorete privata supportata da un gateway NAT, è consigliabile creare il gateway NAT in una sottorete pubblica.

Se non usi gli endpoint AWS PrivateLink, verifica l'accesso agli endpoint API tramite un server proxy per i servizi AWS seguenti:

  • Amazon EC2
  • Amazon ECR
  • Amazon S3

Per verificare che il nodo worker abbia accesso al server API, usa SSH per connetterti ed esegui il comando netcat seguente:

nc -vz 9FCF4EA77D81408ED82517B9B7E60D52.yl4.eu-north-1.eks.amazonaws.com 443

Nota: sostituisci 9FCF4EA77D81408ED82517B9B7E60D52.yl4.eu-north-1.eks.amazonaws.com con l'endpoint del tuo server API.

Controlla i log di kubelet mentre sei ancora connesso alla tua istanza:

journalctl -f -u kubelet

Se i log kubelet non forniscono informazioni sull'origine del problema, controlla lo stato di kubelet sul nodo worker:

sudo systemctl status kubelet

Raccogli i log di Amazon EKS e i log del sistema operativo per proseguire la risoluzione dei problemi.

Verifica che gli endpoint API possano raggiungere la tua regione AWS

Usa SSH per connetterti a uno dei nodi worker, quindi esegui i comandi seguenti per ogni servizio:

$ nc -vz ec2.region.amazonaws.com 443
$ nc -vz ecr.region.amazonaws.com 443
$ nc -vz s3.region.amazonaws.com 443

Nota: sostituisci la regione con la regione AWS per il tuo nodo worker.

Configura i dati utente per il tuo nodo worker

Per i modelli di avvio di gruppi di nodi gestiti con un'AMI specificata, è necessario fornire comandi bootstrap per consentire ai nodi worker di unirsi al cluster. Amazon EKS non unisce i comandi bootstrap predefiniti nei dati utente. Per ulteriori informazioni, consulta Introduzione al modello di lancio e al supporto AMI personalizzato nei gruppi di nodi gestiti di Amazon EKS e Specificare un'AMI.

Esempio di modello di avvio con comandi bootstrap:

#!/bin/bashset -o xtrace/etc/eks/bootstrap.sh
${ClusterName} ${BootstrapArguments}

Nota: sostituisci ${ClusterName} con il nome del tuo cluster Amazon EKS. Sostituisci ${BootstrapArguments} con valori bootstrap aggiuntivi, se necessario.

Informazioni correlate

Troubleshoot problems with Amazon EKS clusters and nodes

Come posso fare in modo che i miei nodi worker si uniscano al mio cluster Amazon EKS?