¿Por qué mis pods no se conectan a otros pods de Amazon EKS?

6 minutos de lectura
0

Mis pods no se conectan a otros pods de Amazon Elastic Kubernetes Service (Amazon EKS).

Descripción corta

Nota: Si recibe errores al ejecutar los comandos de la Interfaz de la línea de comandos de AWS (AWS CLI), asegúrese de utilizar la versión más reciente de la AWS CLI.

Si sus pods no se pueden conectar con otros pods, es posible que reciba los siguientes errores, según la aplicación.

Si el grupo de seguridad de un nodo de trabajo no permite la comunicación entre nodos, recibirá el siguiente error:

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

Si el DNS no funciona, recibirá el siguiente error:

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

Si el DNS funciona, pero hay un problema de conectividad del pod, aparecerá el siguiente error:

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

Si intenta resolver el DNS del pod que no está expuesto a través de un servicio, recibirá el siguiente error:

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

Para resolver estos errores, compruebe que el entorno esté configurado correctamente:

  • Sus grupos de seguridad cumplen las directrices de Amazon EKS.
  • La lista de control de acceso de la red (ACL de la red) no niega la conexión.
  • Su subred tiene una ruta local para comunicarse dentro de su Amazon Virtual Private Cloud (Amazon VPC).
  • Hay suficientes direcciones IP disponibles en la subred.
  • Sus grupos de seguridad para pods permiten que los pods se comuniquen entre sí.
  • Sus nodos de trabajo tienen activado el reenvío de IP.
  • Cumple los requisitos de red de Kubernetes (sin incluir cualquier NetworkPolicy intencional).
  • Sus pods utilizan correctamente el DNS para comunicarse entre sí.
  • Sus pods están programados y su estado es EN FUNCIONAMIENTO.
  • Tiene la versión recomendada del complemento Amazon VPC Container Network Interface (CNI) para Kubernetes.

Resolución

Sus grupos de seguridad cumplen las directrices de Amazon EKS

Para restringir el tráfico que permite en el grupo de seguridad de su nodo de trabajo, cree reglas de entrada. Cree estas reglas para cualquier protocolo o puerto que sus nodos de trabajo utilicen para la comunicación entre nodos.

Se recomienda permitir todo el tráfico del grupo de seguridad del nodo de trabajo. No es necesario cambiar las reglas del grupo de seguridad cada vez que se cree un nuevo pod con un puerto nuevo.

Para obtener más información, consulte Requisitos y consideraciones sobre los grupos de seguridad de Amazon EKS.

La ACL de la red no niega la conexión

1.    Confirme que el tráfico entre el clúster de Amazon EKS y el CIDR de la VPC fluya libremente en la ACL de la red.

2.    (Opcional) Para añadir una capa de seguridad adicional a la VPC, considere configurar las ACL de la red con reglas similares a las de sus grupos de seguridad.

La subred tiene una ruta local para comunicarse dentro de la VPC

Confirme que las subredes tienen la ruta predeterminada para permitir la comunicación dentro de la VPC.

Hay suficientes direcciones IP disponibles en la subred

Confirme que las subredes especificadas tengan suficientes direcciones IP disponibles para las interfaces de red elásticas entre cuentas y sus pods.

Para obtener más información, consulte Requisitos y consideraciones sobre la VPC y subred de Amazon EKS.

Para comprobar las direcciones IP disponibles, ejecute el siguiente comando de la AWS CLI:

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

Sus grupos de seguridad para pods permiten que los pods se comuniquen entre sí

Si usa grupos de seguridad para pods o redes personalizadas de la CNI, puede asignar cualquier grupo de seguridad a los pods. En este escenario, confirme que los grupos de seguridad permiten la comunicación entre los pods correctamente.

Sus nodos de trabajo tienen el reenvío de IP activado

Si usa una AMI personalizada, debe asegurarse de que la variable de kernel net.ipv4.ip_forward esté activada. Para comprobar esta configuración en un nodo de trabajo, ejecute uno de los siguientes comandos:

# sysctl net.ipv4.ip_forward

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

Si el resultado es 0, utilice uno de los siguientes comandos para activar la variable de kernel net.ipv4.ip_forward.

# sysctl -w net.ipv4.ip_forward=1

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

Para las AMI de Amazon EKS de la versión ejecutable containerd, consulte las líneas 184 a 188 del script install-worker.sh (en GitHub) para ver la activación de la configuración. Dado que containerd es la versión ejecutable predeterminada en las versiones 1.24 y posteriores de Amazon EKS, este paso es necesario para solucionar problemas de conectividad de red de pod a pod.

Cumple los requisitos de red de Kubernetes (sin incluir cualquier NetworkPolicy intencional)

Confirme que cumple los requisitos de red de Kubernetes (en el sitio web de Kubernetes).

De forma predeterminada, los pods no están aislados. Los pods aceptan tráfico de cualquier origen. Los pods se aíslan al tener una NetworkPolicy que los selecciona.

Nota: Para la configuración de NetworkPolicy, consulte Instalación del complemento del motor de políticas de red Calico.

Sus pods utilizan correctamente el DNS para comunicarse entre sí

Primero debe exponer tus pods a través de un servicio. Si no lo hace, sus pods no podrán obtener nombres de DNS y solo se podrá acceder a ellos mediante sus direcciones IP específicas.

El siguiente resultado de ejemplo muestra un intento de resolver el nombre del DNS del servicio nginx. En este caso, se devuelve la IP de clúster 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

Si sus pods siguen sin resolver el DNS, consulte ¿Cómo soluciono los errores de DNS con Amazon EKS?

**Nota:**Para obtener más información, consulte Pods, Service y Headless Services del sitio web de Kubernetes.

Sus pods están programados y su estado es EN FUNCIONAMIENTO

Confirme que sus pods estén programados y su estado sea EN FUNCIONAMIENTO.

Para solucionar problemas de estado del pod, consulte ¿Cómo puedo solucionar problemas de estado del pod en Amazon EKS?

Tiene la versión recomendada del complemento CNI de Amazon VPC para Kubernetes

Si no tiene la versión recomendada del complemento CNI de Amazon VPC para Kubernetes, actualícelo a la versión más reciente.

Si tiene la versión recomendada pero tiene problemas con ella, consulte ¿Cómo soluciono los problemas con los complementos kubelet o CNI para Amazon EKS?

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace un año