Risoluzione dei problemi del connettore Amazon EKS - Amazon EKS

Contribuisci a migliorare questa pagina

Per contribuire a questa guida per l’utente, seleziona il link Edit this page on GitHub che si trova nel riquadro destro di ogni pagina.

Risoluzione dei problemi del connettore Amazon EKS

In questo argomento sono descritti alcuni degli errori più comuni che si possono verificare durante l'utilizzo del connettore Amazon EKS e sono riportate le istruzioni per risolverli in maniera temporanea o definitiva.

Risoluzione dei problemi di base

In questa sezione sono descritti i passaggi per la diagnosi dei problemi del connettore Amazon EKS.

Verifica dello stato di Amazon EKS Connector

Per controllare lo stato del connettore Amazon EKS, inserisci:

kubectl get pods -n eks-connector

Ispezione dei log del connettore Amazon EKS

Il pod di Amazon EKS Connector è composto da tre container. Per recuperare i registri completi per tutti questi container in modo da poterli ispezionare, eseguire i seguenti comandi:

  • connector-init

    kubectl logs eks-connector-0 --container connector-init -n eks-connector kubectl logs eks-connector-1 --container connector-init -n eks-connector
  • connector-proxy

    kubectl logs eks-connector-0 --container connector-proxy -n eks-connector kubectl logs eks-connector-1 --container connector-proxy -n eks-connector
  • connector-agent

    kubectl exec eks-connector-0 --container connector-agent -n eks-connector -- cat /var/log/amazon/ssm/amazon-ssm-agent.log kubectl exec eks-connector-1 --container connector-agent -n eks-connector -- cat /var/log/amazon/ssm/amazon-ssm-agent.log

Ottenimento del nome effettivo del cluster

I cluster Amazon EKS sono identificati in modo univoco da clusterName all’interno di un singolo account AWS e una regione AWS. Se si hanno più cluster connessi in Amazon EKS, è possibile verificare quale cluster Amazon EKS è registrato con il cluster Kubernetes corrente. Per fare ciò, inserisci quanto segue per individuare il clusterName del cluster corrente.

kubectl exec eks-connector-0 --container connector-agent -n eks-connector \ -- cat /var/log/amazon/ssm/amazon-ssm-agent.log | grep -m1 -oE "eks_c:[a-zA-Z0-9_-]+" | sed -E "s/^.*eks_c:([a-zA-Z0-9_-]+)_[a-zA-Z0-9]+.*$/\1/" kubectl exec eks-connector-1 --container connector-agent -n eks-connector \ -- cat /var/log/amazon/ssm/amazon-ssm-agent.log | grep -m1 -oE "eks_c:[a-zA-Z0-9_-]+" | sed -E "s/^.*eks_c:([a-zA-Z0-9_-]+)_[a-zA-Z0-9]+.*$/\1/"

Comandi vari

I seguenti comandi sono utili per recuperare le informazioni necessarie per risolvere i problemi.

  • Utilizzare il seguente comando per raccogliere immagini utilizzate dai pod in Amazon EKS Connector.

    kubectl get pods -n eks-connector -o jsonpath="{.items[*].spec.containers[*].image}" | tr -s '[[:space:]]' '\n'
  • Usa il comando seguente per determinare i nomi dei nodi su cui è in esecuzione il connettore Amazon EKS.

    kubectl get pods -n eks-connector -o jsonpath="{.items[*].spec.nodeName}" | tr -s '[[:space:]]' '\n'
  • Per ottenere le versioni client e server Kubernetes esegui il comando riportato.

    kubectl version
  • Usa il comando seguente per ottenere informazioni sui tuoi nodi.

    kubectl get nodes -o wide --show-labels

Problema di Helm: 403 Forbidden

Se hai riscontrato il seguente errore durante l'esecuzione dei comandi di installazione di helm:

Error: INSTALLATION FAILED: unexpected status from HEAD request to https://public.ecr.aws/v2/eks-connector/eks-connector-chart/manifests/0.0.6: 403 Forbidden

Puoi eseguire la riga seguente per risolvere il problema:

docker logout public.ecr.aws

Errore della console: il cluster è bloccato nello stato Pending (In sospeso)

Se il cluster rimane bloccato nello stato Pending nella console Amazon EKS dopo averlo registrato, è possibile che il connettore Amazon EKS non abbia ancora connesso correttamente il cluster a AWS. Per un cluster registrato, lo stato Pending implica che la connessione non è stata stabilita correttamente. Per risolvere il problema, assicurati di aver applicato il manifesto al cluster Kubernetes di destinazione. Se l'hai applicato al cluster ma il cluster rimane ancora nello stato Pending, lo statefulset eks-connector potrebbe non essere integro. Per risolvere questo problema, consulta I pod di Amazon EKS Connector stanno eseguendo un ciclo di arresto anomalo in questo argomento.

Errore della console: User system:serviceaccount:eks-connector:eks-connector non può impersonare la risorsa utenti nel gruppo API nell’ambito del cluster

Il connettore Amazon EKS utilizza la rappresentazione dell’utente di Kubernetes per agire per conto dei principali IAM da Console di gestione AWS. A ogni principale che accede all’API di Kubernetes dall’account del servizio AWS eks-connector deve essere concessa l’autorizzazione a impersonare l’utente Kubernetes corrispondente con un’ARN IAM come nome utente Kubernetes. Negli esempi seguenti, l'ARN IAM viene mappato a un utente Kubernetes.

  • L’utente IAM john dall’account AWS 111122223333 è mappato a un utente Kubernetes. Le best practice IAM consigliano di concedere le autorizzazioni ai ruoli anziché agli utenti.

    arn:aws:iam::111122223333:user/john
  • L’amministratore del ruolo IAM dall’account AWS 111122223333 è mappato a un utente Kubernetes:

    arn:aws:iam::111122223333:role/admin

    Il risultato è un ARN del ruolo IAM invece dell’ARN di sessione AWS STS.

Per le istruzioni per configurare ClusterRole e ClusterRoleBinding per concedere il privilegio dell'account di servizio eks-connector per impersonare l'utente mappato, consulta Concedere l’accesso per visualizzare le risorse del cluster Kubernetes in una console Amazon EKS. Accertati che nel modello %IAM_ARN% sia sostituito con l'ARN IAM del principale IAM della Console di gestione AWS.

Errore della console: […​] non consentito: L’utente […​] non può elencare la risorsa […​] nel gruppo API nell’ambito del cluster

Consideriamo il seguente problema. Amazon EKS Connector ha impersonato con successo il principale IAM della richiedente Console di gestione AWS nel cluster Kubernetes di destinazione. Tuttavia, il principale impersonato non dispone dell’autorizzazione RBAC per le operazioni API di Kubernetes.

Per risolvere questo problema, esistono due metodi per concedere le autorizzazioni ad altri utenti. Se in precedenza hai installato eks-connector tramite un grafico Helm, puoi concedere facilmente l'accesso agli utenti eseguendo il seguente comando. Sostituisci i valori userARN1 e userARN2 con un elenco delle ARN dei ruoli IAM a cui consentire l’accesso per visualizzare le risorse Kubernetes:

helm upgrade eks-connector oci://public.ecr.aws/eks-connector/eks-connector-chart \ --reuse-values \ --set 'authentication.allowedUserARNs={userARN1,userARN2}'

In alternativa, in qualità di amministratore del cluster, concedi il livello appropriato di privilegi RBAC ai singoli utenti Kubernetes. Per maggiori informazioni ed esempi, consulta Concedere l’accesso per visualizzare le risorse del cluster Kubernetes in una console Amazon EKS.

Errore della console: Amazon EKS non è in grado di comunicare con il server API cluster Kubernetes. Per una connessione corretta, il cluster deve trovarsi nello stato ACTIVE (ATTIVO). Riprova tra qualche minuto.

Se il servizio Amazon EKS non può comunicare con il connettore Amazon EKS nel cluster di destinazione, il motivo potrebbe essere uno dei seguenti:

  • Il connettore Amazon EKS nel cluster di destinazione non è integro.

  • Connettività scadente o connessione interrotta tra il cluster di destinazione e la regione AWS.

Per risolvere questo problema, controlla Amazon EKS Connector logs (Log del connettore Amazon EKS). Se non visualizzi un errore per il connettore Amazon EKS, ritenta la connessione dopo qualche minuto. Se per il cluster di destinazione si verifica regolarmente una latenza elevata o una connettività intermittente, prendi in considerazione la possibilità di registrare nuovamente il cluster in una regione AWS più vicina a te.

I pod di Amazon EKS Connector stanno eseguendo un ciclo di arresto anomalo

Esistono molti motivi che possono causare il passaggio di un pod del connettore Amazon EKS nello stato CrashLoopBackOff. Questo problema riguarda probabilmente il container connector-init. Controlla lo stato del pod del connettore Amazon EKS.

kubectl get pods -n eks-connector

Di seguito viene riportato un output di esempio:

NAME READY STATUS RESTARTS AGE eks-connector-0 0/2 Init:CrashLoopBackOff 1 7s

Se l'output è simile a quello precedente, consulta la pagina Ispezione dei log del connettore Amazon EKS per risolvere il problema.

Impossibile avviare eks-connector: InvalidActivation

Quando avvii il connettore Amazon EKS per la prima volta, il connettore registra un activationId e un activationCode con Amazon Web Services. La registrazione potrebbe non riuscire, causando un arresto anomalo del container connector-init con un errore simile al seguente.

F1116 20:30:47.261469 1 init.go:43] failed to initiate eks-connector: InvalidActivation:

Per risolvere questo problema, prendere in considerazione le seguenti cause e le correzioni consigliate:

  • La registrazione potrebbe non essere riuscita perché nel file manifesto mancano activationId e activationCode. In questo caso, accertati che siano i valori corretti restituiti dall'operazione API RegisterCluster e che activationCode sia presente nel file manifesto. activationCode è aggiunto ai segreti Kubernetes, per cui deve essere codificato in base64. Per ulteriori informazioni, consulta Fase 1: Registrazione del cluster.

  • La registrazione potrebbe non essere riuscita perché l'attivazione è scaduta. Ciò accade perché, per motivi di sicurezza, devi attivare il connettore Amazon EKS entro tre giorni dalla registrazione del cluster. Per risolvere il problema, assicurati di aver applicato il manifesto del connettore Amazon EKS al cluster Kubernetes di destinazione prima della data e dell’ora di scadenza. Per verificare la data di scadenza dell'attivazione, richiama l'operazione API DescribeCluster.

    aws eks describe-cluster --name my-cluster

    Nella risposta di esempio seguente, la data e l'ora di scadenza vengono registrate come 2021-11-12T22:28:51.101000-08:00.

    { "cluster": { "name": "my-cluster", "arn": "arn:aws:eks:region:111122223333:cluster/my-cluster", "createdAt": "2021-11-09T22:28:51.449000-08:00", "status": "FAILED", "tags": { }, "connectorConfig": { "activationId": "00000000-0000-0000-0000-000000000000", "activationExpiry": "2021-11-12T22:28:51.101000-08:00", "provider": "OTHER", "roleArn": "arn:aws:iam::111122223333:role/my-connector-role" } } }

    Se activationExpiry è passato, annulla la registrazione del cluster e registralo di nuovo. In questo modo si genera una nuova attivazione.

Nel nodo del cluster manca la connettività in uscita

Per il corretto funzionamento, il connettore Amazon EKS richiede la connettività in uscita a diversi endpoint AWS. Non è possibile connettere un cluster privato senza connettività in uscita a una regione AWS di destinazione. Per risolvere il problema, è necessario aggiungere la connettività in uscita necessaria. Per informazioni sui requisiti del connettore, consultare Considerazioni su Amazon EKS Connector.

I pod del connettore Amazon EKS sono in stato ImagePullBackOff

Se esegui il comando get pods e i pod sono nello stato ImagePullBackOff, non possono funzionare correttamente. Se i pod del connettore Amazon EKS sono nello stato ImagePullBackOff, non possono funzionare correttamente. Controlla lo stato dei pod del connettore Amazon EKS.

kubectl get pods -n eks-connector

Di seguito viene riportato un output di esempio:

NAME READY STATUS RESTARTS AGE eks-connector-0 0/2 Init:ImagePullBackOff 0 4s

Il file manifesto predefinito del connettore Amazon EKS fa riferimento alle immagini di Amazon ECR Public Gallery. È possibile che il cluster Kubernetes di destinazione non possa estrarre immagini da Amazon ECR Public Gallery. Risolvi il problema di estrazione delle immagini di Amazon ECR Public Gallery o valuta il mirroring delle immagini nel registro del container privato di tua scelta.