Salta al contenuto

Perché non riesco a connettermi al mio cluster Amazon EKS?

5 minuti di lettura
0

Ho creato un cluster Amazon Elastic Kubernetes Service (Amazon EKS) a cui non riesco a connettermi.

Breve descrizione

Potresti non riuscire a connetterti a un cluster EKS per uno dei seguenti motivi:

  • Non hai creato il file kubeconfig per il cluster.
  • Non riesci a connetterti all'endpoint del server API Amazon EKS.

Risoluzione

Nota: se ricevi errori quando esegui i comandi dell'Interfaccia della linea di comando AWS (AWS CLI), consulta Risoluzione degli errori per AWS CLI. Inoltre, assicurati di utilizzare la versione più recente di AWS CLI.

Non hai creato il file kubeconfig

Dopo aver creato il cluster Amazon EKS, configura il file kubeconfig in modo da poter utilizzare la riga di comando kubectl per connetterti al cluster. Il file kubeconfig contiene la configurazione del cluster Kubernetes.

A seconda del sistema operativo in uso, puoi trovare il file kubeconfig nelle seguenti posizioni:

  • Per Linux o macOS, vai in $HOME/.kube/config.
  • Per Windows, vai in %USERPROFILE%\.kube\config.

Per utilizzare una posizione di file diversa, esegui una di queste azioni:

  • Imposta la variabile di ambiente KUBECONFIG in modo che punti verso la nuova posizione.
  • Utilizza il flag --kubeconfig quando esegui i comandi kubectl per specificare un percorso di file personalizzato.

Se esiste già un file kubeconfig nella posizione predefinita, Amazon EKS unisce le nuove configurazioni con il file esistente. Puoi utilizzare il comando kubectl config per gestire i contesti del cluster. Per ulteriori informazioni, consulta kubectl config sul sito web Kubernetes.

Non riesci a connetterti all'endpoint del server API Amazon EKS

Per risolvere il problema, completa i seguenti passaggi:

  1. Per verificare se puoi connetterti all'URL del server API Amazon EKS, esegui questo comando con più dettagli:

    kubectl get svc --v=9

    L'output del comando mostra informazioni dettagliate sulla connessione, incluso l'URL del server API utilizzato. Controlla gli indirizzi IP elencati per HTTP Trace: DNS Lookup.
    Esempio di output:

    I0110 16:43:36.920095   48173 loader.go:373] Config loaded from file:  /Users/abs/.kube/configI0110 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. Per verificare se il server API Amazon EKS è accessibile pubblicamente, esegui questo comando AWS CLI describe-cluster:

    aws eks describe-cluster --name cluster_name --region example_region --query cluster.resourcesVpcConfig

    **Nota:**Sostituisci cluster_name con il nome del tuo cluster e example_region con la tua Regione AWS.
    Esempio di output:

    {    "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"
        ]
    }

    Per consentire l'accesso pubblico, assicurati che endpointPublicAccess sia true. Per mantenere l'accesso privato, assicurati che endpointPublicAccess sia false. Se endpointPublicAccess è false, vai al passaggio 9. Se endpointPublicAccess è true, per motivi di sicurezza è consigliabile limitare endpointPublicAccess a intervalli di indirizzi IP specifici. Completa i passaggi 3-8 per aggiungere gli indirizzi IP consentiti al relativo elenco publicAccessCidrs.

  3. Apri la console Amazon EKS.

  4. Scegli Cluster, quindi seleziona il cluster che desideri aggiornare.

  5. Scegli la scheda Rete, quindi seleziona Gestisci reti.

  6. Scegli Pubblico.

  7. In Impostazioni avanzate, alla voce Blocco CIDR, inserisci l'intervallo CIDR pubblico che desideri aggiungere all'elenco di indirizzi consentiti.
    Importante: includi l'indirizzo IP del gateway NAT utilizzato dai nodi worker nelle sottoreti private per accedere a Internet. Inoltre, includi gli indirizzi IP di tutti i componenti di rete dei dispositivi NAT.

  8. Scegli Salva modifiche.

  9. Se hai configurato il server API del cluster in modalità private-only, assicurati che la richiesta kubectl provenga dalla rete del cluster. Se la richiesta kubectl proviene dall'esterno del Amazon Virtual Private Cloud (Amazon VPC), ricevi il seguente errore di timeout quando esegui il comando get svc:

    $ kubectl get svc --v=9I0110 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
  10. Aggiorna il gruppo di sicurezza del cluster per aggiungere l'indirizzo IP di origine o l'intervallo CIDR all'elenco di indirizzi consentiti. Ciò consente al client kubectl di connettersi all'endpoint del server API Amazon EKS dall'interno del cluster VPC.

Informazioni correlate

Risolvi i problemi con i cluster e i nodi Amazon EKS

Come faccio a risolvere l'errore quando mi connetto al server API Amazon EKS?"You must be logged in to the server (Unauthorized)"

De-mystifying cluster networking for Amazon EKS worker nodes (Demistificazione della rete di cluster per i nodi worker di Amazon EKS)

Come posso bloccare l'accesso alle API a indirizzi IP specifici nel mio cluster Amazon EKS?