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

时间:2016-07-23 13:09:20

标签: 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,但我找不到类似的东西。包括转发在内的任何事情都只允许一个。

我想我可以在nginx / HAproxy中只有一个这样的实例,但这看起来有点矫枉过正

感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

现在对此没有很好的答案。 Ingress对象现在只是HTTP,我们并不真正支持单个集群中的多个级别的入口(尽管我们想要)。

GCE的HTTP LB还没有做websockets。

服务有一个缺陷,即他们失去了客户端IP(我们正在努力)。即使我们解决了这个问题,您也无法使用GCE的L7平衡器,因为您需要额外的端口。

我能想到的最好的解决方法,并且在我们保留源IP之前已被许多用户使用,是:

使用HostPorts在部分或全部节点(标签控制)上运行您自己的haproxy或nginx甚至您自己的应用程序作为Daemonset。

使用HostPorts运行指向节点的GCE网络LB(Kubernetes之外)。

一旦我们能够正确保存外部IP,您就可以将其重新转换为普通服务。