1

前几天我一直在使用 Azure 容器服务上的 Kubernetes 集群,目标是在其上托管 Unreal 游戏服务器。

经过几天的实验和几个关于 SO 的问题,我到了可以在单个节点上托管几个服务器并与客户端连接到它们的地步。

在我的最新设置中,我直接使用 hostNetwork: true 部署了 POD。添加了具有公共 IP 的 LoadBalancer,并从部署 pod 的代理节点手动映射端口到 NAT 负载均衡器。

虽然有效,但我并不完全相信这是一个很好的解决方案。虽然它可以自动化,但我不确定它在负载下是否可扩展。

  1. 我需要等到创建 pod。我可以假设需要什么端口,因为在 7777 端口上打开了虚幻的芳香,然后加一,直到找到一个。

  2. 创建 pod 后,我需要将 NAT 端口转发添加到负载均衡器(但在我知道位于哪个 Node pod 上之前我无法执行此操作)。

  3. 向负载均衡器添加新的 NAT 规则需要时间。相当多的时间,从我到目前为止所看到的。

  4. 我正在使用外部负载均衡器来路由特定 POD 的流量。在 Kubernetes 中执行此操作可能会更好。

有几件事必须满足:

  1. 客户端通过 UDP 连接到服务器。

  2. 最好将公共 IP 的数量保持在最低限度。

通过 UDP 直接向外部客户端公开 POD 的最佳方法是什么?端口转发并不是那么糟糕的选择(尽管我可以通过单个公共 ip 公开的 POD 数量有限,至少我认为是这样)。我想要实现的是将客户端直接连接到服务器,或者将客户端流量路由到特定的 POD(即路由器-> 服务-> pod 场景是可以接受的,但间接性越少越好)。

我读过这个: http ://www.compoundtheory.com/scaling-dedicated-game-servers-with-kubernetes-part-1-containerising-and-deploying/ 虽然我不确定,但它是很好的信息来源如果服务器通过 UDP 连接(这对我来说必须有要求)。或者统一客户端如何直接连接到内部 POD IP。

4

1 回答 1

1

我建议你看看 Ingresses 控制器,我知道 Nginx 支持 UDP 路由。

因此,您使用负载平衡器 IP 公开 Nginx-ingress,并创建 UDP 配置映射以直接在您的 pod 上路由。

你应该试一试。

https://github.com/kubernetes/contrib/tree/master/ingress/controllers/nginx/examples/udp

于 2017-08-25T10:32:23.073 回答