我在GKE上运行kubernetes应用程序,它在端口80上提供HTTP请求,在端口8080上提供websocket。
现在,HTTP部分需要知道客户端的IP地址,因此我必须使用HTTP负载均衡器作为入口服务。然后Websocket部分必须使用TCP负载均衡器,因为在文档中明确指出HTTP LB不支持它。
我让他们都工作,但在不同的IP上,我需要将它们放在一个。
我希望在GCE上有类似iptables的东西,所以我可以将流量从端口80转发到HTTP LB,从8080转发到TCP LB,但我找不到类似的东西。包括转发在内的任何事情都只允许一个。
我想我可以在nginx / HAproxy中只有一个这样的实例,但这看起来有点矫枉过正
感谢任何帮助!
答案 0 :(得分:1)
现在对此没有很好的答案。 Ingress对象现在只是HTTP,我们并不真正支持单个集群中的多个级别的入口(尽管我们想要)。
GCE的HTTP LB还没有做websockets。
服务有一个缺陷,即他们失去了客户端IP(我们正在努力)。即使我们解决了这个问题,您也无法使用GCE的L7平衡器,因为您需要额外的端口。
我能想到的最好的解决方法,并且在我们保留源IP之前已被许多用户使用,是:
使用HostPorts在部分或全部节点(标签控制)上运行您自己的haproxy或nginx甚至您自己的应用程序作为Daemonset。
使用HostPorts运行指向节点的GCE网络LB(Kubernetes之外)。
一旦我们能够正确保存外部IP,您就可以将其重新转换为普通服务。