如何在 Kubernetes 上使用 WebRTC 和 RTCPeerConnection?

And*_*rew 7 webrtc kubernetes rtcpeerconnection

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

Server Fault 上的这个问题讨论了我遇到的问题:WEBRTC MCU/SFU inside kubernetes - Port Ranges。WebRTC 想要打开一堆端口,以便用户可以创建与服务器的对等连接,但 Kubernetes 默认关闭端口。这是我的问题的重新表述:如何创建 RTCPeerConnections 将多个用户连接到托管在 Kubernetes 集群中的应用程序?网络端口应该如何设置?

我最接近找到解决方案的是使用 WebRTC 编排 GPU 加速的流媒体应用程序,它们的代码可在GitHub找到。我不完全理解他们的方法,我相信这取决于Istio

Jon*_*nas 7

您链接到的文档很有帮助,使用 WebRTC 编排 GPU 加速的流媒体应用程序

他们所做的RTCPeerConnection是:

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

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

STUN/TURN 服务

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

hostNetwork: true
Run Code Online (Sandbox Code Playgroud)

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

STUN/TURN 服务在 TURN 节点池的每个节点上作为 DaemonSet 运行。coTURN 进程需要分配一个固定的端口块绑定到主机 IP 地址,以便正确地为中继流量提供服务。单个 coTURN 实例可以根据机器配置为数千个并发 STUN 和 TURN 请求提供服务。

网络

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

网络