如何为多个服务提供一个Kubernetes LoadBalancer余额?

时间:2016-01-01 02:54:34

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

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

  • 端口80和443上的nginx服务器。
  • Minecraft服务器,位于25565端口。

两者都很有效。我目前将它们都设置为type: LoadBalancer,因此它们都具有为群集提供入口的Elastic Load Balancers。

我想只有一个ELB - 它们需要花钱,并且没有理由不在相同的外部IP上安装Minecraft服务器和HTTP(S)服务器。

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

有没有办法让多个服务有一个服务余额?

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:3)

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

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