¿Cómo se resuelven los tiempos de espera de conexión al establecer una conexión con el servicio alojado en Amazon EKS?

Última actualización: 22 de diciembre de 2021

Se producen tiempos de espera de conexión al conectarse al servicio alojado en el clúster de Amazon Elastic Kubernetes Service (Amazon EKS).

Descripción breve

Dos de las razones más comunes por las que no es posible conectarse al servicio en el clúster de Amazon EKS son:

  • Las restricciones de la lista de control de acceso a la red (ACL) o el grupo de seguridad impiden que el tráfico llegue a los puntos de conexión del pod.
  • El servicio no selecciona los puntos de conexión del pod porque las etiquetas no coinciden.

Para resolver estos problemas, verifique los grupos de seguridad y las ACL de red que están asociados a las instancias del nodo de trabajo y al equilibrador de carga. Además, verifique que el servicio tiene seleccionadas las etiquetas correctas para los pods.

Nota: La resolución de problemas varía según el tipo de servicio. Las siguientes resoluciones se aplican cuando se trata de resolver problemas de servicios inaccesibles. Para obtener más información sobre los tipos de servicios de Kubernetes, consulte ¿Cómo expongo los servicios de Kubernetes que se ejecutan en el clúster de Amazon EKS?

Resolución

Compruebe el grupo de seguridad y las ACL de red

IP del clúster

El tipo de servicio IP del clúster se utiliza para la comunicación entre microservicios que se ejecutan en el mismo clúster de Amazon EKS. Asegúrese de que el grupo de seguridad asociado a la instancia donde se encuentra el pod de destino tiene una regla de entrada para permitir la comunicación desde la instancia del pod cliente.

En la mayoría de los casos, hay una regla propia que permite toda la comunicación a través de todos los puertos en los grupos de seguridad del nodo de trabajo. Si utiliza varios grupos de nodos, cada uno con su propio grupo de seguridad, asegúrese de permitir toda la comunicación entre los grupos de seguridad. Esto permite que los microservicios que se ejecutan en los múltiples nodos se comuniquen fácilmente.

Para obtener más información, consulte Consideraciones sobre el grupo de seguridad de Amazon EKS.

Puerto de nodo

El grupo de seguridad del nodo de trabajo debe permitir el tráfico entrante en el puerto que se especificó en la definición del servicio NodePort. Si no se especifica en la definición del servicio, el valor del parámetro puerto es el mismo que el parámetro targetPort. El puerto se expone en todos los nodos del clúster de Amazon EKS.

Compruebe las ACLS de red que están vinculadas a las subredes del nodo de trabajo. Asegúrese de que la dirección IP del cliente está en la lista de permitidos en el puerto que el servicio utiliza.

Si accede al servicio de Kubernetes a través de Internet, asegúrese de que los nodos tienen una dirección IP pública. Para acceder al servicio, debe utilizar la dirección IP pública del nodo y la combinación de puertos.

Equilibrador de carga

Asegúrese de que el grupo de seguridad del equilibrador de carga permite los puertos de agente de escucha. Además, asegúrese de que el grupo de seguridad del nodo de trabajo permite el tráfico entrante desde el grupo de seguridad del equilibrador de carga a través del puerto donde se ejecuta el contenedor de aplicaciones.

Si el puerto que se especifica en la definición del servicio es diferente del targetPort, entonces debe permitir el tráfico entrante a través del puerto en el grupo de seguridad del nodo de trabajo para el grupo de seguridad del equilibrador de carga. El puerto y el targetPort suelen ser los mismos en la definición del servicio.

Las ACL de red deben permitir que la dirección IP del cliente llegue al equilibrador de carga en el puerto de escucha. Si accede al equilibrador de carga a través de Internet, asegúrese de haber creado un equilibrador de carga público.

Compruebe si el servicio ha seleccionado correctamente los puntos de conexión del pod

Si los pods no están registrados como backends para el servicio, es posible que reciba un error de tiempo de espera. Esto puede ocurrir cuando se accede al servicio desde un navegador o cuando se ejecuta el comando curl podIP:podPort.

Compruebe las etiquetas de los pods y verifique que el servicio tiene los selectores de etiquetas adecuados (desde el sitio web de Kubernetes).

Ejecute los siguientes comandos para verificar si el servicio de Kubernetes ha seleccionado y registrado correctamente los pods.

Comando:

kubectl get pods -o wide

Salida de ejemplo:

NAME                    READY   STATUS    RESTARTS   AGE       IP                           NODE                         NOMINATED NODE   READINESS GATES
nginx-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: Reemplace your_service_name por el nombre del servicio y your_namespace por el espacio de nombres.

Salida de ejemplo:

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

En la salida del ejemplo anterior, 172.31.33.214 es la dirección IP del pod que se obtuvo al ejecutar el comando kubectl get pods -o wide. La dirección IP 172.31.33.214 también sirve como backend de un servicio que se ejecuta en un clúster de Amazon EKS.


¿Le resultó útil este artículo?


¿Necesita asistencia técnica o con la facturación?