我在GKE上运行一个kubernetes应用程序,它在端口80上提供HTTP请求,在端口8080上提供websocket。
现在,HTTP部分需要知道客户端的IP地址,所以我必须使用HTTP负载均衡器作为入口服务。Websocket部分必须使用TCP负载均衡器,正如文档中明确指出的那样,HTTPLB不支持它
我让它们都工作,但在不同的IP上,我需要让它们在一个上。
我希望GCE上有类似iptables的东西,所以我可以将流量从端口80转发到HTTP LB,从8080转发到TCP LB,但我找不到类似的东西。包括转发在内的任何内容都只允许一个。
我想我可以有一个nginx/HAproxy的例子只做这件事,但这似乎是一个过度的
感谢您的帮助!
目前还没有一个很好的答案。Ingress对象现在实际上只是HTTP,并且我们并不真正支持单个集群中的多个等级的Ingress(尽管我们希望)。
GCE的HTTP LB还不做websocket。
服务有一个缺陷,即它们丢失了客户端IP(我们正在处理这个问题)。即使我们解决了这个问题,您也将无法使用GCE的L7平衡器,因为您需要额外的端口。
我能想到的最好的解决方法是:
使用HostPorts在部分或所有节点(标签控制)上运行您自己的haproxy或nginx,甚至您自己的应用程序作为Daemoset。
运行指向具有HostPorts的节点的GCE Network LB(Kubernetes之外)。
一旦我们能够正确地保留外部IP,您就可以将其恢复为普通服务。