Esta é uma pergunta bastante específica, mas é uma que não consegui encontrar uma resposta. Estou executando um conjunto de serviços em um contêiner LXC no Ubuntu 16.04 LTS, especificamente servidores de jogos. No entanto, esse serviço é conhecido por falhar e, portanto, tem seu wrapper. Portanto, para manter o tempo de atividade e o balanceamento de carga onde os serviços estão pendentes ou não respondem, preciso redirecionar o tráfego UDP e TCP com base no fato de um serviço ou serviços serem responsivos ou não.
Para explicar melhor o cenário, tenho um contêiner LXC exposto a um IP público, com outro contêiner LXC aninhado com iptables redirecionando o tráfego na porta 21025 para o contêiner aninhado. Dentro desse contêiner, se os serviços que aceitam o tráfego (chamados ServiceWrapper
e ServiceMain
) não responderem, o tráfego deve ir para outro serviço em outra porta, que chamaremos de ServiceFallback
. Caso contrário, o tráfego será o esperado para o ServiceWrapper, que enviará o tráfego para ServiceMain
.
Minha tentativa atual de implementar este tipo de roteamento tem sido usar o HAProxy para loadbalance entre ServiceWrapper
e ServiceFallback
, mas à primeira vista parece que o HAProxy não detecta ou permite o redirecionamento de portas adicionais com base em como ele é loadbalancing ServiceWrapper
e ServiceFallback
. Você vê, ServiceMain
aceita tráfego UDP em outra porta para facilitar as consultas do servidor, como versão, nome do host, etc. etc. E, até onde eu sei, o HAProxy não roteará nem detectará o tráfego UDP.
Estou quase desesperado para que isso funcione. Eu sei que é possível porque a configuração exata que estou tentando executar funcionou para um dos meus concorrentes diretos, no entanto, eles parecem relutantes em compartilhar comigo até mesmo os pacotes que costumavam fazer (razoável, mas eh).