Per quale motivo non riesco a connettermi al cluster Amazon EKS?
Ho creato un cluster Amazon Elastic Kubernetes Service (Amazon EKS), ma non riesco a connettermi.
Breve descrizione
È possibile che tu non riesca a connetterti al tuo cluster EKS per uno dei seguenti motivi:
- Non hai creato il file kubeconfig per il cluster.
- Non puoi connetterti all'endpoint del server API Amazon EKS.
Risoluzione
Non hai creato il file kubeconfig
Dopo la creazione del cluster Amazon EKS, è necessario configurare il file kubeconfig con l'interfaccia della linea di comando AWS (AWS CLI). Questa configurazione permette di connettersi al cluster utilizzando la riga di comando kubectl. La risoluzione seguente mostra come creare un file kubeconfig per il cluster tramite il comando update-kubeconfig di AWS CLI. Per aggiornare manualmente il file kubeconfig senza utilizzare AWS CLI, consulta Creazione o aggiornamento di un file kubeconfig per un cluster Amazon EKS. Nota: se ricevi un messaggio di errore durante l'esecuzione dei comandi di AWS CLI, assicurati di utilizzarne la versione più recente.
1. Verifica che sul tuo sistema sia installata la versione 1.16.308 o successiva di AWS CLI:
$ aws --version
Importante: sul sistema è necessario avere installato la versione 2.7.9 o successiva di Python. In caso contrario, riceverai un messaggio di errore.
Suggerimento: per installare AWS CLI, utilizza i gestori di pacchetti come yum, apt-get o homebrew per macOS.
2. Controlla l’identità attuale per verificare che tu stia utilizzando le credenziali corrette che dispongono delle autorizzazioni per il cluster Amazon EKS:
aws sts get-caller-identity
Nota: l’utente dell’entità AWS Identity and Access Management (IAM) o il ruolo che crea un cluster Amazon riceve automaticamente le autorizzazioni al momento della creazione del cluster. Queste autorizzazioni sono concesse nella configurazione RBAC del cluster nel piano di controllo. È possibile concedere l’accesso a un cluster Amazon EKS anche agli utenti IAM o ai ruoli suaws-auth ConfigMap. Per impostazione predefinita, AWS IAM Authenticator per Kubernetes utilizza AWS CLI o l'identità dell'SDK AWS configurata. Per ulteriori informazioni, consulta Attivazione dell'accesso di utenti e ruoli IAM al cluster.
3. Crea o aggiorna il file kubeconfig per il tuo cluster:
aws eks --region example_region update-kubeconfig --name cluster_name
Nota: sostituisce example_region con il nome della tua Regione AWS. Sostituisci cluster_name con il nome del tuo cluster EKS.
Per impostazione predefinita, il file di configurazione per Linux viene creato nel percorso kubeconfig ($HOME/.kube/config) nella tua directory home. Il file potrebbe anche essere unito a un file kubeconfig esistente in quella posizione. Su Windows, il file si trova in %USERPROFILE%.kube\config.
È possibile specificare anche un altro percorso impostando la variabile dell'ambiente KUBECONFIG (dal sito Web Kubernetes) o tramite l'opzione --kubeconfig:
$ kubectl get pods --kubeconfig ./.kube/config
Nota: per l'autenticazione quando si eseguono i comandi kubectl, puoi specificare un nome della risorsa Amazon (ARN) del ruolo IAM tramite l'opzione --role-arn. In caso contrario, viene utilizzata l'entità IAM nella catena delle credenziali predefinita di AWS CLI o dell'SDK AWS. Per ulteriori informazioni, consulta update-kubeconfig oppure completa il passaggio 6 nella sezione Creazione manuale del file kubeconfig di Creazione o aggiornamento di un file kubeconfig per un cluster Amazon EKS.
4. Testa la tua configurazione:
$ kubectl get svc
Output di esempio:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE svc/kubernetes ClusterIP 10.100.0.1 <none> 443/TCP 1m
Nota: se ricevi altri messaggi di errore relativi all'autorizzazione o al tipo di risorsa, consulta Accesso non autorizzato o negato (kubectl).
Non puoi connetterti all'endpoint del server API Amazon EKS
1. Verifica che puoi connetterti all'URL corretto del server API Amazon EKS. Per farlo, attiva kubectl verbosity, quindi emetti il seguente comando:
$ kubectl get svc --v=9
Dovresti visualizzare un output simile al seguente:
I0110 16:43:36.920095 48173 loader.go:373] Config loaded from file: /Users/abs/.kube/config I0110 16:43:36.936844 48173 round_trippers.go:466] curl -v -XGET -H "Accept: application/json;as=Table;v=v1;g=meta.k8s.io,application/json;as=Table;v=v1beta1;g=meta.k8s.io,application/json" -H "User-Agent: kubectl/v1.26.0 (darwin/arm64) kubernetes/b46a3f8" 'https://S123GBNS3HJUFN467UFGH6782JHCH2891.yl4.us-east-2.eks.amazonaws.com//api/v1/namespaces/default/services?limit=500' I0110 16:43:37.362185 48173 round_trippers.go:495] HTTP Trace: DNS Lookup for S123GBNS3HJUFN467UFGH6782JHCH2891.yl4.us-east-2.eks.amazonaws.com/ resolved to [{18.119.155.77 } {3.136.153.3 }] I0110 16:43:37.402538 48173 round_trippers.go:510] HTTP Trace: Dial to tcp:18.119.155.77:443 succeed I0110 16:43:37.500276 48173 round_trippers.go:553] GET https://S123GBNS3HJUFN467UFGH6782JHCH2891.yl4.us-east-2.eks.amazonaws.com//api/v1/namespaces/default/services?limit=500 200 OK in 563 milliseconds I0110 16:43:37.500302 48173 round_trippers.go:570] HTTP Statistics: DNSLookup 1 ms Dial 40 ms TLSHandshake 44 ms ServerProcessing 52 ms Duration 563 ms I0110 16:43:37.500308 48173 round_trippers.go:577] Response Headers: I0110 16:43:37.500316 48173 round_trippers.go:580] Audit-Id: 37c17136-7fa7-40e9-8fe6-b24426e81564 I0110 16:43:37.500323 48173 round_trippers.go:580] Cache-Control: no-cache, private I0110 16:43:37.500329 48173 round_trippers.go:580] Content-Type: application/json I0110 16:43:37.500334 48173 round_trippers.go:580] X-Kubernetes-Pf-Flowschema-Uid: 508eb99e-d99b-44db-8ade-838c99fe8e9f I0110 16:43:37.500340 48173 round_trippers.go:580] X-Kubernetes-Pf-Prioritylevel-Uid: d324d3db-05ce-441b-a0ff-c31cbe8f696c I0110 16:43:37.500345 48173 round_trippers.go:580] Date: Tue, 10 Jan 2023 21:43:37 GMT
2. Verifica che il server API Amazon EKS sia accessibile pubblicamente emettendo il seguente comando:
$ aws eks describe-cluster --name cluster_name --region example_region --query cluster.resourcesVpcConfig
Dovresti visualizzare un output simile al seguente:
{ "subnetIds": [ "subnet-abc1", "subnet-abc2", "subnet-abc3", "subnet-abc4", "subnet-abc5", "subnet-abc6" ], "securityGroupIds": [ "sg-abc7" ], "clusterSecurityGroupId": "sg-abc7", "vpcId": "vpc-abc9", "endpointPublicAccess": true, "endpointPrivateAccess": false, "publicAccessCidrs": [ "0.0.0.0/0" ] }
3. Nell'output precedente, se endpointPublicAccess è true, assicurati di consentire tutti gli indirizzi IP di origine nell'elenco publicAccessCidrs. A tale scopo, procedi nel seguente modo:
- Apri la console di Amazon EKS.
- Scegli il cluster che desideri aggiornare.
- Scegli la scheda Networking (Rete), quindi scegli Manage Networking (Gestisci rete).
- Seleziona Public (Pubblico).
- In Advanced settings (Impostazioni avanzate), per il blocco CIDR, inserisci tutto l'intervallo CIDR pubblico che deve essere inserito nell'elenco consentito.
- Seleziona Save changes (Salva le modifiche).
Nell'output precedente, se endpointPrivateAccess è true, assicurati che la richiesta kubectl provenga dalla rete del cluster. Se la tua richiesta kubectl proviene dall'esterno di Amazon Virtual Private Cloud (Amazon VPC), viene visualizzato il seguente errore di timeout:
$ kubectl get svc --v=9 I0110 17:15:58.889798 50514 loader.go:373] Config loaded from file: /Users/example-user/.kube/config I0110 17:15:58.896715 50514 round_trippers.go:466] curl -v -XGET -H "Accept: application/json;as=Table;v=v1;g=meta.k8s.io,application/json;as=Table;v=v1beta1;g=meta.k8s.io,application/json" -H "User-Agent: kubectl/v1.26.0 (darwin/arm64) kubernetes/b46a3f8" 'https://S123GBNS3HJUFN467UFGH6782JHCH2891.yl4.us-east-2.eks.amazonaws.com/api/v1/namespaces/default/services?limit=500' I0110 17:15:59.374499 50514 round_trippers.go:495] HTTP Trace: DNS Lookup for S123GBNS3HJUFN467UFGH6782JHCH2891.yl4.us-east-2.eks.amazonaws.com resolved to [{192.168.126.17 } {192.168.144.26 }] I0110 17:16:14.285027 50514 round_trippers.go:508] HTTP Trace: Dial to tcp:192.168.126.17:443 failed: dial tcp 192.168.126.17:443: i/o timeout I0110 17:16:29.191768 50514 round_trippers.go:508] HTTP Trace: Dial to tcp:192.168.144.26:443 failed: dial tcp 192.168.144.26:443: i/o timeout I0110 17:16:29.196959 50514 round_trippers.go:553] GET https://S123GBNS3HJUFN467UFGH6782JHCH2891.yl4.us-east-2.eks.amazonaws.com/api/v1/namespaces/default/services?limit=500 in 30300 milliseconds I0110 17:16:29.197724 50514 round_trippers.go:570] HTTP Statistics: DNSLookup 183 ms Dial 14906 ms TLSHandshake 0 ms Duration 30300 ms I0110 17:16:29.197768 50514 round_trippers.go:577] Response Headers: I0110 17:16:29.199254 50514 helpers.go:264] Connection error: Get https://S123GBNS3HJUFN467UFGH6782JHCH2891.yl4.us-east-2.eks.amazonaws.com/api/v1/namespaces/default/services?limit=500: dial tcp 192.168.126.17:443: i/o timeout Unable to connect to the server: dial tcp 192.168.126.17:443: i/o timeout
Inoltre, aggiorna il gruppo di sicurezza del cluster per assicurarti che l'indirizzo IP o l'intervallo CIDR di origine sia nell'elenco di elementi consentiti. Ciò consente al client kubectl di connettersi all'endpoint del server API Amazon EKS.
Informazioni correlate
Video correlati

Contenuto pertinente
- AWS UFFICIALEAggiornata 3 mesi fa
- AWS UFFICIALEAggiornata 10 mesi fa
- AWS UFFICIALEAggiornata 4 mesi fa
- AWS UFFICIALEAggiornata 2 anni fa