Risolvi i problemi con i EKS cluster e i nodi Amazon - Amazon EKS

Aiutaci a migliorare questa pagina

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Vuoi contribuire a questa guida per l'utente? Scorri fino alla fine di questa pagina e seleziona Modifica questa pagina su GitHub. I tuoi contributi contribuiranno a rendere la nostra guida utente migliore per tutti.

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Risolvi i problemi con i EKS cluster e i nodi Amazon

Questo capitolo descrive alcuni errori comuni che potresti riscontrare durante l'utilizzo di Amazon EKS e come aggirarli. Se hai bisogno di risolvere EKS aree Amazon specifiche, consulta gli argomenti separati Risoluzione dei problemi relativi a IAM e Risoluzione dei problemi per l'ADOTutilizzo dei EKS componenti aggiuntivi. Risolvi i problemi relativi ad Amazon Connector EKS

Per altre informazioni sulla risoluzione dei problemi, consulta i contenuti del Knowledge Center su Amazon Elastic Kubernetes Service su re:POST. AWS

Capacità insufficiente

Se ricevi il seguente errore durante il tentativo di creare un EKS cluster Amazon, significa che una delle zone di disponibilità che hai specificato non ha una capacità sufficiente per supportare un cluster.

Cannot create cluster 'example-cluster' because region-1d, the targeted Availability Zone, does not currently have sufficient capacity to support the cluster. Retry and choose from these Availability Zones: region-1a, region-1b, region-1c

Riprova a creare il cluster con le sottoreti del cluster ospitate nelle zone di disponibilità restituite da VPC questo messaggio di errore.

Esistono zone di disponibilità in cui un cluster non può risiedere. Confronta le zone di disponibilità in cui si trovano le tue sottoreti con l'elenco delle zone di disponibilità nella sezione Requisiti e considerazioni sulla Considerazioni e requisiti relativi alle sottoreti sottorete.

Impossibile aggiungere i nodi al cluster

Ci sono diversi motivi comuni che impediscono l'aggiunta dei nodi di lavoro al cluster:

  • Se i nodi sono nodi gestiti, Amazon EKS aggiunge voci al aws-auth ConfigMap momento della creazione del gruppo di nodi. Se la voce è stata rimossa o modificata, è necessario aggiungerla nuovamente. Per ulteriori informazioni, digita eksctl create iamidentitymapping --help nel terminale. Puoi visualizzare le aws-auth ConfigMap voci correnti my-cluster sostituendo il seguente comando con il nome del cluster e quindi eseguendo il comando modificato: eksctl get iamidentitymapping --cluster my-cluster. The ARN of the role that you specify can’t include a path other than /. For example, if the name of your role is development/apps/my-role, you’d need to change it to my-role when specifying the ARN for the role. Make sure that you specify the node IAM role ARN (not the instance profile ARN).

    Se i nodi sono autogestiti e non hai creato voci di Grant IAM accesso degli utenti a Kubernetes con voci di EKS accesso accesso per il IAM ruolo ARN del nodo, esegui gli stessi comandi elencati per i nodi gestiti. Se hai creato una voce di accesso per il IAM ruolo ARN for your node, è possibile che non sia configurata correttamente nella voce di accesso. Assicuratevi che il IAM ruolo del nodo ARN (non il profilo dell'istanzaARN) sia specificato come principale ARN nella aws-auth ConfigMap voce o nella voce di accesso. Per ulteriori informazioni sulle voci di accesso, consulta la sezione Grant IAM accesso degli utenti a Kubernetes con voci di EKS accesso.

  • Il AWS CloudFormation modello ClusterNamenel tuo nodo non corrisponde esattamente al nome del cluster a cui desideri che i nodi si uniscano. Il passaggio di un valore errato a questo campo comporta una configurazione errata del /var/lib/kubelet/kubeconfig file del nodo e i nodi non entreranno a far parte del cluster.

  • Il nodo non è taggato come appartenente al cluster. Ai nodi deve essere applicato il tag seguente, dove my-cluster viene sostituito con il nome del cluster.

    Chiave Valore

    kubernetes.io/cluster/my-cluster

    owned

  • I nodi potrebbero non essere in grado di accedere al cluster utilizzando un indirizzo IP pubblico. Assicurarsi che ai nodi implementati nelle sottoreti pubbliche venga assegnato un indirizzo IP pubblico. In caso contrario, puoi associare un indirizzo IP elastico a un nodo dopo l'avvio. Per ulteriori informazioni, consulta Associazione di un indirizzo IP elastico a un'istanza o a un'interfaccia di rete in esecuzione. Se nella sottorete pubblica non è impostata l'assegnazione degli indirizzi IP pubblici alle istanze implementate, è consigliabile abilitare l'impostazione. Per ulteriori informazioni, consulta Modifica dell'attributo di assegnazione degli indirizzi IPv4 pubblici per la sottorete. Se il nodo viene distribuito in una sottorete privata, alla sottorete deve essere assegnato un percorso verso un NAT gateway a cui è assegnato un indirizzo IP pubblico.

  • L' AWS STSendpoint per la AWS regione in cui stai distribuendo i nodi non è abilitato per il tuo account. Per abilitare la regione, vedi Attivazione e disattivazione AWS STS in una regione. AWS

  • Il nodo non ha una DNS voce privata, pertanto il kubelet registro contiene un errore. node "" not found Assicurati che il VPC luogo in cui viene creato il nodo abbia valori impostati per domain-name e domain-name-servers come Options in aDHCP options set. I valori predefiniti sono domain-name:<region>.compute.internal e domain-name-servers:AmazonProvidedDNS. Per ulteriori informazioni, consulta i set di DHCP opzioni nella Amazon VPC User Guide.

  • Se i nodi del gruppo di nodi gestiti non si connettono al cluster entro 15 minuti, verrà emesso un problema di integrità pari a NodeCreationFailure "" e lo stato della console verrà impostato Create failed su. In Windows AMIsche hanno tempi di avvio lenti, questo problema può essere risolto utilizzando l'avvio rapido.

Per identificare e risolvere i problemi più comuni che impediscono ai nodi worker di unirsi a un cluster, puoi utilizzare il runbook AWSSupport-TroubleshootEKSWorkerNode. Per ulteriori informazioni, vedere il riferimento AWSSupport-TroubleshootEKSWorkerNode al runbook di riferimento di AWS Systems Manager Automation.

Accesso negato o non autorizzato (kubectl)

Se ricevi uno dei seguenti errori durante l'esecuzione dei kubectl comandi, significa che non hai kubectl configurato correttamente per Amazon EKS o le credenziali per il IAM principale (ruolo o utente) che stai utilizzando non sono mappate a un Kubernetes nome utente con autorizzazioni sufficienti per Kubernetes oggetti sul tuo EKS cluster Amazon.

  • could not get token: AccessDenied: Access denied

  • error: You must be logged in to the server (Unauthorized)

  • error: the server doesn’t have a resource type "svc"

Questo potrebbe essere dovuto a uno dei seguenti fattori:

  • Il cluster è stato creato con le credenziali per un IAM principale ed kubectl è configurato per utilizzare le credenziali per un principale diversoIAM. Per risolvere il problema, aggiorna il file kube config affinché vengano utilizzate le credenziali con cui è stato creato il cluster. Per ulteriori informazioni, consulta Connect kubectl a un EKS cluster creando un file kubeconfig.

  • Se il cluster soddisfa i requisiti minimi di piattaforma nella sezione Prerequisiti di Grant IAM accesso degli utenti a Kubernetes con voci di EKS accesso Concedi IAM agli utenti l'accesso a Kubernetes con le voci di EKS accesso, non esiste una voce di accesso con il tuo principale. IAM Se esiste, non dispone dei dati necessari Kubernetes i nomi dei gruppi sono stati definiti o non è associata la politica di accesso appropriata. Per ulteriori informazioni, consulta Grant IAM accesso degli utenti a Kubernetes con voci di EKS accesso.

  • Se il tuo cluster non soddisfa i requisiti minimi di piattaforma in Grant IAM accesso degli utenti a Kubernetes con voci di EKS accesso Concedi IAM agli utenti l'accesso a Kubernetes con le voci di EKS accesso, non esiste una voce con il tuo IAM principale in. aws-auth ConfigMap Se esiste, non è mappato su Kubernetes nomi di gruppi associati a Kubernetes Roleo ClusterRole con le autorizzazioni necessarie. Per ulteriori informazioni sull' Kubernetes oggetti di autorizzazione basati sul ruolo (RBAC), vedere Utilizzo RBAC dell'autorizzazione in Kubernetes documentazione. È possibile visualizzare le aws-auth ConfigMap voci correnti my-cluster sostituendo il comando seguente con il nome del cluster e quindi eseguendo il comando modificato: eksctl get iamidentitymapping --cluster my-cluster. If an entry for with the ARN of your IAM principal isn’t in the ConfigMap, enter eksctl create iamidentitymapping --help in your terminal to learn how to create one.

Se si installa e si configura il AWS CLI, è possibile configurare IAM le credenziali utilizzate. Per ulteriori informazioni, vedere Configurazione della Guida per l'utente dell'interfaccia AWS CLI a riga di AWS comando. È inoltre possibile kubectl configurare l'utilizzo di un IAM ruolo, se si assume un IAM ruolo di accesso Kubernetes oggetti sul tuo cluster. Per ulteriori informazioni, consulta Connect kubectl a un EKS cluster creando un file kubeconfig.

hostname doesn’t match

La versione Python del sistema deve essere 2.7.9 o successiva. In caso contrario, riceverai hostname doesn’t match errori nelle AWS CLI chiamate verso AmazonEKS. Per ulteriori informazioni, consulta Cosa sono gli errori «il nome host non corrisponde»? nelle Domande frequenti sulle richieste di Python.

getsockopt: no route to host

Docker viene eseguito nell'172.17.0.0/16CIDRintervallo nei EKS cluster Amazon. Ti consigliamo che le VPC sottoreti del tuo cluster non si sovrappongano a questo intervallo. In caso contrario, riceverai il seguente messaggio di errore:

Error: : error upgrading connection: error dialing backend: dial tcp 172.17.<nn>.<nn>:10250: getsockopt: no route to host

Instances failed to join the Kubernetes cluster

Se ricevi l'errore Instances failed to join the Kubernetes cluster in AWS Management Console, assicurati che l'accesso privato agli endpoint del cluster sia abilitato o di aver configurato correttamente i CIDR blocchi per l'accesso pubblico agli endpoint. Per ulteriori informazioni, consulta Controlla l'accesso alla rete all'endpoint API del server del cluster.

Codici di errore dei gruppi di nodi gestiti

Se il tuo gruppo di nodi gestiti riscontra un problema di integrità dell'hardware, Amazon EKS restituisce un codice di errore per aiutarti a diagnosticare il problema. Questi controlli sanitari non rilevano problemi software perché si basano sui controlli EC2 sanitari di Amazon. Nel seguente elenco vengono descritti i codici di errore.

AccessDenied

Amazon EKS o uno o più dei tuoi nodi gestiti non riescono ad autenticarsi o autorizzare con il Kubernetes server di cluster. API Per ulteriori informazioni sulla risoluzione di un problema comune, consulta Risoluzione di una causa comune di errori AccessDenied per i gruppi di nodi gestiti. Privata Windows AMIspuò anche causare questo codice di errore insieme al messaggio Not authorized for images di errore. Per ulteriori informazioni, consulta Not authorized for images.

AmiIdNotFound

Non siamo riusciti a trovare l'AMIID associato al tuo modello di lancio. Assicurati che AMI esista e sia condiviso con il tuo account.

AutoScalingGroupNotFound

Non siamo riusciti a trovare il gruppo Auto Scaling associato al gruppo di nodi gestiti. Potresti ricreare un gruppo con dimensionamento automatico con le stesse impostazioni per procedere con il ripristino.

ClusterUnreachable

Amazon EKS o uno o più dei tuoi nodi gestiti non sono in grado di comunicare con il Kubernetes APIserver di cluster. Ciò può accadere in caso di interruzioni della rete o se API i server stanno scadendo l'elaborazione delle richieste.

Ec2 SecurityGroupNotFound

Non siamo riusciti a trovare il gruppo di sicurezza del cluster per il cluster. È necessario ricreare il cluster.

Ec2 SecurityGroupDeletionFailure

Non è stato possibile eliminare il gruppo di sicurezza dell'accesso remoto per il gruppo di nodi gestiti. Rimuovi eventuali dipendenze dal gruppo di sicurezza.

Ec 2 LaunchTemplateNotFound

Non siamo riusciti a trovare il modello di EC2 lancio di Amazon per il tuo gruppo di nodi gestito. È necessario ricreare il gruppo di nodi per procedere con il ripristino.

Ec2 LaunchTemplateVersionMismatch

La versione del modello di EC2 lancio di Amazon per il tuo gruppo di nodi gestiti non corrisponde alla versione EKS creata da Amazon. Potresti riuscire a ripristinare la versione che Amazon EKS ha creato per il ripristino.

IamInstanceProfileNotFound

Non siamo riusciti a trovare il profilo di IAM istanza per il tuo gruppo di nodi gestiti. Potresti ricreare un profilo dell'istanza con le stesse impostazioni per il ripristino.

IamNodeRoleNotFound

Non siamo riusciti a trovare il IAM ruolo per il tuo gruppo di nodi gestiti. Potresti riuscire a ricreare un IAM ruolo con le stesse impostazioni da ripristinare.

AsgInstanceLaunchFailures

Il gruppo con dimensionamento automatico sta riscontrando errori nel tentativo di avviare le istanze.

NodeCreationFailure

Le istanze avviate non sono in grado di registrarsi nel EKS cluster Amazon. Le cause più comuni di questo errore sono le autorizzazioni insufficienti per i IAM ruoli dei IAMRuolo EKS del nodo Amazon nodi o la mancanza di accesso a Internet in uscita per i nodi. I nodi devono soddisfare uno dei requisiti seguenti:

InstanceLimitExceeded

Il tuo AWS account non è in grado di avviare altre istanze del tipo di istanza specificato. Potresti richiedere un aumento del limite di EC2 istanze Amazon per il ripristino.

InsufficientFreeAddresses

Una o più sottoreti associate al tuo gruppo di nodi gestiti non hanno abbastanza indirizzi IP disponibili per i nuovi nodi.

InternalFailure

Questi errori sono in genere causati da un problema EKS sul lato server di Amazon.

La causa più comune degli errori AccessDenied durante l'esecuzione di operazioni su gruppi di nodi gestiti è la mancanza di eks:node-manager ClusterRole o ClusterRoleBinding. Amazon EKS configura queste risorse nel tuo cluster come parte dell'onboarding con gruppi di nodi gestiti e sono necessarie per la gestione dei gruppi di nodi.

Il ClusterRole può cambiare nel tempo, ma dovrebbe essere simile all'esempio seguente:

apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: eks:node-manager rules: - apiGroups: - '' resources: - pods verbs: - get - list - watch - delete - apiGroups: - '' resources: - nodes verbs: - get - list - watch - patch - apiGroups: - '' resources: - pods/eviction verbs: - create

Il ClusterRoleBinding può cambiare nel tempo, ma dovrebbe essere simile all'esempio seguente:

apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: eks:node-manager roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: eks:node-manager subjects: - apiGroup: rbac.authorization.k8s.io kind: User name: eks:node-manager

Verifica che il eks:node-manager ClusterRole esista.

kubectl describe clusterrole eks:node-manager

Se presente, confrontare l'output con il precedente esempio ClusterRole.

Verifica che il eks:node-manager ClusterRoleBinding esista.

kubectl describe clusterrolebinding eks:node-manager

Se presente, confrontare l'output con il precedente esempio ClusterRoleBinding.

Se hai identificato un elemento mancante o danneggiato ClusterRole o ClusterRoleBinding la causa di un AcessDenied errore durante la richiesta di operazioni gestite sui gruppi di nodi, puoi ripristinarlo. Salva nel computer i seguenti contenuti in un file denominato eks-node-manager-role.yaml.

apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: eks:node-manager rules: - apiGroups: - '' resources: - pods verbs: - get - list - watch - delete - apiGroups: - '' resources: - nodes verbs: - get - list - watch - patch - apiGroups: - '' resources: - pods/eviction verbs: - create --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: eks:node-manager roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: eks:node-manager subjects: - apiGroup: rbac.authorization.k8s.io kind: User name: eks:node-manager

Applica il file.

kubectl apply -f eks-node-manager-role.yaml

Riprova l'operazione per il gruppo di nodi per verificare se il problema è stato risolto.

Not authorized for images

Una potenziale causa di un messaggio di Not authorized for images errore è l'utilizzo di un Amazon privato EKS Windows AMIlanciare Windows gruppi di nodi gestiti. Dopo aver rilasciato nuovi Windows AMIs, AWS rende privati AMIs i file più vecchi di 4 mesi, il che li rende non più accessibili. Se il gruppo di nodi gestito utilizza un nodo privato Windows AMI, valuta la possibilità di Aggiorna un gruppo di nodi gestiti per il tuo cluster aggiornare il gruppo di nodi gestiti di Windows. Sebbene non possiamo garantire di poter fornire l'accesso a AMIs ciò che è stato reso privato, puoi richiedere l'accesso inviando un ticket a AWS Support. Per ulteriori informazioni, consulta Patches nella Amazon EC2 User Guide.

Il nodo è in NotReady stato

Se il nodo entra in uno NotReady stato, è probabile che ciò indichi che il nodo non è integro e non è disponibile per programmarne uno nuovo Pods. Ciò può verificarsi per vari motivi, ad esempio la mancanza di risorse sufficienti per il nodoCPU, di memoria o di spazio su disco disponibile.

EKSOttimizzato per Amazon Windows AMIs, non è prevista alcuna prenotazione per le risorse di elaborazione specificate di default nella kubelet configurazione. Per evitare problemi relativi alle risorse, puoi riservare le risorse di calcolo per i processi di sistema fornendo loro i kubelet valori di configurazione per kube-reserved e/o system-reserved. È possibile eseguire questa operazione utilizzando il parametro della riga di -KubeletExtraArgs comando nello script bootstrap. Per ulteriori informazioni, vedete Reserve Compute Resources for System Daemons nel Kubernetes nella documentazione e Parametri di configurazione dello script di bootstrap in questa guida per l'utente.

CNIstrumento di raccolta dei registri

Il Amazon VPC CNI plugin for Kubernetes dispone di un proprio script di risoluzione dei problemi disponibile sui nodi all'indirizzo/opt/cni/bin/aws-cni-support.sh. È possibile utilizzare lo script per raccogliere i registri diagnostici per i casi di supporto e per la risoluzione dei problemi generali.

Utilizza il comando seguente per eseguire lo script sul nodo:

sudo bash /opt/cni/bin/aws-cni-support.sh
Nota

Se lo script non è presente in quella posizione, l'esecuzione del CNI contenitore non è riuscita. Puoi scaricare manualmente lo script ed eseguirlo con il comando seguente:

curl -O https://raw.githubusercontent.com/awslabs/amazon-eks-ami/master/log-collector-script/linux/eks-log-collector.sh sudo bash eks-log-collector.sh

Lo script raccoglie le seguenti informazioni di diagnostica: La CNI versione che hai distribuito può essere precedente alla versione dello script.

This is version 0.6.1. New versions can be found at https://github.com/awslabs/amazon-eks-ami Trying to collect common operating system logs... Trying to collect kernel logs... Trying to collect mount points and volume information... Trying to collect SELinux status... Trying to collect iptables information... Trying to collect installed packages... Trying to collect active system services... Trying to collect Docker daemon information... Trying to collect kubelet information... Trying to collect L-IPAMD information... Trying to collect sysctls information... Trying to collect networking information... Trying to collect CNI configuration information... Trying to collect running Docker containers and gather container data... Trying to collect Docker daemon logs... Trying to archive gathered information... Done... your bundled logs are located in /var/log/eks_i-0717c9d54b6cfaa19_2020-03-24_0103-UTC_0.6.1.tar.gz

Le informazioni di diagnostica vengono raccolte e archiviate in:

/var/log/eks_i-0717c9d54b6cfaa19_2020-03-24_0103-UTC_0.6.1.tar.gz

Rete runtime container non pronta

Potresti visualizzare un errore Container runtime network not ready ed errori di autorizzazione analoghi al seguente:

4191 kubelet.go:2130] Container runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:docker: network plugin is not ready: cni config uninitialized 4191 reflector.go:205] k8s.io/kubernetes/pkg/kubelet/kubelet.go:452: Failed to list *v1.Service: Unauthorized 4191 kubelet_node_status.go:106] Unable to register node "ip-10-40-175-122.ec2.internal" with API server: Unauthorized 4191 reflector.go:205] k8s.io/kubernetes/pkg/kubelet/kubelet.go:452: Failed to list *v1.Service: Unauthorized

Questo può verificarsi per uno dei seguenti motivi:

  1. O non ne hai uno aws-auth ConfigMap nel tuo cluster o non include voci per il IAM ruolo con cui hai configurato i tuoi nodi.

    Per risolvere il problema, visualizza le voci esistenti nel tuo file ConfigMap my-cluster sostituendo il seguente comando con il nome del cluster e quindi eseguendo il comando modificato: eksctl get iamidentitymapping --cluster my-cluster. If you receive an error message from the command, it might be because your cluster doesn’t have an aws-auth ConfigMap. The following command adds an entry to the ConfigMap. If the ConfigMap doesn’t exist, the command also creates it. Replace 111122223333 with the AWS account ID for the IAM role and myAmazonEKSNodeRole with the name of your node’s role.

    eksctl create iamidentitymapping --cluster my-cluster \ --arn arn:aws: iam::111122223333:role/myAmazonEKSNodeRole --group system:bootstrappers,system:nodes \ --username system:node:{{EC2PrivateDNSName}}

    Il ARN ruolo specificato non può includere un percorso diverso da/. Ad esempio, se il nome del tuo ruolo èdevelopment/apps/my-role, dovresti cambiarlo in my-role quando specifichi il ARN ruolo. Assicurati di specificare il IAM ruolo del nodo ARN (non il profilo dell'istanzaARN).

    percorso diverso da/. Ad esempio, se il nome del tuo ruolo èdevelopment/apps/my-role, dovresti cambiarlo in my-role quando specifichi il ARN ruolo. Assicurati di specificare il IAM ruolo del nodo ARN (non il profilo dell'istanzaARN).

    diverso da/. Ad esempio, se il nome del tuo ruolo èdevelopment/apps/my-role, dovresti cambiarlo in my-role quando specifichi il ARN ruolo. Assicurati di specificare il IAM ruolo del nodo ARN (non il profilo dell'istanzaARN).

    /. Ad esempio, se il nome del tuo ruolo èdevelopment/apps/my-role, dovresti cambiarlo in my-role quando specifichi il ARN ruolo. Assicurati di specificare il IAM ruolo del nodo ARN (non il profilo dell'istanzaARN).

    . Ad esempio, se il nome del tuo ruolo èdevelopment/apps/my-role, dovresti cambiarlo in my-role quando specifichi il ARN ruolo. Assicurati di specificare il IAM ruolo del nodo ARN (non il profilo dell'istanzaARN).

    development/apps/my-role, dovresti cambiarlo my-role quando specifichi ARN il ruolo. Assicurati di specificare il IAM ruolo del nodo ARN (non il profilo dell'istanzaARN).

    , dovresti cambiarlo my-role quando specifichi ARN il ruolo. Assicurati di specificare il IAM ruolo del nodo ARN (non il profilo dell'istanzaARN).

    my-rolequando si specifica ARN il ruolo. Assicurati di specificare il IAM ruolo del nodo ARN (non il profilo dell'istanzaARN).

    quando si specifica ARN il ruolo. Assicurati di specificare il IAM ruolo del nodo ARN (non il profilo dell'istanzaARN).

  2. I tuoi nodi autogestiti si trovano in un cluster con una versione della piattaforma alla versione minima elencata nei prerequisiti nell'argomento Grant IAM accesso degli utenti a Kubernetes con voci di EKS accesso Concedi IAM agli utenti l'accesso a Kubernetes con voci di EKS accesso, ma non è elencata una voce aws-auth ConfigMap (vedi articolo precedente) per il IAM ruolo del nodo o non esiste una voce di accesso per il ruolo. Per risolvere il problema, visualizza le voci di accesso esistenti my-cluster sostituendo il comando seguente con il nome del cluster e quindi eseguendo il comando modificato: aws eks list-access-entries --cluster-name my-cluster. The following command adds an access entry for the node’s IAM role. Replace 111122223333 with the AWS account ID for the IAM role and myAmazonEKSNodeRole with the name of your node’s role. If you have a Windows node, replace EC2_Linux with EC2_Windows. Make sure that you specify the node IAM role ARN (not the instance profile ARN).

    aws eks create-access-entry --cluster-name my-cluster --principal-arn arn:aws: iam::111122223333:role/myAmazonEKSNodeRole --type EC2_Linux

TLShandshake (timeout)

Quando un nodo non è in grado di stabilire una connessione all'endpoint del API server pubblico, è possibile che venga visualizzato un errore simile al seguente.

server.go:233] failed to run Kubelet: could not init cloud provider "aws": error finding instance i-1111f2222f333e44c: "error listing AWS instances: \"RequestError: send request failed\\ncaused by: Post net/http: TLS handshake timeout\""

Il kubelet processo verrà riavviato e testato continuamente l'endpoint del API server. L'errore può verificarsi anche temporaneamente durante qualsiasi procedura che esegue un aggiornamento in sequenza del cluster nel piano di controllo, ad esempio una modifica della configurazione o un aggiornamento della versione.

Per risolvere il problema, controlla la tabella di routing e i gruppi di sicurezza per assicurarti che il traffico proveniente dai nodi possa raggiungere l'endpoint pubblico.

InvalidClientTokenId

Se utilizzi IAM ruoli per gli account di servizio per un Pod oppure DaemonSet distribuito in un cluster in una AWS regione della Cina e non ho impostato la variabile di AWS_DEFAULT_REGION ambiente nelle specifiche, Pod oppure DaemonSet potrebbe ricevere il seguente errore:

An error occurred (InvalidClientTokenId) when calling the GetCallerIdentity operation: The security token included in the request is invalid

Per risolvere il problema, è necessario aggiungere la variabile di AWS_DEFAULT_REGION ambiente al Pod oppure DaemonSet spec, come illustrato nell'esempio seguente Pod spec.

apiVersion: v1 kind: Pod metadata: name: envar-demo labels: purpose: demonstrate-envars spec: containers: - name: envar-demo-container image: gcr.io/google-samples/node-hello:1.0 env: - name: AWS_DEFAULT_REGION value: "region-code"

I gruppi di nodi devono corrispondere Kubernetes versione prima dell'aggiornamento del piano di controllo

Prima di aggiornare un piano di controllo a uno nuovo Kubernetes versione, la versione secondaria dei nodi gestiti e Fargate nel cluster deve essere la stessa della versione corrente del piano di controllo. Amazon EKS update-cluster-version API rifiuta le richieste finché non esegui l'upgrade di tutti i nodi EKS gestiti da Amazon alla versione corrente del cluster. Amazon EKS fornisce APIs l'aggiornamento dei nodi gestiti. Per informazioni sull'aggiornamento di un gruppo di nodi gestiti Kubernetes versione, vedi. Aggiorna un gruppo di nodi gestiti per il tuo cluster Per aggiornare la versione di un nodo Fargate, elimina il pod è rappresentato dal nodo e ridistribuisci il pod dopo aver aggiornato il piano di controllo. Per ulteriori informazioni, consulta Aggiorna il cluster esistente alla nuova versione di Kubernetes.

All'avvio di molti nodi, si verificano errori Too Many Requests

Se avvii più nodi contemporaneamente, potresti visualizzare un messaggio di errore nei log di esecuzione dei dati EC2 degli utenti di Amazon che diceToo Many Requests. Ciò può verificarsi perché il piano di controllo è sovraccarico di chiamate describeCluster. Il sovraccarico si traduce in limitazione (della larghezza di banda della rete), nodi che non eseguono lo script bootstrap e nodo che non vengono aggiunti al cluster.

Assicurati che --apiserver-endpoint--b64-cluster-ca, e --dns-cluster-ip gli argomenti vengano passati allo script di bootstrap del nodo. Quando si includono questi argomenti, non è necessario che lo script bootstrap effettui una describeCluster chiamata, il che aiuta a prevenire il sovraccarico del piano di controllo. Per ulteriori informazioni, consulta Fornisci i dati utente per passare argomenti al bootstrap.sh file incluso in un programma EKS ottimizzato per Amazon Linux/Bottlerocket AMI.

HTTP401 risposta di errore non autorizzata su Kubernetes APIrichieste del server

Questi errori vengono visualizzati se Pod’s il token dell'account di servizio è scaduto in un cluster.

I tuoi EKS cluster Amazon Kubernetes APIil server rifiuta le richieste con token più vecchi di 90 giorni. In precedenza Kubernetes nelle versioni, i token non avevano una scadenza. Di conseguenza, i client che si basano su questi token devono aggiornarli entro un'ora. Per evitare che Kubernetes APIil server respinga la tua richiesta a causa di un token non valido, la SDK versione del client Kubernetes utilizzata dal tuo carico di lavoro deve essere la stessa o successiva alle seguenti versioni:

  • Go versione 0.15.7 e successive

  • Python versione 12.0.0 e successive

  • Java versione 9.0.0 e successive

  • JavaScript versione e successive 0.10.3

  • Ramo master di Ruby

  • Haskell versione 0.3.0.0

  • C# versione 7.0.5 e successive

Puoi identificare tutti gli esistenti Pods nel tuo cluster che utilizzano token obsoleti. Per ulteriori informazioni, consulta Token dell'account di servizio.

EKSLa versione della piattaforma Amazon è inferiore a più di due versioni rispetto alla versione attuale della piattaforma

Ciò può accadere quando Amazon EKS non è in grado di aggiornare automaticamente la versione della Visualizza le versioni EKS della piattaforma Amazon per ogni versione di Kubernetes piattaforma del cluster. Sebbene ci siano molte cause, di seguito riportiamo quelle più comuni. Se uno di questi problemi riguarda il tuo cluster, potrebbe continuare a funzionare, ma la sua versione della piattaforma semplicemente non verrà aggiornata da AmazonEKS.

Problema

Il IAM ruolo del EKSIAMRuolo del cluster Amazon cluster è stato eliminato: questo ruolo è stato specificato al momento della creazione del cluster. Puoi visualizzare quale ruolo è stato specificato con il seguente comando. Sostituisci my-cluster con il nome del cluster.

aws eks describe-cluster --name my-cluster --query cluster.roleArn --output text | cut -d / -f 2

Di seguito viene riportato un output di esempio:

eksClusterRole
Soluzione

Crea un nuovo IAM ruolo EKSIAMRuolo del cluster Amazon del cluster con lo stesso nome.

Problema

Una sottorete specificata durante la creazione del cluster è stata eliminata: le sottoreti da utilizzare con il cluster sono state specificate durante la creazione del cluster. Puoi visualizzare le sottoreti specificate con il seguente comando. Sostituisci my-cluster con il nome del cluster.

aws eks describe-cluster --name my-cluster --query cluster.resourcesVpcConfig.subnetIds

Di seguito viene riportato un output di esempio:

[ "subnet-EXAMPLE1", "subnet-EXAMPLE2" ]
Soluzione

Verifica se la sottorete IDs esiste nel tuo account.

vpc_id=$(aws eks describe-cluster --name my-cluster --query cluster.resourcesVpcConfig.vpcId --output text) aws ec2 describe-subnets --filters "Name=vpc-id,Values=$vpc_id" --query "Subnets[*].SubnetId"

Di seguito viene riportato un output di esempio:

[ "subnet-EXAMPLE3", "subnet-EXAMPLE4" ]

Se la IDs sottorete restituita nell'output non corrisponde alla sottorete specificata al momento della creazione del cluster, se desideri IDs che Amazon EKS aggiorni il cluster, devi modificare le sottoreti utilizzate dal cluster. Questo perché se hai specificato più di due sottoreti al momento della creazione del cluster, Amazon seleziona EKS casualmente le sottoreti che hai specificato per creare nuove interfacce di rete elastiche. Queste interfacce di rete consentono al piano di controllo di comunicare con i nodi. Amazon EKS non aggiornerà il cluster se la sottorete selezionata non esiste. Non hai alcun controllo su quale delle sottoreti che hai specificato al momento della creazione del cluster in cui Amazon EKS sceglie di creare una nuova interfaccia di rete.

Quando avvii un Kubernetes l'aggiornamento della versione per il cluster, l'aggiornamento può non riuscire per lo stesso motivo.

Problema

Un gruppo di sicurezza specificato durante la creazione del cluster è stato eliminato: se hai specificato i gruppi di sicurezza durante la creazione del cluster, puoi visualizzarli IDs con il seguente comando. Sostituisci my-cluster con il nome del cluster.

aws eks describe-cluster --name my-cluster --query cluster.resourcesVpcConfig.securityGroupIds

Di seguito viene riportato un output di esempio:

[ "sg-EXAMPLE1" ]

Se [] viene restituito, significa che non è stato specificato alcun gruppo di sicurezza al momento della creazione del cluster e il problema non è un gruppo di sicurezza mancante. Se vengono restituiti i gruppi di sicurezza, conferma che i gruppi di sicurezza sono presenti nel tuo account.

Soluzione

Verifica se questi gruppi di sicurezza esistono nel tuo account.

vpc_id=$(aws eks describe-cluster --name my-cluster --query cluster.resourcesVpcConfig.vpcId --output text) aws ec2 describe-security-groups --filters "Name=vpc-id,Values=$vpc_id" --query "SecurityGroups[*].GroupId"

Di seguito viene riportato un output di esempio:

[ "sg-EXAMPLE2" ]

Se il gruppo di sicurezza IDs restituito nell'output non corrisponde al gruppo di sicurezza specificato al momento della creazione del cluster, se desideri IDs che Amazon EKS aggiorni il cluster, devi modificare i gruppi di sicurezza utilizzati dal cluster. Amazon EKS non aggiornerà un cluster se il gruppo di sicurezza IDs specificato al momento della creazione del cluster non esiste.

Quando avvii un Kubernetes l'aggiornamento della versione per il cluster, l'aggiornamento può non riuscire per lo stesso motivo.

  • Non hai almeno sei (anche se ne consigliamo 16) indirizzi IP disponibili in ciascuna delle sottoreti che hai specificato al momento della creazione del cluster. Se non disponi di un numero sufficiente di indirizzi IP disponibili nella sottorete, è necessario liberare gli indirizzi IP nella sottorete oppure modificare le sottoreti utilizzate dal cluster per utilizzare sottoreti con un numero sufficiente di indirizzi IP disponibili.

  • Hai abilitato la crittografia Crittografa i segreti di Kubernetes con i cluster esistenti AWS KMS dei segreti quando hai creato il cluster e la AWS KMS chiave specificata è stata eliminata. Se desideri che Amazon EKS aggiorni il cluster, devi creare un nuovo cluster

Integrità del cluster FAQs e codici di errore con percorsi di risoluzione

Amazon EKS rileva problemi con EKS i cluster e l'infrastruttura del cluster e li archivia nello stato del cluster. Grazie alle informazioni sull'integrità del cluster è possibile rilevare, risolvere e affrontare più rapidamente eventuali problemi. Ciò consente di creare ambienti applicativi più sicuri e. up-to-date Inoltre, potrebbe essere impossibile eseguire l'aggiornamento a versioni più recenti di Kubernetes o per consentire EKS ad Amazon di installare aggiornamenti di sicurezza su un cluster danneggiato a causa di problemi con l'infrastruttura o la configurazione del cluster necessarie. Amazon EKS può impiegare 3 ore per rilevare problemi o rilevare che un problema è stato risolto.

Lo stato di salute di un EKS cluster Amazon è una responsabilità condivisa tra Amazon EKS e i suoi utenti. Sei responsabile dell'infrastruttura prerequisita dei IAM ruoli e delle VPC sottoreti Amazon, nonché di altre infrastrutture necessarie, che devono essere fornite in anticipo. Amazon EKS rileva i cambiamenti nella configurazione di questa infrastruttura e del cluster.

Per accedere allo stato del cluster nella EKS console Amazon, cerca una sezione chiamata Health Issues nella scheda Panoramica della pagina dei dettagli del EKS cluster Amazon. Questi dati saranno disponibili anche richiamando l'DescribeClusterazione EKSAPI, ad esempio dall'interno dell'interfaccia a riga di AWS comando.

Perché dovrei usare questa funzionalità?

Otterrai una maggiore visibilità sullo stato del tuo EKS cluster Amazon, diagnosticherai e risolverai rapidamente eventuali problemi, senza dover dedicare tempo al debug o all'apertura di casi di supporto. AWS Ad esempio: hai eliminato accidentalmente una sottorete per il EKS cluster Amazon, Amazon EKS non sarà in grado di creare interfacce di rete tra account e Kubernetes AWS CLIcomandi come kubectl exec o logs. kubectl Questi falliranno con l'errore: Error from server: error dialing backend: remote error: tls: internal error. Ora vedrai un problema di EKS salute di Amazon che dice:subnet-da60e280 was deleted: could not create network interface.

In che modo questa funzionalità è correlata o funziona con altri AWS servizi?

IAMi ruoli e le VPC sottoreti Amazon sono due esempi di infrastruttura prerequisita con cui l'integrità del cluster rileva i problemi. Se tali risorse non sono configurate correttamente, questa funzionalità restituirà informazioni dettagliate.

Un cluster con problemi di salute comporta costi?

Sì, ogni EKS cluster Amazon viene fatturato ai EKS prezzi standard di Amazon. La funzionalità integrità del cluster è disponibile senza costi aggiuntivi.

Questa funzionalità funziona con EKS i cluster Amazon su AWS Outposts?

Sì, vengono rilevati problemi di cluster per EKS i cluster nel AWS Cloud, inclusi i cluster estesi su Outposts e i cluster AWS locali su Outposts. AWS L'integrità del cluster non rileva problemi con Amazon EKS Anywhere o Amazon EKS Distro (EKS-D).

Posso ricevere una notifica quando vengono rilevati nuovi problemi?

Sì. AWS invia un'e-mail e una notifica di Personal Health Dashboard quando vengono rilevati nuovi problemi di Cluster Health.

La console mi avvisa in caso di problemi di salute?

Sì, qualsiasi cluster con problemi di integrità presenterà un banner di avviso nella parte superiore della console.

Le prime due colonne sono quelle necessarie per i valori di API risposta. Il terzo campo dell' ClusterIssueoggetto Health è resourceIds, la cui restituzione dipende dal tipo di problema.

Codice Messaggio ResourceIds Cluster recuperabile?

SUBNET_NOT_FOUND

Non siamo riusciti a trovare una o più sottoreti attualmente associate al tuo cluster. Chiama Amazon EKS update-cluster-config APIper aggiornare le sottoreti.

ID sottorete

SECURITY_GROUP_NOT_FOUND

Non siamo riusciti a trovare uno o più gruppi di sicurezza attualmente associati al tuo cluster. Chiama Amazon EKS update-cluster-config API per aggiornare i gruppi di sicurezza

ID gruppo di sicurezza

IP_NOT_AVAILABLE

Una o più sottoreti associate al tuo cluster non dispongono di indirizzi IP sufficienti per consentire EKS ad Amazon di eseguire operazioni di gestione del cluster. Libera indirizzi nelle sottoreti o associa diverse sottoreti al tuo cluster utilizzando Amazon. EKS update-cluster-config API

ID sottorete

VPC_NOT_FOUND

Non siamo riusciti a trovare quello VPC associato al tuo cluster. È necessario eliminare e ricreare il cluster.

VPCL'ho fatto

No

ASSUME_ROLE_ACCESS_DENIED

Il tuo cluster non utilizza Amazon EKS service-linked-role. Non potevamo assumere il ruolo associato al tuo cluster per eseguire le operazioni di EKS gestione Amazon richieste. Verifica che il ruolo esista e disponga della policy di attendibilità richiesta.

Il IAM ruolo del cluster

PERMISSION_ACCESS_DENIED

Il tuo cluster non utilizza Amazon EKS service-linked-role. Il ruolo associato al tuo cluster non concede autorizzazioni sufficienti EKS ad Amazon per eseguire le operazioni di gestione richieste. Verifica le policy associate al ruolo del cluster e controlla se vengono applicate policy di negazione separate.

Il ruolo del cluster IAM

ASSUME_ROLE_ACCESS_DENIED_USING_SLR

Non potevamo dare per scontato la gestione dei EKS cluster Amazon service-linked-role. Verifica che il ruolo esista e disponga della policy di attendibilità richiesta.

L'Amazzonia EKS service-linked-role

PERMISSION_ACCESS_DENIED_USING_SLR

La gestione dei EKS cluster Amazon service-linked-role non concede autorizzazioni sufficienti EKS ad Amazon per eseguire le operazioni di gestione richieste. Verifica le policy associate al ruolo del cluster e controlla se vengono applicate policy di negazione separate.

L'Amazzonia EKS service-linked-role

OPT_IN_REQUIRED

Il tuo account non dispone di un abbonamento EC2 al servizio Amazon. Aggiorna gli abbonamenti del tuo account nella pagina delle impostazioni dell'account.

N/D

STS_REGIONAL_ENDPOINT_DISABLED

Il STS l'endpoint regionale è disabilitato. Abilita l'endpoint per Amazon per EKS eseguire le operazioni di gestione dei cluster richieste.

N/D

KMS_KEY_DISABLED

La chiave AWS KMS associata al cluster è disabilitata. Riabilita la chiave per ripristinare il cluster.

Il KMS Key Arn

KMS_KEY_NOT_FOUND

Non siamo riusciti a trovare la AWS KMS chiave associata al tuo cluster. È necessario eliminare e ricreare il cluster.

Il KMS Key ARN

No

KMS_GRANT_REVOKED

Le concessioni per la chiave AWS KMS associata al cluster vengono revocate. È necessario eliminare e ricreare il cluster.

Il KMS Key Arn

No

📝 Modifica questa pagina su GitHub