¿Existe alguna forma de redirigir el tráfico a otro puerto en caso de que el servicio que escucha en el puerto original no responda?

¿Existe alguna forma de redirigir el tráfico a otro puerto en caso de que el servicio que escucha en el puerto original no responda?

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, al igual que su contenedor. Entonces, para mantener el tiempo de actividad y el equilibrio de carga cuando los servicios están bloqueados o no responden, necesito poder redirigir el tráfico UDP y 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 (llamados ServiceWrappery ServiceMain) no responden, el tráfico debe ir a otro servicio en otro puerto al que llamaremos ServiceFallback. De lo contrario, el tráfico va 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 equilibrar la carga entre ServiceWrappery ServiceFallback, sin embargo, a primera vista parece que HAProxy no detecta ni permite la redirección de puertos adicionales según cómo equilibra la carga ServiceWrappery ServiceFallback. Verá, ServiceMainacepta tráfico UDP en otro puerto para facilitar las consultas del servidor, como versión, nombre de host, etc. Y, hasta donde yo sé, HAProxy no enrutará ni detectará el tráfico UDP.

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

Respuesta1

NGINX debería hacer todo lo que necesita. Admite 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 respaldo si fallan las comprobaciones de estado.

información relacionada