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 tuo cluster.
- Non riesci a connetterti all'endpoint del server API Amazon EKS.
Risoluzione
Non hai creato il file kubeconfig
Dopo aver creato il cluster Amazon EKS, devi configurare il file kubeconfig utilizzando l'interfaccia della linea di comando AWS (AWS CLI). Questa configurazione consente di connettersi al cluster usando la linea di comando kubectl. La risoluzione seguente mostra come creare un file kubeconfig per il cluster con il comando update-kubeconfig di AWS CLI. Per aggiornare manualmente il file kubeconfig senza utilizzare AWS CLI, consulta Creating or updating a kubeconfig file for an Amazon EKS cluster.
Nota: se ricevi errori durante l'esecuzione dei comandi di AWS CLI,assicurati di utilizzare la versione più recente di AWS CLI.
1. Verifica di avere installato sul tuo sistema AWS CLI versione 1.16.308 o successiva:
$ aws --version
Importante: devi avere Python versione 2.7.9 o successiva installato sul tuo sistema. Altrimenti, riceverai un messaggio di errore.
Suggerimento: per installare AWS CLI, utilizza gestori di pacchetti come yum, apt-get o homebrew per macOS.
2. Controlla l'identità attuale per assicurarti di utilizzare le credenziali corrette con le autorizzazioni per il cluster Amazon EKS:
aws sts get-caller-identity
Nota: all'utente o al ruolo dell'entità AWS Identity and Access Management (IAM) che crea un cluster Amazon vengono concesse automaticamente le autorizzazioni al momento della creazione del cluster. Queste autorizzazioni vengono concesse nella configurazione RBAC del cluster nel piano di controllo (control-plane). Agli utenti o ai ruoli IAM può essere concesso anche l'accesso a un cluster Amazon EKS in aws-auth ConfigMap. Per impostazione predefinita, AWS IAM Authenticator for Kubernetes utilizza l'identità AWS CLI o AWS SDK configurata. Per ulteriori informazioni, consulta Turning on IAM user and role access to your cluster.
3. Crea o aggiorna il file kubeconfig per il tuo cluster:
aws eks --region example_region update-kubeconfig --name cluster_name
Nota: sostituisci 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 home directory. Il file potrebbe anche essere unito a un kubeconfig esistente in quella posizione. Per Windows, il file si trova in %USERPROFILE%\.kube\config.
Puoi anche specificare un altro percorso impostando la variabile di ambiente KUBECONFIG (dal sito Web di Kubernetes) o con la seguente opzione --kubeconfig:
$ kubectl get pods --kubeconfig ./.kube/config
Nota: per l'autenticazione durante l'esecuzione dei comandi kubectl, puoi specificare un nome della risorsa Amazon (ARN) del ruolo IAM con l'opzione --role-arn. In caso contrario, viene utilizzata l'entità IAM nella catena di credenziali AWS CLI o AWS SDK predefinita. Per ulteriori informazioni, consulta update-kubeconfig. In alternativa, completa il passaggio 6 nella sezione Create kubeconfig file manually di Creating or updating a kubeconfig file for an Amazon EKS cluster.
4. Testa la tua configurazione:
$ kubectl get svc
Esempio di output:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE svc/kubernetes ClusterIP 10.100.0.1 <none> 443/TCP 1m
Nota: se ricevi altri errori per autorizzazioni o tipo di risorse, consulta Unauthorized or access denied (kubectl).
Non riesci a connetterti all'endpoint del server API Amazon EKS
1. Verifica di utilizzare l'URL corretto del server API Amazon EKS. Per farlo, attiva kubectl verbosity ed esegui il seguente comando:
$ kubectl get svc --v=9
L'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 eseguendo il seguente comando:
$ aws eks describe-cluster --name cluster_name --region example_region --query cluster.resourcesVpcConfig
L'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 garantire accesso a tutti gli indirizzi IP di origine nell'elenco PublicAccessCIDRS. A tale scopo, procedi come segue:
- Apri la console Amazon EKS.
- Scegli il cluster che vorresti aggiornare.
- Scegli la scheda Rete, quindi scegli Gestisci rete.
- Seleziona Pubblico.
- In Impostazioni avanzate, in Blocco CIDR, inserisci tutto l'intervallo CIDR pubblico che deve essere ammesso nell'elenco.
- Scegli Salva 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 del tuo 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'intervallo IP o CIDR di origine sia consentito. Ciò consente al client kubectl di connettersi all'endpoint del server API Amazon EKS.
Informazioni correlate
Video correlati
Contenuto pertinente
- AWS UFFICIALEAggiornata un anno fa
- AWS UFFICIALEAggiornata 2 anni fa
- AWS UFFICIALEAggiornata un anno fa
- AWS UFFICIALEAggiornata 2 anni fa