Подготовка окружения 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 необходимо выполнить следующее:
Должен быть настроен
vault-agent-sidecar, подробнее про настройкуvault-agent-sidecarописано в разделе Установка EMIP, подраздел «Настройка интеграции с сервисными системами».Добавить секрет в vault.
Например:
db_password: securePassword
Добавить в файл 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 и будет храниться в контейнере.
Добавить переменную в параметр, на примере
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 }}
Проверить, что в файле 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 — можно создать его при установке микросервисов. Для этого необходимо:
Для каждого микросервиса в файле vars.yml перед блоком
appнеобходимо указать следующие параметры:
api_url: https://api.example.ru:6443 # URL API k8s/openshift
token: __PLACEHOLDER__ # токен пользователя (сервис аккаунта) для установки
namespace: __PLACEHOLDER__
После заполнения данных параметров при запуске установки микросервисов на Slave агенте будет создаваться временный файл и с ним подключаться к кластеру.
Общие предусловия установки#
Получены все дистрибутивы компонента, описанные в разделе Состав дистрибутива.
На сервере, с которого будет производиться установка, необходимо проверить наличие пакета Ansible. При отсутствии — установить Ansible.
Установлен Kubernetes (обслуживается средствами сторонних администраторов СПО).
Создан проект в Kubernetes, а также имеется доступ к проекту (логин, пароль пользователя с правами администратора).
Установлены утилиты kubectl и helm (находятся в разделе помощи Command Line Tools в Kubernetes) на host, с которого производится установка.
Настройка inventory#
Заполнение файлов inventory#
Создать новые директории в папке
Ansible/inventoriesGit-репозитория для каждого микросервиса:
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— микросервис поиска: агрегирует данные из сервиса каталогов и сервиса создания и управления интеграциями для поиска по каналам, схемам, системам, транспорту и созданных интеграций.
Задать название директории и заполнить по примеру директории
<наименование микросервиса>-EXAMPLE.В созданной папке должны находиться следующие элементы:
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
├──...
Параметр для заполнения файла
inventoryнеобходимо использовать из папки<наименование микросервиса>-EXAMPLE.
Параметр:
localhost ansible_connection=local
Перейти к заполнению файла 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)
При этом необходимо задать пароли в зашифрованном виде, а также учесть все настройки безопасности.
Перейти к заполнению файла vault.yml для каждого микросервиса. При заполнении файла vault.yml необходимо зашифровать указываемые в нем пароли с помощью утилиты ansible-vault. Подробно данная процедура описана в разделе Использование утилиты «ansible-vault» для шифрования паролей.
При наличии файла 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#
Создать файл с паролем, с помощью которого при автоматической установке будут расшифровываться пароли, зашифрованные через ansible-vault в параметрах vars.yml выбранного inventory.

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

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

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

После перехода будут доступны поля для заполнения:
«Kind» — в выпадающем списке выбрать параметр Secret file;
«File» — загрузить созданный файл с паролем;
«ID» — указать наименование, которое необходимо придумать самостоятельно (данный ID необходимо будет указать в job monitoring_custom в параметре
vault_cred);«Description» — необязательное поле, в котором можно добавить описание.
Нажать кнопку «Create» для создания Credentials для Vault:

Создание Jenkins Job «db-init» для установки#
Содержимое дистрибутива ./EMIP-scripts-{version}-distrib.zip поместить в git-репозиторий.
Выбрать New Item для создания нового Jenkins Job:

2.1. Добавить название создаваемого Jenkins Job. Нельзя использовать в названии русские буквы, спецсимволы.
2.2. Выбрать Pipeline и нажать кнопку «ОК»:

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.
Пример заполнения параметров:

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

После запуска сборки необходимо обновить страницу.
Выбрать в боковом меню «Собрать с параметрами»:

Заполнить следующие параметры на появившейся странице:
jenkins_slave— имя агента Jenkins для сборки;ansible_version— название Jenkins Tool, отвечающей за используемую версию Ansible.
В случае, если используется обновленная версия скриптов, функциональность пункта 7 может быть выполнена автоматически и пункт 7 может отсутствовать.
Нажать кнопку «Собрать».
Обновить страницу и после окончания работы Jenkins Job снова нажать «Собрать с параметрами».
Появится страница со всем списком настраиваемых параметров, отвечающих за установку:
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 используется для установки микросервисов.
Выбрать в Jenkins New Item для создания нового Jenkins Job:

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

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.
Сохранить получившийся Jenkins Pipeline.
На появившейся странице в меню боковой панели выбрать «Собрать сейчас». Запустится первоначальная сборка:

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

На появившейся странице необходимо заполнить следующие параметры и нажать кнопку «Собрать»:
jenkins_slave— имя агента Jenkins для сборки;ansible_version— название Jenkins Tool, отвечающей за используемую версию Ansible.
Необходимо обновить страницу и после окончания работы Jenkins Job снова нажать «Собрать с параметрами».
Появится страница со всем списком настраиваемых параметров:
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#
Содержимое дистрибутива ./EMIP-scripts-{version}-distrib.zip поместить в git-репозиторий.
Выбрать New Item для создания нового Jenkins Job:

2.1. Добавить название создаваемого Jenkins Job. Нельзя использовать в названии русские буквы, спецсимволы.
2.2. Выбрать Pipeline и нажать кнопку «ОК»:

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.
Пример заполнения параметров:

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

После запуска сборки необходимо обновить страницу.
Выбрать в боковом меню «Собрать с параметрами»:

Заполнить следующие параметры на появившейся странице:
jenkins_slave— имя агента Jenkins для сборки;ansible_version— название Jenkins Tool, отвечающей за используемую версию Ansible.
В случае, если используется обновленная версия скриптов, функциональность пункта 7 может быть выполнена автоматически и пункт 7 может отсутствовать.
Нажать кнопку «Собрать».
Обновить страницу и после окончания работы Jenkins Job снова нажать «Собрать с параметрами».
Появится страница со всем списком настраиваемых параметров, отвечающих за установку:
job_config_renew— отвечает за обновление Jenkins Job. При установке приложения должен быть выключен (false). Для обновления текущих параметров и сохранения значений по умолчанию должен быть включен (true);inventory— имя inventory для установки;jenkins_slave— выбор Jenkins Slave;emailto- Отправка уведомлений о статусе установкиplaybook- Сценарий развертывания, используется толькоkeycloak.ymltags- Теги выполнения сценария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 для переопределения ее значения.
Пример заполненного файла vars.yml для микросервиса поиска (search)#
Базовый файл#
Базовый файл — это файл 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 для переопределения ее значения.