Websocket GCE:一个IP上的TCP和HTTP负载均衡器

Websocket GCE:一个IP上的TCP和HTTP负载均衡器,websocket,load-balancing,google-compute-engine,kubernetes,google-cloud-platform,Websocket,Load Balancing,Google Compute Engine,Kubernetes,Google Cloud Platform,我在GKE上运行一个kubernetes应用程序,它在端口80上提供HTTP请求,在端口8080上提供websocket 现在,HTTP部分需要知道客户端的IP地址,所以我必须使用HTTP负载平衡器作为入口服务。然后Websocket部分必须使用TCP负载平衡器,因为文档中明确指出HTTP LB不支持它 我让他们都工作,但在不同的IP,我需要有一个他们 我希望GCE上有类似iptables的东西,所以我可以将流量从端口80转发到HTTP LB,从8080转发到TCP LB,但我找不到类似的东西。

我在GKE上运行一个kubernetes应用程序,它在端口80上提供HTTP请求,在端口8080上提供websocket

现在,HTTP部分需要知道客户端的IP地址,所以我必须使用HTTP负载平衡器作为入口服务。然后Websocket部分必须使用TCP负载平衡器,因为文档中明确指出HTTP LB不支持它

我让他们都工作,但在不同的IP,我需要有一个他们

我希望GCE上有类似iptables的东西,所以我可以将流量从端口80转发到HTTP LB,从8080转发到TCP LB,但我找不到类似的东西。包括转发在内的任何操作都只允许一个

我想我可以举一个nginx/HAproxy只做这个的例子,但这似乎有点过分了


谢谢你的帮助

目前还没有一个很好的答案。Ingress对象目前实际上只是HTTP,我们并不真正支持单个集群中的多个级别的Ingress(尽管我们希望这样)

GCE的HTTP LB还没有做WebSocket

服务有一个缺陷,即它们丢失了客户端IP(我们正在对此进行研究)。即使我们解决了这个问题,您也无法使用GCE的L7平衡器,因为您需要额外的端口

在我们保留源IP之前,我所能想到并被许多用户使用的最佳解决方案是:

使用HostPorts在部分或所有节点(标签控制)上运行您自己的haproxy或nginx,甚至您自己的应用程序作为守护程序

运行一个GCE网络LB(Kubernetes之外),指向具有主机端口的节点


一旦我们能够正确地保留外部IP,您就可以将其恢复为普通服务。

我忽略了守护程序。看起来是我需要的,谢谢