小编Cal*_*ngh的帖子

Gcloud负载均衡器后面的UDP服务器:接收正常,回复失败

我在 Google Cloud 网络负载均衡器后面(在虚拟机上)设置了 UDP 服务器。服务器绑定到0.0.0.0. UDP 服务器可以接收发送到平衡器的消息,但回复不会返回到客户端。没有报告任何错误,并且tcpdump没有显示任何异常情况。我已确保所有防火墙规则都允许此流量,并且负载均衡器设置为转发所有端口。

我绝不是网络专家,但我怀疑UDP 服务器出了问题,因为接收消息的地址与用于回复的地址不同 ( sendto())。

socketserver我正在使用标准库中的 Python 模块作为回显服务器来测试所有这些:

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()
Run Code Online (Sandbox Code Playgroud)

虚拟机只有一个网络接口,具有本地IP 10.240.x.x。如果我将 UDPServer 绑定到该本地 IP,则该服务器甚至不会接收消息。

如果没有负载均衡器,一切都会正常工作,即消息会正确回显给客户端。

问题:我应该怎样做才能让我的 UDP 服务器回复消息?

编辑: 这个讨论可能是相关的。

networking load-balancing udp google-cloud-platform google-cloud-network-load-balancer

2
推荐指数
1
解决办法
867
查看次数