Я использую 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, но она все еще не решена. Есть ли обходной путь для этого?
Как я могу раскрыть диапазон портов с помощью кубернетов.
Краткий ответ: Вы не можете.
Чтобы уточнить немного подробнее, как Йоргос Саслис упомянул здесь .
проблема в том, что - учитывая текущее состояние Docker - кажется, что вам НЕ следует даже пытаться раскрыть большое количество портов. В любом случае рекомендуется использовать хост-сеть из-за накладных расходов, связанных с большими диапазонами портов. (это увеличивает как задержку, так и потребляет значительные ресурсы - например, см. https://www.percona.com/blog/2016/02/05/measuring-docker-cpu-network-overhead/ )
Я думаю, что VoIP не следует реализовывать в Kubernetes. медиасерверы имеют довольно много состояний и требуют динамического открытия новых соединений, в то время как Kubernetes в основном * не имеет состояния.
Это во многом будет зависеть от фактической архитектуры, которую вы хотите. Но я предполагаю, что вы хотите открыть один порт и позволить K8s выполнять масштабирование и маршрутизацию с локальной балансировкой. Если требуется отслеживание состояния соединений портов, K8s не является решением для использования.