Risoluzione dei problemi in Amazon EKS Connector - Amazon EKS

Risoluzione dei problemi in Amazon EKS Connector

In questo argomento sono illustrati alcuni degli errori più comuni che si possono verificare durante l'utilizzo di Amazon EKS Connector e sono incluse le istruzioni su come risolverli, le soluzioni alternative e le domande frequenti.

Problemi comuni

In questa sezione viene descritto come risolvere alcuni problemi funzionali che possono verificarsi durante l'utilizzo di Amazon EKS Connector. Fornisce soluzioni e soluzioni alternative per questi problemi.

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

Se, dopo aver registrato il cluster, questo rimane bloccato nello stato Pending nella console Amazon EKS, è possibile che Amazon EKS Connector non abbia ancora collegato correttamente il cluster a AWS. Per un cluster registrato, lo stato Pending significa 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 questo è ancora nello stato Pending (In sospeso), allora è probabile che Amazon EKS Connector non sia integro nel cluster. Per risolvere il problema, consultare la sezione denominata I pod di Amazon EKS Connector stanno eseguendo un ciclo di arresto anomalo in questo argomento.

Errore della console: l'utente "system:serviceaccount:eks-connector:eks-connector" non può impersonare la risorsa "utenti" nel gruppo API "" nell'ambito del cluster

Amazon EKS Connector utilizza la rappresentazione dell'utente di Kubernetes per agire per conto degli utenti dalla AWS Management Console. Per ogni identità IAM che accede all'API Kubernetes dall'account AWS del servizio eks-connector, deve essere concessa l’autorizzazione a impersonare l'utente Kubernetes corrispondente con un ARN IAM come nome utente. Negli esempi seguenti, l'ARN IAM viene mappato a un utente Kubernetes.

  • L'utente IAM jeff dall'account AWS 123456789012 è mappato a un utente Kubernetes.

    arn:aws:iam::123456789012:user/jeff
  • L'amministratore del ruolo IAM dall'account AWS 123456789012 è mappato a un utente Kubernetes:

    arn:aws:iam::123456789012:role/admin

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

Per le istruzioni su come configurare ClusterRole e ClusterRoleBinding per concedere il privilegio dell'account di servizio eks-connector per impersonare l'utente mappato, consultare Concessione dell'accesso a un utente per la visualizzazione di un cluster. Assicurati che, nel modello, %IAM_ARN% sia sostituito con l'ARN IAM dell'utente AWS Management Console.

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 l'utente AWS Management Console richiedente nel cluster Kubernetes di destinazione. Tuttavia, l'utente impersonato non dispone dell'autorizzazione RBAC per le operazioni API di Kubernetes.

Per risolvere questi problemi, in qualità di amministratore del cluster, è necessario concedere il livello appropriato di privilegi RBAC ai singoli utenti Kubernetes. Per maggiori informazioni ed esempi, vedi Concessione dell'accesso a un utente per la visualizzazione di un cluster.

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). Riprovare tra qualche minuto.

Se il servizio Amazon EKS non è in grado di comunicare con Amazon EKS Connector nel cluster di destinazione, il motivo potrebbe essere uno dei seguenti:

  • Amazon EKS Connector nel cluster di destinazione non è integro.

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

Per risolvere questo problema, consultare la sezione Ispezione dei registri di Amazon EKS Connector. Se non viene visualizzato alcun errore per Amazon EKS Connector, riprovare a stabilire la connessione dopo alcuni minuti. Se per il cluster di destinazione si verifica regolarmente una latenza elevata o una connettività intermittente, prendere in considerazione la possibilità di registrare nuovamente il cluster in una Regione AWS più vicina.

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

Esistono molti motivi che possono causare l'ingresso di un pod EKS Connector nello stato di CrashLoopBackoff. Questo problema riguarda probabilmente il container connector-init. Nell'esempio seguente, il container connector-init è entrato nello stato CrashLoopBackOff.

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

Per risolvere questo problema, consultare la sezione Ispezione dei registri di Amazon EKS Connector.

impossibile avviare eks-connector: InvalidActivation

Quando avvii Amazon EKS Connector per la prima volta, registra un activationId e un activationCode con Amazon Web Services. La registrazione potrebbe non riuscire, il che può causare un arresto anomalo del container connector-init.

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é activationId e activationCode non sono presenti nel file manifesto. In questo caso, assicurati che siano i valori corretti restituiti dall'operazione API RegisterCluster e che activationCode si trovi nel file manifesto. activationCode viene aggiunto ai segreti di Kubernetes, quindi deve essere codificato in base64. Per ulteriori informazioni, consulta . Fase 1: Registrazione del cluster.

  • La registrazione potrebbe non essere riuscita perché l'attivazione è scaduta. Questo perché, per motivi di sicurezza, è necessario attivare EKS Connector entro 3 giorni dalla registrazione del cluster. Per risolvere il problema, assicurati di aver applicato il manifesto di EKS Connector al cluster Kubernetes di destinazione prima della data/ora di scadenza. Per verificare la data di scadenza dell'attivazione, chiama l'operazione API DescribeCluster. Nella risposta di esempio seguente, la data e l'ora di scadenza vengono registrate come 2021-11-12T22:28:51.101000-08:00.

    aws eks describe-cluster --name my-cluster { "cluster": { "name": "my-cluster", "arn": "arn:aws:eks:us-east-1:123456789012: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::123456789012:role/my-connector-role" } } }

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

Il nodo (worker) del cluster manca di connettività in uscita

Per funzionare correttamente, EKS Connector 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 di Amazon EKS Connector sono in stato ImagePullBackOff

Se si esegue il comando getpods e i pod sono nello stato ImagePullBackOff, non possono funzionare correttamente. Se il pod di EKS Connector si trova nello stato ImagePullBackOff, non potrà funzionare correttamente. Vedere l'esempio di seguito.

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

Il file manifesto di default di Amazon EKS Connector fa riferimento alle immagini di Amazon ECR Public Registry. È possibile che il cluster Kubernetes di destinazione non possa estrarre immagini da Amazon ECR Public. Risolvere il problema di estrazione delle immagini di Amazon ECR Public o prendere in considerazione il mirroring delle immagini nel registro del container privato scelto.

Domande frequenti

D: Come funziona la tecnologia alla base di Amazon EKS Connector?

R: Amazon EKS Connector è basato sull'agente System Manager (SSM Agent). EKS Connector viene eseguito come StatefulSet sul cluster Kubernetes. Stabilisce una connessione e applica un proxy alla comunicazione tra il server API del cluster e Amazon Web Services. Ciò è necessario per visualizzare i dati del cluster nella console Amazon EKS fino a quando non si disconnette il cluster da AWS. SSM Agent è un progetto open source. Per ulteriori informazioni su questo progetto, consultare la pagina del progetto GitHub.

D: Dispongo di un cluster Kubernetes on-premise a cui desidero connettermi. Devo aprire le porte firewall per connetterlo?

R: No, non è necessario aprire alcuna porta firewall. Il cluster Kubernetes richiede solo la connessione in uscita a Regioni AWS. I servizi AWS non accedono mai alle risorse nella rete on-premise. Amazon EKS Connector viene eseguito sul cluster e avvia la connessione a AWS. Al termine della registrazione del cluster, AWS emette comandi su Amazon EKS Connector solo dopo aver avviato un'azione dalla console Amazon EKS che richiede informazioni dal server API Kubernetes sul cluster.

D: Quali dati vengono inviati dal cluster a AWS tramite Amazon EKS Connector?

R: Amazon EKS Connector invia le informazioni tecniche necessarie per la registrazione del cluster su AWS. Invia inoltre metadati di cluster e carichi di lavoro per le funzionalità della console Amazon EKS richieste dai clienti. Amazon EKS Connector raccoglie o invia questi dati solo se si avvia un'azione dalla console Amazon EKS o dall'API Amazon EKS che richiede l'invio dei dati a AWS. Per impostazione predefinita, oltre al numero di versione di Kubernetes, AWS non memorizza dati. Li memorizza solo se viene autorizzato.

D: È possibile collegare un cluster al di fuori di una Regione AWS?

R: Sì, puoi connettere un cluster da qualsiasi posizione ad Amazon EKS. Inoltre, il servizio EKS può trovarsi in qualsiasi Regione AWS commerciale pubblica AWS. Funziona con una connessione di rete valida dal cluster alla Regione AWS di destinazione. Ti consigliamo di scegliere una Regione AWS che sia la più vicina alla posizione del cluster in modo da ottimizzare le prestazioni dell'interfaccia utente. Ad esempio, se hai un cluster in esecuzione a Tokyo, connetti il cluster alla Regione AWS di Tokyo (cioè la ap-northeast-1 Regione AWS) per assicurare una bassa latenza. È possibile connettere un cluster da qualsiasi posizione ad Amazon EKS in una Regione AWS commerciale pubblica, ad eccezione delle Regione AWS Cina o GovCloud.

Risoluzione dei problemi di base

In questa sezione sono descritti i passaggi per la diagnosi di un problema che non è chiaro.

Verifica dello stato di Amazon EKS Connector

Controllare lo stato di Amazon EKS Connector utilizzando i comandi riportati di seguito.

kubectl get pods -n eks-connector

Sono presenti due pod eks-connector-x nello stato Running (In esecuzione).

Ispezione dei registri di Amazon EKS Connector

Il pod di Amazon EKS Connector è composto da tre container. È possibile ispezionare i registri di tutti e tre i container.

  • connector-init

  • connector-proxy

  • connector-agent

Per recuperare i registri completi per tutti questi container in modo da poterli ispezionare, eseguire i seguenti comandi.

  • # Retrieve log for connector-init container kubectl logs eks-connector-0 --container connector-init -n eks-connector kubectl logs eks-connector-1 --container connector-init -n eks-connector
  • # Retrieve log for connector-proxy container kubectl logs eks-connector-0 --container connector-proxy -n eks-connector kubectl logs eks-connector-1 --container connector-proxy -n eks-connector
  • # Retrieve log for connector-agent container 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 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'
  • Utilizzare il seguente comando per raccogliere i nomi dei nodi (worker) su cui Amazon EKS Connector è in esecuzione.

    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
  • Per ottenere informazioni sui nodi (worker) esegui il comando riportato.

    kubectl get nodes -o wide --show-labels