Матрица совместимости продуктов VK WorkSpace — в документе описана совместимость продуктов VK WorkSpace с системным ПО и сторонним ПО.
Управление пользователями без контроллера домена — в документе описано управление пользователями без контроллера домена.
Архитектура и описание системы — в документе описана архитектура инсталляции на одну виртуальную машину, кластерной инсталляции, возможные интеграции со сторонними сервисами, а также технические данные и требования. Не является частью публичной документации, обратитесь к представителю VK Tech, чтобы ознакомиться с документом.
Все компоненты должны быть реализованы посредством корпоративной инфраструктуры Заказчика. Доступы к данным ресурсам должны быть открыты.
Виртуальные машины
Для standalone-инсталляции вам понадобится 2 виртуальные машины под:
-
Мессенджер.
-
Регистри и установщик VK WorkSpace.
Минимальный размер распределенной инсталляции — 2 шарда (4 вычислительных узла — ноды), максимальный не ограничен. Для инсталляции из 4 нод вам понадобится 5 или 6 виртуальных машин:
- 4 машины под ноды Мессенджера.
- 1 машина регистри и установщик VK WorkSpace.
- 1 или 2 машины под Ассистент.
HTTP LoadBalancer
Для распределенной инсталляции — L7-балансировщик.
МСЭ
Межсетевой экран.
Сервер NTP
Используется для синхронизации времени. Может быть использован как публичный (если нет сложностей с прохождением сетевых фильтров), так и ваш собственный сервер.
Сервер SMTP
Авторизация пользователей в Мессенджере выполняется с помощью одноразовых кодов (OTP via email). Для доставки писем с одноразовыми кодами необходим SMTP-сервер, на котором разрешена отправка почтовых сообщений для данной виртуальной машины — без авторизации и блокировки антиспам-системой. Может быть использован как публичный, так и ваш собственный сервер.
Сервер DNS
Используется для преобразования имен в IP-адреса и обратно, предоставляется заказчиком. Может быть использован как публичный, так и ваш собственный сервер.
Пуш-сервисы
Сервисы RuStore, Apple и Google для отправки пуш-сообщений на мобильные платформы. Расположены во внешнем периметре. Серверу Мессенджера требуются исходящие соединения к этим сервисам и не требуются входящие соединения.
Суперапп VK WorkSpace
Пользовательское приложение, установленное на одной из допустимых платформ. Сервер Мессенджера должен иметь возможность принимать входящие сообщения от этого приложения, а также отправлять ответы. Основное взаимодействие осуществляется через протокол HTTPS (443/TCP). Для работы видео- и аудиозвонков необходимы протоколы STUN и TURN: входящие соединения на порты 3478/TCP и 3478/UDP, а также входящий и исходящий трафик UDP по портам 1024+ (RTP-трафик).
WAF
Осуществляет фильтрацию входящего HTTP-трафика, а также акселерацию SSL-трафика.
DLP-система
Для предотвращения утечки данных.
Антивирус
Используется для проверки файлов на вирусы.
LDAP-сервер
Используется для получения списка пользователей в системе.
Мессенджер может работать как обособленно, так и в связке с корпоративным LDAP-сервером.
Интеграция с LDAP не является обязательным условием, но очень удобна для тех, кто имеет внутренний LDAP, например MS Active Directory.
Вы можете указать настройки для соединения с LDAP-сервером (при его наличии) во время инсталляции или после ее завершения.
Информация по управлению параметрами синхронизации LDAP после установки Мессенджера представлена в документе Инструкция по интеграции с контроллером домена по протоколу LDAP.
Если настройки для соединения с LDAP-сервером производятся в момент инсталляции, Вам необходимы:
- Доступ к LDAP-серверу.
- Настройки для соединения с LDAP-сервером:
- connectionUrl — адрес подключения к LDAP-серверу.
- usersDn — указание на точку входа для поиска в LDAP.
- bindDn — пользователь, под которым осуществляется подключение к LDAP-серверу.
- bindCredential — пароль для подключения к LDAP-серверу.
- searchScope — использование рекурсивного поиска по дереву LDAP:
- 1 — искать в одном уровне (по умолчанию);
- 2 — искать по всем уровням.
- fullSyncPeriod — частота полной синхронизации с LDAP-сервером, в секундах.
- changedSyncPeriod — частота частичной синхронизации с LDAP-сервером, в секундах (значение -1 — отключить).
- customUserSearchFilter — фильтр для получения пользователей. Позволяет получать не всех пользователей из указанного дерева. По умолчанию выборка пользователей не ограничена.
- password.
- CA-сертификат.
- Название группы пользователей, которым будет доступно окружение администратора. Название группы будет использовано при настройке доступа к окружению администратора.
Возможна работа без LDAP, с добавлением пользователей вручную (подробнее см. Управление пользователями без контроллера домена).
Поддерживаемые операционные системы описаны в документе Матрица совместимости в разделе «Операционные системы серверов».
Отключите службу аудита auditd — включенный аудит может создавать значительную нагрузку на серверы.
Минимальный объем SSD — 400 ГБ.
vCPU — 4.
RAM — 4 ГБ.
В случае распределенной инсталляции требования к вычислительным ресурсам (виртуальным машинам) для продуктивной среды рассчитываются индивидуально для Заказчика. Свяжитесь с представителями VK для помощи с расчетом сайзинга.
Если вы планируете подключать Ассистент
Ассистент доступен для распределенных инсталляций, в которых присутствует и Мессенджер, и один из продуктов VK WorkSpace — Почта, Доска или Диск.
Если вы планируете использовать собственную LLM модель — вам понадобится одна виртуальная машина на любом гипервизоре — 104 ГБ RAM, 52 vCPU, 848 ГБ SSD.
Если вы планируете использовать LLM модель от VK — вам понадобится две виртуальные машины со следующими ресурсами:
- Под Ассистент — 104 ГБ RAM, 52 vCPU, 848 ГБ SSD.
- Под инференс — 86 ГБ RAM, 28 vCPU, 400 ГБ SSD.
Также вам понадобятся видеокарты с минимальными характеристиками:
- NVIDIA.
- Compute Capability ≥ 7.5.
- VRAM > 98 ГБ суммарно.
- Хотя бы одна видеокарта имеет >= 24 ГБ VRAM.
Для виртуальной машины под Мессенджер
Минимальные требования к серверу в зависимости от количества пользователей:
Количество пользователей | vCPU | RAM, ГБ | SSD, ГБ | S3, ГБ / год |
|---|---|---|---|---|
Тестовая установка | ||||
1 000 | 22 | 56* | 450: root (/) 200 ГБ data (/mnt/data) 150 ГБ /log (/mnt/log) 100 ГБ | - |
Продуктивная установка | ||||
От 1 до 1 500 | 22 | 56* | 450: root (/) 200 ГБ data (/mnt/data) 150 ГБ /log (/mnt/log) 100 ГБ | 500 |
* — указано минимальное количество доступной памяти. Для функционирования инсталляции общей памяти на инстансе должно быть больше этого значения минимум на 7%
Рекомендации по разметке дисков — в разделе Рекомендации по организации файловой системы.
Минимальные требования к SSD-дискам:
Операций чтения, IOPS | Операций записи, IOPS | Максимальная задержка операции, мс |
|---|---|---|
10 000 | 5 000 | < 1 |
Если планируется настройка Федерации, добавьте на серверы каждой инсталляции дополнительные вычислительные ресурсы:
- 10% от имеющихся мощностей vCPU
- 1 ГБ SSD
- 2 ГБ RAM на каждую тысячу федеративных пользователей. Ожидаемый прирост RAM — около 1 ГБ в год в зависимости от количества сообщений федерации
Весь дисковый раздел виртуальной машины должен быть отдан под корневой раздел /. В процессе установки используются временные каталоги /tmp и /var/tmp.
Каталог /tmp должен располагаться на диске — на отдельном разделе или в составе корневого раздела /. Не используйте для /tmp файловую систему tmpfs: она размещается в оперативной памяти, и ее размера не хватит для распаковки образов контейнеров, которую выполняет установщик.
Минимальный размер /tmp — 60 ГБ. Если планируется установка и Почты, и Мессенджера, то минимальный размер точки /tmp увеличивается до 90 ГБ.
Рекомендации относятся к виртуальным машинам под Мессенджер, в случае распределенной инсталляции — ко всем нодам Мессенджера.
Перед началом установки подключите все жесткие диски и выполните их разметку. Данные и журналы Мессенджера рекомендуется вынести из корневого раздела:
Точка монтирования | Назначение | Минимальный размер |
|---|---|---|
/ | Операционная система и системные компоненты | 200 ГБ |
/mnt/data | Данные сервисов и баз данных Мессенджера, служебные данные Kubernetes (k3s) | 150 ГБ |
/mnt/log | Журналы операционной системы и сервисов Мессенджера | 100 ГБ |
Под /mnt/data и /mnt/log можно использовать:
- отдельные жесткие диски;
- разделы или логические тома LVM на уже существующих дисках.
Для /mnt/data и /mnt/log рекомендуется опция монтирования noatime.
Если отдельные разделы не выделяются, корневой раздел должен вмещать весь объем — не меньше 450 ГБ.
Требования к гипервизорам
Гипервизор должен обеспечивать возможность развернуть виртуальную машину из образов Мессенджера в форматах OVA или qcow2. ПО гипервизора — на выбор заказчика. Известных ограничений нет.
Характеристики виртуальных машин должны соответствовать сайзингу проекта.
Требования к процессорам
Архитектура: не ниже x86-64-v2.
vCPU
Обязательная поддержка Time Stamp Counter (TSC). Наличие проверяется поиском флага constant_tsc в /proc/cpuinfo. Любой современный процессор поддерживает эту технологию, однако иногда этого регистра нет внутри виртуальной машины. В этом случае необходимо правильно настроить систему виртуализации.
Не допускайте переподписку. Суммарное количество vCPU на хосте не должно превышать число физических ядер, выделенных для всех виртуальных машин. При этом Hyper-Threading не рекомендуется считать полноценными ядрами.
Не выделяйте одной виртуальной машине количество ядер больше, чем количество ядер на физическом сокете.
RAM
Суммарный объем vRAM не должен превышать объем физической RAM хоста.
Механизмы экономии памяти
Не используйте механизмы ballooning и сжатия памяти.
swap
Не используйте swap — как на гипервизоре, так и внутри виртуальных машин.
Резервирование ресурсов виртуальных машин
Весь выделенный объем памяти и процессоров должен быть зарезервирован для виртуальных машин.
Хранилище
Не используйте тонкие диски (диски типа Thin) — диски с отложенным выделением пространства на СХД.
Входящий трафик
Пропускная способность: TCP — 10 Гбит/с; UDP — 10 Гбит/с.
В целях безопасности используется SSL-шифрование. Для работы Мессенджера необходимо выпустить SSL-сертификат.
Типы сертификатов:
- Сертификаты собственных УЦ — выпустите серверный сертификат (full chain) с указанием всех необходимых имен (см. раздел Настройки DNS-зоны).
- Бесплатные сертификаты — возможно использование Let's Encrypt или сертификатов Минцифры.
Wildcard-сертификаты
Используйте Wildcard-сертификат, например *.vkteams.<ваш домен>.com, или сертификат с указанием всех необходимых имен (см. раздел Настройки DNS-зоны).
Wildcard-сертификат защищает только один уровень поддоменов. Это значит, что wildcard-сертификат, выпущенный для domain.ru, будет действительным для всех его субдоменов третьего уровня, но не будет работать для четвертого. Соответственно, если необходима защита поддоменов четвертого уровня и далее, нужно получить отдельный wildcard-сертификат для родительского домена каждого из них.
Если сервер Мессенджера будет опубликован на vkteams.example.com, сертификат должен содержать либо *.vkteams.example.com, либо список всех CNAME, которые указаны для Мессенджера в DNS.
Перед началом установки необходимо определить, будет ли доступен сервис в интернете.
- Если сервис не будет доступен в интернете — используется внутренний IP-адрес разворачиваемых виртуальных машин.
- Если сервис будет доступен в интернете — используется внешний IPv4-адрес разворачиваемых виртуальных машин.
Внешний IPv4 адрес необходим на всех виртуальных машинах инсталляции, в том числе на машине под регистри/установщик.
Адрес может быть поднят как внутри виртуальных машин, так и проброшен через NAT. Преобразование сетевых адресов (NAT) должно быть вида 1-в-1 (сеть в сеть), то есть с сохранением номера порта. Иначе видео и голосовые звонки могут не работать.
Подсети
На стороне сервера должны быть свободны для использования следующие подсети:
- 10.32.0.0/16
- 10.31.0.0/16
- 172.18.0.0/16
- 172.17.0.0/16
MTU
Сетевой путь между клиентами и сервером Мессенджера должен обеспечивать передачу IP-пакетов размером до 1500 байт без фрагментации. Значение MTU на всех сетевых интерфейсах и промежуточных устройствах по маршруту должно составлять 1500.
Доступы для установки
- Доступ к порту 22/TCP (SSH).
- Доступ по порту 5050/TCP с виртуальной машины Мессенджера до виртуальной машины с регистри.
- Сетевой доступ ко всем смежным серверам — DNS, NTP, SMTP, LDAP по соответствующим портам.
Входящие соединения на стороне сервера Мессенджера
Выполните данные настройки на всех виртуальных машинах, кроме машины под регистри/установщик.
Для доступа клиентов к серверу должны быть открыты порты:
- 80/TCP (используется при выпуске сертификатов Let's Encrypt)
- 443/TCP
- 3478/TCP и UDP
- 1024–65535/UDP
Исходящие соединения на стороне сервера Мессенджера
Выполните данные настройки на всех виртуальных машинах, кроме машины под регистри/установщик.
Перед установкой обеспечьте роутинг исходящих соединений. Он необходим для отправки пуш-сообщений (через сервисы Apple, Google) и для работы голосовых и видео-звонков
Обеспечьте доступ к серверам Google и Apple для отправки и корректной работы пуш-уведомлений на мобильных платформах Android и iOS:
Доступ к серверам Apple (для push-уведомлений на iOS):
TCP 5223; 443; 2197
IP 17.0.0.0/8
Доступ к серверам Google (для push-уведомлений на Android):
TCP 5228; 5229; 5230; 443
Если в компании используются механизмы ограничения доступа сетевого трафика, убедитесь, что открыт доступ к следующим доменам (по HTTPS, порт 443):
- googleapis.com
- google.com
Начиная с версии 26.2 для установки и обновления Мессенджера требуется доступ к RPM-репозиториям РЕД ОС:
-
Откройте сетевой доступ к официальным репозиториям:
https://repo1.red-soft.ru/redoshttps://mirror.yandex.ru/redoshttps://repo.red-soft.ru/redos
-
Для закрытых контуров, где отсутствует прямое подключение, настройте локальное зеркало, руководствуясь официальной инструкцией по созданию локального зеркала для репозиториев РЕД ОС.
-
Перед установкой проверьте доступность репозиториев на каждой виртуальной машине:
dnf repolistВ выводе должны отображаться настроенные и доступные репозитории. Если репозитории недоступны, установка или обновление не смогут завершиться успешно.
Данный раздел актуален только для распределенной инсталляции.
Для публикации Мессенджера во внешней сети можно настроить промежуточный балансировщик нагрузки.
При использовании L7-балансировки необходимо ограничивать на уровне сети прямой доступ к виртуальным машинам Мессенджера.
Входящий трафик в Мессенджер обеспечивается при помощи Istio Ingress, который доступен на портах 80 и 443 на нодах Kubernetes-кластера с метками im/ingress: "true" (далее ingress-ноды).
Все ingress-ноды равноправны — каждая нода может обработать любой запрос, поэтому трафик необходимо равномерно распределить по нодам.
Балансировщик должен проставлять следующие заголовки при проксировании запросов в Мессенджер:
- Host
- X-Real-IP — в этот заголовок должен записываться IP-адрес, откуда пришел запрос.
- X-CUSTOM-SSL-OFFLOAD и X-SSL-OFFLOAD — в эти заголовки должно записываться значение «1». Эти заголовки сигнализируют о том, что балансировщик терминирует SSL.
Также балансировщик должен обеспечивать таймауты на чтение с сервера не менее 60 секунд.
В случае терминации SSL-трафика на балансировщике сгенерируйте и настройте сертификаты на балансировщике.
Пример конфигурации Nginx:
# Адреса ingress-нод Мессенджер и ВКСupstream im-cluster {server 192.168.0.1:80;server 192.168.0.2:80;server 192.168.0.3:80;server 192.168.0.4:80;}# Конфигурация защищенного протокола работыserver {# Домен, на котором вы публикуете Мессенджер и ВКСserver_name domain.company.ru *.domain.company.ru;listen 443 http2 ssl;access_log /var/log/nginx/domain.company.ru-access.log;error_log /var/log/nginx/domain.company.ru-error.log;# Путь до сертификатов SSL/TLS в формате x509, соответствующих указанным доменным именамssl_certificate /etc/nginx/ssl/domain.company.ru.crt;ssl_certificate_key /etc/nginx/ssl/domain.company.ru.key;# Настройка проксирования трафикаlocation / {# Адреса нод VKTeamsproxy_pass http://im-cluster;# Проброс заголовковproxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-CUSTOM-SSL-OFFLOAD 1;proxy_set_header X-SSL-OFFLOAD 1;proxy_http_version 1.1;proxy_set_header Connection "";# Увеличение таймаутов на чтениеproxy_read_timeout 120s;}}# Конфигурация редиректа на защищенный протоколserver {server_name domain.company.ru *.domain.company.ru;listen 80;access_log /var/log/nginx/domain.company.ru-access.log;error_log /var/log/nginx/domain.company.ru-error.log;location / {return 301 https://domain.company.ru$request_uri;}}
Заведите в DNS-зоне:
-
Запись в DNS, указывающую на виртуальную машину с регистри — registry.vkt.example.com.
-
Имена хостов, которые будут смотреть на внешний IPv4 адрес. Список имен (CNAME либо A-записи на ваше усмотрение):
-
admin — адрес API управления Мессенджер и ВКС (административного веб интерфейса) и сервис Grafana.
-
akesadmin
-
api — API бота.
-
assistant — для работы Ассистента.
-
call — URL для формирования ссылок на звонки.
-
di — поддомен сервиса Keycloak для версий до 25.2.
-
dl — портал загрузки дистрибутивов (система автоматического обновления клиентских приложений).
-
files-n — оргструктура организаций.
-
kc — поддомен сервиса Keycloak для версии 25.2 и выше.
-
notp
-
outlook-plugin — плагин MS Outlook для создания конференций.
-
rapi
-
s — обмен стикерпаками.
-
stentor — адрес API Мессенджер и ВКС для добавления/удаления пользователей.
-
u — адрес клиентского API Мессенджер и ВКС.
-
ub — файловое API.
-
webim — веб-версия Мессенджер и ВКС.
-
Как создается домен: u (субдомен) + vkt.example.com (основной домен, который вы замените своим) = u.vkt.example.com.
Вариант 1.
Если есть возможность создания записи Wildcard CNAME в DNS, то можно создать A-запись, указывающую на адрес сервера Мессенджера, и запись Wildcard CNAME, указывающую на A-запись сервера Мессенджера.
$ host -t axfr example.com | grep vktvkt.example.com. 3600 IN A 172.27.59.10registry.vkt.example.com. 3600 IN A 172.27.59.09*.vkt.example.com. 3600 IN CNAME vkt.example.com.
Вариант 2.
Если нет возможности создания записи Wildcard CNAME в DNS, то можно создать A-запись, указывающую на адрес сервера Мессенджера, и отдельные записи CNAME, которые будут разрешаться на созданную A-запись. Записи CNAME должны соответствовать перечню имен, представленному выше.
$ host -t axfr example.com | grep vktvkt.example.com. 3600 IN A 172.27.59.10registry.vkt.example.com. 3600 IN A 172.27.59.09admin.vkt.example.com. 3600 IN CNAME vkt.example.com.akesadmin.vkt.example.com. 3600 IN CNAME vkt.example.com.api.vkt.example.com. 3600 IN CNAME vkt.example.com.assistant.vkt.example.com. 3600 IN CNAME vkt.example.com.call.vkt.example.com. 3600 IN CNAME vkt.example.com.di.vkt.example.com. 3600 IN CNAME vkt.example.com. # только для версий до 25.2dl.vkt.example.com. 3600 IN CNAME vkt.example.com.files-n.vkt.example.com. 3600 IN CNAME vkt.example.com.kc.vkt.example.com. 3600 IN CNAME vkt.example.com. # только для версии 25.2 и вышеnotp.vkt.example.com. 3600 IN CNAME vkt.example.com.outlook-plugin.vkt.example.com. 3600 IN CNAME vkt.example.com.rapi.vkt.example.com. 3600 IN CNAME vkt.example.com.s.vkt.example.com. 3600 IN CNAME vkt.example.com.stentor.vkt.example.com. 3600 IN CNAME vkt.example.com.u.vkt.example.com. 3600 IN CNAME vkt.example.com.ub.vkt.example.com. 3600 IN CNAME vkt.example.com.webim.vkt.example.com. 3600 IN CNAME vkt.example.com.