GCE:一个 IP 上的 TCP 和 HTTP 负载均衡器
GCE: Both TCP and HTTP load balancers on one IP
我是 运行 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 还没有做 websockets。
服务有一个缺陷,因为它们会丢失客户端 IP(我们正在解决这个问题)。即使我们解决了这个问题,您也将无法使用 GCE 的 L7 平衡器,因为您需要额外的端口。
在我们保留源 IP 之前,我能想到并已被许多用户使用的最佳解决方法是:
运行 您自己的 haproxy 或 nginx,甚至您自己的应用程序作为 Daemonset 在一些或所有节点(标签控制)上使用 HostPorts。
运行 一个 GCE 网络 LB(在 Kubernetes 之外)指向具有 HostPorts 的节点。
一旦我们可以妥善保留外部 IP,您就可以将其变回普通服务。
我是 运行 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 还没有做 websockets。
服务有一个缺陷,因为它们会丢失客户端 IP(我们正在解决这个问题)。即使我们解决了这个问题,您也将无法使用 GCE 的 L7 平衡器,因为您需要额外的端口。
在我们保留源 IP 之前,我能想到并已被许多用户使用的最佳解决方法是:
运行 您自己的 haproxy 或 nginx,甚至您自己的应用程序作为 Daemonset 在一些或所有节点(标签控制)上使用 HostPorts。
运行 一个 GCE 网络 LB(在 Kubernetes 之外)指向具有 HostPorts 的节点。
一旦我们可以妥善保留外部 IP,您就可以将其变回普通服务。