UDP Servidor atrás do balanceador de carga Gcloud: receba ok, a resposta falha

2

Eu tenho um servidor UDP configurado (em uma VM) por trás do balanceador de carga da rede do Google Cloud. O servidor está vinculado a 0.0.0.0 . O servidor UDP pode receber mensagens que foram enviadas ao balanceador, mas as respostas não retornam ao cliente. Não há erros relatados, e tcpdump não está mostrando nada incomum. Certifiquei-me de que todas as regras de firewall permitem esse tráfego, e o balanceador de carga está configurado para encaminhar todas as portas.

Eu não sou de modo algum um especialista em rede, mas suspeito de que algo está errado com o servidor UDP em que o endereço no qual a mensagem é recebida é diferente do que está sendo usado para o resposta ( sendto() ).

Estou testando tudo isso usando o módulo socketserver do Python na biblioteca padrão como um servidor de eco :

import SocketServer

class MyUDPHandler(SocketServer.BaseRequestHandler):
    def handle(self):
        data = self.request[0].strip()
        socket = self.request[1]
        print "{} wrote:".format(self.client_address[0])
        print data
        socket.sendto(data.upper(), self.client_address)

if __name__ == "__main__":
    HOST, PORT = "0.0.0.0", 5029
    server = SocketServer.UDPServer((HOST, PORT), MyUDPHandler)
    server.serve_forever()

A VM tem apenas uma interface de rede, com o IP local 10.240.x.x . Se eu ligar o UDPServer a este IP local, então as mensagens nem serão recebidas por este servidor.

Sem o balanceador de carga, tudo está funcionando normalmente, ou seja, as mensagens são retornadas corretamente para o cliente.

Pergunta: O que devo fazer para permitir que meu servidor UDP responda a mensagens?

EDITAR: esta discussão pode ser relevante.

    
por Caleb Hattingh 07.04.2016 / 05:35

1 resposta

3

Eu tive que lidar com um problema semelhante em um dos meus projetos de pós-graduação: balanceamento de carga do DNS.

link

/etc/sysctl.conf

 net.ipv4.ip_nonlocal_bind = 1

Em seguida, tente vincular o aplicativo python ao IP público do balanceador de carga.

Basicamente, seu servidor está respondendo em seu IP privado e o cliente está esperando uma resposta do balanceador de carga.

    
por 07.04.2016 / 06:20