Перейти к содержанию

Развертывание и настройка сервисов групповых политик

Назначение документа

В документе описаны шаги для развертывания и включения сервисов следующих групповых политик:

  • Политика доступности разделов меню VK Teams.
  • Политика обязательных чатов и каналов VK Teams.
  • Политика привилегий.

В инструкции для упрощения сервер/установщик Почты VK WorkSpace и сервер/установщик панели администратора VK WorkSpace названы «сервер/установщик VK WorkSpace». Документ предназначен для использования администраторами организации.

Общий план развертывания и включения сервисов групповых политик:

  1. Проверьте, что у вас есть все необходимое для развертывания и включения сервисов групповых политик.
  2. Включите функциональность групповых политик в веб-интерфейсе установщика VK WorkSpace.
  3. Выполните предварительные действия для развертывания и настройки сервисов групповых политик в VK Teams.
  4. Разверните и настройте сервисы необходимых групповых политик VK Teams:

  5. Настройте переменные окружения на сервере VK WorkSpace.

  6. Получите доступ к функциональности групповых политик.

    Функциональность отсутствует в базовой сборке. Чтобы подключить ее для одного или всех доменов инсталляции, обратитесь в службу поддержки.

После развертывания и включения сервисов дальнейшая настройка групповых политик происходит в панели администратора VK WorkSpace в соответствии с инструкцией.

Действия с политиками после развертывания и настройки:

  • Выключить политику привилегий и политику обязательных чатов и каналов можно в панели администратора VK WorkSpace. Чтобы выключить политику доступности мини-аппов, перейдите в соответствующий раздел данной инструкции.
  • Если появился новый веб-апп или мини-апп и его нужно добавить в клиентское приложение VK Teams, следуйте инструкции ниже.

  • Добавление в карту новых инстансов для сервисов Vipper и Pacman происходит автоматически. Чтобы добавить в карту новый инстанс сервиса Chat-gp, следуйте инструкции ниже.

Дополнительная документация

Групповые политики — в документе описан порядок работы с групповыми политиками в панели администратора VK WorkSpace.

Мини-аппы в VK Teams — в документе описана функциональность мини-аппов в VK Teams, требования к созданию мини-аппов, процесс интеграции мини-аппа в VK Teams, а также методы взаимодействия мини-аппа с нативным клиентом VK Teams.

Настройка интеграции VK Teams и Почты VK WorkSpace — в документе описана настройка интеграции Почты VK WorkSpace и VK Teams.

Настройка интеграции VK Teams с панелью администратора VK WorkSpace — в документе описана настройка интеграции VK Teams версии 24.5 и выше и панели администратора VK WorkSpace версии 1.23 и выше.

Архитектура и описание системы VK Teams — в документе описаны сервисы VK Teams, обеспечивающие функциональность групповых политик. Не является частью публичной документации, обратитесь к представителю VK, чтобы ознакомиться с документом.

Предварительные условия

  1. Доступ к веб-интерфейсу Kafka.
  2. Доступ к серверу VK Teams.
  3. Доступ к веб-интерфейсу установщика VK WorkSpace http://<company_domain>:8888.
  4. Доступ к серверу VK WorkSpace и к панели администратора VK WorkSpace https://biz.<company_domain>.
  5. Сетевой доступ между сервисами VK Teams и сервисами VK WorkSpace:

    Откуда Куда Порт/протокол
    Zastava Birich (Kafka) TCP/10032
    Birich (Kafka) Zastava TCP/10032
    Zastava Pub TCP/12501
    Vipper Pub TCP/12501
    Pacman Pub TCP/12501
    Pacman Pub HTTP
  6. Чат-бот для рассылки нотификаций, если необходимо уведомлять пользователей об изменении политики привилегий и политики обязательных чатов и каналов. Создайте нового бота или используйте существующего. Вы можете разрешить боту писать первым — в таком случае уведомления будут получать все пользователи. Если бот не может писать первым — пользователи не будут получать уведомления, пока не напишут в боте /start.

1. Включите функциональность в веб-интерфейсе установщика VK WorkSpace

  1. Перейдите в веб-интерфейс установщика VK WorkSpace по адресу http://<company_domain>:8888.
  2. Нажмите на кнопку в правом верхнем углу и выберите пункт Продукты.
  3. В списке продуктов выберите опцию Система групповых политик. Для использования Apache Kafka внутри инсталляции выберите опцию Kafka внутри инсталляции:

  4. Нажмите на кнопку Сохранить.

  5. Перейдите на вкладку AdminPanel.
  6. Если у вас кластерная инсталляция, распределите контейнеры по гипервизорам. Если инсталляция на одну виртуальную машину, нажмите на кнопку Сгенерировать автоматически, чтобы сгенерировать контейнеры для работы групповых политик.
  7. Запустите автоматическую установку нажатием на кнопку в правом верхнем углу:

  8. Подтвердите запуск автоматической установки, нажав на кнопку Запустить во всплывающем окне.

  9. После окончания установки перейдите в список контейнеров и соберите информацию, которая вам понадобится для дальнейшей настройки на стороне VK Teams:

    • Адреса Kafka — при использовании Kafka внутри инсталляции необходимо в конфигурационном файле сервиса Zastava указать адреса машин, на которых установлены сервисы bi-kafka:

    • Адрес сервиса Riad — адреса машин, на которых установлены сервисы pub, необходимо будет указать далее в конфигурационных файлах сервисов Pacman, Chat-gp и Vipper.

2. Выполните предварительные действия

Перед тем как включать отдельные групповые политики, выполните на сервере VK Teams шаги, описанные ниже:

Шаг 1. Проверьте настройку сервиса Godmod и мини-аппов

Выполните данный шаг, если настраиваете политику доступности мини-аппов. Если вы настраиваете другую политику, перейдите к следующему шагу.

  1. Если у вас новая инсталляция VK Teams, сначала настройте веб-аппы и мини-аппы (см. дополнительную документацию) и проверьте корректность их работы и только потом переходите к развертке и настройке сервисов групповых политик. Все веб-аппы и мини-аппы инсталляции, такие как почта, календарь, облако, должны быть настроены до запуска миграции мини-аппов и анонсирования групповых политик.

    Если VK Teams установлен давно и все веб-аппы и мини-аппы работают корректно, перейдите к пункту 2.

  2. Проверьте, что в конфигурационном файле сервиса Godmod /usr/local/nginx-im/html/myteam/myteam-config.json:

    1. В секциях desktop и mobile присутствует вкладка messenger и стоит на первом месте:

      "disposition":{
         "desktop":{
            "leftbar":[
               "messenger",
               "tasks",
               "calendar",
               "orgstructure",
               "cloud"
            ]
         },
         "mobile":{
            "services":[
               "discover"
            ],
            "tabs":[
               "messenger",
               "tasks"
            ]
         }
      }
      
    1. В секциях desktop и mobile присутствует вкладка messenger и стоит на первом месте:

      "disposition":{
         "desktop":{
            "leftbar":[
               "messenger",
               "tasks",
               "orgstructure",
            ]
         },
         "mobile":{
            "services":[
               "discover"
            ],
            "tabs":[
               "messenger",
               "tasks"
            ]
         }
      }
      
    1. Указана версия API>=120:

      "api-version":120,
      

    Если вы внесли изменения в /usr/local/nginx-im/html/myteam/myteam-config.json, перезапустите pod myteam-admin:

    fsq="$(kubectl get pods -A | grep myteam-admin | awk '{print $2}')" && kubectl delete pods $fsq -n vkteams
    

Шаг 2. Настройте права для административного пользователя

Перед анонсированием политики убедитесь, что у пользователя, из-под которого будет осуществляться анонс, имеются необходимые права.

  1. Перейдите в конфигурационный файл /usr/local/etc/k8s/helmwave/store/myteam-admin.yml и в секциях MiniApps, Management и Settings установите для поля default значение allow:

    myteamAdminPermission:
      resources:
        Analytics:
          default: allow
          groups: []
        Export:
          default: allow
          groups: []
        Settings:
          default: allow
          groups: []
        Information:
          default: allow
          groups: []
        Management:
          default: allow
          groups: []
        MiniApps:
          default: allow
          groups: []
    
  2. Перезапустите pod myteam-admin:

    fsq="$(kubectl get pods -A | grep  myteam-admin | awk '{print $2}')"     && kubectl delete pods $fsq -n vkteams
    

Шаг 3. Авторизуйтесь под учетной записью администратора

  1. Сгенерируйте OTP с помощью команды:

    curl 'https://admin-<company_domain>/auth/otp/generate' \
    -H 'Content-Type: application/json' \
    -d' { "email": "<admin-mail>"}'
    
  2. Авторизуйтесь:

    curl 'https://admin-<company_domain>/auth/otp/check' \
    -H 'Content-Type: application/json' \
    -d'{"email": "<admin-mail>", "password": "<OTP>"}' \
    -c cookieFile.txt
    

После этого в cookieFile.txt происходит запись cookie, который нужно использовать в дальнейших запросах с флагом -b. Примеры запросов будут приведены для каждой из политик ниже. В рамках одной сессии достаточно авторизоваться таким образом один раз.

Шаг 4. Настройте сервис Zastava

Сервис отвечает за взаимодействие с панелью администратора VK WorkSpace и передачу событий групповых политик в сервисы VK Teams. При изменении политики сервис Pravda на стороне в панели администратора VK WorkSpace создает событие и отправляет его в Kafka (подробнее см. в документе с описанием архитектуры VK Teams. Не является частью публичной документации, обратитесь к представителю VK Tech, чтобы ознакомиться с документом).

Перейдите в конфигурационный файл сервиса Zastava /usr/local/etc/zastava-1.yaml и заполните поля:

  1. В секции kafka:

    kafka:
     addresses:
      - 100.70.81.231:10032
      - 100.70.81.219:10032
      - 100.70.81.231:10032
     consumer_group: "zastava-consumer"
     topic: "birich"
     retry_topic: "birich-retry"
     dlq_topic: "birich-dlq"
     actions_topic: "action"
     actions_retry_topic: "birich-action-retry"
     poll_limit: 1000
     retry_delay_ms: 3000
     retry_count_max: 3
     consume_preferring_lag: 1
     max_buffered_records: 10000
     fetch_max_partition_bytes: 1000 
    

    где:

    • address — адреса машин и порт bi-kafka из шага Настройки в веб-интерфейсе установщика VK WorkSpace.

    • consumer_group — название группы потребителей Kafka. Может быть произвольным, главное, чтобы оно совпадало между всеми инстансами сервиса Zastava.

    • topic — топик для получения событий изменений, относительно пользователя. Не меняйте название топика.

    • retry_topic — служебный топик для логики ретраев и отложенной доставки сообщений. Не меняйте название топика.

    • dlq_topic — служебный топик для недоставленных сообщений. Анализ сообщений из этого топика может быть полезен для определения проблем. Не меняйте название топика.

    • actions_topic — топик для получения действий, применяемых к пользователям в соответствии с назначаемыми политиками. Не меняйте название топика.

    • actions_retry_topic — служебный топик для логики ретраев и отложенной доставки сообщений. Не меняйте название топика.

    • poll_limit — ограничение на количество одновременно забираемых сообщений из брокера.

    • retry_delay_ms — пауза между попытками повторно доставить сообщение.

    • retry_count_max — максимальное число попыток доставить сообщение.

    • consume_preferring_lag — служебный параметр потребителя топиков Kafka, оставьте без изменений.

    • max_buffered_records — служебный параметр потребителя топиков Kafka, оставьте без изменений.

    • fetch_max_partition_bytes — служебный параметр потребителя топиков Kafka, оставьте без изменений.

  2. В секции schekolda укажите для поля max_parallel значение «4»:

    schekolda:
      max_parallel: 4
    

    Поле max_parallel отвечает за количество одновременных запросов в сервис Zastava. Этот параметр можно использовать для ограничения потока исходящих запросов. При выставлении значения «0» количество исходящих запросов не будет ограничено. Рекомендованное значение на данный момент: «4».

  3. В секции etcd укажите эндпоинты и префикс ключей для доступа в etcd (сервис Riad):

    etcd:
      endpoints:
        - 100.70.80.52:12501
      timeout: 1s
      watch_prefix: "/gp/vkt/"
    
    где:

    Внимание

    Эндпоинты и префикс ключей для доступа в etcd должны совпадать с указанными в конфигурации сервиса Pravda и в конфигурации конкретных сервисов групповых политик.

  4. Перезапустите сервис Zastava командой:

    systemctl restart zastava-1
    

Шаг 5. Создайте топики в Kafka

При использовании Kafka внутри инсталляции

Если вы используете Kafka внутри инсталляции, необходимые топики создадутся автоматически.

Чтобы проверить, что необходимые топики созданы:

  1. Перейдите в веб-интерфейс установщика VK WorkSpace по адресу http://<company_domain>:8888.
  2. Перейдите в список контейнеров, найдите контейнер bi-kafka и нажмите на пиктограмму

  3. Выберите Проверить для графы create_topics:

    После нажатия на кнопку запустится проверка необходимых топиков.

    Если в контейнере недостает топиков, для графы create_topics тег done изменится на needRefresh. Нажмите на кнопку Запустить.

По умолчанию создается 10 партиций для каждого топика. Чтобы увеличить количество партиций:

  1. Подключитесь к контейнеру bi-kafka:

    docker exec -it bi-kafkaN bash
    
  2. Следуйте инструкции из документации Apache Kafka.

При использовании внешнего сервиса Kafka

Если вы используете внешний сервис Kafka, перейдите в его веб-интерфейс и создайте все топики из секции kafka конфигурационного файла /usr/local/etc/zastava-1.yaml (см. шаг 1 выше).

Количество партиций для каждого топика — не менее max_parralel * <количество инстансов> / 2. Рекомендуется при возможности сразу установить количество партиций равное max_parralel * <количество инстансов>.

Большее число партиций не является проблемой (и число партиций у существующего топика, как правило, можно увеличить).

Таким образом, для двух инстансов сервиса Zastava с max_parralel = 4 рекомендуется для начала установить по восемь партиций в каждом топике.

Если топиков нет и доступа к веб-интерфейсу Kafka тоже нет

Создайте топики при помощи утилиты kcat. Будьте осторожны, так как топики будут иметь некоторое заранее сконфигурированное администратором Kafka количество партиций, которое может не совпадать с желаемым. Прибегать к этой инструкции следует только при отсутствии других вариантов.

Чтобы создать топики:

  1. На сервере VK Teams выполните команды ниже:

    sudo docker run -it --network=host edenhill/kcat:1.7.1 -b b <IP-адрес_Kafka> -P -t birich -Z
    # (нажмите ctrl-d, чтобы послать eof) 
    
    sudo docker run -it --network=host edenhill/kcat:1.7.1 -b b <IP-адрес_Kafka> -P -t action -Z
    # (нажмите ctrl-d, чтобы послать eof) 
    
    sudo docker run -it --network=host edenhill/kcat:1.7.1 -b b <IP-адрес_Kafka> -P -t birich-action-retry -Z
    # (нажмите ctrl-d, чтобы послать eof)
    
    sudo docker run -it --network=host edenhill/kcat:1.7.1 -b b <IP-адрес_Kafka> -P -t birich-retry -Z
    # (нажмите ctrl-d, чтобы послать eof) 
    
    sudo docker run -it --network=host edenhill/kcat:1.7.1 -b b <IP-адрес_Kafka> -P -t birich-dlq -Z
    #( нажмите ctrl-d, чтобы послать eof)
    
    # Посмотрите список топиков
    sudo docker run -it --network=host edenhill/kcat:1.7.1 -b <IP-адрес_Kafka> -L
    
  2. Перезапустите сервис Zastava командой:

    systemctl restart zastava-1
    

3. Включите политику доступности мини-аппов в VK Teams

На сервере VK Teams выполните шаги, представленные ниже:

Шаг 1. Выполните скрипт миграции мини-аппов

  1. Для корректной работы скрипта откройте доступ на запросы в сервис Go-files:

    1. В конфигурационном файле Nginx /usr/local/nginx-im/confv2/nginx.conf в секции geo $prod_ip укажите IP-адрес сервера VK Teams:

      geo $prod_ip {
        <IP-адрес сервера VK Teams>;
        default 0;
      }
      
    2. Перезапустите Nginx:

      nginx.sh reload
      
    3. Проверьте доступ на запросы в сервис Go-files.

      Пример команды для проверки доступа:

      curl --location --request POST 'https://files-n.<company_domain>/s2s/api/v1/direct_upload?uid=example@mail.ru' --header 'Content-Type: image/svg' -d '@<some_svg_path>'
      
  2. Перейдите в директорию /usr/local/gp_deploy/ и запустите скрипт миграции веб-аппов и мини-аппов командой:

    python3 miniappCreate.py --baseurl '<companyr_domain>.ru'
    

    В результате работы скрипта в сервисах Avon и Gulliver появится информация о веб-аппах и веб-аппах, присутствующих в инсталляции.

    Примечание

    Для обновления информации о мини-аппах (в ситуации, когда необходимо исправить конфиг, название мини-аппа или иконку) скрипт можно запустить с ключом –update.
    Пример:

    python3 miniappCreate.py --update --baseurl '<company_domain>.ru'
    

    Список перенесенных в инсталляцию мини-аппов будет сохранен в файле created_miniapps.txt.

  3. Чтобы проверить список перенесенных мини-аппов, выполните команду:

    echo 'box.space.mini_apps_list:select({})' | tarantoolctl eval avon-1
    

    В выводе команды отобразятся перенесенные мини-аппы с типом webapp и native:

    - ['calendar', 5, true, 'webapp']
    - ['calls', 3, true, 'native']
    - ['cloud', 8, false, 'webapp']
    - ['mail', 6, false, 'webapp']
    - ['messenger', 17, true, 'native']
    - ['miniapp-8fe88e60-4100-4c6d-9a25-5aa40d525c37', 1, true, 'miniapp']
    - ['orgstructure', 7, false, 'webapp']
    - ['tasks', 2, true, 'webapp']
    

    Проверьте, что присутствуют все необходимые мини-аппы для инсталляции.

  4. Активируйте все перенесенные мини-аппы

    Пример команды для активации мини-аппа календарей:

    box.space.mini_apps_list:update('calendar', {{'=', 3, true}})
    

Шаг 2. Активируйте сервис Pacman

Сервис отвечает за реализацию групповой политики доступности веб-аппов и мини-аппов и находится в инсталляции в неактивном состоянии. Сервис надо активировать и развернуть.

Чтобы активировать сервис:

  1. Перейдите в конфигурационный файл /usr/local/etc/k8s/helmwave/projects.yml и удалите из секции disabled сервис Pacman.

  2. Запустите сборку сервиса:

    HELMWAVE_USE_LOCAL_REPO_CACHE=true hwbuild --tags pacman
    
  3. Запустите деплой сервиса:

    HELMWAVE_USE_LOCAL_REPO_CACHE=true hwup --tags pacman
    
  4. Создайте карту сервиса:

    gic utils mapfiller --map-name pacman
    

    Пример названия инстанса сервиса в карте: pacman.<имя_ноды>.pacman -1

Шаг 3. Разверните сервис Pacman

Перейдите в конфигурационный файл сервиса Pacman /usr/local/etc/k8s/helmwave/projects/pacman/values/pacman.yml и укажите:

  1. В секции pravda укажите адрес эндпоинта API групповых политик:

    pravda:
      addr: "biz.<company_domain>.ru/vkwsgp"
      timeout: 5s
    
  2. В секции cache укажите размер и тип кэша:

    cache:
      type: lru
      size: 10000
    

    На данный момент поддерживаются два типа кэша:

    • none;

    • lru — рекомендованное значение.

  3. Заполните секции version, endpoints и connection:

    live_config:
      riad:
        version: "/gp/vkt/pacman/1"
        endpoints:
          - "100.70.80.52:12501"
        policies:
          # см. описание в пункте ниже
        connection:
          uri: "pacman"
          protocol: "ipros"
          params: {}
    

    где:

    • version — ключ, по которому панель администратора VK WorkSpace будет искать конфигурацию. Имеет вид prefix/имя_сервиса/версия. Важно убедиться, что префикс совпадает с указанным в настройках сервисов Pravda и Zastava.

    • endpoints — адрес etcd-сервера Riad из шага Настройки в веб-интерфейсе установщика VK WorkSpace.

    • connection — секция настроек доставки сообщений для сервиса Zastava. Оставьте как в примере выше.

  4. Заполните секцию policies:

    Если вы выполнили скрипт миграции мини-аппов, возьмите секцию policies из примера ниже, скорее всего, вам не потребуется ее менять:

    live_config:
      riad:
        version: "/gp/vkt/pacman/1"
        endpoints:
          - "10.32.0.1:2379"
        policies:
        - name: orderpolicy
          title: Order Policy
          payload:
            permissions:
            - name: desktopOrder
              title: Разделы десктоп и веб-версий
              description: Выбранные сервисы будут отображаться в интерфейсе пользователя VK Teams в левом навигационном баре сверху вниз
              type: SortableMultiSelectList
              list_values:
              meta:
            - name: mobileOrder
              title: Разделы мобильной версии
              description: Выбранные сервисы будут отображаться в интерфейсе пользователя VK Teams
              type: SortableMultiSelectList
              list_values:
              meta:
        connection:
          uri: pacman
          protocol: ipros
          params: {}
    

    Оставьте секции list_values и meta пустыми. В таком случае порядок мини-аппов и настройки по умолчанию будут собраны из сервиса Avon.

    Чтобы изменить порядок мини-аппов или значения по умолчанию, заполните секции list_values и meta для mobileOrder и desktopOrder. Пример заполненных секций ниже:

    live_config:
      riad:
        version: "/gp/vkt/pacman/1"
        endpoints:
          - "100.70.80.52:12501"
        policies:
        - name: orderpolicy
          title: Order Policy
          payload:
            permissions:
            - name: desktopOrder
              title: Разделы десктоп и веб-версий VK Teams
              description: Выбранные сервисы будут отображаться в интерфейсе пользователя VK Teams в левом навигационном баре сверху вниз
              type: SortableMultiSelectList
              list_values:
              - cloud
              - messenger
              - calendar
              - calls
              - mail
              - orgstructure
              - tasks
              #- miniapp-b885274c-6616-48b0-98f3-f9e5c689b62a
              meta:
                messenger:
                  default_position: 1
                  hidable: false
                  movable: false
                tasks:
                  default_position: 2
                  hidable: false
                  movable: true
                calls:
                  default_position: 5
                  hidable: false
                  movable: true
                mail:
                  default_position: 4
                  hidable: true
                  movable: true
                calendar:
                  default_position: 3
                  hidable: true
                  movable: true
                orgstructure:
                  default_position: 6
                  hidable: true
                  movable: true
                cloud:
                  default_position: 7
                  hidable: true
                  movable: true
                #miniapp-b885274c-6616-48b0-98f3-f9e5c689b62a:
                  #display: Тестовый мини-апп
                  #default_position: 8
                  #hidable: true
                  #movable: true
            - name: mobileOrder
              title: Порядок мини-аппов в мобильном клиенте
              description: Пользователям разрешено пользоваться мини-аппами на мобильном клиенте
              type: SortableMultiSelectList
              list_values:
              - cloud
              - messenger
              - calendar
              - calls
              - mail
              - orgstructure
              - tasks
              - services
              #- miniapp-b885274c-6616-48b0-98f3-f9e5c689b62a
              meta:
                services:
                  default_position: 1
                  display: "Сервисы"
                  hidable: false
                  movable: false
                messenger:
                  default_position: 2
                  hidable: false
                  movable: false
                tasks:
                  default_position: 4
                  hidable: false
                  movable: true
                calls:
                  default_position: 3
                  hidable: false
                  movable: true
                mail:
                  default_position: 6
                  hidable: true
                  movable: true
                calendar:
                  default_position: 5
                  hidable: true
                  movable: true
                orgstructure:
                  default_position: 7
                  hidable: true
                  movable: true
                cloud:
                  default_position: 8
                  hidable: true
                  movable: true
                #miniapp-b885274c-6616-48b0-98f3-f9e5c689b62a:
                  #display: Тестовый мини-апп
                  #default_position: 9
                  #hidable: true
                  #movable: true
        connection:
          uri: "pacman"
          protocol: "ipros"
          params: {}
    

    В примере выше перечислены все поддерживаемые нативные и веб-аппы, у них указаны правильные признаки hidable и movable и правильный порядок.

    Если в инсталляции отсутствует тот или иной веб-апп (например, почта или облако) — достаточно закомментировать соответствующие секции и упоминание в секции list_values.

    Мини-аппы можно добавить по аналогии с закомментированным miniapp-b885274c-6616-48b0-98f3-f9e5c689b62a в примере выше. miniapp-b885274c-6616-48b0-98f3-f9e5c689b62a — ID миниаппа, который можно получить в боте Metabot.

    Внимание

    Все веб-аппы и мини-аппы, не упомянутые в секции policies:
    - не будут доступны для конфигурирования через групповые политики в панели администратора VK WorkSpace;
    - не будут отображаться в клиентском приложении VK Teams после включения флага group-policy-enabled на шаге 5 ниже.
    Перечислите все нативные и веб-аппы, доступные в инсталляции, а также все актуальные мини-аппы в системе, для которых нужна иконка в клиентском приложении VK Teams.
    Несмотря на то, что все неанонсированные мини-аппы не будут доступны для конфигурирования через групповые политики, они всё ещё будут доступны по ссылке. Групповая политика разделов в текущей реализации управляет отображением разделов, но не доступом.

    Информация из раздела meta используется только для отображения в интерфейсе панели администратора VK WorkSpace:

    • Значения values и icon в meta на данный момент не используются.

    • Для hidable и movable указаны значения по умолчанию — true. При необходимости могут быть скорректированы на false.

    • Если default_position прописан хотя бы для одного из аппов, то тогда он должен быть прописан для всех аппов. Кроме того, при выставлении этого параметра через конфиг значения должны быть уникальными. Если нарушено одно из этих условий, при попытке донести в etcd будет код ответа 400. Если default_position не прописывается в конфиге, то он запрашивается из сервиса Avon, в таком случае мини-аппы могут быть не по порядку в клиентском приложении.

    Внимание

    desktopOrder должен быть описан раньше mobileOrder, иначе в панели администратора VK WorkSpace секции настройки поменяются местами. Секция services обязательно должна быть описана при помощи поля display.

  5. Перезапустите сервис Pacman командой:

    kubectl delete pod -n vkteams -l app=pacman
    

Шаг 4. Анонсируйте политику доступности мини-аппов

  1. Убедитесь, что выполнены предварительные действия для анонсирования политики.

  2. В консоли выполните команду:

    curl 'https://admin-<domain>/api/miniapp/announcePolicy' \
    -H 'Content-Type: application/json' \
    -H 'Accept: application/json' \
    -b cookieFile.txt \
    -d ''
    

    Если код ответа не 200 — посмотрите логи сервиса Pacman:

    /var/log/vector/k8s/vkteams/pacman
    

    Если код ответа 200 — перейдите по адресу https://biz.<company_domain>.ru/vkwsgp/api/v1/settings/vkt/pacman/ и проверьте групповую политику в панели администратора VK WorkSpace.

Шаг 5. Включите политику доступности мини-аппов

Для всей инсталляции:

  1. Перейдите в конфигурационный файл /usr/local/nginx-im/html/myteam/myteam-config.json и укажите для поля group-policy-enabled значение true:

    "group-policy-enabled": true
    
    Поле group-policy-enabled: true отвечает за то, чтобы клиентские приложения VK Teams начали получать список мини-аппов в соответствии с настроенной групповой политикой.
  2. Перезапустите pod myteam-admin:

    fsq="$(kubectl get pods -A | grep myteam-admin | awk '{print $2}')" && kubectl delete pods $fsq -n vkteams
    

Для определенного домена:

  1. Перейдите в конфигурационный файл /usr/local/nginx-im/html/myteam/myteam-config.json и укажите для поля default значение false, а для домена — true:

    "group-policy-enabled": {
      "$switch-domain": {
        "default": false,
        "<company_domain>.ru": true
      }
    },
    
  2. Перезапустите pod myteam-admin:

    fsq="$(kubectl get pods -A | grep myteam-admin | awk '{print $2}')" && kubectl delete pods $fsq -n vkteams
    

Шаг 6. Включите политику в панели администратора VK WorkSpace

Работа с политикой доступности мини-аппов в панели администратора VK WorkSpace описана в документе Групповые политики.

4. Включите политику обязательных чатов и каналов в VK Teams

На сервере VK Teams выполните шаги, представленные ниже:

Шаг 1. Активируйте сервис Chat-gp

Сервис отвечает за реализацию групповой политики обязательных чатов и каналов и находится в инсталляции в неактивном состоянии. Сервис надо активировать и развернуть.

Чтобы активировать сервис:

  1. Перейдите в конфигурационный файл /usr/local/etc/k8s/helmwave/projects.yml и удалите из секции disabled сервис Chat-gp.
  2. Запустите сборку сервиса:

    HELMWAVE_USE_LOCAL_REPO_CACHE=true hwbuild --tags chat-gp
    
  3. Запустите деплой сервиса:

    HELMWAVE_USE_LOCAL_REPO_CACHE=true hwup --tags chat-gp
    
  4. Создайте карту сервиса:

    echo "ctlr_add_map chatgp shard" | nc ctlr.service.onpremise.consul 4020
    

    Внимание

    Chat-gp не должен иметь "-" в названии карты.
    Пример правильного названия инстанса сервиса в карте — chatgp.onpremise.chatgp-1.
    Пример неправильного названия инстанса сервиса в карте — chatgp.onpremise.chat-gp-1.

  5. Создайте сервис для каждого экземпляра инстанса:

    echo "ctlr_add_srv chatgp.mk-cluster-24-3-03. chatgp -1 mk-cluster-24-3-03 main" | nc ctlr.service.onpremise.consul 4020
    

    где:

    • chatgp.mk-cluster-24-3-03. chatgp -1 — алиас.

    • mk-cluster-24-3-03 — имя ноды.

    • main — тип (slave, main, dup, mirror, fallback или none).

Шаг 2. Разверните сервис Chat-gp

Перейдите в конфигурационный файл сервиса Chat-gp /usr/local/etc/k8s/helmwave/projects/chatgp/values/chatgp.yml и заполните поля:

  1. В секции zastava:

    zastava:
      timeout: 6s
      long_tasks_ttl: 1h
    

    где:

    • timeout — таймаут обработчика сообщений сервиса Zastava. Рекомендуется оставить без изменений.

    • long_task_ttl — ограничение времени жизни для асинхронных запросов обработки добавления в чат. Рекомендуется оставить без изменений.

      Примечание

      Значения можно изменить для избежания подвисаний при обработке сообщений из сервиса Zastava и возникновении нежелательных ретраев.

  2. В секции notifier при необходимости включите уведомления пользователей об изменении политики:

    notifier:
      bot:
        enabled: true
        token: "%{facts.metabot_token}"
        bot_api: "https://%{mapping::host::api_external}/bot/v1/"
        timeout: 2s
        retry_count: 3
        retry_pause: 600ms
      text_header: "ℹ️ Настройки Вашего аккаунта были изменены администратором домена:"
      templates:
        add_to_chat: >
          Вы были добавлены в чат [{{escape .ChatName}}]({{.Config.BaseURL}}{{.ChatNick}})
    del_from_chat: >
          Вы были удалены из чата [{{escape .ChatName}}]({{.Config.BaseURL}}{{.ChatNick}})
        base_url: https://%{mapping::host::icq_im}/
    

    где:

    • enabled: true — включает уведомления пользователей.

    • token — укажите токен бота, от которого будут приходить уведомления (см. предусловия).

  3. В секции live_config укажите правильный ключ и адрес etcd-сервера:

    live_config:
      riad:
        version: "/gp/vkt/chatgp/1"
        endpoints:
          - 100.70.80.52:12501
        policies:
        - name: obligatory_chats
          title: The policy of obligatory chats
          payload:
            permissions:
            - name: obligatory_chats
              title: The policy of obligatory chats
              description: The policy of obligatory chats
              type: MultiSelectList
              limit_scope: false
              value_source:
                type: chat
              actions:
              on_add_item:
              on_remove_item:
        connection:
          uri: chatgp
          protocol: ipros
          params: {}
    

    где endpoints — адрес сервиса Riad из шага Настройки в веб-интерфейсе установщика VK WorkSpace

    Внимание

    Конфигурацию политики в секции policies оставьте без изменений.

  4. Перезапустите сервис Chat-gp командой:

    kubectl delete pod -n vkteams -l app=chatgp
    

Шаг 3. Настройте сервис Mchat-st

  1. Перейдите в конфигурационный файл сервиса /usr/local/etc/mchat-st-1.conf и укажите:

    mchat-st.save_chat_creator_sn true
    
  2. Запустите скрипт для выставления creator_sn у старых чатов (без его запуска старые чаты не будут отображаться в панели администратора VK WorkSpace):

    1. Остановите slave-сервис.

    2. Сделайте копию df и xlog.

    3. Запустите slave-сервис.

    4. Переключитесь на master и выставите в real mode:

      echo set creator_sn_inspector_simulate 0 | nc 0.0.0.0 4081
      
    5. Запустите:

      echo creator_sn_inspector_start | nc 0.0.0.0 4081
      
    6. Проверьте, есть ли ошибки в логах. Если есть, то перезапустите.

    7. Чтобы посмотреть процесс скрипта:

      tailf /oap/icq/logs/mchat-st-1.log | grep CreatorSnInspector
      

    По завершении скрипта будет вывод:

    tailf /oap/icq/logs/mchat-st-1.log | grep "CreatorSnInspector: finished"
    

    Данный скрипт запускается один раз при первичной настройке групповой политики.

  3. Перезапустите сервис Mchat-st командой:

    systemctl restart mchat-st-1
    

Шаг 4. Настройте сервис Gbld-mchat

  1. Перейдите в конфигурационный файл сервиса /usr/local/etc/gbld-mchat-1.conf и укажите:

    gbld-mchat.resolve_rid_on_update_push true
    
  2. Перезапустите сервис командой:

    systemctl restart gbld-mchat-1
    

Шаг 5. Настройте сервис Cmini

  1. Перейдите в конфигурационный файл сервиса /usr/local/etc/cmini-1.conf и укажите:

    app.search.filterByDomains true
    
  2. Перезапустите сервис командой:

    systemctl restart cmini-1
    

Шаг 6. Анонсируйте политику обязательных чатов.

  1. Убедитесь, что выполнены предварительные действия для анонсирования политики.
  2. Выполните в консоли команду:

    curl 'https://admin-<company_domain>/api/chats/settings/announcePolicy' \
    -H 'Content-Type: application/json' \
    -H 'Accept: application/json' \
    -b cookieFile.txt \
    -d ''
    

Шаг 7. Включите политику в панели администратора VK WorkSpace

Работа с политикой обязательных чатов и каналов в панели администратора VK WorkSpace описана в документе Групповые политики.

5. Включите политику привилегий

На сервере VK Teams выполните шаги, представленные ниже:

Шаг 1. Активируйте сервис Vipper

Сервис отвечает за реализацию групповой политики привилегий и находится в инсталляции в неактивном состоянии. Сервис надо активировать и развернуть.

Чтобы активировать сервис:

  1. Перейдите в конфигурационный файл /usr/local/etc/k8s/helmwave/projects.yml и удалите из секции disabled сервис Vipper.

  2. Запустите сборку сервиса:

    HELMWAVE_USE_LOCAL_REPO_CACHE=true hwbuild --tags viper
    
  3. Запустите деплой сервиса:

    HELMWAVE_USE_LOCAL_REPO_CACHE=true hwup --tags vipper
    
  4. Создайте карту сервиса:

    gic utils mapfiller --map-name vipper
    

    Пример названия инстанса сервиса в карте: vipper.<имя_ноды>.vipper-1

Шаг 2. Разверните сервис Vipper

Чтобы развернуть сервис:

  1. Перейдите в конфигурационный файл сервиса Vipper /usr/local/etc/k8s/helmwave/projects/vipper/values/vipper.yml и в секции keycloak укажите доступы до сервиса Keycloak:

    keycloak:
      url: "http://keycloak-http.keycloak.svc.cluster.local/"
      realm: "myteam"
    
  2. В секции notifier при необходимости включите уведомления пользователей об изменении политики:

    notifier:
      bot:
        enabled: true
        token: "%{facts.metabot_token}"
        bot_api: "https://%{mapping::host::api_external}/bot/v1/"
        timeout: 2s
        retry_count: 3
        retry_pause: 600ms
    

    где:

    • enabled: true — включает уведомления пользователей.

    • token — укажите токен бота, от которого будут приходить уведомления (см. предусловия).

  3. В секции live_config укажите правильный ключ и адрес etcd-сервера:

    live_config:
      riad:
        version: "gp/vkt/vipper/2"
        endpoints:
          - "100.70.80.52:12501"
        policies:
        - name: "vipspolicy"
          payload:
            permissions:
            - name: "allowDisturb"
              title: "VIP-S"
              description: "Пермишен политики VIP пользователей"
              type: "List"
              list_values: ["Regular", "VIP2", "VIP1"]
              limit_scope: false
              meta:
                Regular:
                  display: "Обычный"
                VIP2:
                  display: "Доверенный"
                VIP1:
                  display: "Привилегированный"
        connection:
          uri: "vipper"
          protocol: "PROTOCOL"
          params: {}
    

    где endpoints — адрес сервиса Riad из шага Настройки в веб-интерфейсе установщика VK WorkSpace.

    Внимание

    Конфигурацию политики в секции policies оставьте без изменений.

  4. Перезапустите сервис Vipper командой:

    kubectl delete pod -n vkteams -l app=vipper
    

Шаг 3. Настройте сервис Gbld-mchat

  1. Перейдите в конфигурационный файл сервиса /usr/local/etc/gbld-st-1.conf и укажите:

    gbld.enable_check_disturb_vip_possibility true
    
  2. Перезапустите сервис командой:

    systemctl restart gbld-mchat-1
    

Шаг 4. Настройте сервис Mchat-st

  1. Перейдите в конфигурационный файл сервиса /usr/local/etc/mchat-st-1.conf и укажите:

    mchat.enable_checking_vip_on_adding true
    
  2. Перезапустите сервис командой:

    systemctl restart mchat-st-1
    

Шаг 5. Настройте сервис Nomail

  1. Перейдите в конфигурационный файл сервиса /usr/local/etc/nomail-1.conf и добавьте в поле nomail.keycloak.additional.extra.fields значение «memberOf»:

    nomail.keycloak.additional.extra.fields Phone,organization,position,memberOf
    
  2. Перезапустите сервис командой:

    systemctl restart nomail-1
    

Шаг 6. Настройте сервис Boss

  1. Перейдите в конфигурационный файл сервиса oap/bos_post.tcl и укажите:

    set WEBRTC_ENABLE_VIP_CHECK 1
    
  2. Перезапустите сервис командой:

    echo restart_job bos_srv |cpsh 4322 (boss)
    

Шаг 7. Анонсируйте политику привилегий

  1. Убедитесь, что выполнены предварительные действия для анонсирования политики.

  2. В консоли выполните команду:

    curl 'https://admin-<domain>/api/settings/vip/announcePolicy' \
    -H 'Content-Type: application/json' \
    -H 'Accept: application/json' \
    -b cookieFile.txt \
    -d ''
    

Шаг 8. Включите политику в панели администратора VK WorkSpace

Работа с политикой привилегий в панели администратора VK WorkSpace описана в документе Групповые политики.

6. Настройте переменные окружения на сервере VK WorkSpace

  1. Подключитесь к серверу VK WorkSpace, на котором установлен контейнер pravdapg1.

  2. Получите имена политик:

    # docker exec -it pravdapg1 psql -Upostgres -d vkwsgp -c 'select * from core_policy;';
    

    Вывод команды будет следующим:

    id |    name          |      title      | description | app_name | service_name | revision
    ---+------------------+-----------------+-------------+----------+--------------+---------
    4  | obligatory_chats | Группы и каналы |             | vkt      | chatgp       |    1
    6  | vipspolicy       | VIP-S policy    |             | vkt      | vipper       |    1
    2  | orderpolicy      | Order Policy    |             | vkt      | pacman       |    3
    (3 rows)
    
  3. Установить переменные окружения с уникальными значениями для политик в формате "app_name:service_name:name" для ролей:

    • bizf

    • biz-celery-worker-pdd

    • biz-celery-worker-pdd-check

    • biz-celery-worker-pdd-high

    • biz-celery-worker-update

    • biz-celery-beat

    • biz-pravda-kafka-consumer

    GP_MINI_APPS_LIST_UNIQUE_NAME: vkt:pacman:orderpolicy
    GP_REQUIRED_CHATS_UNIQUE_NAME: vkt:chatgp:obligatory_chats
    GP_VIP_UNIQUE_NAME: vkt:vipper:vipspolicy 
    

    где:

    • GP_MINI_APPS_LIST_ID — orderpolicy.

    • GP_REQUIRED_CHATS_POLITIC_ID — obligatory_chats.

    • GP_VIP_ID — vipspolicy.

  4. Перейдите в веб-интерфейс установщика VK WorkSpace по адресу http://<company_domain>:8888 и запустите автоустановку нажатием на кнопку в правом верхнем углу.

Как выключить групповые политики

Политика привилегий и политика обязательных чатов и каналов выключаются в панели администратора VK WorkSpace. Подробное описание см. в документе Групповые политики.

Чтобы выключить политику доступности мини-аппов для конкретного домена или всей инсталляции:

  1. Перейдите панель администратора VK WorkSpace https://biz.<company_domain> и отключите групповую политику.
  2. Подключитесь к серверу VK Teams и выключите политику:

    Для всех доменов инсталляции:

    В конфигурационном файле /usr/local/nginx-im/html/myteam/myteam-config.json в секции group-policy-enabled для поля default укажите значение false:

    "group-policy-enabled": {
      "$switch-domain": {
      "default": false,
      "<company_domain>.ru": false
      }
    },
    

    Для определенного домена:

    В конфигурационном файле /usr/local/nginx-im/html/myteam/myteam-config.json в секции group-policy-enabled для поля default укажите значение true, а для домена — false:

    "group-policy-enabled": {
      "$switch-domain": {
      "default": true,
      "<company_domain>.ru": false
      }
    },
    
  3. Перезапустите pod myteam-admin:

    fsq="$(kubectl get pods -A | grep myteam-admin | awk '{print $2}')" && kubectl delete pods $fsq -n vkteams
    

Как обновить политику доступности мини-аппов в VK Teams

Чтобы добавить новый веб-апп или мини-апп в клиентское приложение VK Teams, выполните шаги ниже:

  1. На сервере VK Teams перейдите в конфигурационный файл сервиса Pacman /usr/local/etc/k8s/helmwave/projects/pacman/values/pacman.yml.

  2. В секции riad поднимите версию ключа /gp/vkt/, например: "/gp/vkt/pacman/4" → "/gp/vkt/pacman/5":

    live_config:
      riad:
        version: "/gp/vkt/pacman/5"
    
  3. Если необходимо изменить порядок мини-аппов или настройки по-умолчанию, заполните секцию policies (формат секции описан выше).

  4. Перезапустите сервис Pacman командой:

    systemctl restart pacman-1
    
  5. В конфигурационном файле /usr/local/etc/k8s/helmwave/store/myteam-admin.yml в секциях MiniApps, Management и Settings установите для поля default значение allow:

    myteamAdminPermission:
      resources:
        Analytics:
          default: allow
          groups: []
        Export:
          default: allow
          groups: []
        Settings:
          default: allow
          groups: []
        Information:
          default: allow
          groups: []
        Management:
          default: allow
          groups: []
        MiniApps:
          default: allow
          groups: []
    

    Перезапустите pod myteam-admin:

    fsq="$(kubectl get pods -A | grep myteam-admin | awk '{print $2}')" && kubectl delete pods $fsq -n vkteams
    
  6. Анонсируйте политику:

    В консоли выполните команду:

    curl 'https://admin-<domain>/api/miniapp/announcePolicy' \
    -H 'Content-Type: application/json' \
    -H 'Accept: application/json' \
    -b cookieFile.txt \
    -d ''
    

    Если код ответа не 200 — посмотрите логи сервиса Pacman:

    /var/log/vector/k8s/vkteams/pacman
    

    Если отображается ошибка авторизации — авторизуйтесь под учетной записью администратора и заново анонсируйте политику.

    Если код ответа 200 — перейдите по адресу https://biz.<company_domain>.ru/vkwsgp/api/v1/settings/vkt/pacman/ и проверьте групповую политику в панели администратора VK WorkSpace.

Как добавить новый инстанс сервиса групповой политики VK Teams в карту

Добавление в карту новых инстансов для сервисов Vipper и Pacman происходит автоматически.

Чтобы добавить в карту новый инстанс сервиса Chat-gp:

  1. На сервере VK Teams создайте сервис для каждого экземпляра инстанса:

    echo "ctlr_add_srv chatgp.mk-cluster-24-3-03. chatgp-2 mk-cluster-24-3-03 main" | nc ctlr.service.onpremise.consul 4020
    

    где:

    • chatgp.mk-cluster-24-3-03.chatgp-2 — алиас.

    • mk-cluster-24-3-03 — имя ноды.

    • main — тип (slave, main, dup, mirror, fallback или none).

  2. Перейдите в конфигурационный файл сервиса Chat-gp /usr/local/etc/k8s/helmwave/projects/chatgp/values/chatgp.yml и в секции configs под полем mountPath добавьте новый инстанс:

    volumes:
      configs:
        mountPath: /usr/local/etc/
    chatgp-1: * chatgp
    chatgp-2: * chatgp  #добавьте новый инстанс
    configMaps:
    

    Внимание

    Chat-gp не должен иметь "-" в названии инстанса.
    Пример правильного названия инстанса сервиса в карте — chatgp.<имя_ноды>.chatgp-2.
    Пример неправильного названия инстанса сервиса в карте — chatgp.<имя_ноды>.chat-gp-2.

  3. Запустите сборку сервиса:

    HELMWAVE_USE_LOCAL_REPO_CACHE=true hwbuild --tags chat-gp
    
  4. Запустите деплой сервиса:

    HELMWAVE_USE_LOCAL_REPO_CACHE=true hwup --tags chat-gp