Se producen tiempos de espera de conexión cuando me conecto a mi servicio que está alojado en mi clúster de Amazon Elastic Kubernetes Service (Amazon EKS).
Breve descripción
Los problemas de conexión de servicio más habituales se producen porque el grupo de seguridad o la lista de control de acceso de la red (ACL de la red) restringen el tráfico desde los puntos enlace del pod.
Para resolver este problema, compruebe los grupos de seguridad y las ACL de la red que están asociados a las instancias de su nodo de trabajo y al equilibrador de carga. Si utiliza un equilibrador de carga de red, compruebe que su servicio haya seleccionado las etiquetas correctas para los pods.
Nota: Las siguientes resoluciones se aplican a los servicios inaccesibles. Para obtener más información sobre los tipos de servicio de Kubernetes, consulte ¿Cómo expongo los servicios de Kubernetes que se ejecutan en mi clúster de Amazon EKS?
Resolución
Compruebe el grupo de seguridad y las ACL de la red
**IP del clúster **
El tipo de servicio IP del clúster se utiliza para la comunicación entre los 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 diversos nodos se comuniquen fácilmente.
Para obtener más información, consulte Requisitos y consideraciones sobre grupos 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 ACL de la 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 se cumpla lo siguiente:
- El grupo de seguridad del equilibrador de carga permite los puertos de agente de escucha entrantes.
- El grupo de seguridad del equilibrador de carga permite el tráfico saliente en el puerto de tráfico de destino.
- 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 la aplicación.
- Si utiliza un equilibrador de carga de red sin una asociación de grupo de seguridad que utilice la preservación de la IP del cliente, los nodos de trabajo permiten el tráfico del cliente.
- El nodo de trabajo permite el tráfico que coincide con el targetPort si es diferente al puerto asignado en el servicio.
- Las ACL de la red permiten que la dirección IP de su cliente llegue al equilibrador de carga en el puerto del agente de escucha.
- Si accede al equilibrador de carga a través de Internet, entonces ha creado un equilibrador de carga con conexión a Internet.
Confirme que el servicio ha seleccionado correctamente los puntos de enlace 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 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. Para obtener más información, consulte Labels and selectors en 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
Resultado del ejemplo:
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: Sustituya your_service_name por el nombre del servicio y your_namespace por el espacio de nombres.
Resultado del ejemplo:
Events: noneSession Affinity: none
Endpoints: 172.31.33.214:80
....
En el resultado del ejemplo, 172.31.33.214 es la dirección IP del pod que devuelve 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.