Как использовать WebRTC с RTCPeerConnection в Kubernetes?

Я хотел бы создать веб-приложение, которое обрабатывает видео с веб-камер пользователей. Похоже, WebRTC идеально подходит для этого проекта. Но мне трудно создать одноранговое соединение между машиной пользователя и модулем в моем кластере Kubernetes. Как бы вы соединили этих двух одноранговых узлов?

В этом вопросе о сбое сервера обсуждается проблема, с которой я столкнулся: WEBRTC MCU/SFU. внутри kubernetes — диапазоны портов. WebRTC хочет открыть несколько портов, чтобы пользователи могли создавать одноранговые соединения с сервером, но в Kubernetes порты закрыты по умолчанию. Вот перефразировка моего вопроса: как создать RTCPeerConnections, соединяющий нескольких пользователей с приложением, размещенным в кластере Kubernetes? Как должны быть настроены сетевые порты?

Самое близкое к решению, которое я нашел, это Оркестрация GPU -ускоренные потоковые приложения с использованием WebRTC, их код доступен на GitHub. Я не совсем понимаю их подход, я считаю, что это зависит от Istio.


person Andrew    schedule 06.10.2020    source источник
comment
Как бы вы соединили этих двух одноранговых узлов? ну, webrtc использует STUN/TURN для подключения через NAT... это немного более сложный протокол, да. Можете ли вы уточнить, о какой части вы спрашиваете?   -  person Jonas    schedule 06.10.2020
comment
у вас может быть такая же архитектура и без Istio   -  person Jonas    schedule 06.10.2020
comment
@Jonas спасибо за помощь! Я использую xirsys.com для серверов STUN/TURN. Я использую github.com/aiortc/aiortc для своего серверного кода. Когда я запускаю свой серверный код на своем персональном компьютере, пользователи могут подключаться. Когда я запускаю тот же код в своем кластере Kubernetes, пользователи не могут подключиться. Я думаю, мне нужно открыть сеть, чтобы можно было установить одноранговые соединения с модулями в кластере, но я не нашел лучшего способа сделать это.   -  person Andrew    schedule 07.10.2020


Ответы (1)


Документ, на который вы ссылаетесь, полезен для организации потоковой передачи с ускорением на GPU. приложения, использующие WebRTC

Что они делают, чтобы разрешить RTCPeerConnection:

Используйте два отдельных пула узлов (группу узлов):

  • Пул узлов по умолчанию — для большинства компонентов с использованием Ingress и балансировщика нагрузки.
  • Пул узлов TURN — для сервиса STUN/TURN

STUN/TURN сервис

Служба STUN/TURN привязана к сети и развернута на выделенных узлах. Он развертывается с одним экземпляром на каждом узле в пуле узлов. Это можно сделать в Kubernetes с помощью DaemonSet. Кроме того, эта служба должна использовать хост-сеть, например. все узлы имеют свои порты, доступные из Интернета. Активируйте сеть хоста для PodTemplate в вашем DaemonSet:

hostNetwork: true

Они используют coturn в качестве сервера STUN/TURN.

Служба STUN/TURN запускается как DaemonSet на каждом узле пула узлов TURN. Процессу coTURN необходимо выделить фиксированный блок портов, привязанных к IP-адресу хоста, чтобы правильно обслуживать ретранслируемый трафик. Один экземпляр coTURN может обслуживать тысячи одновременных запросов STUN и TURN в зависимости от конфигурации машины.

Сеть

Эта часть их сетевой диаграммы показывает, что некоторые службы обслуживаются через https с входным шлюзом, тогда как служба STUN/TURN работает через другое соединение с использованием dtls/ rtp к узлам, открытым через хост-сеть.

Сеть

person Jonas    schedule 08.10.2020
comment
Спасибо Йонас!! Мне потребуется некоторое время, чтобы разобраться в этом, но я думаю, что настройка hostNetwork является ключевой. Я очень ценю помощь. Я приму и проголосую, как только все заработает. - person Andrew; 09.10.2020