我在用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 不是可用的解决方案。