Подготовка окружения EMIP#

Получение скриптов развертывания Ansible#

Скачайте и разархивируйте дистрибутив ./EMIP-scripts-[version]-distrib.zip, содержащий ansible роли (директория Ansible) и Jenkins скрипты развертывания (директория Pipeline).

При установке с использованием Ansible: необходимо поместить содержимое директории Ansible из развернутого архива на сервер, с которого будет производиться установка.

При установке с помощью Jenkins: поместить директории Ansible и Pipeline из развернутого архива в корень Git-репозитория.

Использование утилиты «ansible-vault» для шифрования сенситивной информации#

При хранении сенситивной информации для подключения к кластеру kubernetes, можно использовать утилиту ansible-vault (идет в комплекте с пакетом Ansible).

Для шифрования пароля следует выполнить команду на сервере, с которого производится развертывание EMIS:

ansible-vault encrypt_string -n changeme_var 'ENCRYPT_STRING'

, где:

  • ENCRYPT_STRING — строка, которую необходимо зашифровать;

  • changeme_var — имя переменной.

При запросе ввести пароль для шифрования в ответ приходит то, что требуется занести в inventory.

Пример:

changeme_var: !vault |
  $ANSIBLE_VAULT;1.1;AES256
  62393439373737663862363538613461336364303039643662633533353164306634623639643639
  3631356161353636623161363166386531393763633461620a383133363230666662613362666562
  30353961666530386361333539636466353462303936356536326663386664323030356136326135
  3161346436326533660a363466623433383064363932356663363234363537306532613137353263
  63616462323437366335633036613066376232373465323639393434346662353830

При этом переменные в файле vars.yml необходимо указывать в данном виде:

password: "{{ changeme_var }}"

После выполнения команды содержимое файла будет зашифровано. Расшифровка файлов произойдет при старте Ansible, пароль для расшифровки может быть запрошен у пользователя, может быть взят из какого-либо файла, или же может быть передан из Jenkins job, запускающей Ansible, в зависимости от параметров командной строки Ansible. В случае отсутствия пароля для расшифровки Ansible vault, Ansible завершится с ошибкой.

Получение паролей приложения#

Для шифрования паролей приложения используется сайдкар для подключения к vault: vault-agent-sidecar.

Для получения секретов из vault необходимо выполнить следующее:

  1. Должен быть настроен vault-agent-sidecar, подробнее про настройку vault-agent-sidecar описано в разделе Установка EMIP, подраздел «Настройка интеграции с сервисными системами».

  2. Добавить секрет в vault.

Например:

db_password: securePassword
  1. Добавить в файл vars.yml annotations для vault-agent-sidecar:

3.1. Проверить, что лейбл secman-injector установлен в значение enabled:

labels:
   secman-injector: enabled 

3.2. Проверить, что в annotations sidecar.istio.io/inject установлено значение true (это означает, что vault-agent-sidecar подключен):

annotations:
    sidecar.istio.io/inject: "true"

3.3. Далее добавить следующие параметры:

  • Путь к файлу с секретами в контейнере:

annotations:
    vault.hashicorp.com/secret-volume-path-password.properties: /vault
  • Путь до секретов в vault:

annotations:
     vault.hashicorp.com/agent-inject-secret-password.properties: "A/emip/secret"
  • Шаблон для файла секретов, в нем необходимо указать путь до секретов в vault, а также указать переменную, которая будет использоваться (в данном случае db_password), и указать название секрета в vault:

annotations:
    vault.hashicorp.com/agent-inject-template-password.properties: | 
          {%- raw %}
          {{- with secret "УКАЗАТЬ ПУТЬ ДО СЕКРЕТОВ в vault" -}}
          НАЗВАНИЕ_ПЕРЕМЕННОЙ = {{ .Data.НАЗВАНИЕ СЕКРЕТА В VAULT }}
          {{- end }}
          {%- endraw %}

Пример шаблона с db_password:

annotations:
    vault.hashicorp.com/agent-inject-template-password.properties: | 
          {%- raw %}
          {{- with secret "/awesomeSecretPath/EMIP" -}}
          db_password = {{ .Data.vault_secret_db_password }}
          {{- end }}
          {%- endraw %}

После этого, секрет из vault запишется в переменную db_password и будет храниться в контейнере.

  1. Добавить переменную в параметр, на примере db_password.

В параметр password добавляется переменная ${db_password}, которая будет браться из vault:

app:
  spring:
    datasource:
      url: jdbc:postgresql://postgres:5432/EMIP
      username: user
      password: "${db_password}"

Количество указанных переменных в шаблоне неограниченно.

  {{- with secret "/awesomeSecretPath/EMIP" -}}
       db_password = {{ .Data.vault_secret_db_password }}
       another_pass = {{ .Data.vault_secret_another_pass }}
  {{- end }}
  1. Проверить, что в файле vars.yml установлен параметр для указания пути до файла с секретами в контейнере:

app:
    spring: 
        import: /vault/password.properties

Также проверить, что указаны следующие параметры:

annotations:
  vault.hashicorp.com/agent-run-as-group: '10001'
  vault.hashicorp.com/agent-run-as-same-user: 'false'
  vault.hashicorp.com/agent-run-as-user: '10001'

Получение файла kubeconfig#

Файл kubeconfig — конфигурационный файл в Kubernetes, который выступает как основной инструмент настройки и управления подключением к кластерам.

Файл содержит информацию о:

  • кластерах;

  • пользователях;

  • контекстах;

  • пространствах имен по умолчанию.

Файл kubeconfig можно получить у администратора кластера Kubernetes и добавить его в папку Ansible/inventories (рядом с файлом inventory).

При отсутствии файла kubeconfig — можно создать его при установке микросервисов. Для этого необходимо:

  1. Для каждого микросервиса в файле vars.yml перед блоком app необходимо указать следующие параметры:

api_url: https://api.example.ru:6443 # URL API k8s/openshift
token: __PLACEHOLDER__ # токен пользователя (сервис аккаунта) для установки
namespace: __PLACEHOLDER__ 
  1. После заполнения данных параметров при запуске установки микросервисов на Slave агенте будет создаваться временный файл и с ним подключаться к кластеру.

Общие предусловия установки#

  1. Получены все дистрибутивы компонента, описанные в разделе Состав дистрибутива.

  2. На сервере, с которого будет производиться установка, необходимо проверить наличие пакета Ansible. При отсутствии — установить Ansible.

  3. Установлен Kubernetes (обслуживается средствами сторонних администраторов СПО).

  4. Создан проект в Kubernetes, а также имеется доступ к проекту (логин, пароль пользователя с правами администратора).

  5. Установлены утилиты kubectl и helm (находятся в разделе помощи Command Line Tools в Kubernetes) на host, с которого производится установка.

Настройка inventory#

Заполнение файлов inventory#

  1. Создать новые директории в папке Ansible/inventories Git-репозитория для каждого микросервиса:

  • istio — система сетевых взаимодействий между микросервисами;

  • db-init — скрипты миграции db;

  • event-discovery — микросервис Event Discovery: обработка данных, полученных от микросервиса регистрации транспортных потоков, сохранение данных о физических параметрах подключения, передача данных для формирования заявок;

  • approval-policy — микросервис управления разрешениями (политиками доступа): система для принятия решения по разрешению создания того или иного объекта. Формирует данные доступа на основе данных из СУППД;

  • rlm-deploy — микросервис деплоя: сервис управления установками заявок в сервисе rlm;

  • saga — сага-микросервис: сервис управления транкзакциями установки заявок;

  • schema-registry — микросервис управления схемами: CRUD и поиск по схемам сообщений, получение схем из META, валидация схем;

  • catalog — микросервис каталогов: микросервис со справочной информацией (каналы, системы, создание заявок на установку);

  • autentification — микросервис аутентификации и авторизации: выдача и проверка токена авторизации. Требуется для аутентификации и авторизации пользователей, когда IAM недоступен;

  • frontend — Web-интерфейс: UI-интерфейс через который происходит взаимодействие с пользователем;

  • meta-adapter — Адаптер СУППД/ META: Адаптер СУППД (вычитывает права на каналы из СУППД передает их в сервис управления интеграциями); Адаптер META (вычитывает из META событий системам/каналам; регистрирует системы каналы в Сервисе управления интеграциями);

  • tors — микросервис регистрации транспортных объектов: фронтальная надстройка для Event Discovery, обрабатывает запросы пользователей - сохранение физических параметров подключения, каналов;

  • change-requests — микросервис управления изменениями: создание изменений на ландшафте (публикации, подписки и т.д.); передача изменений на установку;

  • search — микросервис поиска: агрегирует данные из сервиса каталогов и сервиса создания и управления интеграциями для поиска по каналам, схемам, системам, транспорту и созданных интеграций.

  1. Задать название директории и заполнить по примеру директории <наименование микросервиса>-EXAMPLE.

  2. В созданной папке должны находиться следующие элементы:

group_vars/all — директория, в которой лежат файл vars.yml и файл vault.yml;

inventory — файл, где прописываются группы host, на которых будут выполняться плейбуки.

Пример структуры репозитория:

├── ...
├── files
├── inventories
│   ├── <наименование микросервиса>-EXAMPLE
│   │   ├── group_vars
│   │   │   └── all
│   │   │       ├── vars.yml
│   │   │       └── vault.yml
│   │   │
│   │   │
│   │   └── inventory
│   │
│   ├── <наименование микросервиса>-EXAMPLE
│   │   ├── group_vars
│   │   │   └── all
│   │   │       ├── vars.yml
│   │   │       └── vault.yml
│   │   │
│   │   │
│   │   └── inventory
├── roles
│   │   ...
├── ansible.cfg
├──...
  1. Параметр для заполнения файла inventory необходимо использовать из папки <наименование микросервиса>-EXAMPLE.

Параметр:

localhost ansible_connection=local
  1. Перейти к заполнению файла vars.yml для каждого микросервиса в директории group_vars/all. Заполнять по аналогии с файлом vars.yml в папке <наименование микросервиса>-EXAMPLE и подразделами:

  • Пример заполненного файла vars.yml для системы сетевых взаимодействий между микросервисами (istio)

  • Пример заполненного файла vars.yml для микросервиса Event Discovery (event-discovery)

  • Пример заполненного файла vars.yml для микросервиса управления разрешениями (approval-policy)

  • Пример заполненного файла vars.yml для микросервиса деплоя (rlm-deploy)

  • Пример заполненного файла vars.yml для микросервиса сага (saga)

  • Пример заполненного файла vars.yml для микросервиса управления схемами (schema-registry)

  • Пример заполненного файла vars.yml для микросервиса каталогов (catalog)

  • Пример заполненного файла vars.yml для микросервиса аутентификации и авторизации (autentification)

  • Пример заполненного файла vars.yml для микросервиса Web-интерфейса (frontend)

  • Пример заполненного файла vars.yml для микросервиса адаптер СУППД/META (meta-adapter)

  • Пример заполненного файла vars.yml для микросервиса регистрации транспортных объектов (tors)

  • Пример заполненного файла vars.yml для микросервиса управления изменениями (change-requests)

  • Пример заполненного файла vars.yml для микросервиса поиска (search)

При этом необходимо задать пароли в зашифрованном виде, а также учесть все настройки безопасности.

  1. Перейти к заполнению файла vault.yml для каждого микросервиса. При заполнении файла vault.yml необходимо зашифровать указываемые в нем пароли с помощью утилиты ansible-vault. Подробно данная процедура описана в разделе Использование утилиты «ansible-vault» для шифрования паролей.

  2. При наличии файла kubeconfig для подключения к кластеру - необходимо подложить его в корень текущего inventory (например, файл kubeconfig можно скачать через графический интерфейс). Подробнее о получении файла kubeconfig описано в подразделе «Получение файла kubeconfig».

Путь до файла kubeconfig задается в файле vars.yml с помощью переменной kubeconfig_path: "{{ inventory_dir }}/<имя kubeconfig>". Подробнее описано в подразделах по заполнению файлов vars.yml для каждого микросервиса:

  • Пример заполненного файла vars.yml для системы сетевых взаимодействий между микросервисами (istio)

  • Пример заполненного файла vars.yml для микросервиса Event Discovery (event-discovery)

  • Пример заполненного файла vars.yml для микросервиса управления разрешениями (approval-policy)

  • Пример заполненного файла vars.yml для микросервиса деплоя (rlm-deploy)

  • Пример заполненного файла vars.yml для микросервиса сага (saga)

  • Пример заполненного файла vars.yml для микросервиса управления схемами (schema-registry)

  • Пример заполненного файла vars.yml для микросервиса каталогов (catalog)

  • Пример заполненного файла vars.yml для микросервиса аутентификации и авторизации (autentification)

  • Пример заполненного файла vars.yml для микросервиса Web-интерфейса (frontend)

  • Пример заполненного файла vars.yml для микросервиса адаптер СУППД/META (meta-adapter)

  • Пример заполненного файла vars.yml для микросервиса регистрации транспортных объектов (tors)

  • Пример заполненного файла vars.yml для микросервиса управления изменениями (change-requests)

  • Пример заполненного файла vars.yml для микросервиса поиска (search)

Создание Jenkins Job для автоматической установки#

Данный подраздел подготовки окружения относится только к разделу Установка EMIP, подраздел «Автоматическая установка с использованием Jenkins».

Настройка credentials для Ansible-Vault#

  1. Создать файл с паролем, с помощью которого при автоматической установке будут расшифровываться пароли, зашифрованные через ansible-vault в параметрах vars.yml выбранного inventory.

NewFile

  1. Зайти в Jenkins в свой проект, перейти во вкладку Credentials, далее выбрать свой проект:

Jenkins

  1. Откроется страница, где необходимо выбрать «Global credentials (unrestricted)»:

Jenkins

  1. Перейти во вкладку Add Credentials:

Jenkins

  1. После перехода будут доступны поля для заполнения:

  • «Kind» — в выпадающем списке выбрать параметр Secret file;

  • «File» — загрузить созданный файл с паролем;

  • «ID» — указать наименование, которое необходимо придумать самостоятельно (данный ID необходимо будет указать в job monitoring_custom в параметре vault_cred);

  • «Description» — необязательное поле, в котором можно добавить описание.

  1. Нажать кнопку «Create» для создания Credentials для Vault:

Jenkins

Создание Jenkins Job «db-init» для установки#

  1. Содержимое дистрибутива ./EMIP-scripts-{version}-distrib.zip поместить в git-репозиторий.

  2. Выбрать New Item для создания нового Jenkins Job:

NewItem

2.1. Добавить название создаваемого Jenkins Job. Нельзя использовать в названии русские буквы, спецсимволы.

2.2. Выбрать Pipeline и нажать кнопку «ОК»:

NewItem_create

2.3. Заполнить поля на появившейся странице в блоке Pipeline:

  • Изменить значение параметра «Definition» на Pipeline script from SCM;

  • Изменить значение параметра «SCM» на Git;

  • Заполнить параметр «Repository URL» — указать путь до своего Git-репозитория;

  • Заполнить параметр «Credentials» — указать сredentials с правами на чтение;

  • В параметре «Branches to build» выбрать ветку, в которой находятся скрипты;

  • В параметре «Script Path» указать путь до groovy-скрипта Pipeline/db_action.groovy;

  • Убедиться, что НЕ стоит галочка Lightweight checkout.

Пример заполнения параметров:

Pipeline_create

  1. Сохранить созданный Jenkins Pipeline.

  2. На появившейся странице в боковом меню выбрать «Собрать сейчас» — запустится первоначальная сборка:

Now

  1. После запуска сборки необходимо обновить страницу.

  2. Выбрать в боковом меню «Собрать с параметрами»:

Params

  1. Заполнить следующие параметры на появившейся странице:

  • jenkins_slave — имя агента Jenkins для сборки;

  • ansible_version — название Jenkins Tool, отвечающей за используемую версию Ansible.

В случае, если используется обновленная версия скриптов, функциональность пункта 7 может быть выполнена автоматически и пункт 7 может отсутствовать.

  1. Нажать кнопку «Собрать».

  2. Обновить страницу и после окончания работы Jenkins Job снова нажать «Собрать с параметрами».

  3. Появится страница со всем списком настраиваемых параметров, отвечающих за установку:

  • job_config_renew — отвечает за обновление Jenkins Job. При установке приложения должен быть выключен (false). Для обновления текущих параметров и сохранения значений по умолчанию должен быть включен (true);

  • inventory — имя inventory для установки;

  • nexusUrl — ссылка на дистрибутив. Для скачивания дистрибутива используется параметр nexus_user_cred;

  • db_action — выбор действия, которое необходимо выполнить: update;

  • jenkins_slave — выбор Jenkins Slave;

  • jdk_tool — указание Jenkins Tool с нужной версией JDK;

  • ansible_branch — ветка скриптов развертывания;

  • ansible_version — версия ansible, где указывается название Jenkins Tool, отвечающее за используемую версию Ansible;

  • nexus_user_cred — Jenkins username with password credential ID для выкачивания дистрибутива из Nexus. При задании secman_url – полный путь в HashiCorp Vault до имени пользователя и пароля. Например: {Jenkins *Vault App Role credential* ID для получения секретов из HashiCorp Vault}|path/to/nexus:{user},{password}.

  • secman_url — URL для подключения к HashiCorp Vault;

  • ssl_verify — проверяем, являются ли сертификаты HashiCorp Vault/Nexus доверенными;

  • second_hand_approve — подтверждение запуска другим администратором (контроль «второй рукой»). Двухэтапное подтверждение запуска, требующее действия другого администратора для запуска задания Jenkins Job. При активации этой опции одному администратору будет недоступна возможность запуска задания Jenkins Job без подтверждения со стороны другого администратора;

  • inventories_repo — репозиторий с inventory. Данный пункт применим, если inventory были созданы в другом репозитории, отличном от того, где расположены скрипты;

  • inventories_branch — ветка репозитория. Данный пункт применим, если inventory были созданы в другом репозитории, отличном от того, где расположены скрипты;

  • inventories_path — путь до inventories от корня репозитория.

Создание Jenkins Job «deploy»#

Задание Jenkins deploy используется для установки микросервисов.

  1. Выбрать в Jenkins New Item для создания нового Jenkins Job:

NewItem

1.1. Выбрать Pipeline и нажать кнопку ОК:

NewItem_create

1.2. На появившейся странице необходимо заполнить поля в блоке Pipeline поля:

  • Изменить значение параметра «Definition» на Pipeline script from SCM;

  • Изменить значение параметра «SCM» на Git;

  • Заполнить параметр «Repository URL», в параметре указать путь до вашего Git репозитория;

  • Заполнить параметр «Credentials», в параметре указать ваши сredentials с правами на чтение;

  • В параметре «Branches to build» выбрать ветку, в которой находятся скрипты;

  • В параметре «Script Path» указать путь до groovy-скрипта Pipeline/SYN_custom_cloud.groovy;

  • Убедиться, что НЕ стоит галочка Lightweight checkout.

  1. Сохранить получившийся Jenkins Pipeline.

  2. На появившейся странице в меню боковой панели выбрать «Собрать сейчас». Запустится первоначальная сборка:

Now

  1. Необходимо обновить страницу.

  2. Выбрать в меню боковой панели «Собрать с параметрами»:

Params

  1. На появившейся странице необходимо заполнить следующие параметры и нажать кнопку «Собрать»:

  • jenkins_slave — имя агента Jenkins для сборки;

  • ansible_version — название Jenkins Tool, отвечающей за используемую версию Ansible.

  1. Необходимо обновить страницу и после окончания работы Jenkins Job снова нажать «Собрать с параметрами».

  2. Появится страница со всем списком настраиваемых параметров:

  • job_config_renew — отвечает за обновление Jenkins Job. При установке приложения должен быть выключен (false). Для обновления текущих параметров и сохранения значений по умолчанию должен быть включен (true);

  • inventory — имя inventory для установки;

  • playbook — необходимый микросервис для установки:

    • approval-policy.yml — микросервис управления разрешениями (политиками доступа);

    • authentication.yml — микросервис аутентификации и авторизации;

    • catalog.yml — микросервис каталогов;

    • change-requests.yml — микросервис управления изменениями;

    • db.yml — скрипты миграции db;

    • event_discovery.yml — микросервис Event Discovery;

    • frontend.yml — Web-интерфейс;

    • istio.yml — система сетевых взаимодействий между микросервисами;

    • keycloak.yml — микросервис аутентификации и авторизации;

    • meta_adapter.yml — адаптер СУППД/ META;

    • rlm_deploy.yml — микросервис деплоя;

    • saga.yml — сага-микросервис;

    • schema_registry.yml — микросервис управления схемами;

    • search.yml — микросервис поиска;

    • tors.yml — микросервис регистрации транспортных объектов.

  • tags — cписок тегов:

    • не выбраны теги — происходит установка компонента;

    • helm_history — просмотр истории развертывания компонента;

    • helm_rollback — откат компонента на REVISION, выбранную в параметре helm_rollback_revision;

    • restart — перезапуск компонента;

    • uninstall — удаление компонента.

  • nexusHelmUrl – ссылка на дистрибутив EMIP-cfg-[version]-distrib.zip установки компонента в Kubernetes. Для скачивания дистрибутива используется параметр nexus_user_cred;

  • helm_rollback_revision — выбор номера REVISION при выборе тега helm_rollback;

  • kubectlCliVersion — параметр, отвечающий за jenkins tool для kubectl;

  • helmCliVersion — указание Jenkins Tool с необходимой версией Helm;

  • emailTo — список адресов электронной почты для отправки результатов (письмо исполнителю отправится автоматически);

  • install_all_hosts — отвечает за выполнение playbook на всех серверах из выбранного inventory;

  • only_on_host – отвечает за выполнение playbooks на выбранных серверах;

  • custom_vault_password — проверка, нужен ли ручной ввод пароля для Ansible Vault;

  • jenkins_slave — выбор Jenkins Slave;

  • jdk_tool — указание Jenkins Tool с нужной версией JDK;

  • ansible_branch — ветка скриптов развертывания;

  • ansible_version — версия ansible, где указывается название Jenkins Tool, отвечающее за используемую версию Ansible;

  • secman_url — URL для подключения к HashiCorp Vault;

  • nexus_user_cred — Jenkins username with password credential ID для выкачивания дистрибутива из Nexus. При задании secman_url – полный путь в HashiCorp Vault до имени пользователя и пароля. Например: {Jenkins *Vault App Role credential* ID для получения секретов из HashiCorp Vault}|path/to/nexus:{user},{password};

  • vault_cred — Jenkins secret file credential ID со строкой для расшифровки паролей (ansible vault) (можно несколько через запятую). При задании secman_url — полный путь в HashiCorp Vault до пароля. Например: {Jenkins *Vault App Role credential* ID_1}|/path/to/vault:{password_1}, {Jenkins *Vault App Role credential* ID_2}|/path/to/vault:{password_2} В качестве пароля можно использовать не строку, а файл в base64 формате с ключом секрета, заканчивающимся на Base64. Например, myVaultBase64;

  • server_ssh_cred — Jenkins ssh key Credential ID для подключения к серверам, на которые устанавливается компонент. При задании параметра secman_url — указать полный путь в Hashicorp Vault до секрета. Например: {Jenkins *Vault App Role credential* ID для получения секретов из Hashicorp Vault}|/.../KV/ssh:{user},{key},{passphrase} В качестве ключа можно использовать не строку, а файл в base64 формате с ключом секрета, заканчивающимся на Base64. Например, myPrivateKeyBase64;

  • ssl_verify — проверка, являются ли сертификаты HashiCorp Vault/Nexus доверенными;

  • ssl_verify_kupol — проверяем, являются ли сертификаты АС Купол доверенными;

  • second_hand_approve — подтверждение запуска другим администратором (контроль «второй рукой»). Двухэтапное подтверждение запуска, требующее действия другого администратора для запуска задания Jenkins Job. При активации этой опции одному администратору будет недоступна возможность запуска задания Jenkins Job без подтверждения со стороны другого администратора;

  • inventories_repo — репозиторий с inventory. Данный пункт применим, если inventory были созданы в другом репозитории, отличном от того, где расположены скрипты;

  • inventories_branch — ветка репозитория. Данный пункт применим, если inventory были созданы в другом репозитории, отличном от того, где расположены скрипты;

  • inventories_path — путь до inventories от корня репозитория. В этом каталоге может быть несколько вложенных каталогов, они отобразятся в выпадающем списке/параметре inventory в jenkins job. Каждый вложенный каталог содержит отдельный inventory.

Процесс установки описан в разделе Установка EMIP, подраздел «Автоматическая установка с использованием Jenkins».

Создание универсального Jenkins Job «SynapseInstaller»#

Для установки компонента EMIP можно воспользоваться универсальным Jenkins Job «SynapseInstaller». Jenkins Job, в котором происходит установка конфигураций из дистрибутива в проект системы оркестрации приложений.

Создание универсального Jenkins Job «SynapseInstaller» описано подробно в документации компонента «DevOps инструменты Service Mesh» (SMDL) продукта Platform V Synapse Service Mesh (SSM) в документе «Руководство по установке», раздел «Установка».

Об особенностях работы с Jenkins Job «SynapseInstaller», функциях и параметрах запуска для установки подробно описано в документации компонента «DevOps инструменты Service Mesh» (SMDL) продукта Platform V Synapse Service Mesh (SSM) в документе «Руководство оператора» раздел «SynapseInstaller».

Порядок установки компонента EMIP с помощью Jenkins Job «SynapseInstaller» описан в разделе Установка EMIP, подраздел «Установка с использованием Jenkins Job «SynapseInstaller».

Создание Jenkins Job «Keycloak_install» для установки Keycloak#

  1. Содержимое дистрибутива ./EMIP-scripts-{version}-distrib.zip поместить в git-репозиторий.

  2. Выбрать New Item для создания нового Jenkins Job:

NewItem

2.1. Добавить название создаваемого Jenkins Job. Нельзя использовать в названии русские буквы, спецсимволы.

2.2. Выбрать Pipeline и нажать кнопку «ОК»:

NewItem_create

2.3. Заполнить поля на появившейся странице в блоке Pipeline:

  • Изменить значение параметра «Definition» на Pipeline script from SCM;

  • Изменить значение параметра «SCM» на Git;

  • Заполнить параметр «Repository URL» — указать путь до своего Git-репозитория;

  • Заполнить параметр «Credentials» — указать сredentials с правами на чтение;

  • В параметре «Branches to build» выбрать ветку, в которой находятся скрипты;

  • В параметре «Script Path» указать путь до groovy-скрипта Pipeline/keycloak.groovy;

  • Убедиться, что НЕ стоит галочка Lightweight checkout.

Пример заполнения параметров:

Pipeline_create

  1. Сохранить созданный Jenkins Pipeline.

  2. На появившейся странице в боковом меню выбрать «Собрать сейчас» — запустится первоначальная сборка:

Now

  1. После запуска сборки необходимо обновить страницу.

  2. Выбрать в боковом меню «Собрать с параметрами»:

Params

  1. Заполнить следующие параметры на появившейся странице:

  • jenkins_slave — имя агента Jenkins для сборки;

  • ansible_version — название Jenkins Tool, отвечающей за используемую версию Ansible.

В случае, если используется обновленная версия скриптов, функциональность пункта 7 может быть выполнена автоматически и пункт 7 может отсутствовать.

  1. Нажать кнопку «Собрать».

  2. Обновить страницу и после окончания работы Jenkins Job снова нажать «Собрать с параметрами».

  3. Появится страница со всем списком настраиваемых параметров, отвечающих за установку:

  • job_config_renew — отвечает за обновление Jenkins Job. При установке приложения должен быть выключен (false). Для обновления текущих параметров и сохранения значений по умолчанию должен быть включен (true);

  • inventory — имя inventory для установки;

  • jenkins_slave — выбор Jenkins Slave;

  • emailto - Отправка уведомлений о статусе установки

  • playbook - Сценарий развертывания, используется только keycloak.yml

  • tags - Теги выполнения сценария

  • ansible_branch — ветка скриптов развертывания;

  • install_all_hosts - Параметр для установки keycloak на все сервера, указанные в инвентори

  • only_on_host - Параметр для установки keycloak на конкретные сервера, указанные в инвентори

  • ansible_version — версия ansible, где указывается название Jenkins Tool, отвечающее за используемую версию Ansible;

  • nexus_user_cred — Jenkins username with password credential ID для выкачивания дистрибутива из Nexus.

  • vault_cred - Параметр для расшифровки Ansible-vault При задании secman_url – полный путь в HashiCorp Vault до имени пользователя и пароля. Например: {Jenkins *Vault App Role credential* ID для получения секретов из HashiCorp Vault}|path/to/nexus:{user},{password}.

  • secman_url — URL для подключения к HashiCorp Vault;

  • ssl_verify — проверяем, являются ли сертификаты HashiCorp Vault/Nexus доверенными;

  • second_hand_approve — подтверждение запуска другим администратором (контроль «второй рукой»). Двухэтапное подтверждение запуска, требующее действия другого администратора для запуска задания Jenkins Job. При активации этой опции одному администратору будет недоступна возможность запуска задания Jenkins Job без подтверждения со стороны другого администратора;

  • inventories_repo — репозиторий с inventory. Данный пункт применим, если inventory были созданы в другом репозитории, отличном от того, где расположены скрипты;

  • inventories_branch — ветка репозитория. Данный пункт применим, если inventory были созданы в другом репозитории, отличном от того, где расположены скрипты;

  • inventories_path — путь до inventories от корня репозитория.

Пример заполненного файла vars.yml для системы сетевых взаимодействий между микросервисами (istio)#

Базовый файл#

Базовый файл — это файл Ansible/inventories/[название микросервиса]/group_vars/all/vars.yml, содержащий минимум настроек для корректной установки приложения.

Пример заполненного базового файла vars.yml:

ansible_no_log: false
kubeconfig_path: "{{ inventory_dir }}/my-kube-config"
namespace: my-namespace

app:
  release_name: emis

istio: # настройки манифестов Istio
  openshiftInstall: false
  pullImage: "tuz-sbt-ci-synse"
  ingress:
    mode: path
    endpoints:
      app_services:
        - event-discovery-svc
        - schema-registry-svc
        - rlm-deploy-svc
        - saga-svc
        - meta-adapter-svc
        - approval-policy-svc
        - tors-svc
      annotations:
        kubernetes.io/ingress.class: nginx
        nginx.ingress.kubernetes.io/enable-cors: "true"
        nginx.ingress.kubernetes.io/rewrite-target: /$2
        nginx.ingress.kubernetes.io/use-regex: 'true'
        # ingress.kubernetes.io/rewrite-target: '/' # не включает endpoint в запрос (/server/endpoint -> /endpoint)
      hostname: 'my.dropapp.hostname' # суффикс ингресса - зависит от кластера (пример: apps.dap.devpub-01.solution.sbt)
    gateway:
      name: ingressgateway-emis
      create: true
      selector:
        app: ingressgateway-emis
        istio: ingressgateway-emis
    service:
      create: true
      name: ingressgateway-emis-svc
      selector:
        app: ingressgateway-emis
        istio: ingressgateway-emis
    virtualService:
      create: true
      name: emis-ingress-vs
    deployment: # для создания граничного прокси (гейтвей как пода, а не kind: Gateway)
      create: true
      name: ingressgateway-emis
      resources:
        limits:
          cpu: 100m
          memory: 128M
        requests:
          cpu: 100m
          memory: 64M
      readinessProbe:
        initialDelaySeconds: 1
        timeoutSeconds: 1
        periodSeconds: 2
        successThreshold: 1
        failureThreshold: 30
      annotations:
        vault.hashicorp.com/tls-skip-verify: "true"
        vault.hashicorp.com/agent-inject-secret-ca.pem: 'true'
        vault.hashicorp.com/agent-run-as-same-user: "true"
        vault.hashicorp.com/agent-set-security-context: 'true'
        vault.hashicorp.com/secret-volume-path-ca.pem: /vault/ingress
        vault.hashicorp.com/namespace: ''
        vault.hashicorp.com/role: default
        vault.hashicorp.com/secret-volume-path-key.pem: /vault/ingress
        vault.hashicorp.com/agent-inject: 'true'
        vault.hashicorp.com/agent-inject-secret-key.pem: 'true'
        vault.hashicorp.com/agent-init-first: 'true'
        vault.hashicorp.com/agent-limits-cpu: 100m
        vault.hashicorp.com/agent-requests-cpu: 100m
        vault.hashicorp.com/secret-volume-path-crt.pem: /vault/ingress
        vault.hashicorp.com/agent-inject-secret-crt.pem: 'true'
        vault.hashicorp.com/agent-inject-template-key.pem: |
          {%- raw %}
          {{- with secret "kv1/emis_certs" -}}
          {{ index .Data "key" }}
          {{- end }}
          {%- endraw %}
        vault.hashicorp.com/agent-inject-template-ca.pem: |
          {%- raw %}
          {{- with secret "kv1/emis_certs" -}}
          {{ index .Data "ca" }}
          {{- end }}
          {%- endraw %}
        vault.hashicorp.com/agent-inject-template-crt.pem: |
          {%- raw %}
          {{- with secret "kv1/emis_certs" -}}
          {{ index .Data "crt" }}
          {{- end }}
          {%- endraw %}
      labels:
        secman-injector: enabled # Лейбл для активации интеграции с secman vault agent injector
      istioDiscoveryService: istiod-istio-system
      istioControlPlane: istio-system
      proxyImage: __PLACEHOLDER__
  peerAuthentication:
    create: true
    name: emis-pa
    mtls_mode: STRICT # UNSET | DISABLE | PERMISSIVE | STRICT (default)
  egress:
    deployment: # для создания граничного прокси (гейтвей как пода, а не kind: Gateway)
      create: true
      name: egressgateway-emis
      resources:
        limits:
          cpu: 100m
          memory: 128M
        requests:
          cpu: 100m
          memory: 64M
      readinessProbe:
        initialDelaySeconds: 1
        timeoutSeconds: 1
        periodSeconds: 2
        successThreshold: 1
        failureThreshold: 30
      annotations:
        vault.hashicorp.com/tls-skip-verify: "true"
        vault.hashicorp.com/agent-inject-template-crt.pem: |
          {%- raw %}
          {{- with secret "kv1/emis_certs" -}}
          {{ index .Data "crt" }}
          {{- end }}
          {%- endraw %}
        vault.hashicorp.com/agent-inject-template-kafka-crt.pem: |
          {%- raw %}
          {{- with secret "kv1/emis_certs" -}}
          {{ index .Data "crt" }}
          {{- end }}
          {%- endraw %}
        vault.hashicorp.com/agent-inject-secret-ca.pem: 'true'
        vault.hashicorp.com/agent-run-as-same-user: "true"
        vault.hashicorp.com/secret-volume-path-ca.pem: /vault
        vault.hashicorp.com/agent-set-security-context: 'true'
        vault.hashicorp.com/agent-inject-secret-kafka-ca.pem: 'true'
        vault.hashicorp.com/secret-volume-path-kafka-ca.pem: /vault
        vault.hashicorp.com/namespace: ''
        vault.hashicorp.com/role: default
        vault.hashicorp.com/agent-inject-secret-crt.pem: 'true'
        vault.hashicorp.com/secret-volume-path-key.pem: /vault
        vault.hashicorp.com/agent-inject-secret-kafka-crt.pem: 'true'
        vault.hashicorp.com/secret-volume-path-kafka-key.pem: /vault
        vault.hashicorp.com/agent-inject: 'true'
        vault.hashicorp.com/secret-volume-path-crt.pem: /vault
        vault.hashicorp.com/agent-inject-secret-key.pem: 'true'
        vault.hashicorp.com/secret-volume-path-kafka-crt.pem: /vault
        vault.hashicorp.com/agent-inject-secret-kafka-key.pem: 'true'
        vault.hashicorp.com/agent-init-first: 'true'
        vault.hashicorp.com/agent-limits-cpu: 200m
        vault.hashicorp.com/agent-requests-cpu: 200m
        vault.hashicorp.com/agent-inject-template-key.pem: |
          {%- raw %}
          {{- with secret "kv1/emis_certs" -}}
          {{ index .Data "key" }}
          {{- end }}
          {%- endraw %}
        vault.hashicorp.com/agent-inject-template-kafka-key.pem: |
          {%- raw %}
          {{- with secret "kv1/emis_certs" -}}
          {{ index .Data "key" }}
          {{- end }}
          {%- endraw %}
        vault.hashicorp.com/agent-inject-template-ca.pem: |
          {%- raw %}
          {{- with secret "kv1/emis_certs" -}}
          {{ index .Data "ca" }}
          {{- end }}
          {%- endraw %}
        vault.hashicorp.com/agent-inject-template-kafka-ca.pem: |
          {%- raw %}
          {{- with secret "kv1/emis_certs" -}}
          {{ index .Data "ca" }}
          {{- end }}
          {%- endraw %}
      labels:
        secman-injector: enabled # Лейбл для активации интеграции с secman vault agent injector
      istioDiscoveryService: istiod-istio-system
      istioControlPlane: istio-system
      proxyImage: __PLACEHOLDER__
    service: # параметры сервиса Egress
      name: "emis-egressgateway-svc" # имя сервиса Egress
      create: true # создавать ли манифест сервиса
      internalPort: 15021 # внутренний порт Egress
      internalPortName: status-port # имя внутреннего порта Egress
      internalPortProtocol: TCP # протокол внутреннего порта Egress
      selector: # содержимое поля spec.selector в манифесте сервиса
        app: egressgateway-emis
        istio: egressgateway-emis
    gateway: # параметры манифеста Gateway для Istio Egress
      name: egressgateway-emis # имя манифеста
      create: true # создавать ли манифест
      selector: # содержимое поля spec.selector в манифесте
        app: egressgateway-emis
        istio: egressgateway-emis
      destinationRule:
        name: emis-egressgateway-dr
        create: true
    destinationRule:
      #     name: egressgateway0-dr
      create: true
    #      outlierDetection:
    #        consecutive5xxErrors: 5
    #        interval: 5m
    #        baseEjectionTime: 5m
    #        maxEjectionPercent: 50
    # # При создании istio манифестов для проксирования трафика kafka из прикладного приложения к bootstrap серверу нужно обращаться на хост следующего формата:
    # # {название_сервиса_egressgateway}.{имя_неймспейса}.svc.cluster.local:{gwPort_для_Kafka_указываемый_ниже}
    kafka: # параметры для направления kafka трафика через istio egressgateway. Можно указать список bootstrap серверов Kafka
      - name: kafka-16
        hosts: my.kafka.bootstrap:9093 # хост и порт bootstrap серверов Kafka. Если кластер, можно указать несколько. Разделитель ","
        gwPort: 10092 # порт сервиса egressgateway по которому будет доступна кафка изнутри неймспейса
        gwTls:
          mode: ISTIO_MUTUAL # Валидные значения: "PASSTHROUGH", "SIMPLE", "MUTUAL", "AUTO_PASSTHROUGH", "ISTIO_MUTUAL", "OPTIONAL_MUTUAL"
        destinationRule: # параметры для манифеста DestinationRule Istio для Kafka
          create: true # создавать ли манифест
          gatewaySelector: egressgateway-emis
          # outlierDetection:
          #   consecutive5xxErrors: 5
          #   interval: 5m
          #   baseEjectionTime: 5m
          #   maxEjectionPercent: 50
          tls:
            mode: MUTUAL
            caCertificates: /vault/kafka-ca.pem
            clientCertificate: /vault/kafka-crt.pem
            privateKey: /vault/kafka-key.pem
        virtualService: # параметры для манифеста VirtualService для Kafka
          create: true # создавать ли манифест
        serviceEntry: # параметры для манифеста serviceEntry для Kafka
          create: true # создавать ли манифест
    external_services: # настройки манифестов Istio для работы с внешней системой
      - name: postgres
        host: "my.postgres.server" # хост сервиса external_services; указывать валидный SAN из сертификата
        port: 5432 # порт сервиса external_services для обращения из pod'а
        externalPort: 5432 # порт сервиса external_services
        # Порты и протоколы ниже используются в манифестах VirtualService, Gateway, Gateway Service
        # Поддерживаемые gwSvc протоколы - "SCTP", "TCP", "UDP"
        gwPort: 9445 # порт на egressGateway
        gwProtocol: TLS # протокол на egressGateway
        gwSvcProtocol: TCP # протокол на service egressGateway
        gwTls:
          mode: ISTIO_MUTUAL # Валидные значения: "PASSTHROUGH", "SIMPLE", "MUTUAL", "AUTO_PASSTHROUGH", "ISTIO_MUTUAL", "OPTIONAL_MUTUAL"
        destinationRule:
          create: true # создавать ли манифест
          tls:
            mode: MUTUAL # DISABLE | SIMPLE | MUTUAL (own certs) | ISTIO_MUTUAL (control plane certs)
            caCertificates: /vault/ca.pem
            clientCertificate: /vault/crt.pem
            privateKey: /vault/key.pem
          # outlierDetection:
          #   consecutive5xxErrors: 5
          #   interval: 5m
          #   baseEjectionTime: 5m
          #   maxEjectionPercent: 50
        virtualService: # параметры для манифеста VirtualService
          create: true # создавать ли манифест VirtualService
          protocol: tcp #tls
      - name: secman
        host: "secman-dzo.solution.sbt" # хост сервиса HashiCorp Vault
        port: 8443 # порт сервиса HashiCorp Vault для обращения из pod'а
        externalPort: 8443 # порт сервиса HashiCorp Vault
        # Порты и протоколы ниже используются в манифестах VirtualService, Gateway, Gateway Service
        # Поддерживаемые gwSvc протоколы - "SCTP", "TCP", "UDP"
        gwPort: 9444 # порт на egressGateway
        gwProtocol: TLS # протокол на egressGateway
        gwSvcProtocol: TCP # протокол на service egressGateway
        gwTls:
          mode: PASSTHROUGH
        destinationRule: # параметры для манифеста DestinationRule Istio
          name: emis-vault-dr # имя манифеста
          create: false # создавать ли манифест
          tls:
            caCertificates: /vault/ca.pem
            clientCertificate: /vault/crt.pem
            mode: MUTUAL
            privateKey: /vault/key.pem
            sni: secman-dzo.solution.sbt
          # outlierDetection:
          #   consecutive5xxErrors: 5
          #   interval: 5m
          #   baseEjectionTime: 5m
          #   maxEjectionPercent: 50
        virtualService: # параметры для манифеста VirtualService
          create: true # создавать ли манифест VirtualService
          protocol: tls
      - name: rlm
        host: "my.rlm.server" # хост сервиса HashiCorp Vault
        port: 6969 # порт сервиса HashiCorp Vault для обращения из pod'а
        externalPort: 6969 # порт сервиса HashiCorp Vault
        # Порты и протоколы ниже используются в манифестах VirtualService, Gateway, Gateway Service
        # Поддерживаемые gwSvc протоколы - "SCTP", "TCP", "UDP"
        gwPort: 9446 # порт на egressGateway
        gwProtocol: TLS # протокол на egressGateway
        gwSvcProtocol: TCP # протокол на service egressGateway
        gwTls:
          mode: ISTIO_MUTUAL
        destinationRule: # параметры для манифеста DestinationRule Istio
          name: emis-rlm-dr # имя манифеста
          create: true # создавать ли манифест
          tls:
            # caCertificates: /vault/ca.pem
            # clientCertificate: /vault/crt.pem
            mode: DISABLE
            # privateKey: /vault/key.pem
            # sni: secman-dzo.solution.sbt
          # outlierDetection:
          #   consecutive5xxErrors: 5
          #   interval: 5m
          #   baseEjectionTime: 5m
          #   maxEjectionPercent: 50
        virtualService: # параметры для манифеста VirtualService
          create: true # создавать ли манифест VirtualService
          protocol: http
  serviceEntry:
    - host: "secman-dzo.solution.sbt"
      ports:
        - name: http-vault-shared
          number: 8443
          protocol: https
    - host: my.postgres.server
      ports:
        - name: postgres
          number: 6432
          protocol: postgres
    - host: my.rlm.server
      ports:
        - name: rlm
          number: 6969
          protocol: https
      # annotations: # расскомментировать если нужно чтобы serviceEntry осталась после helm uninstall
      #   "helm.sh/resource-policy": keep
#    - host: my_hostname
#      port:
#        name: tcp-kafka
#        number: 9092
#        protocol: TCP
#      annotations: # расскомментировать если нужно чтобы serviceEntry осталась после helm uninstall
#        "helm.sh/resource-policy": keep

Расширенный файл настроек#

Расширенный файл — файл Ansible/roles/[название микросервиса]/defaults/main.yml. Представляет из себя пример всех изменяемых настроек со значениями «по умолчанию». Любую из указанных настроек можно перенести в свой vars.yml для переопределения ее значения.

Пример заполненного блок настроек «liquibase» в файле vars.yml для микросервисов#

Для установки скриптов миграции с помощью Jenkins Job «db-init» - необходимо для каждого микросервиса заполнить блок настроек liquibase.

Примеры блока настроек liquibase для каждого микросервиса расположены в скриптах по пути: Ansible/roles/<название микросервиса>/defaults/main.yml.

В файле vars.yml после блока cloud необходимо заполнить блок liquibase, указав сертификаты если БД ssl, а также указать схему БД, если отличается от указанной.

Пример блока liquibase:

liquibase:
  changeLogFile: changelog-master.xml
  schemas: my_schema
  defaultSchemaName: my_schema
  databaseChangeLogTableName: my_schema_databasechangelog
  databaseChangeLogLockTableName: my_schema_databasechangeloglock
  logLevel: debug
  ssl:
    # Possible values include disable, allow, prefer, require, verify-ca and verify-full.
    # Require , allow and prefer all default to a non-validating SSL factory and do not check the validity of the certificate or the host name.
    # Verify-ca validates the certificate, but does not verify the hostname.
    # Verify-full will validate that the certificate is correct and verify the host connected to has the same hostname as the certificate
    mode: require
    # Items below should be in inventory_dir/dbinit/ssl
    sslcert: pg_client.crt # Provide the full path for the certificate file. It can be a PEM encoded X509v3 certificate. This parameter is ignored when using PKCS-12 keys, since in that case the certificate is also retrieved from the same keyfile.
    sslkey: pg_client.key.der # Provide the full path for the key file. The key file must be in PKCS-12 or in PKCS-8 DER format.
    sslrootcert: pg_client.ca # File name of the SSL root certificate. It can be a PEM encoded X509v3 certificate.

Пример заполненного файла vars.yml для микросервиса Event Discovery (event-discovery)#

Базовый файл#

Базовый файл — это файл Ansible/inventories/[название микросервиса]/group_vars/all/vars.yml, содержащий минимум настроек для корректной установки приложения.

Пример заполненного базового файла vars.yml:

#kubeconfig_path: {{ inventory_dir }}/.kubeconfig # путь до файла kubeconfig (может быть зашифрован через ansible-vault)
#api_url: https://api.example.ru:6443 # URL API k8s/openshift (не требуется при наличии kubeconfig_path)
#token: __PLACEHOLDER__ # токен пользователя (сервис аккаунта) для установки (не требуется при наличии kubeconfig_path)
#skip_tls_verify: false # игнорировать проверку доверия для URL API (не требуется при наличии kubeconfig_path)
namespace: my-namespace # наименование проекта в k8s/openshift

app: # Блок настройки приложения
  spring: # Настройка Spring
    datasource: # Настройка подключения к БД
      url: jdbc:postgresql://my.postgres.server:5432/my_db # Адрес для подключения к БД
      username: _PLACEHOLDER_ # Имя пользователя для подключения к БД
      password: _PLACEHOLDER_ # Пароль для подключения к БД
      hikari:
        schema: event_discovery # Схема БД

    kafka: # Настройка подключения к kafka
      producer: # Настройка producer'а
        bootstrap-servers: "bootstrap-server:port" # Адрес брокера kafka
    security:
      oauth2:
        resourceserver:
          jwt:
            issuer-uri: keyclock_url # адрес сервиса keyclock
            principal-claim-name: preferred_username
  ed:
    kafka:
      segment-topic: "segment-topic" # topic для отправки сегментов
      cluster-topic: "cluster-topic" # topic для отправки кластеров
      channel-topic: "channel-topic" # topic для отправки каналов

  application:
    security:
      oauth2:
        resourceserver:
          authorizer:
            hosts: authentication_service # адрес сервиса для авторизации

cloud:
  release_name: event-discovery
  registry: example.registry.addr # адрес репозитория с образом
  registry_path: example_repo/example_path # путь в репозитории до образа
  pullImage: example-secret # наименование секрета для доступа в реджистри (скачивание образа)
  serviceAccountName: default

  annotations: # Аннотации для деплоймента
    sidecar.istio.io/inject: "true" # Включение istio-сайдкара в контейнер
    sidecar.istio.io/rewriteAppHTTPProbers: "false" # Отключение перезаписи HTTP-проб приложения

  labels: {} # Лейблы для деплоймента
  # secman-injector: "enabled" # Лейбл для активации интеграции с secman vault agent injector
  # resources:   ## Ресурсы пода
  #    limits:
  #      cpu: 2
  #      memory: 600M
  #   requests:
  #      cpu: 1
  #      memory: 400M
  waitIstio: true # Ожидание запуска sidecar istio

Расширенный файл настроек#

Расширенный файл — файл Ansible/roles/[название микросервиса]/defaults/main.yml. Представляет из себя пример всех изменяемых настроек со значениями «по умолчанию». Любую из указанных настроек можно перенести в свой vars.yml для переопределения ее значения.

Пример заполненного файла vars.yml для микросервиса управления разрешениями (approval-policy)#

Базовый файл#

Базовый файл — это файл Ansible/inventories/[название микросервиса]/group_vars/all/vars.yml, содержащий минимум настроек для корректной установки приложения.

Пример заполненного базового файла vars.yml:

#helm_cli: helm # путь до утилиты helm (генерируется автоматически из Jenkins)
#kubectl_cli: helm # путь до утилиты kubectl (генерируется автоматически из Jenkins)
#kubeconfig_path: {{ inventory_dir }}/.kubeconfig # путь до файла kubeconfig (может быть зашифрован через ansible-vault)
#api_url: https://api.example.ru:6443 # URL API k8s/openshift (не требуется при наличии kubeconfig_path)
#token: __PLACEHOLDER__ # токен пользователя (сервис аккаунта) для установки (не требуется при наличии kubeconfig_path)
#skip_tls_verify: false # игнорировать проверку доверия для URL API (не требуется при наличии kubeconfig_path)
namespace: my-namespace # наименование проекта в k8s/openshift

app: # Блок настройки приложения
  spring: # Настройка Spring
    datasource: # Настройка подключения к БД
      url: jdbc:postgresql://my.postgres.server:5432/my_db # Адрес для подключения к БД
      username: _PLACEHOLDER_ # Имя пользователя для подключения к БД
      password: _PLACEHOLDER_ # Пароль для подключения к БД
      hikari:
        schema: approval_policies # Схема БД

    security:
      oauth2:
        resourceserver:
          jwt:
            issuer-uri: http://keyclock_url/realms/aiem # адрес keyclock

  application:
    kafka:
      bootstrap-servers: kafka_url:9093 # адрес kafka
      topic: # Настройка топиков
        emip-change-request-to-approve:
          consumer: # Настройка подписки на топик
            name: emip-change-request-to-approve # Наименование топика
            group-id: emip-change-request-to-approve # Имя группы подписки
          enabled: true # Включение подписки
        emip-change-request-cancelled:
          consumer:
            name: emip-change-request-cancelled
            group-id: emip-change-request-cancelled
          enabled: true
        emip-change-request-resolution:
          producer:
            name: emip-change-request-resolution
          enabled: true
    security: # Блок настройки подключения к сервису авторизации
      oauth2:
        resourceserver:
          authorizer:
            hosts: authentication-svc # Имя сервиса авторизации

cloud: # Блок настроек deployment
  release_name: approval-policy # Наименование деплоймента
  registry: example.registry.addr # адрес репозитория с образом
  registry_path: example_repo/example_path # путь в репозитории до образа
  pullImage: example-secret # наименование секрета для доступа в реджистри (скачивание образа)
  serviceAccountName: default
  ## Конфигурация окружения
  environment:
    LANG: ru_RU.UTF-8 # Язык для локализации сообщений программы
    LC_ALL: ru_RU.UTF-8 # Устанавливает язык и локализацию для всех категорий
    LANGUAGE: en_US:en:ru_RU.UTF-8:ru_RU:ru # Язык для интерфейса пользователя и сообщений об ошибках
  annotations: # Аннотации для деплоймента
    sidecar.istio.io/inject: "true" # Включение istio-сайдкара в контейнер
    sidecar.istio.io/rewriteAppHTTPProbers: "false" # Отключение перезаписи HTTP-проб приложения
  waitIstio: true # Ожидание запуска sidecar istio

Расширенный файл настроек#

Расширенный файл — файл Ansible/roles/[название микросервиса]/defaults/main.yml. Представляет из себя пример всех изменяемых настроек со значениями «по умолчанию». Любую из указанных настроек можно перенести в свой vars.yml для переопределения ее значения.

Пример заполненного файла vars.yml для микросервиса деплоя (rlm-deploy)#

Базовый файл#

Базовый файл — это файл Ansible/inventories/[название микросервиса]/group_vars/all/vars.yml, содержащий минимум настроек для корректной установки приложения.

Пример заполненного базового файла vars.yml:

kubeconfig_path: "{{ inventory_dir }}/my-kube-config"
#api_url: https://api.example.ru:6443 # URL API k8s/openshift (не требуется при наличии kubeconfig_path)
#token: __PLACEHOLDER__ # токен пользователя (сервис аккаунта) для установки (не требуется при наличии kubeconfig_path)
#skip_tls_verify: false # игнорировать проверку доверия для URL API (не требуется при наличии kubeconfig_path)
namespace: my-namespace # наименование проекта в k8s/openshift

app:
  deploy:
    rlm-url: rlm.example.ru # URL RLM
    service-token: __PLACEHOLDER__ # токен сервиса
    table-id: __PLACEHOLDER__ # ID таблицы
    jobs: # настройки джобов
      add-acls: # джоб добавления ACL
        action: aktag_add_acls # параметр action джобы
        service: ak_add_acl # параметр service джобы
      create-topic: # джоб создания топика
        action: aktag_create_topic,aktag_modify_topic # параметр service джобы
        service: createtopicKafka # параметр action джобы
      delete-acls: # джоб удаления ACL
        action: aktag_delete_acls # параметр action джобы
        service: ak_delete_acl # параметр service джобы
      delete-topic: # джоб удаления топика
        action: aktag_delete_topics # параметр action джобы
        service: ak_delete_topic # параметр service джобы
      modify-topic: # джоб изменения топика
        action: aktag_modify_topic # параметр action джобы
        service: ak_modify_topic # параметр service джобы
      create-channel: # Название джобы
        action: install # параметр action джобы
        service: addressesArtemisMQ # параметр service джобы
      add-role: # Название джобы
        action: install # параметр action джобы
        service: rolesArtemisMQ # параметр service джобы
      modify-channel: # Название джобы
        action: update # параметр action джобы
        service: addressesArtemisMQ # параметр service джобы
    topic-name: __PLACEHOLDER__ # Топик в котором ведется журнал завершенных джоб
    r2dbc: # настройки подключения к БД
      url: r2dbc:postgresql://database_url/my_db?schema=rlm_deploy # URL БД
      username: __PLACEHOLDER__ # имя пользователя
      password: __PLACEHOLDER__ # пароль
    datasource:
      url: jdbc:postgresql://database_url/my_db # Адрес для миграции БД
    kafka: # Настройка подключения к kafka
      producer: # настройки для отправки сообщений в kafka
        bootstrap-servers: kafka:9092 # адрес брокера
cloud: # Блок настроек deployment
  release_name: rlm-deploy # Наименование деплоймента
  registry: example.registry.addr # адрес репозитория с образом
  registry_path: example_repo/example_path # путь в репозитории до образа
  pullImage: example-secret # наименование секрета для доступа в реджистри (скачивание образа)
  annotations: # Аннотации для деплоймента
    sidecar.istio.io/inject: "true" # Включение istio-сайдкара в контейнер
    sidecar.istio.io/rewriteAppHTTPProbers: "false" # Отключение перезаписи HTTP-проб приложения
  serviceAccountName: default # Имя сервисного аккаунта
  environment: # Переменные окружения
    LANG: "ru_RU.UTF-8"
    LC_ALL: "ru_RU.UTF-8"
    LANGUAGE: "en_US:en:ru_RU.UTF-8:ru_RU:ru"
  waitIstio: true # Ожидание запуска sidecar istio

Расширенный файл настроек#

Расширенный файл — файл Ansible/roles/[название микросервиса]/defaults/main.yml. Представляет из себя пример всех изменяемых настроек со значениями «по умолчанию». Любую из указанных настроек можно перенести в свой vars.yml для переопределения ее значения.

Пример заполненного файла vars.yml для микросервиса сага (saga)#

Базовый файл#

Базовый файл — это файл Ansible/inventories/[название микросервиса]/group_vars/all/vars.yml, содержащий минимум настроек для корректной установки приложения.

Пример заполненного базового файла vars.yml:

#helm_cli: helm # путь до утилиты helm (генерируется автоматически из Jenkins)
#kubectl_cli: helm # путь до утилиты kubectl (генерируется автоматически из Jenkins)
#kubeconfig_path: {{ inventory_dir }}/.kubeconfig # путь до файла kubeconfig (может быть зашифрован через ansible-vault)
#api_url: https://api.example.ru:6443 # URL API k8s/openshift (не требуется при наличии kubeconfig_path)
#token: __PLACEHOLDER__ # токен пользователя (сервис аккаунта) для установки (не требуется при наличии kubeconfig_path)
#skip_tls_verify: false # игнорировать проверку доверия для URL API (не требуется при наличии kubeconfig_path)
namespace: my-namespace # наименование проекта в k8s/openshift

app: # Блок настроек приложения
  saga:
    web-client:
      base-path: "rlm_deploy_url/deploy-service/api/v1/kafka" # Базовый путь для обращения к сервису rlm-deploy
  # SPRING BOOT SETTINGS
  spring:
    r2dbc: # настройки подключения к БД
      url: r2dbc:postgresql://my.postgres.server/saga_service_db?schema=saga # URL БД
      username: __PLACEHOLDER__ # имя пользователя
      password: __PLACEHOLDER__ # пароль
    datasource:
      url: jdbc:postgresql://my.postgres.server/my_db # Адрес для миграции БД
      username: ${app.spring.r2dbc.username}
      password: ${app.spring.r2dbc.password}
      driverClassName: org.postgresql.Driver

    kafka:  # Блок настроек шины
      topic:
        saga-response-produce: "aiem-saga-status"
        deploy-response-consume: "aiem-deploy-status"
      consumer: # Настройки consumer
        bootstrap-servers: kafka_servers # Адреса серверов кластера
        group-id: saga-group # Идентификатор группы
        key-deserializer: org.apache.kafka.common.serialization.StringDeserializer # Десериализатор ключей
        value-deserializer: org.apache.kafka.common.serialization.StringDeserializer  # Десериализатор значений
      producer:
        bootstrap-servers: kafka_servers # Адреса серверов кластера
        key-serializer: org.apache.kafka.common.serialization.StringSerializer
        value-serializer: org.apache.kafka.common.serialization.StringSerializer
        acks: all #Количество подтверждений от реплик, по умолчанию 1
        retries: 3 #Количество повторных попыток отправки, по умолчанию 2147483647
        properties:
          max.block.ms: 5000 #Максимальное время блокировки при отправке сообщений, по умолчанию 60000ms
          request.timeout.ms: 10000 #Тайм-аут для отдельного запроса к брокеру, по умолчанию 30000ms
          delivery.timeout.ms: 30000 #Общий тайм-аут доставки сообщения (включая retry), по умолчанию 120000ms
          retry.backoff.ms: 1000 #Время ожидания между повторными попытками, по умолчанию 100ms
          reconnect.backoff.ms: 1000 #Время ожидания между попытками переподключения, по умолчанию 50ms
          reconnect.backoff.max.ms: 10000 #Максимальное время ожидания переподключения, по умолчанию 1000ms
          enable.idempotence: true #Обеспечение идемпотентности операций, по умолчанию false
    security:
      oauth2:
        resourceserver:
          jwt:
            issuer-uri: keycloak_url # Адрес keycloak
            principal-claim: preferred_username
  application:
    security:
      oauth2:
        resourceserver:
          authorizer:
            hosts: authentication # Сервис авторизации

cloud: # Блок настроек deployment
  release_name: saga # Наименование деплоймента
  registry: example.registry.addr # адрес репозитория с образом
  registry_path: example_repo/example_path # путь в репозитории до образа
  pullImage: example-secret # наименование секрета для доступа в реджистри (скачивание образа)
  annotations: # Аннотации для деплоймента
    sidecar.istio.io/inject: "true" # Включение istio-сайдкара в контейнер
    sidecar.istio.io/rewriteAppHTTPProbers: "false" # Отключение перезаписи HTTP-проб приложения
  serviceAccountName: default # Имя сервисного аккаунта
  environment: # Переменные окружения
    LANG: "ru_RU.UTF-8"
    LC_ALL: "ru_RU.UTF-8"
    LANGUAGE: "en_US:en:ru_RU.UTF-8:ru_RU:ru"
  waitIstio: true # Ожидание запуска sidecar istio

Расширенный файл настроек#

Расширенный файл — файл Ansible/roles/[название микросервиса]/defaults/main.yml. Представляет из себя пример всех изменяемых настроек со значениями «по умолчанию». Любую из указанных настроек можно перенести в свой vars.yml для переопределения ее значения.

Пример заполненного файла vars.yml для микросервиса управления схемами (schema-registry)#

Базовый файл#

Базовый файл — это файл Ansible/inventories/[название микросервиса]/group_vars/all/vars.yml, содержащий минимум настроек для корректной установки приложения.

Пример заполненного базового файла vars.yml:

#kubeconfig_path: {{ inventory_dir }}/.kubeconfig # путь до файла kubeconfig (может быть зашифрован через ansible-vault)
#api_url: https://api.example.ru:6443 # URL API k8s/openshift (не требуется при наличии kubeconfig_path)
#token: __PLACEHOLDER__ # токен пользователя (сервис аккаунта) для установки (не требуется при наличии kubeconfig_path)
#skip_tls_verify: false # игнорировать проверку доверия для URL API (не требуется при наличии kubeconfig_path)
namespace: my-namespace # наименование проекта в k8s/openshift

app: # настройки приложения
  spring:
    datasource:
      url: jdbc:postgresql://my.postgres.server:5432/my_db # Адрес для подключения к БД
      username: _PLACEHOLDER_ # Имя пользователя для подключения к БД
      password: _PLACEHOLDER_ # Пароль для подключения к БД
      hikari:
        schema: schema_registry
    kafka:
      consumer:
        bootstrap-servers: "bootstrap-server:port" # egress gateway kafka service endpoint

  kafka: # настройки kafka
    read: # настройки чтения из kafka
      enabled: true # включение чтения из kafka
      topic: topic # имя топика
      status-topic: "system-status" # имя топика статуса
      groupId: groupId # имя группы
      ssl: # настройки ssl
        protocol: PLAINTEXT

  security:
    oauth2:
      resourceserver:
        jwt:
          issuer-uri: keycloak_url #  Адрес keyclock
          principal-claim-name: preferred_username

cloud:
  release_name: schema-registry # наименование релиза
  registry: example.registry.addr # адрес репозитория с образом
  registry_path: example_repo/example_path # путь в репозитории до образа
  pullImage: example-secret # наименование секрета для доступа в реджистри (скачивание образа)
  annotations: # Аннотации для деплоймента
    sidecar.istio.io/inject: "true" # Включение istio-сайдкара в контейнер
    sidecar.istio.io/rewriteAppHTTPProbers: "false" # Отключение перезаписи HTTP-проб приложения
  serviceAccountName: default # Имя сервисного аккаунта
  environment: # Переменные окружения
    LANG: "ru_RU.UTF-8"
    LC_ALL: "ru_RU.UTF-8"
    LANGUAGE: "en_US:en:ru_RU.UTF-8:ru_RU:ru"
  waitIstio: true # Ожиданние запуска sidecar istio

Расширенный файл настроек#

Расширенный файл — файл Ansible/roles/[название микросервиса]/defaults/main.yml. Представляет из себя пример всех изменяемых настроек со значениями «по умолчанию». Любую из указанных настроек можно перенести в свой vars.yml для переопределения ее значения.

Пример заполненного файла vars.yml для микросервиса каталогов (catalog)#

Базовый файл#

Базовый файл — это файл Ansible/inventories/[название микросервиса]/group_vars/all/vars.yml, содержащий минимум настроек для корректной установки приложения.

Пример заполненного базового файла vars.yml:

#kubeconfig_path: {{ inventory_dir }}/.kubeconfig # путь до файла kubeconfig (может быть зашифрован через ansible-vault)
#api_url: https://api.example.ru:6443 # URL API k8s/openshift (не требуется при наличии kubeconfig_path)
#token: __PLACEHOLDER__ # токен пользователя (сервис аккаунта) для установки (не требуется при наличии kubeconfig_path)
#skip_tls_verify: false # игнорировать проверку доверия для URL API (не требуется при наличии kubeconfig_path)
namespace: my-namespace # наименование проекта в k8s/openshift

app:
  server:
    port: 8080 # Порт на котором будет запущен сервис

  application:
    security:
      oauth2:
        resourceserver:
          authorizer:
            hosts: keycloack_url/auth/realms/emip # URL до keycloack
  spring:
    security:
      oauth2:
        resourceserver:
          jwt:
            issuer-uri: keycloack_url/auth/realms/emip # URL для автоматического получения публичных ключей валидации JWT
            principal-claim-name: preferred_username # Имя поля в JWT, из которого брать имя пользователя (principal)

    datasource:
      url: jdbc:postgresql://my.postgres.server:5432/my_db # Адрес для подключения к БД
      username: _PLACEHOLDER_ # Имя пользователя
      password: _PLACEHOLDER_ # Пароль
      hikari:
        schema: catalog # Схема БД

    kafka:
      consumer: # Настройки для чтения сообщений из Kafka
        bootstrap-servers: __PLACEHOLDER__ # URL для подключения к Kafka
      producer: # Настройки для записи сообщений в Kafka
        bootstrap-servers: __PLACEHOLDER__ # URL для подключения к Kafka

  kafka: # Настройки топиков Kafka
    read:
      topicSystem: service-catalog-system # Топик для создания/обновления/удаления новых систем
      topicTS: service-catalog-ts # Топик для создания/обновления/удаления новых технических систем
      topicEventResource: service-catalog-event-resource # Топик для создания/обновления/удаления событийных ресурсов
      groupId: catalog
    write:
      topicStatusSystem: system-status # Топик для отправки статусов создания/обновления/удаления систем
      topicStatusTS: techservice-status # Топик для отправки статусов создания/обновления/удаления технических систем
      topicStatusEventResource: event-resource-status # Топик для отправки статусов создания/обновления/удаления событийных ресурсов

  rest: # Блок настроек внешних интеграций
    authentication: # Настройки внешней интеграции с сервисом аутентификации
      url: authentication-url # URL для внешней интеграции
    ed: # Настройки внешней интеграции с сервисом Event Discovery
      url: event-discovery-url # URL для внешней интеграции
    schema: # Настройки внешней интеграции с сервисом Schema Registry
      url: schema-url # URL для внешней интеграции

cloud: # Блок настроек deployment
  release_name: catalog # Наименование деплоймента
  registry: example.registry.addr # адрес репозитория с образом
  registry_path: example_repo/example_path # путь в репозитории до образа
  pullImage: example-secret # наименование секрета для доступа в реджистри (скачивание образа)
  serviceAccountName: default

  annotations: # Аннотации для деплоймента
    sidecar.istio.io/inject: "true" # Включение istio-сайдкара в контейнер
    sidecar.istio.io/rewriteAppHTTPProbers: "false" # Отключение перезаписи HTTP-проб приложения

  waitVault: false # Ожидание запуска sidecar vault
  labels: {} # Лейблы для деплоймента
  waitIstio: true # Ожидание запуска sidecar istio

Расширенный файл настроек#

Расширенный файл — файл Ansible/roles/[название микросервиса]/defaults/main.yml. Представляет из себя пример всех изменяемых настроек со значениями «по умолчанию». Любую из указанных настроек можно перенести в свой vars.yml для переопределения ее значения.

Пример заполненного файла vars.yml для микросервиса аутентификации и авторизации (autentification)#

Базовый файл#

Базовый файл — это файл Ansible/inventories/[название микросервиса]/group_vars/all/vars.yml, содержащий минимум настроек для корректной установки приложения.

Пример заполненного базового файла vars.yml:

ansible_no_log: false
kubeconfig_path: "{{ inventory_dir }}/my-kube-config"
namespace: my-namespace

app:
  spring: # Блок настройки Spring
    application: # Блок настройки приложения
      name: authentication # Наименование приложения
    datasource: # Блок настройки подключения к БД
      url: jdbc:postgresql://my.postgres.server:5432/my_db # Адрес для подключения к БД
      username: __PLACEHOLDER__ # Имя пользователя для подключения к БД
      password: __PLACEHOLDER__ # Пароль для подключения к БД
      hikari: # Блок настройки HikariCP
        schema: authentication # Схема БД
    security: # Блок настройки безопасности
      oauth2: # Блок настройки OAuth2
        resourceserver: # Блок настройки ресурсного сервера
          jwt: # Блок настройки JWT
            issuer-uri: http://keycloack_url/auth/realms/aiem, http://keycloack_url/realms/aiem # URL OpenID Connect Discovery Endpoint провайдера, который используется для автоматической загрузки, JWK Set URI и других параметров (например, iss, aud).
      kafka: # Блок настройки Kafka
        consumer: # Блок настройки потребителя Kafka
          bootstrap-servers: kafka:9092 # URL Kafka брокера
          group-id: auth-service # Идентификатор группы

        module: # Блок настройки модулей приложения
          scim: # Блок настройки SCIM адаптера
            enabled: true # Включить SCIM-адаптер (по умолчанию true)
            endpoint: # Блок настройки конечных точек SCIM-адаптера
              path: # Блок настройки путей конечных точек
                config: /ServiceProviderConfig  # Конечная точка SCIM-адаптера для предоставления конфигурации
                fos-nodes: /SberFosNodes # Конечная точка SCIM-адаптера для предоставления групп пользователей
                roles: /SberRoles # Конечная точка SCIM-адаптера для предоставления ролей пользователей
                users: /Users  # Конечная точка SCIM-адаптера для предоставления списка пользователей
          kafka: # Блок настройки Kafka
            management: # Блок настройки управления Kafka
              group:
                enabled: true # Включить управление группами сервиса авторизации через Kafka (по умолчанию true)
            consumer: # Блок настройки потребителя Kafka
              system: # Блок настройки системного потребителя Kafka
                topics: system-status # Топик для получения статуса системы
              techservice: # Блок настройки технического сервиса
                topics: techservice-status # Топик для получения статуса технического сервиса

cloud:
  release_name: authentication # наименование релиза helm
  registry: example.registry.addr # адрес репозитория с образом
  registry_path: example_repo/example_path # путь в репозитории до образа
  pullImage: example-secret # наименование секрета для доступа в реджистри (скачивание образа)
  serviceAccountName: default
  ## Конфигурация окружения
  environment:
    LANG: ru_RU.UTF-8 # Язык для локализации сообщений программы
    LC_ALL: ru_RU.UTF-8 # Устанавливает язык и локализацию для всех категорий
    LANGUAGE: en_US:en:ru_RU.UTF-8:ru_RU:ru # Язык для интерфейса пользователя и сообщений об ошибках
  annotations: # Аннотации для деплоймента
    sidecar.istio.io/inject: "true" # Включение istio-сайдкара в контейнер
    sidecar.istio.io/rewriteAppHTTPProbers: "false" # Отключение перезаписи HTTP-проб приложения
  waitIstio: true # Ожиданние запуска sidecar istio

Расширенный файл настроек#

Расширенный файл — файл Ansible/roles/[название микросервиса]/defaults/main.yml. Представляет из себя пример всех изменяемых настроек со значениями «по умолчанию». Любую из указанных настроек можно перенести в свой vars.yml для переопределения ее значения.

Пример заполненного файла vars.yml для микросервиса Web-интерфейса (frontend)#

Базовый файл#

Базовый файл — это файл Ansible/inventories/[название микросервиса]/group_vars/all/vars.yml, содержащий минимум настроек для корректной установки приложения.

Пример заполненного базового файла vars.yml:

#kubeconfig_path: {{ inventory_dir }}/.kubeconfig # путь до файла kubeconfig (может быть зашифрован через ansible-vault)
#api_url: https://api.example.ru:6443 # URL API k8s/openshift (не требуется при наличии kubeconfig_path)
#token: __PLACEHOLDER__ # токен пользователя (сервис аккаунта) для установки (не требуется при наличии kubeconfig_path)
#skip_tls_verify: false # игнорировать проверку доверия для URL API (не требуется при наличии kubeconfig_path)
namespace: my-namespace # наименование проекта в k8s/openshift

app: # настройки приложения
  envs: # переменные окружения
    AUTH_SERVICE_URL: 'authentication' # адрес сервиса authentication
    CATALOG_SERVICE_URL: 'catalog' # адрес сервиса catalog
    INTEGRATION_REQUESTS_SERVICE_URL: 'change_requests' # адрес сервиса change_requests
    APPROVAL_POLICY_SERVICE_URL: 'approval_policy' # адрес сервиса approval_policy                                                                                                               │
    META_ADAPTER_SERVICE_URL: 'meta_adapter' # адрес сервиса meta_adapter                                                                                                                     │
    EMIS_KEYCLOAK_URL: keycloak_url # адрес сервиса keycloak                                                                                                                              │
    EMIS_KEYCLOAK_REALM: emip # реалм для сервиса keycloak                                                                                                                                │
    EMIS_KEYCLOAK_CLIENT_ID: sudir # клиент для сервиса keycloak                                                                                                                             │
    HOSTNAME: 0.0.0.0

cloud:
  release_name: frontend
  registry: example.registry.addr # адрес репозитория с образом
  registry_path: example_repo/example_path # путь в репозитории до образа
  pullImage: example-secret # наименование секрета для доступа в реджистри (скачивание образа)
  serviceAccountName: default

  annotations: # Аннотации для деплоймента
    sidecar.istio.io/inject: "true" # Включение istio-сайдкара в контейнер
    sidecar.istio.io/rewriteAppHTTPProbers: "false" # Отключение перезаписи HTTP-проб приложения

  labels: {} # Лейблы для деплоймента
  # secman-injector: "enabled" # Лейбл для активации интеграции с secman vault agent injector
  # resources:   ## Ресурсы пода
  #    limits:
  #      cpu: 2
  #      memory: 600M
  #   requests:
  #      cpu: 1
  #      memory: 400M
  waitIstio: true # Ожидание запуска sidecar istio

Расширенный файл настроек#

Расширенный файл — файл Ansible/roles/[название микросервиса]/defaults/main.yml. Представляет из себя пример всех изменяемых настроек со значениями «по умолчанию». Любую из указанных настроек можно перенести в свой vars.yml для переопределения ее значения.

Пример заполненного файла vars.yml для микросервиса адаптер СУППД/META (meta-adapter)#

Базовый файл#

Базовый файл — это файл Ansible/inventories/[название микросервиса]/group_vars/all/vars.yml, содержащий минимум настроек для корректной установки приложения.

Пример заполненного базового файла vars.yml:

ansible_no_log: false
kubeconfig_path: "{{ inventory_dir }}/my-kube-config"
#api_url: https://api.example.ru:6443 # URL API k8s/openshift (не требуется при наличии kubeconfig_path)
#token: __PLACEHOLDER__ # токен пользователя (сервис аккаунта) для установки (не требуется при наличии kubeconfig_path)
#skip_tls_verify: false # игнорировать проверку доверия для URL API (не требуется при наличии kubeconfig_path)
namespace: my-namespace # наименование проекта в k8s/openshift

app: # Блок настройки приложения
  spring: # Настройка Spring
    datasource: # Настройка подключения к БД
      url: jdbc:postgresql://my.postgres.server:5432/my_db # Адрес для подключения к БД
      username: my_user # Имя пользователя для подключения к БД
      password: _PLACEHOLDER_ # Пароль для подключения к БД
      hikari:
        schema: meta_adapter # Схема БД

  kafka: # Настройка подключения к Kafka
    write: # Настройка записи в Kafka
      producers: # Настройка продюсеров
        service-change:
          name: service-change  # имя должно быть идентично названию producer т.е в данном случае service-change
          bootstrap-servers: _PLACEHOLDER_
          topic-name: emip-change-request-create # имя топика сервиса изменений куда отправляются сообщения по созданию заявок
          acks: all
          delivery-timeout-ms: 10000
          request-timeout-ms: 1000
          additional-properties: # это Map куда можно добавлять доп родные настройки для продюсера
            any.producer.properties: value
            any.producer.properties2: value
        service-ppd:
          name: service-ppd  # имя должно быть идентично названию producer т.е в данном случае service-ppd
          bootstrap-servers: _PLACEHOLDER_
          topic-name: ppd-validate # имя топика каталога куда отправляются сообщения по вычитке ппд
          acks: all
          delivery-timeout-ms: 10000
          request-timeout-ms: 1000
          additional-properties: # это Map куда можно добавлять доп родные настройки для продюсера
            any.producer.properties: value
            any.producer.properties2: value
        service-catalog-system:
          name: service-catalog-system  # имя должно быть идентично названию producer т.е в данном случае service-catalog-system
          bootstrap-servers: _PLACEHOLDER_
          topic-name: service-catalog-system # имя топика каталога куда отправляются сообщения по системам
          acks: all
          delivery-timeout-ms: 10000
          request-timeout-ms: 1000
          additional-properties: # это Map куда можно добавлять доп родные настройки для продюсера
            any.producer.properties: value
            any.producer.properties2: value
        service-catalog-ts:
          name: service-catalog-ts  # имя должно быть идентично названию producer т.е в данном случае service-catalog-ts
          bootstrap-servers: _PLACEHOLDER_
          topic-name: service-catalog-ts # имя топика каталога куда отпраляются сообщения для создания тс
          acks: all
          delivery-timeout-ms: 10000
          request-timeout-ms: 1000
          additional-properties: # это Map куда можно добавлять доп родные настройки для продюсера
            any.producer.properties: value
            any.producer.properties2: value
    read: # Настройка чтения из Kafka
      consumers: # Настройка консьюмеров
        edas:
          name: edas # имя должно быть идентично названию консьюмера т.е в данном случае consumer-edas
          bootstrap-servers: _PLACEHOLDER_
          topic: edas-topic # имя топика
          group-id: edasGroup # consumer group
        tc-on-tr:
          name: tc-on-tr # имя должно быть идентично названию консьюмера т.е в данном случае consumer-tc-on-tr
          bootstrap-servers: _PLACEHOLDER_
          topic: tctr-topic  # имя топика
          group-id: tctr-group # consumer group
        interaction-point:
          name: interaction-point # имя должно быть идентично названию консьюмера т.е в данном случае consumer-interaction-point
          bootstrap-servers: _PLACEHOLDER_
          topic: ip-topic  # имя топика
          group-id: earepo_ipGroup # consumer group
        version-interaction-point:
          name: version-interaction-point # имя должно быть идентично названию консьюмера т.е в данном случае consumer-version-interaction-point
          bootstrap-servers: _PLACEHOLDER_
          topic: repl-earepo-v_kafka_interaction_point_version  # имя топика#
          group-id: earepo_interaction_point_versionGroup
        service-catalog-system:
          name: service-catalog-system #имя должно быть идентично названию консьюмера т.е в данном случае consumer-catalog-system
          bootstrap-servers: _PLACEHOLDER_
          topic: system-status  # имя топика
          group-id: catalog-system-group # consumer group
        service-catalog-ts:
          name: service-catalog-ts #имя должно быть идентично названию консьюмера т.е в данном случае consumer-catalog-ts
          bootstrap-servers: _PLACEHOLDER_
          topic: techservice-status  # имя топика
          group-id: catalog-ts-group # consumer group
        ppd:
          name: ppd #имя должно быть идентично названию консьюмера т.е в данном случае consumer-ppd
          bootstrap-servers: _PLACEHOLDER_
          topic: ppd-topic  # имя топика
          group-id: ppd-group # consumer group

  emip: # Настройка EMIP
    ppd-adapter:
      endpoint: _PLACEHOLDER_/ppd/%s # Адрес адаптера ppd
    process-ppd:
      get-api:
        rest:
          url: _PLACEHOLDER_ # Адрес API для получения данных
      get-version-api:
        rest:
          url: _PLACEHOLDER_ # Адрес API для получения данных

cloud: # Блок настроек deployment
  release_name: meta-adapter # Наименование деплоймента
  registry: example.registry.addr # адрес репозитория с образом
  registry_path: example_repo/example_path # путь в репозитории до образа
  pullImage: example-secret # наименование секрета для доступа в реджистри (скачивание образа)
  annotations: # Аннотации для деплоймента
    sidecar.istio.io/inject: "true" # Включение istio-сайдкара в контейнер
    sidecar.istio.io/rewriteAppHTTPProbers: "false" # Отключение перезаписи HTTP-проб приложения
  serviceAccountName: default # Имя сервисного аккаунта
  environment: # Переменные окружения
    LANG: "ru_RU.UTF-8"
    LC_ALL: "ru_RU.UTF-8"
    LANGUAGE: "en_US:en:ru_RU.UTF-8:ru_RU:ru"
  waitIstio: true # Ожидание запуска sidecar istio

Расширенный файл настроек#

Расширенный файл — файл Ansible/roles/[название микросервиса]/defaults/main.yml. Представляет из себя пример всех изменяемых настроек со значениями «по умолчанию». Любую из указанных настроек можно перенести в свой vars.yml для переопределения ее значения.

Пример заполненного файла vars.yml для микросервиса регистрации транспортных объектов (tors)#

Базовый файл#

Базовый файл — это файл Ansible/inventories/[название микросервиса]/group_vars/all/vars.yml, содержащий минимум настроек для корректной установки приложения.

Пример заполненного базового файла vars.yml:

#kubeconfig_path: {{ inventory_dir }}/.kubeconfig # путь до файла kubeconfig (может быть зашифрован через ansible-vault)
#api_url: https://api.example.ru:6443 # URL API k8s/openshift (не требуется при наличии kubeconfig_path)
#token: __PLACEHOLDER__ # токен пользователя (сервис аккаунта) для установки (не требуется при наличии kubeconfig_path)
#skip_tls_verify: false # игнорировать проверку доверия для URL API (не требуется при наличии kubeconfig_path)
namespace: my-namespace # наименование проекта в k8s/openshift

app:
  envs:
    TORS_EVENT_DISCOVERY_URL: "event-discovery_url" # адрес сервис event-discovery
cloud:
  release_name: tors
  registry: example.registry.addr # адрес репозитория с образом
  registry_path: example_repo/example_path # путь в репозитории до образа
  pullImage: example-secret # наименование секрета для доступа в реджистри (скачивание образа)
  annotations: # Аннотации для деплоймента
    sidecar.istio.io/inject: "true" # Включение istio-сайдкара в контейнер
    sidecar.istio.io/rewriteAppHTTPProbers: "false" # Отключение перезаписи HTTP-проб приложения
  serviceAccountName: default # Имя сервисного аккаунта
  environment: # Переменные окружения
    LANG: "ru_RU.UTF-8"
    LC_ALL: "ru_RU.UTF-8"
    LANGUAGE: "en_US:en:ru_RU.UTF-8:ru_RU:ru"
  waitIstio: true # Ожидание запуска sidecar istio

Расширенный файл настроек#

Расширенный файл — файл Ansible/roles/[название микросервиса]/defaults/main.yml. Представляет из себя пример всех изменяемых настроек со значениями «по умолчанию». Любую из указанных настроек можно перенести в свой vars.yml для переопределения ее значения.

Пример заполненного файла vars.yml для микросервиса управления изменениями (change-requests)#

Базовый файл#

Базовый файл — это файл Ansible/inventories/[название микросервиса]/group_vars/all/vars.yml, содержащий минимум настроек для корректной установки приложения.

Пример заполненного базового файла vars.yml:

#kubeconfig_path: {{ inventory_dir }}/.kubeconfig # путь до файла kubeconfig (может быть зашифрован через ansible-vault)
#api_url: https://api.example.ru:6443 # URL API k8s/openshift (не требуется при наличии kubeconfig_path)
#token: __PLACEHOLDER__ # токен пользователя (сервис аккаунта) для установки (не требуется при наличии kubeconfig_path)
#skip_tls_verify: false # игнорировать проверку доверия для URL API (не требуется при наличии kubeconfig_path)
namespace: my-namespace # наименование проекта в k8s/openshift

app:
  application:
    security:
      oauth2:
        resourceserver:
          authorizer:
            hosts: __PLACEHOLDER__ # URL для взаимодействия с Authorization Сервисом
  emip:
    change-requests:
      services:
        approves:
          topics:
            send-request: emip-change-request-to-approve  # Топик для отправки запроса на согласование
            receive-request: emip-change-request-resolution # Топик для получения результата согласования
            cancel-request: emip-change-request-cancelled # Топик для отмены запроса на согласование
        saga:
          rest:
            url: __PLACEHOLDER__ # URL для взаимодействия с Saga Серивсом
          topics:
            saga-results: emip-saga-results # Топик для получения результатов Saga Сервиса
        event-discovery:
          rest:
            url: __PLACEHOLDER__  # URL для взаимодействия с Event Discovery Сервисом
        catalog:
          rest:
            url: __PLACEHOLDER__
          topics:
            event-resource-operations: emip-catalog-event-resources-operations # Топик для отправки создания событийного ресурса
        external:
          topics:
            create-change-request: emip-change-request-create # Топик для получения запроса на создание заявки из адаптера

  spring:
    security:
      oauth2:
        resourceserver:
          jwt:
            issuer-uri: __PLACEHOLDER__ # URL для автоматического получения публичных ключей валидации JWT
            principal-claim-name: preferred_username # Имя поля в JWT, из которого брать имя пользователя (principal)

    datasource:
      url: __PLACEHOLDER__ # URL для подключения к БД
      username: __PLACEHOLDER__ # Имя пользователя
      password: __PLACEHOLDER__ # Пароль
      hikari:
        schema: change_requests # Схема БД

    kafka:
      bootstrap-servers: __PLACEHOLDER__
      consumer: # Настройки для чтения сообщений из Kafka
        key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
        value-deserializer: org.apache.kafka.common.serialization.StringDeserializer
        group-id: change_requests
      producer: # Настройки для записи сообщений в Kafka
        key-serializer: org.apache.kafka.common.serialization.StringSerializer
        value-serializer: org.apache.kafka.common.serialization.StringSerializer

cloud: # Блок настроек deployment
  release_name: change_requests # Наименование деплоймента
  registry: example.registry.addr # адрес репозитория с образом
  registry_path: example_repo/example_path # путь в репозитории до образа
  pullImage: example-secret # наименование секрета для доступа в реджистри (скачивание образа)
  serviceAccountName: default

  annotations: # Аннотации для деплоймента
    sidecar.istio.io/inject: "true" # Включение istio-сайдкара в контейнер
    sidecar.istio.io/rewriteAppHTTPProbers: "false" # Отключение перезаписи HTTP-проб приложения
  labels: {} # Лейблы для деплоймента
  waitIstio: true # Ожидание запуска sidecar istio

Расширенный файл настроек#

Расширенный файл — файл Ansible/roles/[название микросервиса]/defaults/main.yml. Представляет из себя пример всех изменяемых настроек со значениями «по умолчанию». Любую из указанных настроек можно перенести в свой vars.yml для переопределения ее значения.

Базовый файл#

Базовый файл — это файл Ansible/inventories/[название микросервиса]/group_vars/all/vars.yml, содержащий минимум настроек для корректной установки приложения.

Пример заполненного базового файла vars.yml:

#kubeconfig_path: {{ inventory_dir }}/.kubeconfig # путь до файла kubeconfig (может быть зашифрован через ansible-vault)
#api_url: https://api.example.ru:6443 # URL API k8s/openshift (не требуется при наличии kubeconfig_path)
#token: __PLACEHOLDER__ # токен пользователя (сервис аккаунта) для установки (не требуется при наличии kubeconfig_path)
#skip_tls_verify: false # игнорировать проверку доверия для URL API (не требуется при наличии kubeconfig_path)
namespace: my-namespace # наименование проекта в k8s/openshift

app: # настройки приложения
  server:
    port: 8080 # порт для запуска приложения

  spring:
    cloud:
      config:
        enabled: false
      gateway: # Список сервисов на которые будет настроено проксирование
        server:
          webflux:
            routes:
              - id: event_discovery # Название сервиса
                uri: http://event-discovery-svc:8080 # Ссылка на сервис, к которому проксируем
                predicates:
                  - Path=/ed/** # Путь в URL прокси-сервера до сервиса, доступ к которому осуществляется через прокси-сервер
                filters:
                  - StripPrefix=1 # Количество параметров, которые необходимо убрать при перенаправлении к исходному сервису
                  - RemoveRequestHeader=Host # Для удаления заголовка хоста из запроса

cloud:
  release_name: search # наименование релиза
  registry: example.registry.addr # адрес репозитория с образом
  registry_path: example_repo/example_path # путь в репозитории до образа
  pullImage: example-secret # наименование секрета для доступа в реджистри (скачивание образа)
  annotations: # Аннотации для деплоймента
    sidecar.istio.io/inject: "true" # Включение istio-сайдкара в контейнер
    sidecar.istio.io/rewriteAppHTTPProbers: "false" # Отключение перезаписи HTTP-проб приложения
  serviceAccountName: default # Имя сервисного аккаунта
  environment: # Переменные окружения
    LANG: "ru_RU.UTF-8"
    LC_ALL: "ru_RU.UTF-8"
    LANGUAGE: "en_US:en:ru_RU.UTF-8:ru_RU:ru"
  waitIstio: true # Ожидание запуска sidecar istio

Расширенный файл настроек#

Расширенный файл — файл Ansible/roles/[название микросервиса]/defaults/main.yml. Представляет из себя пример всех изменяемых настроек со значениями «по умолчанию». Любую из указанных настроек можно перенести в свой vars.yml для переопределения ее значения.