Kubernetes - 使用 UDP 托管游戏服务器。如何connect/route流量到POD?

Kubernetes - hosting game server with UDP. How to connect/route traffic to POD?

这几天我一直在玩 Azure 容器服务上的 Kubernetes 集群,目标是在上面托管 Unreal 游戏服务器。

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

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

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

  1. 我需要等到 pod 创建完成。我可以假设需要什么端口,因为 unreal aromatically 在 7777 端口上打开,然后递增 1 直到找到一个。

  2. 创建 pod 后,我需要将 NAT 端口转发添加到负载均衡器(但在我知道位于哪个节点 pod 之前我不能这样做)。

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

  4. 我正在使用外部负载均衡器在特定 PODs 路由流量。从 Kubernetes 内部进行可能会更好。

必须满足的条件很少:

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

  2. 最好将 public 个 IP 数量保持在最低水平。

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

我读过这个: http://www.compoundtheory.com/scaling-dedicated-game-servers-with-kubernetes-part-1-containerising-and-deploying/ 它是很好的信息来源,尽管我不确定服务器是否通过 UDP 连接(这对我来说一定有要求)。或者unity client到底是怎么直连内部POD IP的

我建议你看一下 Ingresses controller, 我知道 Nginx 一个支持 UDP 路由。

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

你应该试一试。

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