¿Hay una manera de redirigir el tráfico a otro puerto en caso de que el servicio que escucha el puerto original no responda?


1

Esta es una pregunta bastante específica, pero no he podido encontrar una respuesta. Estoy ejecutando un conjunto de servicios en un contenedor LXC en Ubuntu 16.04 LTS, específicamente servidores de juegos. Sin embargo, se sabe que este servicio falla, y también su envoltura. Por lo tanto, para mantener el tiempo de actividad y el equilibrio de carga cuando los servicios están bloqueados o no responden, debo poder redirigir tanto el tráfico UDP como el TCP en función de si un servicio o servicios responden o no.

Para explicar mejor el escenario, tengo un contenedor LXC expuesto a una IP pública, con otro contenedor LXC anidado con iptables que redirige el tráfico en el puerto 21025 al contenedor anidado. Dentro de ese contenedor, si los servicios que aceptan el tráfico (llamado ServiceWrapper y ServiceMain ) no responden, el tráfico debe ir a otro servicio en otro puerto al que llamaremos ServiceFallback. De lo contrario, el tráfico pasa como se esperaba a ServiceWrapper, que luego envía el tráfico a ServiceMain.

Mi intento actual de implementar este tipo de enrutamiento ha sido usar HAProxy para cargar el equilibrio entre ServiceWrapper y ServiceFallbackSin embargo, a primera vista, parece que HAProxy no detecta o permite la redirección de puertos adicionales en función de cómo está equilibrando la carga ServiceWrapper y ServiceFallback. Lo ves, ServiceMain acepta el tráfico UDP en otro puerto para facilitar las consultas del servidor, como la versión, el nombre de host, etc. etc. Y, por lo que puedo decir, HAProxy no enrutará ni detectará el tráfico UDP.

Estoy casi desesperado por hacer que esto funcione. Sé que es posible porque la configuración exacta que estoy intentando realizar ha funcionado para uno de mis competidores directos, sin embargo, parecen reacios a compartir conmigo incluso los paquetes que usaban para hacerlo (razonable, pero eh).


Siento que necesitas NGINX
Garr Godfrey

Respuestas:


0

NGINX debe hacer todo lo que necesita. Admite el enrutamiento UDP y tiene comprobaciones de estado activas y pasivas, por lo que puede configurar cómo determina si el servicio principal se está ejecutando o no. Se puede configurar para que solo recurra a su servicio de copia de seguridad si las comprobaciones de estado fallan.


¿NGINX reescribe la IP de origen? Y si es así, ¿envía el tráfico de regreso a su origen cuando recibe una respuesta? Este fue otro problema que encontré más tarde con HAproxy: los paquetes que llegaban al ServiceWrapper se leerían como provenientes de la IP interna.
Shigbeard_

En general, sí, parecerá ser de una IP interna, pero se reenviará al cliente. Sin embargo, no he utilizado el proxy UDP, ya que parece que tendría que tener la IP de origen de alguna manera. Para el tráfico http pondría el original en el encabezado.
Garr Godfrey
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.