【问题标题】:How can I have one Kubernetes LoadBalancer balance to multiple services?如何让一个 Kubernetes LoadBalancer 平衡多个服务?
【发布时间】:2016-04-05 19:48:02
【问题描述】:

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

  • 一个 nginx 服务器,在端口 80 和 443 上。
  • Minecraft 服务器,端口 25565。

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

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

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

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

【问题讨论】:

    标签: amazon-web-services nginx kubernetes amazon-elb


    【解决方案1】:

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

    【讨论】:

    • 是的,我想这就是我最终要做的事情。让所有流量都流经附加服务有点令人沮丧,但实际上我们可能只谈论几毫秒,所以我很满意。
    【解决方案2】:

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

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

    【讨论】:

    • 我喜欢 ingresses!问题中引用的 nginx 服务器实际上是基于 Kubernetes 的 contrib repo 中的 nginx-alpha Ingress 控制器。我所有的 HTTP(S) 资源都在那里处理。不幸的是,这对我的 Minecraft 服务器没有帮助——它不是 HTTP。我想我可以在该 pod 上使用另一个容器适当地代理 Minecraft 连接,但似乎 kube-proxy 应该能够直接处理。
    • 啊,很抱歉错过了!这应该是可能的,但是由于 NATing,ELB 比 Google 的 Cloud Load Balancer 稍微复杂一些;我将尝试在答案中解释一个选项。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-07
    • 2023-03-08
    • 2018-06-26
    • 1970-01-01
    • 2019-08-07
    • 1970-01-01
    相关资源
    最近更新 更多