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

6 minutos de lectura
0

Mis pods no se conectarán a otros pods de Amazon Elastic Kubernetes Service (Amazon EKS).

Descripción breve

Nota: Si recibe errores al ejecutar los comandos de la AWS Command Line Interface (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:

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

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 con las directrices de Amazon EKS.
  • La lista de control de acceso a la red (ACL de 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.
  • Cumpla con los requisitos de red de Kubernetes (excluyendo cualquier política de red intencional).
  • Sus pods utilizan correctamente el DNS para comunicarse entre sí.
  • Sus pods están programados y en estado de EJECUCIÓN.
  • Tiene la versión recomendada del complemento Amazon VPC Container Network Interface (CNI) para Kubernetes.

Resolución

Sus grupos de seguridad cumplen con 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 crea 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 red no niega la conexión

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

2.(Opcional) Para añadir una capa de seguridad adicional a su VPC, considera configurar las redes ACL 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 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ástica entre cuentas y sus pods.

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

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

$ 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 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 núcleo 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 del núcleo 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 en tiempo de ejecución contenedor, 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 el entorno de ejecución predeterminado 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 con los requisitos de red de Kubernetes (excluida cualquier política de red intencional)

Confirme que cumple con 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 fuente. Los pods se aíslan al tener una política de red que los selecciona.

Nota: Para las configuraciones de política de red, consulteInstalación del complemento del motor de políticas de red de Calico.

Sus pods utilizan correctamente el DNS para comunicarse entre sí

Primero debe exponer sus 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 DNS del servicio nginx . En este caso, se devuelve el 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

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,ServiceyHeadless Services del sitio web de Kubernetes.

Sus pods están programados y en estado de EJECUCIÓN

Confirme que sus pods estén programados y en estado de EJECUCIÓN.

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 de CNI de Amazon VPC para Kubernetes, actualice 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 de kubelet o CNI para Amazon EKS?

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 2 meses