【发布时间】:2021-05-13 23:31:51
【问题描述】:
我正在学习 Kubernetes,想知道它是否适合以下用例:
我有一个用于多人游戏的服务器(在守护进程中的服务器,而不是计算机)。游戏连续运行,客户可以随时加入和离开。但是每台服务器都有最大客户端数量的限制。当它变满时,应该启动新的服务器。服务器应在空时关闭,但随时至少有一个运行。每个服务器都选择一个任意的 UDP 端口来侦听。各个服务器向主服务器报告自己。客户端首先连接到主服务器以获取正在运行的服务器列表,包括它们的地址和端口,然后直接连接到其中一个。
要使用 Kubernetes 处理此问题,每个游戏服务器都可以是一个 Pod。我可以使用带有自定义指标的自动缩放来根据连接的客户端数量来处理启动和关闭。
但我不确定如何在唯一的 UDP 端口下将每个 Pod 暴露给外界。如果我为这些 Pod 创建一个服务,那么我只会为所有这些 Pod 分配一个端口,并且每次到达它的数据包都会发送到不同的 Pod,这显然是行不通的。
kubernetes 有没有合理的方法来处理这个问题?
编辑:虽然游戏服务器能够自动查找空闲端口,但也可以将其配置为侦听特定端口,因此如果 kubernetes 可以处理空闲端口的分配,则该部分不是问题面向互联网的地址。
理想情况下,最终结果可能如下所示:
Public-facing IP +------- NodeA --------------+
| +------ Pod1 ------------+ |
UDP/10001 ............> | | GameServer @ UDP/10000 | |
| +------------------------+ |
UDP/10002 ...... | +------ Pod2 ------------+ |
......> | | GameServer @ UDP/10000 | |
UDP/10003 ... | +------------------------+ |
.. +----------------------------+
UDP/10004 . ..
. .. +------- NodeB --------------+
. .. | +------ Pod3 ------------+ |
. .> | | GameServer @ UDP/10000 | |
. | +------------------------+ |
.. | +------ Pod4 ------------+ |
.....> | | GameServer @ UDP/10000 | |
| +------------------------+ |
+----------------------------+
【问题讨论】: