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 ServiceFallback
Sin 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).