В данной инструкции найдете шаги по добавлению сервера для Voice Gateway (VGW) в кластер Kubernetes.
Все действия выполняются на ВМ1, если не указано иное.
Для добавления сервера под Voice Gateway выполните следующие шаги:
-
На ВМ3 клонируйте репозиторий:
-
Замените
{TAG_NAME}любым доступным тегом (для получения полного списка тегов используйтеgit tag):
git clone https://github.com/aipix-dev/aipix-deploy.git
cd ./aipix-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 aipix --password aipix -q -O /usr/share/keyrings/vsaas-aipix.gpg https://download.aipix.ai/repository/gpg/vsaas-aipix.gpg
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/vsaas-aipix.gpg] https://download.aipix.ai/repository/deb-24.04 noble main" | sudo tee /etc/apt/sources.list.d/vsaas-aipix.list
echo "machine download.aipix.ai/repository login aipix password aipix" | sudo tee /etc/apt/auth.conf.d/download.aipix.ai.conf
Установите ngcp-rtpengine:
sudo apt update
sudo apt install -y ngcp-rtpengine
-
Настройте параметры
RTPENGINE:
sed -i "s/\(port-min = \)\(.*\)/\120000/g" /etc/rtpengine/rtpengine.conf
sed -i "s/\(port-max = \)\(.*\)/\125000/g" /etc/rtpengine/rtpengine.conf
sed -i "s/^\(\[interface-default\]\)\(.*\)/#\1/g" /etc/rtpengine/rtpengine.conf
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