GCP 传统负载均衡器与现代负载均衡器不适用于 WebSocket



我们在让websocket与谷歌云中的负载均衡器一起工作时遇到了一些问题。我们将其缩小到经典负载均衡器(工作良好(和默认选择但标记为预览(不工作(的Https Loadbalancer with advanced traffic management之间的差异。

我们有一个实例组,它绝对支持websocket。也就是说,我们可以通过ip地址连接到它。

我们设置了一个负载均衡器,并选择了一个具有流量管理功能的均衡器。这对于正常请求来说很好,但所有的websocket请求都会以502失败。我们没有选择http/2(记录为不适用于此(。我们尝试了各种方法来实现这一点。尽管有文件证明这应该开箱即用,但显然不是。

$ websocat wss://lb.tryformation.com/websocket/messages
websocat: WebSocketError: Received unexpected status code (502 Bad Gateway)
websocat: error running

作为最后的手段,我用相同的配置、相同的实例组、相同的健康检查、相同的证书等设置了一个经典的lb。第一次尝试就成功了。

因此,很明显,当涉及到websocket时,新型负载均衡器并不能像广告中所说的那样工作。问题是:为什么?这是一个已知的问题吗?或者我应该配置一些东西来让websocket处理这个问题吗?

我们可以使用经典的lb。但我想了解这个问题。

FWIW:

假设您使用的是GCP的Global External HTTP(s(";现代的";负载平衡器,文档在GCP CLB概述>WebSocket支持状态:

  • 具有高级流量管理功能的全局外部HTTP(S(负载均衡器不支持Websockets。Websockets与全局外部HTTP(S(负载均衡器(经典(和区域外部HTTP(S(负载均衡器一起工作

如果您使用的是区域";现代的";LB,请记住;现代的";负载平衡器仍在预览中。我相信你已经看到了,但我之所以注意到这一点,是因为我过去有过GCP产品的经验,这些产品声称";support-websockets";而在";预览";,但直到在GA中可用时才正确工作。

由于您没有提供更多的细节,因此不可能重现它,因此尝试得出任何结论,因为变量太多了。

从你的描述来看,https负载均衡中的流量管理似乎存在一些问题——如果你能在谷歌的IssueTracker上复制它——在负载均衡组件下,并更详细地描述这个问题;提供详细的复制步骤,如果可能的话,你使用的设置(或任何其他细节,之后有人会回复你:(

最新更新