В данной инструкции приведены шаги по добавлению сервера для Voice Gateway (VGW) в кластер Kubernetes.
Все действия выполняются на ВМ1, если не указано иное.
Для добавления сервера под Voice Gateway выполните следующие шаги:
-
На ВМ3 клонируйте репозиторий:
-
Замените
{TAG_NAME}любым доступным тегом (для получения полного списка тегов используйтеgit tag):
git clone https://bitbucket.org/naveksoft/aivp-deploy.git
cd ./aivp-deploy
git checkout {TAG_NAME}
cd kubernetes/k8s-onprem/
-
Установите базовые компоненты Kubernetes:
./install_kube_base.sh
-
На ВМ1 получите регистрационный токен и URL:
kubeadm token create --print-join-command
###Пример токена:
kubeadm join 192.168.205.164:6443 --token 3yeqrm.abnp3yof8vivcbge --discovery-token-ca-cert-hash sha256:b58cfd679a3bb49f444dfe4869fad5e19f4fba87f1d6ae5f20da06c60f51684e
-
Скопируйте токен и примените его на ВМ3, используя
sudo:
###Пример:
sudo kubeadm join 192.168.205.164:6443 --token 3yeqrm.abnp3yof8vivcbge --discovery-token-ca-cert-hash sha256:b58cfd679a3bb49f444dfe4869fad5e19f4fba87f1d6ae5f20da06c60f51684e
-
Проверьте на ВМ1, что сервер добавлен и находится в статусе
Ready:
kubectl get nodes
###Пример ответа:
NAME STATUS ROLES AGE VERSION
k8s-single Ready control-plane 9d v1.28.2
k8s-single-analytics Ready <none> 3m28s v1.28.2
k8s-single-vgw Ready <none> 1m14s v1.28.2
-
Добавьте
labelиtaintна данный сервер, чтобы он использовался только для Voice Gateway. Выполните следующие команды, заменивk8s-single-vgwна имя вашего сервера:
##Пример:
kubectl taint nodes k8s-single-vgw vgw=true:NoSchedule
kubectl label nodes k8s-single-vgw vgw=true
Установка дополнительного компонента для узла Voice Gateway
Узел Voice Gateway требует прокси RTP для маршрутизации трафика RTP из Интернета во внутренние сети домофонов.
-
На ВМ3 установить определенный модуль ядра для улучшения обработки RTP:
sudo wget --user aivp --password aivp -q -O /usr/share/keyrings/vsaas-aivp.gpg https://download.aivp.io/repository/gpg/vsaas-aivp.gpg
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/vsaas-aivp.gpg] https://download.aivp.io/repository/deb-24.04 noble main" | sudo tee /etc/apt/sources.list.d/vsaas-aivp.list
echo "machine download.aivp.io/repository login aivp password aivp" | sudo tee /etc/apt/auth.conf.d/download.aivp.io.conf
Установите ngcp-rtpengine:
sudo apt update
sudo apt install -y ngcp-rtpengine
-
Настройте параметры
RTPENGINE:Bashsudo sed -i "s/\(port-min = \)\(.*\)/\120000/g" /etc/rtpengine/rtpengine.conf sudo sed -i "s/\(port-max = \)\(.*\)/\125000/g" /etc/rtpengine/rtpengine.conf sudo sed -i "s/^\(\[interface-default\]\)\(.*\)/#\1/g" /etc/rtpengine/rtpengine.conf sudo sed -i "s/^\(address = any\)\(.*\)/#\1/g" /etc/rtpengine/rtpengine.conf OWN_EXT_IP=$(curl -s ifconfig.me) OWN_IP=$(ip -4 addr show eth0 | grep "inet" | awk '{print $2}' | cut -d'/' -f1) cat << EOF | sudo tee -a /etc/rtpengine/rtpengine.conf [interface-internal] address = ${OWN_IP} port-min = 20000 port-max = 20999 [interface-external] address = ${OWN_IP} advertised = ${OWN_EXT_IP} port-min = 21000 port-max = 21999 EOF
Проверьте настроенные интерфейсы.
vim /etc/rtpengine/rtpengine.conf
Обратите внимание на поле addressв секциях [interface-internal] и [interface-external]. Оно должно быть равно локальному IP-адресу. Значение advertised должно быть равно внешнему IP-адресу, по которому сервер доступен из Интернета.
-
Разрешите
nonlocal_bind:
cat <<EOF | sudo tee /etc/sysctl.d/99-rtpengine.conf
## allow RTPEngine to start and bind to non local IPv4 and IPv6 ##
net.ipv4.ip_nonlocal_bind=1
net.ipv6.ip_nonlocal_bind=1
EOF
sudo sysctl -f /etc/sysctl.d/99-rtpengine.conf
-
Перезагрузите сервис:
sudo systemctl restart ngcp-rtpengine-daemon.service
-
Проверьте привязку интерфейсов.
rtpengine-ctl get interfaces