Breadcrumbs

Добавление сeрвeра для Voice Gateway в кластeр Kubernetes

В данной инструкции найдете шаги по добавлению сервера для Voice Gateway (VGW) в кластер Kubernetes.

Все действия выполняются на ВМ1, если не указано иное.

Для добавления сервера под Voice Gateway выполните следующие шаги:

  1. На ВМ3 клонируйте репозиторий:

  • Замените {TAG_NAME} любым доступным тегом (для получения полного списка тегов используйте git tag):

Bash
git clone https://github.com/aipix-dev/aipix-deploy.git
cd ./aipix-deploy
git checkout {TAG_NAME}
cd kubernetes/k8s-onprem/
  1. Установите базовые компоненты Kubernetes:

Bash
./install_kube_base.sh
  1. На ВМ1 получите регистрационный токен и URL:

Bash
kubeadm token create --print-join-command
Bash
###Пример токена:
kubeadm join 192.168.205.164:6443 --token 3yeqrm.abnp3yof8vivcbge --discovery-token-ca-cert-hash sha256:b58cfd679a3bb49f444dfe4869fad5e19f4fba87f1d6ae5f20da06c60f51684e
  1. Скопируйте токен и примените его на ВМ3, используя sudo:

Bash
###Пример:
sudo kubeadm join 192.168.205.164:6443 --token 3yeqrm.abnp3yof8vivcbge --discovery-token-ca-cert-hash sha256:b58cfd679a3bb49f444dfe4869fad5e19f4fba87f1d6ae5f20da06c60f51684e
  1. Проверьте на ВМ1, что сервер добавлен и находится в статусе Ready:

Bash
kubectl get nodes
Bash
###Пример ответа:
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
  1. Добавьте label и taint на данный сервер, чтобы он использовался только для Voice Gateway. Выполните следующие команды, заменив k8s-single-vgw на имя вашего сервера:

Bash
##Пример:
kubectl taint nodes k8s-single-vgw vgw=true:NoSchedule
kubectl label nodes k8s-single-vgw vgw=true

Установка дополнительного компонента для узла Voice Gateway

Узел Voice Gateway требует прокси RTP для маршрутизации трафика RTP из Интернета во внутренние сети домофонов.

  1. На ВМ3, установить определенный модуль ядра для улучшения обработки RTP:

Bash
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:

Bash
sudo apt update
sudo apt install -y ngcp-rtpengine 
  1. Настройте параметры RTPENGINE:

Bash
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

Проверьте настроенные интерфейсы.

Bash
vim /etc/rtpengine/rtpengine.conf

Обратите внимание на поле addressв секциях [interface-internal] и [interface-external]. Оно должно быть равно локальному IP-адресу. Значение advertised должно быть равно внешнему IP-адресу, по которому сервер доступен из Интернета.

  1. Разрешите nonlocal_bind:

Bash
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
  1. Перезагрузите сервис:

Bash
sudo systemctl restart ngcp-rtpengine-daemon.service
  1. Проверьте привязку интерфейсов:

Bash
rtpengine-ctl get interfaces