3

复杂的 AWS EKS / ENI / Route53 问题让我们感到困惑。需要专家。

语境:

我们正在为社交平台 ( https://myxr.social ) 开发动态游戏服务器,该服务器使用 WebRTC/UDP SCTP/SRTP 通过https://MediaSoup.org传输游戏和视频数据

每个游戏服务器大约有 50 个客户端 每个客户端需要 2-4 个 UDP 端口

我们的开发运维策略 https://github.com/xr3ngine/xr3ngine/tree/dev/packages/ops

我们正在使用 Kubernetes 和https://agones.dev配置这些游戏服务器

Mediasoup 要求为客户端的每个服务器连接分配单独的端口。每个客户端需要两个端口,一个用于发送数据,一个用于接收数据;每台服务器的目标最多约为 50 个用户,这要求每台服务器有 100 个端口可公开访问。

我们需要一些方法来将此 UDP 流量路由到相应的游戏服务器。入口似乎主要处理 HTTP(S) 流量,配置我们的 NGINX 入口控制器来处理 UDP 流量假设我们提前知道我们的游戏服务器服务,我们不知道,因为游戏服务器会根据需要上下旋转。

问题:

我们看到了两种可能的方法来解决这个问题。

路径 1

分配节点组公共 IP 中的每个游戏服务器,然后为每个客户端分配端口。IP v4 或 v6。这将需要对 AWS 中的 IP 端口进行 SSL 终止。我们可以使用 ENI 和 EKS 为每个带有 SSL 的游戏服务器动态创建和配置 IP 端口吗?基本上通过公共子网将这些 pod 暴露给 Internet,它们每个都有自己的 IP 地址或子域。https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-eni.html我们一直在参考这个文档,试图弄清楚这是否可能。

路径 2

为每个游戏服务器动态创建一个子域(例如 gameserver01.gs.xrengine.io 等),并为每个客户端(例如客户端 1 [30000-30004] 等)分配动态端口。这似乎受到 EKS 船队中可访问的端口的限制。

这些方法中的任何一种都可能吗?一个更好吗?你能告诉我们一些关于我们应该如何实施的细节吗?

4

1 回答 1

1

在 Amazon EKS 上接收UDP 流量的本机方式是使用负载均衡器类型的 Kubernetes 服务和额外的注释来获取NLB

例子

apiVersion: v1
kind: Service
metadata:
  name: my-game-app-service
  annotation:
    service.beta.kubernetes.io/aws-load-balancer-type: nlb
spec:
  selector:
    app: my-game-app
  ports:
    - name: outgoing-port   # choose your name
      protocol: UDP
      port: 9000            # choose your port
    - name: incoming-port   # choose your name
      protocol: UDP
      port: 9001            # choose your port
  type: LoadBalancer
于 2020-09-26T20:29:14.710 回答