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