如何在 Kubernetes 上使用 WebRTC 和 RTCPeerConnection?

How to use WebRTC with RTCPeerConnection on Kubernetes?

我想构建一个网络应用程序来处理来自用户网络摄像头的视频。看起来 WebRTC 非常适合这个项目。但是,我很难在用户的机器和我的 Kubernetes 集群中的 pod 之间创建对等连接。您将如何连接这两个同行?

关于服务器故障的这个问题讨论了我 运行 遇到的问题:WEBRTC MCU/SFU inside kubernetes - Port Ranges。 WebRTC 希望打开一堆端口,以便用户可以与服务器建立对等连接,但 Kubernetes 默认关闭端口。这是我的问题的改写:How to create RTCPeerConnections 将多个用户连接到 Kubernetes 集群中托管的应用程序?网络端口应该如何设置?

我最接近找到解决方案的是 Orchestrating GPU-accelerated streaming apps using WebRTC, their code is available on GitHub. I don't fully understand their approach, I believe it depends on Istio

您 link 的文档很有帮助,Orchestrating GPU-accelerated streaming apps using WebRTC

他们为 RTCPeerConnection 所做的是:

使用两个独立的节点池(节点组):

  • 默认节点池 - 对于大多数组件,使用 Ingress 和负载平衡器
  • TURN 节点池 - 用于 STUN/TURN 服务

STUN/TURN 服务

STUN/TURN 服务网络绑定 并部署到专用节点。它在节点池中的每个节点上部署一个实例。这可以在 Kubernetes 上使用 DaemonSet 完成。此外,此服务应使用主机网络,例如所有节点的端口都可以从 Internet 访问。在 DaemonSet:

中为 PodTemplate 激活主机网络
hostNetwork: true

他们使用 coturn 作为 STUN/TURN 服务器。

The STUN/TURN service is run as a DaemonSet on each node of the TURN node pool. The coTURN process needs to allocate a fixed block of ports bound to the host IP address in order to properly serve relay traffic. A single coTURN instance can serve thousands of concurrent STUN and TURN requests based on the machine configuration.

网络

他们的网络图的这一部分显示,某些服务是通过 https 使用 入口网关 提供的,而 STUN/TURN 服务通过使用 dtls/rtp 的不同连接到通过主机网络公开的节点。