Come faccio a risolvere i problemi relativi ai plugin kubelet o CNI per Amazon EKS?

7 minuti di lettura
0

Voglio risolvere i problemi con il mio plugin kubelet o CNI per Amazon Elastic Kubernetes Service (Amazon EKS).

Descrizione breve

Per assegnare ed eseguire un indirizzo IP al pod sul nodo worker con il plug-in CNI (sul sito web di Kubernetes), è necessario disporre delle seguenti configurazioni:

  • Autorizzazioni AWS Identity and Access Management (IAM), inclusa una policy CNI che si collega al ruolo IAM del tuo nodo worker. In alternativa, le autorizzazioni IAM fornite tramite i ruoli IAM dell'account di servizio.
  • Un endpoint del server API Amazon EKS raggiungibile dal nodo worker.
  • Accesso di rete agli endpoint API per Amazon Elastic Compute Cloud (Amazon EC2), Amazon Elastic Container Registry (Amazon ECR) e Amazon Simple Storage Service (Amazon S3).
  • Un numero sufficiente di indirizzi IP disponibili nella sottorete.
  • Un kube-proxy che viene eseguito correttamente affinché il pod aws-node passi allo stato Pronto.
  • La versione kube-proxy e la versione VPC CNI che supportano la versione Amazon EKS.

Risoluzione

Verificare che il pod aws-node sia in stato di esecuzione su ogni nodo worker

Per verificare che il pod aws-node sia in stato In esecuzione su un nodo worker, esegui il seguente comando:

kubectl get pods -n kube-system -l k8s-app=aws-node -o wide

Se l'output del comando mostra che il conteggio dei RESTARTS è 0, allora il pod aws-node è in stato In esecuzione. Prova i passaggi indicati nella sezione Verificare che la sottorete disponga di un numero sufficiente di indirizzi IP gratuiti.

Se l'output del comando mostra che il numero di RESTARTS è maggiore di 0, verifica che il nodo worker possa raggiungere l'endpoint del server API del cluster Amazon EKS. Esegui il comando seguente:

curl -vk https://eks-api-server-endpoint-url

Verificare la connettività al cluster Amazon EKS

1.    Verifica che le impostazioni del gruppo di sicurezza del tuo nodo worker per Amazon EKS siano configurate correttamente. Per ulteriori informazioni, consulta la sezione Amazon EKS security group requirements and considerations.

2.    Verifica che le regole della lista di controllo degli accessi alla rete (ACL) del nodo worker per la tua sottorete consentano la comunicazione con l'endpoint del server API Amazon EKS.

Importante: consenti il traffico in entrata e in uscita sulla porta 443.

3.    Verifica che il pod kube-proxy sia in stato In esecuzione su ogni nodo worker:

kubectl get pods -n kube-system -l k8s-app=kube-proxy -o wide

4.    Verifica che il nodo worker possa accedere agli endpoint API per Amazon EC2, Amazon ECR e Amazon S3.

Nota: configura questi servizi tramite endpoint pubblici o AWS PrivateLink.

Verificare che la sottorete disponga di un numero sufficiente di indirizzi IP gratuiti

Per elencare gli indirizzi IP disponibili in ciascuna sottorete nell'ID Amazon Virtual Private Cloud (Amazon VPC), esegui il seguente comando:

aws ec2 describe-subnets --filters "Name=vpc-id,Values= VPCID" | jq '.Subnets[] | .SubnetId + "=" + "\(.AvailableIpAddressCount)"'

Nota: il valore AvailableIpAddressCount deve essere maggiore di 0 per la sottorete in cui vengono lanciati i pod.

Verificare se i limiti del gruppo di sicurezza sono stati raggiunti

Se raggiungi i limiti del tuo gruppo di sicurezza per interfaccia di rete elastica, la configurazione di rete del pod potrebbe non riuscire.

Per ulteriori informazioni, consulta le quote di Amazon VPC.

Verificare l'utilizzo dell'ultima versione stabile del plugin CNI

Per confermare l'utilizzo della versione più recente del plug-in CNI, consulta Updating the Amazon VPC CNI plugin for Kubernetes self-managed add-on.

Per ulteriori informazioni sulla risoluzione dei problemi, consulta la pagina dei problemi di AWS GitHub e le note di rilascio per il plug-in CNI.

Controllare i log del plugin VPC CNI sul nodo worker

Se crei un pod e non viene assegnato un indirizzo IP al container, viene visualizzato il seguente errore:

failed to assign an IP address to container

Per controllare i log, vai alla directory /var/log/aws-routed-eni/, quindi individua i nomi dei file plugin.log e ipamd.log.

Verificare che il kubelet estragga le immagini del container Docker

Se il kubelet non estrae le immagini dei container Docker per i container kube-proxy e amazon-k8s-cni, viene visualizzato il seguente errore:

network plugin is not ready: cni config uninitialized

Assicurati di poter raggiungere l'endpoint del server API Amazon EKS dal nodo worker.

Verificare che il valore WARM\ _PREFIX\ _TARGET sia impostato correttamente

Nota: si applica solo se la delega del prefisso è attivata. Se la delega del prefisso è attivata, controlla il seguente messaggio di errore registrato:

Error: Setting WARM_PREFIX_TARGET = 0 is not supported while WARM_IP_TARGET/MINIMUM_IP_TARGET is not set.
Please configure either one of the WARM_{PREFIX/IP}_TARGET or MINIMUM_IP_TARGET env variable

WARM\ _PREFIX\ _TARGET deve essere impostato su un valore maggiore o uguale a 1. Se è impostato su 0, viene visualizzato il seguente errore:

Per ulteriori informazioni, consulta le variabili di configurazione CNI sul sito web di GitHub.

Controlla lo spazio riservato nella sottorete

Nota: si applica solo se la delega del prefisso è attivata. Se la delega del prefisso è attivata, controlla il seguente messaggio di errore registrato:

InsufficientCidrBlocks

Assicurati di disporre di un numero sufficiente di blocchi /28 IP CIDR (16 IP) disponibili nella sottorete. Tutti i 16 IP devono essere contigui. Se non si dispone di un intervallo /28 di IP continui, viene visualizzato l'errore InsufficientCidrBlocks.

Per risolvere l'errore, crea una nuova sottorete e avvia i pod da lì. Inoltre, puoi utilizzare una prenotazione CIDR di sottorete Amazon EC2 per riservare spazio all'interno di una sottorete con un prefisso assegnato. Per altre informazioni, consulta Use subnet CIDR reservations.

Gli aggiornamenti effettuati con Infrastructure as Code (IaC) vengono ripristinati in caso di conflitti

Se utilizzi componenti aggiuntivi gestiti da Amazon EKS, gli errori di aggiornamento che utilizzano i seguenti servizi vengono annullati quando il metodo di conflitto non è definito:

I metodi corretti sono NONE, OVERWRITE o PRESERVE.

  • Se non è definito alcun metodo, l'impostazione predefinita è NONE. Quando il sistema rileva dei conflitti, l'aggiornamento allo stack CloudFormation viene annullato e non vengono apportate modifiche.
  • Per impostare la configurazione predefinita dei componenti aggiuntivi, utilizza il metodo di sovrascrittura. È necessario utilizzare OVERWRITE quando si passa da componenti aggiuntivi autogestiti a componenti aggiuntivi gestiti da Amazon EKS.
  • Utilizza il metodo PRESERVE quando sfrutti configurazioni personalizzate, come WARM\ _IP\ _TARGET o reti personalizzate.

I nodi sono in stato NotReady

Quando sono presenti aws-nodes che non sono nello stato In esecuzione, è normale che i nodi siano nello stato NotReady. Per altre informazioni, consulta Come posso modificare lo stato dei nodi da NotReady o Unknown a Ready?

Sfide di configurazione di rete personalizzate

Quando la rete personalizzata è attiva per VPC CNI, le definizioni di risorse personalizzate di ENIConfig devono definire la sottorete e i gruppi di sicurezza corretti.

Per verificare se la rete personalizzata è attiva, descrivi il pod aws-node nello spazio dei nomi kube-system. Quindi, verifica se la seguente variabile di ambiente è impostata su true:

AWS_VPC_K8S_CNI_CUSTOM_NETWORK_CFG

Se la rete personalizzata è attiva, controlla che le definizioni di risorse personalizzate siano configurate correttamente.

kubectl get ENIConfig -A -o yaml

Descrivi ogni voce che corrisponde al nome della zona di disponibilità. Gli ID della sottorete corrispondono al posizionamento del VPC e del nodo worker. I gruppi di sicurezza sono accessibili o condivisi con il gruppo di sicurezza del cluster. Per altre informazioni sulle best practice, consulta la pagina EKS Best Practices Guides di Amazon sul sito web GitHub.


AWS UFFICIALE
AWS UFFICIALEAggiornata un anno fa