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

Abd*_*sit 7 docker kubernetes docker-compose webrtc docker-swarm

我使用janus-gateway作为用于群组视频通话的 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
Run Code Online (Sandbox Code Playgroud)

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

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

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

小智 5

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

简短的回答:你不能。

再详细一点,正如Yorgos Saslis这里提到的。

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

我认为 VoIP 不应该用 Kubernetes 来实现。媒体服务器是有状态的,需要动态打开新连接,而 Kubernetes 大多是*无状态的。

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