这几天我一直在使用 Azure 容器服务上的 Kubernetes 集群,目标是在上面托管 Unreal 游戏服务器。
经过几天的实验和一些关于 SO 的问题,我已经达到了可以在单个节点上托管少量服务器并使用客户端连接到它们的地步。
在我的最新设置中,我直接使用 hostNetwork: true 部署了 POD。 添加了带有公共(public) IP 的 LoadBalancer,并从部署 Pod 的代理节点手动映射端口到 NAT 负载均衡器。
虽然有效,但我并不完全相信这是一个好的解决方案。虽然它可以自动化,但我不确定它在负载下是否可扩展。
我需要等待 pod 创建。我可以假设需要什么端口,因为 unreal 在 7777 端口上以芳香方式打开,然后递增 1,直到找到一个。
创建 Pod 后,我需要将 NAT 端口转发添加到负载均衡器(但在我知道 Node Pod 位于哪个节点之前我无法执行此操作)。
向负载均衡器添加新的 NAT 规则需要时间。从我目前所看到的来看,相当长的时间了。
我正在使用外部负载均衡器在特定 POD 处路由流量。在 Kubernetes 内部完成这件事可能会更好。
有几件事必须满足:
客户端通过UDP连接到服务器。
最好将公共(public) IP 的数量保持在最低限度。
通过 UDP 向外部客户端直接公开 POD 的最佳方式是什么?端口转发并不是那么糟糕的选择(尽管我可以通过单个公共(public) IP 公开的 POD 数量有限,至少我这么认为)。 我想要实现的是将客户端直接连接到服务器,或者将客户端流量路由到特定的 POD(即路由器->服务->pod 场景是可以接受的,但间接性越少越好)。
我读过这篇文章: http://www.compoundtheory.com/scaling-dedicated-game-servers-with-kubernetes-part-1-containerising-and-deploying/ 尽管我不确定服务器是否通过 UDP 连接(这对我来说必须有要求),但它是很好的信息来源。或者说unity客户端到底是如何直接连接到内部POD IP的。
最佳答案
我建议你看一下 Ingresses Controller , 我知道Nginx支持UDP路由。
因此,您使用负载均衡器 IP 公开 Nginx-ingress,并创建 UDP 配置映射以直接在 Pod 上进行路由。
你应该尝试一下。
https://github.com/kubernetes/contrib/tree/master/ingress/controllers/nginx/examples/udp
关于azure - Kubernetes - 使用 UDP 托管游戏服务器。如何将流量连接/路由到 POD?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45877455/