kubernetes 内部的 WEBRTC MCU/SFU - 端口范围?

kubernetes 内部的 WEBRTC MCU/SFU - 端口范围?

我在用janus 网关作为群组视频通话的 webrtc 媒体服务器。以前我使用 docker-compose 将其部署在单个节点中,但现在我希望能够水平扩展它。为此,我尝试使用 kubernetes,但我面临两个问题:

1:指定媒体服务器要公开的端口范围。由于媒体服务器需要端口范围才能运行,我可以使用以下代码在 docker-compose 中执行此操作

janus-gateway:
 build: ./gateway
 image: janus-gateway-image
 restart: always
 ports:
   -  8088:8088
   -  8188:8188
   -  7088:7088
   -  "10000-10200:10000-10200/udp"
 networks:
  - back-tier

但我在 kubernetes 中找不到任何替代方案。如何使用 kubernetes 公开端口范围。

2:如何从我的 nodejs 应用程序连接到网关的特定实例。假设网关的两个实例正在运行,现在当用户连接到应用程序时,我将其连接到正在运行的两个实例之一并将其保存在 redis 中,并确保来自该用户的任何请求都传递到该特定实例。如何从节点连接到特定副本?还获取副本列表?

我检查过这个问题在 kuebernetes 上,但问题仍未解决。有没有什么解决方法?

答案1

如何使用 kubernetes 公开端口范围。

简短的回答是:你不能。

更详细地说,约格斯·萨斯利斯提及这里

问题是 - 鉴于 Docker 的当前状态 - 似乎您甚至不应该尝试公开大量端口。由于大端口范围会带来开销,因此建议您使用主机网络。(它既增加了延迟,又消耗了大量资源 - 例如参见https://www.percona.com/blog/2016/02/05/measuring-docker-cpu-network-overhead/

我认为 VoIP 不应该用 Kubernetes 来实现。媒体服务器具有很强的状态,需要动态地打开新的连接,而 Kubernetes 基本上是无状态的。

这在很大程度上取决于您想要的实际架构。但我假设您想要公开一个端口,并让 K8s 进行扩展和路由以及本地平衡。如果需要端口连接的状态性,K8s 不是可用的解决方案。

相关内容