WEBRTC MCU / SFU внутри кубернетов - диапазоны портов?

Я использую 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

. Но я не могу найти альтернативу этому в kubernetes. Как я могу раскрыть диапазон портов с помощью kubernetes.

2: Как я могу подключиться из моего приложения nodejs к определенному экземпляру шлюза. Итак, скажем, два экземпляра шлюза работают, прямо сейчас, когда пользователь подключается к приложению, я подключаю его к одному из двух запущенных экземпляров и сохраняю его в redis, и проверяю, что любой запрос от этого пользователя передается этому конкретному экземпляру . Как я могу подключиться к конкретной реплике с узла? Также получаете список реплик?

Я проверил эту проблему на kuebernetes, но она все еще не решена. Есть ли обходной путь для этого?

4
задан 19 February 2019 в 17:54
1 ответ

Как я могу раскрыть диапазон портов с помощью кубернетов.

Краткий ответ: Вы не можете.

Чтобы уточнить немного подробнее, как Йоргос Саслис упомянул здесь .

проблема в том, что - учитывая текущее состояние Docker - кажется, что вам НЕ следует даже пытаться раскрыть большое количество портов. В любом случае рекомендуется использовать хост-сеть из-за накладных расходов, связанных с большими диапазонами портов. (это увеличивает как задержку, так и потребляет значительные ресурсы - например, см. https://www.percona.com/blog/2016/02/05/measuring-docker-cpu-network-overhead/ )

Я думаю, что VoIP не следует реализовывать в Kubernetes. медиасерверы имеют довольно много состояний и требуют динамического открытия новых соединений, в то время как Kubernetes в основном * не имеет состояния.

Это во многом будет зависеть от фактической архитектуры, которую вы хотите. Но я предполагаю, что вы хотите открыть один порт и позволить K8s выполнять масштабирование и маршрутизацию с локальной балансировкой. Если требуется отслеживание состояния соединений портов, K8s не является решением для использования.

1
ответ дан 3 December 2019 в 04:07

Теги

Похожие вопросы