Perché i miei pod non si connettono ad altri pod in Amazon EKS?

6 minuti di lettura
0

I miei pod non si connettono ad altri pod in Amazon Elastic Kubernetes Service (Amazon EKS).

Breve descrizione

Nota: Se ricevi errori durante l'esecuzione dei comandi AWS Command Line Interface (AWS CLI), assicurati di utilizzare la versione più recente dell'interfaccia a riga di comando di AWS.

Se i tuoi pod non riescono a connettersi con altri pod, potresti ricevere i seguenti errori, a seconda dell'applicazione.

Se il gruppo di sicurezza di un nodo di lavoro non consente la comunicazione tra nodi, viene visualizzato il seguente errore:

curl: (7) Failed to connect to XXX.XXX.XX.XXX port XX: Connection timed out

Se il DNS non funziona, viene visualizzato il seguente errore:

curl nginx  
curl: (6) Could not resolve host: nginx

Se il DNS funziona ma c'è un problema di connettività del pod, viene visualizzato il seguente errore:

Error: RequestError: send request failed caused by: Post  dial tcp 1.2.3.4.5:443: i/o timeout

Se provi a risolvere il DNS per il pod che non è esposto tramite un servizio, ricevi il seguente errore:

kubectl exec -it busybox -- nslookup nginx
Server:   10.100.0.10
Address:  10.100.0.10:53
** server can't find nginx.default.svc.cluster.local: NXDOMAIN
*** Can't find nginx.svc.cluster.local: No answer
*** Can't find nginx.cluster.local: No answer
*** Can't find nginx.ap-southeast-2.compute.internal: No answer
*** Can't find nginx.default.svc.cluster.local: No answer
*** Can't find nginx.svc.cluster.local: No answer
*** Can't find nginx.cluster.local: No answer
*** Can't find nginx.ap-southeast-2.compute.internal: No answer

Per risolvere questi errori, verifica che l'ambiente sia configurato correttamente:

  • I tuoi gruppi di sicurezza soddisfano le linee guida di Amazon EKS.
  • L'elenco di controllo dell'accesso alla rete (ACL di rete) non nega la connessione.
  • La tua sottorete dispone di un percorso locale per la comunicazione all'interno del tuo Amazon Virtual Private Cloud (Amazon VPC).
  • Nella sottorete sono disponibili abbastanza indirizzi IP.
  • I tuoi gruppi di sicurezza per i pod consentono ai pod di comunicare tra loro.
  • I tuoi nodi di lavoro hanno l'inoltro IP attivo.
  • Soddisfi i requisiti di rete per Kubernetes (esclusa qualsiasi politica di rete intenzionale).
  • I tuoi pod utilizzano correttamente il DNS per comunicare tra loro.
  • I tuoi pod sono programmati e in stato DI ESECUZIONE.
  • Hai la versione consigliata del plugin Amazon VPC Container Network Interface (CNI) per Kubernetes.

Risoluzione

I tuoi gruppi di sicurezza soddisfano le linee guida di Amazon EKS

Per limitare il traffico consentito sul gruppo di sicurezza del tuo nodo di lavoro, crea regole in entrata. Crea queste regole per qualsiasi protocollo o qualsiasi porta utilizzata dai nodi di lavoro per la comunicazione tra nodi.

È consigliabile consentire tutto il traffico per il gruppo di sicurezza del nodo di lavoro. Non è necessario modificare le regole dei gruppi di sicurezza ogni volta che viene creato un nuovo pod con una nuova porta.

Per ulteriori informazioni, consulta i requisiti e le considerazioni del gruppo di sicurezza Amazon EKS.

L'ACL di rete non nega la connessione

  1. Verifica che il traffico tra il tuo cluster Amazon EKS e VPC CIDR fluisca liberamente sull'ACL della tua rete.

  2. (Facoltativo) Per aggiungere un ulteriore livello di sicurezza al tuo VPC, valuta la possibilità di configurare ACL di rete con regole simili a quelle dei tuoi gruppi di sicurezza.

La tua sottorete dispone di un percorso locale per la comunicazione all'interno del tuo VPC

Verifica che le tue sottoreti abbiano il percorso predefinito per la comunicazione all'interno del VPC.

Nella sottorete sono disponibili abbastanza indirizzi IP

Verifica che le sottoreti specificate dispongano di un numero sufficiente di indirizzi IP disponibili per le interfacce di rete elastiche tra più account e i tuoi pod.

Per ulteriori informazioni, consulta i requisiti e le considerazioni di Amazon EKS VPC e subnet.

Per verificare gli indirizzi IP disponibili, esegui il seguente comando AWS CLI:

$ aws ec2 describe-subnets --subnet-id YOUR-SUBNET-ID --query 'Subnets[0].AvailableIpAddressCount'

I tuoi gruppi di sicurezza per i pod consentono ai pod di comunicare tra loro

Se utilizzi gruppi di sicurezza per pod o reti personalizzate CNI, puoi assegnare qualsiasi gruppo di sicurezza ai pod. In questo scenario, verifica che i gruppi di sicurezza consentano la comunicazione tra i pod correttamente.

I tuoi nodi di lavoro hanno l'inoltro IP attivo

Se usi un'AMI personalizzata, devi assicurarti che la variabile del kernel net.ipv4.ip\ _forward sia attivata. Per verificare questa impostazione su un nodo di lavoro, esegui uno dei seguenti comandi:

# sysctl net.ipv4.ip_forward

# cat /proc/sys/net/ipv4/ip_forward

Se l'output è 0, utilizzate uno dei seguenti comandi per attivare la variabile del kernel net.ipv4.ip\ _forward.

# sysctl -w net.ipv4.ip_forward=1

# echo 1 > /proc/sys/net/ipv4/ip_forward

Per le AMI di Amazon EKS in fase di esecuzione contenuta, consulta le righe 184-188 dello script install-worker.sh (su GitHub) per l'attivazione dell'impostazione. Poiché containerd è il runtime predefinito nelle versioni 1.24 e successive di Amazon EKS, questo passaggio è necessario per risolvere i problemi di connettività di rete pod-to-pod.

Soddisfi i requisiti di rete per Kubernetes (esclusa qualsiasi politica di rete intenzionale)

Verifica di soddisfare i requisiti di rete Kubernetes (dal sito Web Kubernetes).

Per impostazione predefinita, i pod non sono isolati. I pod accettano traffico da qualsiasi fonte. I pod vengono isolati grazie a una NetworkPolicy che li seleziona.

Nota: Per le configurazioni NetworkPolicy, vedere Installazione del componente aggiuntivo del motore di policy di rete Calico.

I tuoi pod utilizzano correttamente il DNS per comunicare tra loro

Devi prima esporre i tuoi pod tramite un servizio. In caso contrario, i tuoi pod non possono ottenere nomi DNS e possono essere raggiunti solo dai loro indirizzi IP specifici.

L'output di esempio seguente mostra un tentativo di risolvere il nome DNS per il servizio nginx. In questo caso, viene restituito il ClusterIP 10.100.94.70:

$ kubectl run nginx --image=nginx --replicas=5 -n web
deployment.apps/nginx created

$ kubectl expose deployment nginx --port=80 -n web
service/nginx exposed

$ kubectl get svc -n web
NAME    TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE
nginx   ClusterIP   10.100.94.70   <none>        80/TCP    2s

# kubectl exec -ti busybox -n web -- nslookup nginx
Server:    10.100.0.10
Address 1: 10.100.0.10 ip-10-100-0-10.ap-southeast-2.compute.internal
Name:      nginx
Address 1: 10.100.94.70 ip-10-100-94-70.ap-southeast-2.compute.internal

Se i tuoi pod continuano a non riuscire a risolvere il DNS, consulta Come posso risolvere gli errori DNS con Amazon EKS?

Nota: Per ulteriori informazioni, consulta Pods, Service e Headless Services dal sito Web di Kubernetes.

I tuoi pod sono programmati e in stato DI ESECUZIONE

Verifica che i tuoi pod siano programmati e siano in esecuzione.

Per risolvere i problemi relativi allo stato del contenitore, consulta Come posso risolvere i problemi relativi allo stato del contenitore in Amazon EKS?

Hai la versione consigliata del plugin Amazon VPC CNI per Kubernetes

Se non disponi della versione consigliata del plug-in Amazon VPC CNI per Kubernetes, esegui l'upgrade alla versione più recente.

Se disponi della versione consigliata ma riscontri problemi con essa, consulta Come posso risolvere i problemi relativi ai plugin kubelet o CNI per Amazon EKS?

AWS UFFICIALE
AWS UFFICIALEAggiornata 10 mesi fa