如何让一个 Kubernetes LoadBalancer 平衡多个服务?

How can I have one Kubernetes LoadBalancer balance to multiple services?

我在 AWS 上的 Kubernetes 集群中托管了以下服务。

两者都很好用。我目前将它们都设置为 type: LoadBalancer,因此它们都具有为集群提供入口的弹性负载平衡器。

我只想拥有一个 ELB -- 它们要花钱,而且没有理由不让 Minecraft 服务器和 HTTP(S) 服务器位于同一外部 IP 上。

我尝试创建一个没有选择器的服务,然后尝试手动创建一个引用该服务的 Endpoints 对象,但它似乎不起作用。 Here's the setup on a gist。当我尝试在集群内部分配的 nodePortcurl 时,它只是挂起。

有没有办法让一项服务平衡多项服务?

在 1.1.0 版本中添加的 Ingress 资源是专门为这个用例设计的。它允许您将多个服务放在一个 IP 地址后面,根据 HTTP 路径路由到它们。查看 the user guide on it 了解更多详细信息,但如果您对此有更多疑问,请随时询问!

edit:对于 non-HTTP(S) 服务,您可能必须找到一种方法来确保所有必要的端口都由 ELB 进行负载平衡,然后由 Kubernetes 正确路由。在 GCE 上,您可以使用所需的端口手动创建负载均衡器,然后将负载均衡器的 IP 放入每个服务的 externalIPs 字段中。我的记忆有点模糊,但由于数据包重写,我认为这不适用于 ELB。您可能希望将每个服务创建为 NodePort 服务,然后将您的 ELB 配置为将数据包从正确的外部端口转发到每个服务的节点端口。

您也可以简单地使用 nginx 作为您的 minecraft 服务器的代理,并将流量从入口端口 25565 转发到 minecraft 服务器。这样所有流量都通过一个服务