Usando AWS re:Post, accetti AWS re:Post Termini di utilizzo

Come posso risolvere i timeout di connessione quando mi connetto al servizio ospitato in Amazon EKS?

4 minuti di lettura
0

Ottengo dei timeout di connessione quando mi connetto al servizio ospitato nel mio cluster Amazon Elastic Kubernetes Service (Amazon EKS).

Breve descrizione

I problemi di connessione al servizio più comuni si verificano perché il gruppo di sicurezza o la lista di controllo degli accessi alla rete (ACL) limita il traffico proveniente dagli endpoint del pod.

Per risolvere questo problema, controlla i gruppi di sicurezza e gli ACL di rete associati alle istanze del nodo worker e al bilanciatore del carico. Se utilizzi un Network Load Balancer, verifica che il tuo servizio abbia selezionato le etichette corrette per i pod.

**Nota:**Le seguenti risoluzioni si applicano ai servizi inaccessibili. Per ulteriori informazioni sui tipi di servizi Kubernetes, vedi Come faccio a esporre i servizi Kubernetes in esecuzione sul mio cluster Amazon EKS?

Soluzione

Controlla gli ACL del tuo gruppo di sicurezza e della rete

IP del cluster

Il tipo di servizio IP del cluster viene utilizzato per la comunicazione tra microservizi eseguiti nello stesso cluster Amazon EKS. Assicurati che il gruppo di sicurezza per l'istanza del pod di destinazione abbia una regola in entrata che consenta all'istanza del pod del client di comunicare.

Nella maggior parte dei casi, esiste una regola di autogoverno che consente tutte le comunicazioni su tutte le porte nei gruppi di sicurezza del nodo worker. Se utilizzi più gruppi di nodi, ciascuno con il proprio gruppo di sicurezza, consenti tutte le comunicazioni tra i gruppi di sicurezza. Ciò consente ai microservizi che funzionano su più nodi di comunicare facilmente.

Per ulteriori informazioni, consulta la sezione Considerazioni e requisiti relativi al gruppo di sicurezza Amazon EKS.

Porta nodo

Il gruppo di sicurezza del nodo worker deve consentire il traffico in entrata sulla porta specificata nella definizione del servizio ** NodePort**. Se non è specificato nella definizione del servizio, il valore del parametro port è lo stesso del parametro targetPort. La porta è esposta su tutti i nodi del cluster Amazon EKS.

Controlla gli ACLS di rete collegati alle sottoreti del nodo worker. Assicurati che l'indirizzo IP del tuo client si trovi nell'elenco consentito sulla porta utilizzata dal servizio.

Se accedi al servizio Kubernetes tramite Internet, conferma che i tuoi nodi abbiano un indirizzo IP pubblico. Per accedere al servizio, è necessario utilizzare l'indirizzo IP pubblico e la combinazione di porte del nodo.

Bilanciatore del carico

Assicurati che quanto segue sia vero:

  • Il gruppo di sicurezza del bilanciatore del carico abilita le porte dell'ascoltatore in entrata.
  • Il gruppo di sicurezza del bilanciatore del carico consente il traffico in uscita sulla porta del traffico di destinazione.
  • Il gruppo di sicurezza del nodo worker consente il traffico in entrata dal gruppo di sicurezza del bilanciatore del carico sulla porta in cui viene eseguito il container dell'applicazione.
  • Se si utilizza un Network Load Balancer senza un'associazione di gruppo di sicurezza che utilizza la conservazione dell'IP del client, i nodi worker consentono il traffico del client.
  • Se diverso dalla porta mappata nel servizio, il nodo worker consente il traffico che corrisponde a TargetPort.
  • Gli ACL di rete consentono all'indirizzo IP del client di raggiungere il bilanciatore del carico sulla porta dell'ascoltatore.
  • Se vi accedi tramite Internet, hai creato un bilanciatore del carico con connessione a Internet.

Verifica che il tuo servizio abbia selezionato correttamente gli endpoint del pod

Se i tuoi pod non sono registrati come backend per il servizio, potresti ricevere un errore di timeout. Ciò può accadere quando si accede al servizio da un browser. Oppure, può succedere quando si esegue il comando curl podIP:podPort.

Controlla le etichette dei pod e verifica che il servizio disponga dei selettori di etichette appropriati. Per ulteriori informazioni, consulta Etichette e selettori sul sito web di Kubernetes.

Esegui i seguenti comandi per verificare che il tuo servizio Kubernetes abbia selezionato e registrato correttamente i tuoi pod.

Comando:

kubectl get pods -o wide

Esempio di output:

NAME                    READY   STATUS    RESTARTS   AGE       IP                           NODE                         NOMINATED NODE   READINESS GATESnginx-6799fc88d8-2rtn8   1/1     Running     0       3h4m   172.31.33.214   ip-172-31-33-109.us-west-2.compute.internal       none          none

Comando:

kubectl describe svc your_service_name -n your_namespace

**Nota:**Sostituisci your_service_name con il tuo nome di servizio e your_namespace con il tuo namespace.

Esempio di output:

Events:            noneSession Affinity:  none
Endpoints:         172.31.33.214:80
....

Nell'esempio di output, 172.31.33.214 è l'indirizzo IP del pod restituito dal comando kubectl get pods -o wide. L'indirizzo IP 172.31.33.214 funge anche da backend per un servizio eseguito in un cluster Amazon EKS.

AWS UFFICIALE
AWS UFFICIALEAggiornata 10 mesi fa