Подготовка окружения EVTA#
Получение скриптов развертывания Ansible#
Скачайте и разархивируйте дистрибутив, содержащий ansible роли (директория Ansible) и Jenkins скрипты развертывания (директория Pipeline): ./EVTA-scripts-[version]-distrib.zip;
При установке с использованием Ansible: необходимо поместить содержимое директории Ansible из развернутого архива на сервер, с которого будет производиться установка.
При установке с помощью Jenkins: поместить директории Ansible и Pipeline из развернутого архива в корень Git-репозитория.
Если располагать не в корне репозитория, то потребуется правка следующих groovy-скриптов из директории Pipeline для EVTA:
default_stages.groovy;
reactive_stream_adapter_deploy_vm.groovy (при установке на ВМ) или reactive_stream_adapter_deploy.groovy (при установке в облачной среде).
Общие предусловия установки EVTA#
Убедитесь, что выполнены следующие действия:
Выбран и установлен транспорт. Возможные виды транспорта:
ActiveMQ Artemis (SMBX, программный компонент «Синапс.Брокер сообщений») — подробнее об установке в разделе Руководство по установке продукта SMB;
Platform V Corax — подробнее об установке в разделе Руководство по установке продукта Platform V Corax;
Apache Kafka;
IBM MQ (с релиза EVTD 4.0.0 отсутствует поддержка IBM MQ);
RabbitMQ.
Известны точки подключения к выбранному транспорту (адреса и очереди подключения):
для SMBX: адреса и порты брокера, имя адреса и имя очереди;
для EVTD: адреса и порты брокера, имя топика;
для IBM MQ: адреса и порты брокера, имя очереди;
для RabbitMQ: адреса и порты брокера, имя заголовка.
Созданы сертификаты.
Получены все дистрибутивы компонента, описанные в разделе Состав дистрибутива и информация о дистрибутиве EVTA.
Предусловия установки с помощью Jenkins Job#
Для установки компонента EVTA необходимо создать и настроить Jenkins Job. Подрообнее в подразделе «Создание Jenkins Job для автоматической установки EVTA».
Предусловия установки EVTA в облачной среде#
Убедитесь, что выполнены следующие действия:
Установлен OpenShift версии 4.8 и выше (обслуживается средствами сторонних администраторов СПО);
Создан проект в OpenShift, а также имеется доступ к проекту (логин, пароль пользователя с правами администратора);
Установлены утилиты oc и helm (находятся в разделе помощи «Command Line Tools» в OpenShift) на сервер, с которого производится установка.
Перед началом установки необходимо авторизоваться в OpenShift под пользователем с правами администратора с сервера, с которого производится установка:
oc login <cluster_url>
Реквизиты для консольной утилиты oc login можно получить в веб-интерфейсе OpenShift. Для этого в выпадающем меню под пользователем необходимо выбрать «Copy login command», где будет указан API token для работы с OpenShift.
Далее выбрать проект в облачной среде:
oc project <project_name>
Создать сервисного пользователя:
oc create sa <service_user_name>
Выдать созданному пользователю права, достаточные для запуска сценариев:
oc policy add-role-to-user <role_name> system:serviceaccount:<project_name>:<service_user_name>
, где <role_name> — роль, имеющая права на запуск/создание приложений в облачной среде. Имя роли необходимо получить у администраторов OS (возможно admin).
Создать секрет для скачивания образов:
oc create secret docker-registry
<pull_secret_name> \
--docker-server=<registry_server> \
--docker-username=<username> \
--docker-password=<password> \
--docker-email=unused
Привязать созданный секрет к созданному сервисному пользователю:
oc secrets link default <pull_secret_name> --for=pull,mount
Получить токен сервисного пользователя для использования в inventory:
oc sa get-token <service_user_name>
После выполнения вышеперечисленных действий можно приступать к установке компонента EVTA. Подробнее в разделе Установка EVTA.
Создание системных и пользовательских сервисов обслуживания для EVTA#
Данный раздел применим при установке компонента на ВМ.
Для автоматического перезапуска EVTA в случае перезагрузки сервера и корректной работы скриптов Ansible необходимо создать системные или пользовательские сервисы обслуживания.
Для создания системных сервисов обслуживания:
Выдайте права пользователям (например, adapter) на запуск, остановку и редактирование сервиса.
Для этого с помощью команды sudo visudo /etc/sudoers под пользователем root добавьте строки в файл /etc/sudoers:
adapter ALL= NOPASSWD: /bin/systemctl start rest-kafka.service
adapter ALL= NOPASSWD: /bin/systemctl stop rest-kafka.service
adapter ALL= NOPASSWD: /bin/systemctl status rest-kafka.service
adapter ALL= NOPASSWD: /bin/systemctl restart rest-kafka.service
adapter ALL= NOPASSWD: /bin/systemctl enable rest-kafka.service
adapter ALL= NOPASSWD: /bin/systemctl disable rest-kafka.service
adapter ALL= NOPASSWD: /bin/systemctl daemon-reload
adapter ALL= NOPASSWD: /bin/sudoedit /etc/systemd/system/rest-kafka.service
Для создания пользовательских сервисов обслуживания:
Необходимо добавить вашего пользователя (далее adapter) в список исключений, чтобы пользовательский сервис приложения не завершался принудительно.
Для этого под пользователем root:
Добавьте строки с логинами пользователей в файл
/etc/systemd/logind.conf:
KillExcludeUsers=adapter
Логины пользователей добавляются через пробел.
Для возможности пользовательским сервисам работать как долговременные выполните команды:
systemctl restart systemd-logind
loginctl enable-linger adapter
Создание системных и пользовательских сервисов обслуживания с помощью Jenkins Job#
Необходимо заполнить настройки inventory из подраздела «Настройка inventory для EVTA».
Выбрать соответствующий playbook в Jenkins Job в параметре
playbook:reactive_stream_adapter_vm_system_service.yml— создание системного сервиса обслуживания EVTA;reactive_stream_adapter_vm_user_service.yml— создание пользовательского сервиса обслуживания EVTA.
В параметре
only_on_hostвыберите необходимый сервер.Запустите работу Jenkins Job.
Проверьте статус Jenkins Job. Для успешной работы должно быть - «Finished: SUCCESS».
Создание системного сервиса обслуживания EVTA с помощью ansible#
Под пользователем adapter выполните действия:
Создайте файл сервиса
adapter.service:
sudo /bin/sudoedit /etc/systemd/system/adapter.service
Заполните созданный файл:
[Unit]
Description=Service for reactive-stream-adapter-{{ item.name }}
After=local-fs.target network.service
[Service]
WorkingDirectory={{ reactive_stream_adapter_vm.installdir }}
Type=simple
User={{ ansible_user }}
ExecStart={{ reactive_stream_adapter_vm.installdir }}/bin/{{ item.name }} run
StandardOutput=null
Restart=on-failure
RestartSec=30
[Install]
WantedBy=default.target
, где:
{{ ansible_user }}— имя пользователя, под которым производится установка адаптера. В данном случае это пользовательadapter;{{ item.name }}— имя адаптера, зависит от значения параметраname;{{ reactive_stream_adapter_vm.installdir }}— каталог, в который устанавливается адаптер на конечном сервере.
Для инициализации сервиса выполните команду:
sudo systemctl daemon-reload
Создание пользовательского сервиса обслуживания EVTA с помощью ansible#
Под пользователем adapter выполните действия:
Создайте файл сервиса
~/.config/systemd/user/adapter.serviceсо следующим содержимым:
[Unit]
Description=Service for reactive-stream-adapter-{{ item.name }}
[Service]
WorkingDirectory={{ reactive_stream_adapter_vm.installdir }}
Type=simple
ExecStart=bin/{{ item.name }} run
StandardOutput=null
Restart=on-failure
RestartSec=30
[Install]
WantedBy=default.target
, где:
{{ item.name }}— имя адаптера, зависит от значения параметраnameиз подраздела «Пример заполненного файла vars.yml для EVTA»;{{ reactive_stream_adapter_vm.installdir }}— каталог, в который устанавливается адаптер на конечном сервере.
Для инициализации сервиса выполните команду:
sudo systemctl --user daemon-reload
Процесс удаления системных и пользовательских сервисов обслуживания описан в документе: «Руководство администратора» в разделе «Удаление системных и пользовательских сервисов обслуживания на ВМ для EVTA».
Настройка inventory для EVTA#
Установка на ВМ#
Создайте в директории
inventoriesсвою директорию (с вашим названием) с параметрами. Пример настроек находится в директорииEXAMPLE_REACTIVE_STREAM_ADAPTER_VM(внутри папкиinventories).В созданной директории должны содержаться следующие элементы:
group_vars/all — директория, в которой находятся файл vars.yml и файл vault.yml;
ssl — директория с сертификатами;
inventory — файл, где прописываются группы серверов, на которых будут выполняться необходимые playbooks.
Пример структуры репозитория:
├── ...
├── files
├── inventories
│ ├── EXAMPLE_REACTIVE_STREAM_ADAPTER_VM
│ │ ├── group_vars
│ │ │ └── all
│ │ │ ├── vars.yml
│ │ │ └── vault.yml
│ │ ├──ssl
│ │ │ └── example.jks
│ │ │
│ │ └── inventory
│ │
│ ├── [новая директория]
│ │ ├── group_vars
│ │ │ └── all
│ │ │ ├── vars.yml
│ │ │ └── vault.yml
│ │ ├──ssl
│ │ │ └── example.jks
│ │ │
│ │ └── inventory
│ │
├── roles
│ │ ...
├── reactive_stream_adapter.yml
├── ***.yml
├──...
В файл inventory добавьте список серверов, на которые будет производиться установка.
Пример:
localhost ansible_connection=local
[reactive_stream_adapter_vm]
hostname-1.my.host
hostname-2.my.host
Перейдите к заполнению файла в директории
group_vars/all.
Файл vars.yml заполните по аналогии с имеющимися примерами файла vars.yml в директории EXAMPLE_REACTIVE_STREAM_ADAPTER_VM. Ознакомиться с примером заполненного файла vars.yml можно в подразделе «Пример заполненного файла vars.yml для EVTA».
При этом необходимо задать пароли в зашифрованном виде (описано далее в п.5).
Продолжите заполнение файлов в директории
group_vars/all. Файл vault.yml содержит пароли в зашифрованном виде.
При заполнении файла vars.yml необходимо зашифровать указываемые в нем пароли с помощью утилиты ansible-vault и занести их в файл vault.yml. Подробнее в разделе Использование утилиты «ansible-vault» для шифрования паролей.
Поместите используемые сертификаты в директорию
ssl.
Используемые сертификаты необходимо зашифровать с помощью утилиты «ansible-vault». Подробно данная процедура описана в разделе Использование утилиты «ansible-vault» для шифрования паролей.
Установка в облачной среде#
Создайте в директории
inventoriesсвою директорию (с вашим названием) с параметрами. Пример настроек находится в директорииEXAMPLE_REACTIVE_STREAM_ADAPTER(внутри папкиinventories).В созданной директории должны находиться следующие элементы:
group_vars/all — директория, в которой находятся файл vars.yml и файл vault.yml;
ssl — директория с сертификатами;
inventory — файл, где прописываются группы серверов, на которых будут выполняться playbooks.
Пример структуры репозитория:
├── ...
├── files
├── inventories
│ ├── EXAMPLE_REACTIVE_STREAM_ADAPTER
│ │ ├── group_vars
│ │ │ └── all
│ │ │ ├── vars.yml
│ │ │ └── vault.yml
│ │ ├──ssl
│ │ │ └── example.jks
│ │ │
│ │ └── inventory
│ │
│ ├── [новая директория]
│ │ ├── group_vars
│ │ │ └── all
│ │ │ ├── vars.yml
│ │ │ └── vault.yml
│ │ ├──ssl
│ │ │ └── example.jks
│ │ │
│ │ └── inventory
│ │
├── roles
│ │ ...
├── reactive_stream_adapter.yml
├── ***.yml
├──...
Для заполнения файла
inventoryиспользуйте параметр из директорииEXAMPLE_REACTIVE_STREAM_ADAPTER.
Параметр:
localhost ansible_connection=local
Перейдите к заполнению файлов в директории
group_vars/all.
Файл vars.yml заполните по аналогии с имеющимися примерами файла vars.yml в директории EXAMPLE_REACTIVE_STREAM_ADAPTER. Ознакомиться с примером заполненного файла vars.yml можно в подразделе «Пример заполненного файла vars.yml для EVTA».
При этом необходимо задать пароли в зашифрованном виде (описано далее в п.5). Шифровать пароли можно используя механизм ansible-vault. Подробнее в разделе Использование утилиты «ansible-vault» для шифрования паролей.
Продолжите заполнение файлов в директории
group_vars/all. Файл vault.yml содержит пароли в зашифрованном виде.
При заполнении файла vars.yml необходимо зашифровать указываемые в нем пароли с помощью утилиты «ansible-vault» и занести их в файл vault.yml. Подробнее в разделе Использование утилиты «ansible-vault» для шифрования паролей.
Поместите используемые сертификаты в директорию
ssl.
Пример заполненного файла vars.yml для EVTA#
Установка на ВМ#
Базовый файл настроек на ВМ#
Базовый файл — файл Ansible/inventories/EXAMPLE_REACTIVE_STREAM_ADAPTER_VM/group_vars/all/vars.yml, содержащий минимум настроек для корректной установки приложения.
Внимание! Параметры пресетов, используемые для установки на ВМ и в облачной среде, идентичны. Ознакомиться со всеми пресетами можно в файле Ansible/roles/common/defaults/main.yml или в подразделе «Примеры пресетов для подключения к внешним сервисам для EVTA».
Пример заполненного базового файла vars.yml:
### Пример пресетов
reactive_stream_adapter_preset:
kafka_example:
client: kafka # Тип пресета
props:
ssl.keystore.location: ssl/kafka-dev-cluster-1.jks
ssl.keystore.password: "{{ jks_password }}"
ssl.truststore.location: ssl/kafka-dev-cluster-1.jks
ssl.truststore.password: "{{ jks_password }}"
ssl.key.password: "{{ jks_password }}"
security.protocol: SSL
bootstrap.servers: host1:9092,host2:9092
enable.auto.commit: false # Обязательно, для управления коммитами из кода адаптера
ssl.endpoint.identification.algorithm: "" # Отключение проверки хостнейма в сертификате, обязательно для стендов Kafka
### Пример адаптера. Полный список параметров можно посмотреть в файле
### Ansible/roles/reactive_stream_adapter_vm/defaults/main.yml
reactive_stream_adapter_vm:
#####################
# Настройки, используемые только при установке на железные хосты
distr: reactive-stream-adapter.zip # путь до приложения относительно /files
installdir: /opt/Apache/adapter/reactive_stream_adapter_vm # абсолютный путь на конечном сервере до приложения
logdir: /opt/Apache/adapter/reactive_stream_adapter_vm_logs # абсолютный путь на конечном сервере до логов приложения
clean_installdir_exclude: # Какие директории не очищаются при полной установке.
- conf
- bin
- ssl
jvmArgs: "-noverify -XX:+AlwaysPreTouch -XX:+AlwaysActAsServerClassMachine -XX:MaxRAMPercentage=70"
log_size_cap: 50MB # максимальный размер лога
# log_history: 3 # время в днях для хранения логов
# log_total_size_cap: 2GB # Необязательно, общий размер всех архивных файлов, если не задано, то бесконечно
#####################
# Дефолтные настройки, не обязательные в дистрибутиве
timeout: 10000 # общий тайм-аут на блокирующие операции
retries: 1 # количество попыток запуска адаптера
retryInterval: 1000 # интервал в миллисекундах между попытками запуска адаптера
retryMultiplier: 1 # множитель каждой следующей попытки
threadCount: 1 # Количество потоков в приложении
#####################
# Дефолтные настройки для продюсера или консьюмера, которые могут быть переопределены в дистрибутиве
batchSize: 1000 # Размер сообщений, обрабатываемый за одну итерацию, может быть переопределен в дистрибутиве
batchTimeout: -1 # Время одной итерации (при указании итерация будет считаться законченной по первому из достигнутых условий - либо по достижении тайм-аута, либо при вычитке сообщений в количестве `batchSize`)
#####################
# Дефолтные настройки логирования, не обязательные в дистрибутиве
logging:
logback:
level: info # Дефолтный уровень логирования
loggers:
- name: "ru.sbt.ss"
level: info
- name: "ru.sbt.cep"
level: info
- name: "org.apache.kafka"
level: warn
- name: "com.typesafe.akka"
level: info
kafka: # Отправление логи в топик Kafka
enabled: false # Включение функциональности отправки логов в топик Kafka
retries: 3 # Количество переиницилизаций продюсера
interval: 1000 # Интервал между переиницилизациями
multiplier: 1 # Множитель интервала переинициализации
never_block: true # блокировка работы приложения при недоступности Kafka (при true недоставленные сообщения в kafka отбрасываются)
## Необязательные поля, если logging.kafka.enabled: false
# preset_name: kafka_fpss # Название пресета для отправки логов в топик Kafka
# topic: logstash # Наименование топика
adapter_list:
- name: example # наименование адаптера
egressType: rest # rest/grpc # использование как rest/grpc адаптер (по умолчанию - выключено)
jmxport: 9400 # порт для подключения по JMX (уникальный для каждого адаптера)
healthCheckPort: 9900 # порт для проверки на healthCheck, прометеус метрик и дискаверинга (уникальный для каждого адаптера)
# Процессинг
# Настройки точек подключения (при egressType: rest)
endpoints:
- name: "fpss://Domain.Federation.SEGMENT/System/TESTA/1"
topic: "input"
preset_name: kafka_fpss # имя пресета из reactive_stream_adapter_preset
- name: "fpss://Domain.Federation.SEGMENT/System/TESTB/1"
topic: "output"
preset_name: kafka_fpss
- name: "fpss://Domain.Federation.SEGMENT/System/TESTC/1"
queue: "TRANSPORT_FROM_KAFKA"
preset_name: artemis_fpss
- name: "fpss://Domain.Federation.SEGMENT/System/TESTD/1"
queue: "TRANSPORT_TO_KAFKA"
preset_name: artemis_fpss
# Включить механизм подтверждения получения/обработки сообщения
needInfoAboutAcknowledge: true
#####################
# В адаптере должны быть настройки продюсера (при условии если egressType: default).
producer: # Пример продюсера типа кафка
preset_name: kafka_fpss # Обязательный параметр, название пресета
topic: "output" # Обязательный параметр для продюсера типа кафка
# producer: # Пример продюсера типа artemis
# preset_name: artemis_fpss # Обязательный параметр, название пресета консюмера
# queue: "output" # Обязательный параметр для продюсера типа artemis/rabbit
#####################
# В адаптере должны быть настройки консьюмера (при условии если egressType: default).
consumer: # Пример консюмера типа кафка
preset_name: kafka_fpss # Обязательный параметр, название пресета
topic: "output" # Обязательный параметр для консюмера типа кафка
## deadLetter: "deadLetter" # Необязательный параметр для консюмера типа кафка, топик ошибочных сообщений
props: # Пример добавления дополнительных параметров в проперти файл
group.id: example-consumer
## consumer: # Пример консюмера типа artemis
## preset_name: artemis_fpss # Обязательный параметр, название пресета
## queue: "output" # Обязательный параметр для консюмера типа artemis/rabbit
### deadLetter: "deadLetter" # Необязательный параметр для консюмера типа artemis, очередь ошибочных сообщений
### keyHeader: '' # Необязательный параметр для консюмера типа artemis, имя заголовка сообщения для использования в качестве значения ключа, значение по умолчанию ""
При необходимости раскомментировать нужные блоки.
Расширенный файл настроек на ВМ#
Расширенный файл — файлAnsible/roles/reactive_stream_adapter_vm/defaults/main.yml. Представляет собой пример всех изменяемых настроек со значениями «по умолчанию». Любую из указанных настроек можно перенести в свой vars.yml для переопределения ее значения.
Крупные блоки в настройках:
reactive_stream_adapter_preset— пресеты для подключения к внешним сервисам (Kafka, Artemis, IBM MQ, RabbitMQ);reactive_stream_adapter_vm— настройки адаптера при установке на ВМ.
Внимание! Параметры пресетов, используемые для установки на ВМ и в облачной среде, идентичны. Ознакомиться со всеми пресетами можно в файле для установки в облачной среде Ansible/roles/reactive_stream_adapter/defaults/main.yml или в подразделе «Примеры пресетов для подключения к внешним сервисам для EVTA».
Пример расширенного файла настроек vars.yml:
# авторизация под другим пользователем и его паролем
#ansible_become: 1
#ansible_become_method: su
#ansible_become_flags: --login
#ansible_become_user: new_user
#ansible_become_pass: new_user_password
# авторизация под другим пользователем с использованием sudo (при добавлении в sudoers: user ALL=(new_user) NOPASSWD:ALL)
#ansible_become: 1
#ansible_become_user: new_user
#tag_status_log_filters: # list фильтров, которые будут наложены на лог, получаемый по тегу status. Можно использовать regexp-ы.
# # Совпавшие с фильтром строки лога будут удалены из лога
# - WARN
# - GET
# - '^2024-09-.*'
########
# Внимание! Плейбук использует пресеты
# reactive_stream_adapter_preset
# Примеры заполнения пресетов в файле Ansible/roles/common/defaults/main.yml
reactive_stream_adapter_vm:
#####################
# Настройки, используемые только при установке на железные хосты
distr: reactive-stream-adapter.zip # путь до приложения относительно /files
installdir: /u01/evta # абсолютный путь на конечном сервере до приложения
logdir: /evta_logs # абсолютный путь на конечном сервере до логов приложения
#logdir_audit: /evta_logs # абсолютный путь на конечном сервере до логов аудита (по умолчанию равен logdir)
#backup_installdir_to: /tmp/installer # если параметр задан, то делаем бэкап installdir в эту директорию. Не должно совпадать с installdir
clean_installdir_exclude: # Какие директории или файлы не очищаются при полной установке.
- conf
- bin
- ssl
# - lib/mq.client.example.jar # Здесь можно перечислить библиотеки, которые нужно оставить при полной установке новой версии адаптера
## Допустимые параметры для jvmArgs:
# - "-Xms"
# - "-Xmx"
# - "-XX:MetaspaceSize"
# - "-XX:MaxMetaspaceSize"
# - "-XX:MinMetaspaceFreeRatio"
# - "-XX:MaxMetaspaceFreeRatio"
# - "-XX:MinHeapFreeRatio"
# - "-XX:MaxHeapFreeRatio"
# - "-XX:+AlwaysPreTouch"
# - "-noverify"
# - "-XX:+AlwaysActAsServerClassMachine"
# - "XX:+UseContainerSupport"
# - "XX:MaxRAMPercentage"
jvmArgs: "-noverify -XX:+AlwaysPreTouch"
# jmx_security_enable: true # включение авторизации для JMX
# jmx_access_roles: # пользователи для JMX
# - user: user
# access: readonly
# password: ***
log_size_cap: 50MB # максимальный размер лога
# log_history: 3 # время в днях для хранения логов
# log_total_size_cap: 2GB # Необязательно, общий размер всех архивных файлов, если не задано, то бесконечно
#####################
# Дефолтные настройки, не обязательные в дистрибутиве
timeout: 10000 # общий тайм-аут на блокирующие операции
retries: 1 # количество попыток запуска адаптера
retryInterval: 1000 # интервал в миллисекундах между попытками запуска адаптера
retryMultiplier: 1 # множитель каждой следующей попытки
threadCount: 1 # Количество потоков в приложении
#####################
# Дефолтные настройки для продюсера или консьюмера, которые могут быть переопределены в дистрибутиве
batchSize: 1000 # Количество сообщений, обрабатываемых за одну итерацию
# Время одной итерации (при указании итерация будет считаться законченной по первому из достигнутых условий - либо по достижении тайм-аута, либо при вычитке сообщений в количестве `batchSize`)
batchTimeout: -1
#####################
# Дефолтные настройки логирования, не обязательные в дистрибутиве
logging:
logback:
level: info # Дефолтный уровень логирования
loggers:
- name: "ru.sbt.ss"
level: info
- name: "ru.sbt.cep"
level: info
- name: "org.apache.kafka"
level: warn
- name: "com.typesafe.akka"
level: info
kafka: # Отправление логи в топик Kafka
enabled: false # Включение функциональности отправки логов в топик Kafka
retries: 3 # Количество переиницилизаций продюсера
interval: 1000 # Интервал между переиницилизациями
multiplier: 1 # Множитель интервала переинициализации
never_block: true # блокировка работы приложения при недоступности Kafka (при true недоставленные сообщения в kafka отбрасываются)
## Необязательные поля, если logging.kafka.enabled: false
# preset_name: kafka_fpss # Название пресета для отправки логов в топик Kafka
# topic: logstash # Наименование топика
# Дополнительное логирование обработки сообщения
log: {}
# log:
# eventIdHeader: JMSMessageID # заголовок, значение которого будет браться из сообщения для поля eventId лога
# consumerLogEnabled: "false" # логирование вычитки сообщения, по умолчанию false
# producerLogEnabled: "false" # логирование публикации сообщения, по умолчанию false
# processorsLogEnabled: "false" # логирование результатов работы процессоров сообщения (например, валидации), по умолчанию false
# deadLetterLogEnabled: "false" # логирование отправки сообщения в deadLetter, по умолчанию false
# metrics: # настройки метрик
# jmx: # настройки метрик JMX
# enabled: "true" # включение метрик
# domain: ru.sbt.ss.reactive.stream.adapter # корневой пакет для метрик
# step: 1m # интервал для агрегирующих функций
# prometheus: # настройки метрик Prometheus
# enabled: "false" # включение метрик
# histogramFlavor: Prometheus # тип формата гистограмм
# step: 1m # интервал для агрегирующих функций
#endpoint_whitelist_dn: [] # DN сертификаты брокеров kafka/artemis для валидации подключения
# - CN=localhost, O=SBT, C=RU
# - CN=test, O=SBT, C=RU
rest_whitelist_dn: [] # DN сертификаты клиентов для rest интерфейса
# - CN=localhost, O=SBT, C=RU
# - CN=test, O=SBT, C=RU
# audit: # настройки аудита
# audit.service.type: http
# audit.service.url: http://audit.endpoint
# audit.service.request.timeout.ms: 10000
# audit.service.metamodel.path: ./audit/adapter-metamodel.json
# audit.service.send.metamodel: "false"
# audit.service.pretty.print: "false"
# audit.service.ssl.enabled: "false"
# audit.service.verify.hostname: "false"
# audit.service.add.redelivery.headers: "false"
# audit.service.redelivery.enabled: "true"
# audit.service.redelivery.interval.ms: 15000
# audit.service.redelivery.initial.delay.ms: 10000
# audit.service.redelivery.stop.on.error: "true"
# audit.service.redelivery.retries: -1
# audit.service.stop.timeout.ms: 3000
# audit.service.redelivery.buffers: in-memory-buffer
# audit.service.redelivery.in-memory-buffer.type: queue
# audit.service.redelivery.in-memory-buffer.clear.logger.name: memory
# audit.service.dead.letter.redelivery.enabled: "true"
# audit.service.dead.letter.redelivery.interval.ms: 15000
# audit.service.dead.letter.redelivery.initial.delay.ms: 10000
# audit.service.dead.letter.redelivery.stop.on.error: false
# audit.service.dead.letter.redelivery.retries: -1
# audit.service.dead.letter.redelivery.buffers: queue-fallback
# audit.service.dead.letter.redelivery.queue-fallback.type: queue
# audit.service.dead.letter.redelivery.queue-fallback.queue.name: logger-fallback
# audit.service.ssl.keystore.location: "ssl/audit_keystore.jks"
# audit.service.ssl.keystore.password: __PLACEHOLDER__
# audit.service.ssl.key.password: __PLACEHOLDER__
# audit.service.ssl.truststore.location: "ssl/audit_truststore.jks"
# audit.service.ssl.truststore.password: __PLACEHOLDER__
# audit.service.secret: "file:./ssl/secret.pass"
# ## Настройка kafka-транспорта для событий аудита
# audit.service.transport.type: kafka # Тип транспорта, http или kafka, по умолчанию http
# audit.service.metamodel.topic: metamodel-topic # Имя топика для отправки метамодели
# audit.service.event.topic: event-topic # Имя топика для отправки событий
# audit.service.kafka.bootstrap.servers: "localhost:9093" # Адреса kafka
# audit.service.node.id: "hostname-1" # Идентификатор узла, может брать значение переменной окружения (например env:HOSTNAME)
# audit.service.source.system: "source.system" # Название инсталяции, может брать значение переменной окружения (например env:HOSTNAME)
# ## ОПЦИОНАЛЬНО Сериализаторы (по умолчанию org.apache.kafka.common.serialization.StringSerializer)
# audit.service.kafka.key.serializer: org.apache.kafka.common.serialization.StringSerializer
# audit.service.kafka.value.serializer: org.apache.kafka.common.serialization.StringSerializer
# ## ОПЦИОНАЛЬНО идентификатор клиента
# audit.service.kafka.client.id: audit-producer
# ## ОПЦИОНАЛЬНО настройки ssl
# audit.service.kafka.security.protocol: SSL
# audit.service.kafka.ssl.keystore.location: ssl/keystore.jks
# audit.service.kafka.ssl.keystore.password: password
# audit.service.kafka.ssl.truststore.location: ssl/truststore.jks
# audit.service.kafka.ssl.truststore.password: password
# audit.service.kafka.ssl.endpoint.identification.algorithm: ""
# ## ОПЦИОНАЛЬНО вместо задания audit.service.metamodel.path можно задать следующие параметры
# audit.service.metamodel.module: Reactive-stream-adapter
# audit.service.metamodel.version: 1.0
# vault_configs_file: # настройки подключения к Vault, помещаются в файл из параметра vault.properties.file
# security.encoding.class: ru.sbt.ss.password.BaseEncryptor # Класс шифрования паролей
# security.encoding.key: file:./ssl/secret.pass # Путь до файла с ключом шифрования
# ssl.vault.address: https://host:port # Адрес vault-сервера
# ssl.vault.namespace: "" # Используемое пространство в vault
# ssl.vault.tls.enable: "true" # Включение/выключение безопасного подключения к vault
# ssl.vault.tls.truststore.location: ssl/vault-truststore.jks # Хранилище доверенных сертификатов для безопасного подключения к vault
# ssl.vault.tls.truststore.password: encrypted_password # Пароль от хранилища доверенных сертификатов
# ssl.endpoint.identification.algorithm: "" # Отключение проверки хостнейма в сертификате
# ssl.vault.auth.type: approle # Тип аутентификации
# ssl.vault.auth.role.id: role_id # Role ID для типа аутентификации approle
# ssl.vault.auth.secret.id: secret_id # Secret ID для типа аутентификации approle
# ssl.vault.pki.mount: "pki" # Путь до API движка выпуска сертификатов в Vault pki
# ssl.vault.pki.method: "issue" # Метод выпуска сертификатов, 'issue' или 'fetch'
# ssl.vault.pki.role.name: role # Имя роли в PKI Engine
# ssl.vault.pki.common.name: EVTA # Common name (CN) для генерации сертификатов
# ssl.vault.pki.email: email@example.com # Email для генерации сертификатов
# ssl.keystore.location: ssl/vault-keystore.jks # Путь до keystore хранилища
# ssl.keystore.mode: 600 # Права для keystore хранилища на файловой системе
# ssl.truststore.location: ssl/vault-truststore.jks # Путь до truststore хранилища
# ssl.truststore.mode: 600 # Права для keystore хранилища на файловой системе
# ssl.vault.before.expire: P21D # Промежуток времени до истечения сертификата для его перевыпуска в формате java.time.Duration (в примере - 21 день)
# ssl.vault.secret.path: kv1/secret/path # Секретный путь для паролей от ключа, keystore и truststore
# ssl.vault.engine.version: 1 # Версия API для key-value машины
# ssl.vault.kv.mount.path: kv2 # Путь до API движка Key-Value хранилища секретов (обязательно при engine.version: 2)
# ssl.vault.secret.key: key # Secret key для пароля от ключа
# ssl.vault.secret.keystore: keystore # Secret key для пароль от keystore
# ssl.vault.secret.truststore: truststore # Secret key для пароля от truststore
# vault_configs_file: # Можно описать несколько файлов с настройками подключения к vault
# - name: conf/vault-1.properties # Относительный путь генерируемого файла на ФС адаптера. Этот же путь можно указать в параметрах vault.properties.file
# params:
# security.encoding.class: ru.sbt.ss.password.BaseEncryptor # Класс шифрования паролей
# security.encoding.key: file:./ssl/secret.pass # Путь до файла с ключом шифрования
# ssl.vault.address: https://host:port # Адрес vault-сервераы
# ssl.vault.namespace: "" # Используемое пространство в vault
# ssl.vault.tls.enable: "true" # Включение/выключение безопасного подключения к vault
# ssl.vault.tls.truststore.location: ssl/vault-truststore.jks # Хранилище доверенных сертификатов для безопасного подключения к vault
# ssl.vault.tls.truststore.password: encrypted_password # Пароль от хранилища доверенных сертификатов
# ssl.endpoint.identification.algorithm: "" # Отключение проверки хостнейма в сертификате
# ssl.vault.auth.type: approle # Тип аутентификации
# ssl.vault.auth.role.id: role_id # Role ID для типа аутентификации approle
# ssl.vault.auth.secret.id: secret_id # Secret ID для типа аутентификации approle
# ssl.vault.pki.mount: "pki" # Путь до API движка выпуска сертификатов в Vault pki
# ssl.vault.pki.method: "issue" # Метод выпуска сертификатов, 'issue' или 'fetch'
# ssl.vault.pki.role.name: role # Имя роли в PKI Engine
# ssl.vault.pki.common.name: EVTA # Common name (CN) для генерации сертификатов
# ssl.vault.pki.email: email@example.com # Email для генерации сертификатов
# ssl.keystore.location: ssl/vault-keystore.jks # Путь до keystore хранилища
# ssl.keystore.mode: 600 # Права для keystore хранилища на файловой системе
# ssl.truststore.location: ssl/vault-truststore.jks # Путь до truststore хранилища
# ssl.truststore.mode: 600 # Права для keystore хранилища на файловой системе
# ssl.vault.before.expire: P21D # Промежуток времени до истечения сертификата для его перевыпуска в формате java.time.Duration (в примере - 21 день)
# ssl.vault.secret.path: kv1/secret/path # Секретный путь для паролей от ключа, keystore и truststore
# ssl.vault.engine.version: 1 # Версия API для key-value машины
# ssl.vault.kv.mount.path: kv2 # Путь до API движка Key-Value хранилища секретов (обязательно при engine.version: 2)
# ssl.vault.secret.key: key # Secret key для пароля от ключа
# ssl.vault.secret.keystore: keystore # Secret key для пароль от keystore
# ssl.vault.secret.truststore: truststore # Secret key для пароля от truststore
# - name: conf/vault-2.properties
# params:
# security.encoding.class: ru.sbt.ss.password.BaseEncryptor # Класс шифрования паролей
# security.encoding.key: file:./ssl/secret.pass # Путь до файла с ключом шифрования
# ssl.vault.address: https://host:port # Адрес vault-сервера номер 2
# ssl.vault.namespace: "" # Используемое пространство в vault 2
# ....
# ssl.vault.secret.keystore: keystore # Secret key для пароль от keystore
# ssl.vault.secret.truststore: truststore # Secret key для пароля от truststore
adapter_list: []
# - name: example # наименование адаптера
# egressType: rest # rest/grpc # использование как rest/grpc адаптер (по умолчанию - выключено)
# jmxport: 9400 # порт для подключения по JMX (уникальный для каждого адаптера)
# healthCheckPort: 9900 # порт для проверки на healthCheck, прометеус метрик и дискаверинга (уникальный для каждого адаптера)
# telemetry: # Конфигурация для Open Telemetry
# config: # Ниже представлен пример описания конфигурации Open Telemetry
# file_format: "0.1"
# resource:
# attributes:
# service.name: "<имя сервиса>"
# propagators: [ tracecontext ]
# tracer_provider:
# processors:
# - simple:
# exporter:
# otlp:
# endpoint: http://<host>:<port>
# sampler:
# always_on: { }
#
# # Опциональные параметры создаваемого пользовательского или системного сервиса
# # По умолчанию сервис создается с параметрами как указано ниже
# service_props:
# # Для записи логов стандартного вывода адаптера в /var/log/messages задать значение StandardOutput: "syslog"
# # Для просмотров логов в файле var/log/messages необходимо иметь права пользователя с использованием sudo
# # Для записи логов стандартного вывода адаптера в файл задать значение StandardOutput: "file:/path/to/file.log"
# StandardOutput: "null"
# Restart: "on-failure"
# RestartSec: "30"
# SuccessExitStatus: "143"
######### только при egressType: rest/grpc #########
# isHttp2: false # поддержка протокола HTTP/2
# autoCommit: false # необходимо ли подтверждение получения сообщения со стороны клиента для его коммита
# producer_port: 8087 # рест порт при подключении адаптера на produce/publish (удалить, если не требуется)
# consumer_port: 8088 # рест порт при подключении адаптера на consume/subscribe (удалить, если не требуется)
# # Настройки точек подключения
# endpoints:
# - name: "fpss://Domain.Federation.SEGMENT/System/TESTA/1"
# topic: "input"
## "partitionerType" тип алгоритма выбора партиции при отправке сообщения, допустимые значения:
## * `RoundRobin` равномерно распределяет сообщения по партициям, значение по умолчанию
## * `MurMur2` вычисляет номер партиции на основе хеш функции MurMur2 от ключа или тела сообщения
## * `header` вычисляет партицию на основе значения заголовка сообщения с именем из параметра `partitionerHeader`
## * `random` номер партиции выбирается случайным образом
# partitionerType: "murmur2" # тип алгоритма выбора партиции при отправке сообщения, допустимые значения "RoundRobin",
## partitionerHeader: "test"
# preset_name: kafka_example # имя пресета из reactive_stream_adapter_preset
# - name: "fpss://Domain.Federation.SEGMENT/System/TESTB/1"
# topic: "output"
# preset_name: kafka_example
# - name: "fpss://Domain.Federation.SEGMENT/System/TESTC/1"
# queue: "TRANSPORT_FROM_KAFKA"
# preset_name: artemis_example
# - name: "fpss://Domain.Federation.SEGMENT/System/TESTD/1"
# queue: "TRANSPORT_TO_KAFKA"
# preset_name: artemis_example
# # Включить механизм подтверждения получения/обработки сообщения
# needInfoAboutAcknowledge: true
# # кодировка, используемая для конвертации вычитанного значения для REST
# charset: UTF-8
# # Использовать ли механизм отключения неиспользуемого консьюмера
# useStorageTime: true
# # Периодичность проверки в миллисекундах
# delay: 60000
# # Время в миллисекундах после последнего обращения, когда консьюмер считается неиспользуемым
# storageTime: 300000
# ssl: # SSL настройки для рест интерфейса адаптера
# protocol: "TLSv1.2"
# key:
# password: __PLACEHOLDER__
# keystore:
# location: "ssl/example.jks"
# password: __PLACEHOLDER__
# truststore:
# location: "ssl/example.jks"
# password: __PLACEHOLDER__
# cipher:
# suites: "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_DHE_RSA_WITH_AES_128_GCM_SHA256" # список шифров для TLS соединения
# # при подключении к vault
# vault:
# properties:
# file: conf/vault.properties
# # при наличии properties.file все настройки подключения к Vault будут браться из блока vault_configs_file
# # переопределить любые настройки можно параметрами ниже
# address: "https://my.vault:8200/"
# tls:
# truststore:
# location: ssl/vault-client.jks
# password: __PLACEHOLDER__
# auth:
# type: APPROLE
# role:
# id: 12345678-abcd-1234-abcd-1234556789abc
# secret:
# id: 12345678-abcd-1234-abcd-1234556789abc
# pki:
# role:
# name: cert-role
# common:
# name: AdapterRest
# crl:
# enable: "true"
# secret:
# path: kv1/certstore
# key: key
# keystore: keystore
# truststore: truststore
# engine:
# version: 1
######### только при egressType: rest/grpc #########
## Процессинг
# processors:
# # Всегда добавляется в блок processors конфига как есть.
# log: # Логирование процессинга
# format: auto
# level: info
#
######################
## Настройки продюсера (не требуется при egressType: rest/grpc)
# producer: # Пример продюсера типа кафка
# preset_name: kafka_fpss # Обязательный параметр, название пресета
# topic: "output" # Обязательный параметр для продюсера типа кафка
## "partitionerType" тип алгоритма выбора партиции при отправке сообщения, допустимые значения:
## * `RoundRobin` равномерно распределяет сообщения по партициям, значение по умолчанию
## * `MurMur2` вычисляет номер партиции на основе хеш функции MurMur2 от ключа или тела сообщения
## * `header` вычисляет партицию на основе значения заголовка сообщения с именем из параметра `partitionerHeader`
## * `random` номер партиции выбирается случайным образом
# partitionerType: "murmur2" # тип алгоритма выбора партиции при отправке сообщения, допустимые значения "RoundRobin",
## partitionerHeader: "test"
## charset: # кодировка, используемая для конвертации публикуемого значения (при указании "key.serializer" или "value.serializer") в ожидаемый класс
## producer: # Пример продюсера типа artemis
## preset_name: artemis_fpss # Обязательный параметр, название пресета консюмера
## queue: "output" # Обязательный параметр для продюсера типа artemis/rabbit
#
######################
## Настройки консьюмера (не требуется при egressType: rest/grpc)
# consumer: # Пример консюмера типа кафка
# preset_name: kafka_fpss # Обязательный параметр, название пресета
# topic: "output" # Обязательный параметр для консюмера типа кафка
## deadLetter: "deadLetter" # Необязательный параметр для консюмера типа кафка, топик ошибочных сообщений
## charset: # кодировка, используемая для конвертации вычитанного значения (при указании "key.deserializer" или "value.deserializer") в байты
# props: # Пример добавления дополнительных параметров в проперти файл
# group.id: example-consumer
## consumer: # Пример консюмера типа artemis
## preset_name: artemis_fpss # Обязательный параметр, название пресета
## queue: "output" # Обязательный параметр для консюмера типа artemis/rabbit
### deadLetter: "deadLetter" # Необязательный параметр для консюмера типа artemis, очередь ошибочных сообщений
### keyHeader: '' # Необязательный параметр для консюмера типа artemis, имя заголовка сообщения для использования в качестве значения ключа, значение по умолчанию ""
## опциональный блок назначения прав для custom_files
#custom_files:
# permissions:
# default_permission: '644'
# custom_permissions:
# - path: test1.txt # путь относительно директории roles/<role_name>/custom_files
# permission: '600' # трехзначные в кавычках или без, четырехзначные (с 0 в начале) только в кавычках
# - path: subdir/test2.txt
# permission: '777'
# - path: subdir/subsubdir/test3.txt
# permission: '440'
При необходимости раскомментировать нужные блоки.
Установка в облачной среде#
Базовый файл настроек в облачной среде#
Базовый файл — файл Ansible/inventories/EXAMPLE_REACTIVE_STREAM_ADAPTER/group_vars/all/vars.yml, содержащий минимум настроек для корректной установки приложения.
Внимание! Параметры пресетов, используемые для установки на ВМ и в облачной среде, идентичны. Ознакомиться со всеми пресетами можно в файле для установки в облачной среде Ansible/roles/reactive_stream_adapter/defaults/main.yml или в подразделе «Примеры пресетов для подключения к внешним сервисам для EVTA».
Пример заполненного базового файла vars.yml:
api_url: https://kubeapi:6443 # URL API openshift/k8s
kubeconfig_path: "{{ inventory_dir }}/kube-config-dapp-01"
namespace: ns-1 # наименование проекта
### Пример пресетов
reactive_stream_adapter_preset:
kafka_example:
client: kafka # Тип пресета
props:
ssl.keystore.location: ssl/kafka-dev-cluster-1.jks
ssl.keystore.password: "{{ jks_password }}"
ssl.truststore.location: ssl/kafka-dev-cluster-1.jks
ssl.truststore.password: "{{ jks_password }}"
ssl.key.password: "{{ jks_password }}"
security.protocol: SSL
bootstrap.servers: host1:9092,host2:9092
enable.auto.commit: false # Обязательно, для управления коммитами из кода адаптера
ssl.endpoint.identification.algorithm: "" # Отключение проверки хостнейма в сертификате, обязательно для стендов Kafka
### Пример адаптера. Полный список параметров можно посмотреть в файле
### Ansible/roles/reactive_stream_adapter_vm/defaults/main.yml
reactive_stream_adapter:
pullImage: tuz # наименование секрета в опеншифте для доступа в регистри (скачивание образа)
openshiftInstall: false # установка в openshift (true) или в k8s (false)
registry: example-registry.com
registry_path: example/example
resources:
limits:
cpu: 0.2
memory: 300M
requests:
cpu: 0.2
memory: 200M
config:
#####################
# Дефолтные настройки, не обязательные в дистрибутиве
timeout: 5000 # общий тайм-аут на блокирующие операции
retries: 3 # количество попыток запуска адаптера
threadCount: 1 # Количество потоков в приложении
#####################
# Дефолтные настройки для продюсера или консьюмера, которые могут быть переопределены в дистрибутиве
batchSize: 1000 # размер сообщений, обрабатываемый за одну итерацию, может быть переопределен в дистрибутиве
#####################
# Дефолтные настройки логирования, не обязательные в дистрибутиве
logging:
logback:
level: info # Дефолтный уровень логирования
name: adapter-kafka-kafka # наименование адаптера
# Включить механизм подтверждения получения/обработки сообщения
needInfoAboutAcknowledge: true
consumer:
preset_name: kafka_example
topic: "topic1"
producer:
preset_name: kafka_example
topic: "topic2"
При необходимости раскомментировать нужные блоки.
Расширенный файл настроек в облачной среде#
Расширенный файл — файлAnsible/roles/reactive_stream_adapter/defaults/main.yml. Представляет собой пример всех изменяемых настроек со значениями «по умолчанию». Любую из указанных настроек можно перенести в свой vars.yml для переопределения ее значения.
Крупные блоки в настройках:
reactive_stream_adapter_preset— пресеты для подключения к внешним сервисам (Kafka, Artemis, IBM MQ, RabbitMQ);reactive_stream_adapter— настройки адаптера при установке в облачной среде.
Пример расширенного файла настроек vars.yml:
#helm_cli: helm # путь до helm
#kubeconfig_path: /home/user/kubeconfig # путь до файла kubeconfig (может быть зашифрован через ansible-vault)
api_url: https://api.example.ru:6443 # URL API openshift/k8s (не требуется при наличии kubeconfig_path)
token: __PLACEHOLDER__ # токен пользователя (сервис аккаунта) для установки (не требуется при наличии kubeconfig_path)
skip_tls_verify: false # игнорировать проверку доверия для URL API (не требуется при наличии kubeconfig_path)
namespace: my-evta-namespace # наименование проекта в openshift/k8s
########
# Внимание! Плейбук использует пресеты
# reactive_stream_adapter_preset
# Примеры заполнения пресетов в файле Ansible/roles/common/defaults/main.yml
# Пример дистрибутива конфигурации
reactive_stream_adapter:
openshiftInstall: true # установка в openshift (true) или в k8s (false)
registry: "example.registry.addr" # адрес репозитория с образом
registry_path: "example_repo/example_path" # путь в репозитории до образа
# Признак монтирования токена для работы с KubeAPI. Если установлено false, то токен будет примонтирован автоматически. Если true — токен будет примонтирован в рамках Deployment.
projectedKubeAPI: false
pullImage: example-secret # наименование секрета для доступа в регистри (скачивание образа)
#####################
# Дефолтные настройки, не обязательные в дистрибутиве
replicas: 1 # количество подов в деплойменте (2 по дефолту стандарта STD-7-RL-411)
## Допустимые параметры для jvmArgs:
# - "-XX:MetaspaceSize"
# - "-XX:MaxMetaspaceSize"
# - "-XX:MinMetaspaceFreeRatio"
# - "-XX:MaxMetaspaceFreeRatio"
# - "-XX:MinHeapFreeRatio"
# - "-XX:MaxHeapFreeRatio"
# - "-XX:+AlwaysPreTouch"
# - "-noverify"
# - "-XX:+AlwaysActAsServerClassMachine"
# - "XX:+UseContainerSupport"
# - "XX:MaxRAMPercentage"
jvmArgs: "-noverify -XX:+AlwaysPreTouch -XX:+AlwaysActAsServerClassMachine -XX:+UseContainerSupport -XX:MaxRAMPercentage=70"
# Конфигурация окружения
environment:
# Язык для локализации сообщений программы
LANG: "ru_RU.UTF-8"
# Устанавливает язык и локализацию для всех категорий
LC_ALL: "ru_RU.UTF-8"
# Язык для интерфейса пользователя и сообщений об ошибках
LANGUAGE: "en_US:en:ru_RU.UTF-8:ru_RU:ru"
## Аннотации для Deployment, добавляются как есть
annotations: {}
#"sidecar.istio.io/inject": "false"
#"traffic.sidecar.istio.io/excludeOutboundPorts": "9093" # Порты пресетов Kafka, значение будет перегенерено из пресетов
# # Соответствие стандарта STD-7-CFG-508
priorityClassName: ""
# # Соответствие стандарта STD-7-CFG-504
podAntiAffinity:
enabled: true
rollingUpdate:
maxUnavailable: 50% # Максимальное количество недоступных подов во время обновления
maxSurge: 50% # Максимальное количество дополнительных подов во время обновления
# # Пример переопределения параметров readinessProbe
readinessProbe: {}
# initialDelaySeconds: 30
# timeoutSeconds: 10
# periodSeconds: 10
# successThreshold: 1
# failureThreshold: 8
# # Пример переопределения параметров livenessProbe
livenessProbe: {}
# initialDelaySeconds: 30
# timeoutSeconds: 10
# periodSeconds: 10
# successThreshold: 1
# failureThreshold: 8
## # Пример переопределение ресурсов pod-а
# resources:
# limits:
# cpu: 2
# memory: 600M
# requests:
# cpu: 1
# memory: 400M
## Метки для Deployment, добавляются как есть
labels: {}
#"secman-injector": "enabled" # Метка для активации интеграции с secman vault agent injector
# Ожидание старта Vault Sidecar, при наличии аннотации "vault.hashicorp.com/agent-inject" со значением true
waitVault: true
# Ожидание старта Istio Sidecar, при наличии аннотации "sidecar.istio.io/inject" со значением true
waitIstio: true
# Настройки адаптера
config:
# # Наименование деплоймента. Результат: reactivestreamadapter-example
# name: example
# # Тип подключения пользователей (grpc, rest, default)
# egressType: rest
# # Количество обрабатываемых сообщений за одну итерацию
batchSize: 1000
# # Время одной итерации (при указании итерация будет считаться законченной по первому из достигнутых условий - либо по достижении тайм-аута, либо при вычитке сообщений в количестве `batchSize`)
batchTimeout: -1
# # Тайм-аут выполнения одной итерации обработки
timeout: 36000
# # Количество попыток перезапуска потока обработки
retries: 3
# # Интервал в миллисекундах между попытками запуска адаптера
retryInterval: 1000
# # Множитель каждой следующей попытки
retryMultiplier: 1
# # Количество потоков
threadCount: 1
# # Порт проверки состояния доступности приложения
healthCheckPort: 8082
# Возможность изменения уровня незаданных в logback логеров в runtime по эндпоинту /loggers на порту healthCheckPort.
changeLoggersAvailable: true
# Возможность изменения уровня root логера в runtime по эндпоинту /loggers на порту healthCheckPort.
changeRootAvailable: true
# Список файлов необходимых перед стартом адаптера пример: /vault/evta-key.pem,/vault/evta-ca.pem
filesToWait: ""
# Тайм-аут ожидания файлов необходимых для старта адаптера
filesToWaitTimeout: 50000
logging:
logback:
level: info # Дефолтный уровень логирования
# loggers:
# - name: "ru.sbt.ss"
# level: info
# - name: "ru.sbt.cep"
# level: info
# - name: "org.apache.kafka"
# level: warn
# - name: "com.typesafe.akka"
# level: info
kafka: # Отправление логи в топик Kafka
enabled: false # Включение функциональности отправки логов в топик Kafka
retries: 3 # Количество переинициализаций продюсера
interval: 1000 # Интервал между переинициализациями
multiplier: 1 # Множитель интервала переинициализации
never_block: true # блокировка работы приложения при недоступности Kafka (при true недоставленные сообщения в kafka отбрасываются)
# # Необязательные поля, если logging.kafka.enabled: false
# preset_name: kafka_fpss # Название пресета для отправки логов в топик Kafka
# topic: logstash # Наименование топика
# endpoint_whitelist_dn: # список DN сертификатов брокеров kafka/rabbit/artemis, к которым адаптеру разрешено подключаться
# - CN=localhost, O=SBT, C=RU
# - CN=test, O=SBT, C=RU
# Конфигурация для Open Telemetry
telemetry: {}
# config:
# file_format: "0.1"
# resource:
# attributes:
# service.name: "<имя сервиса>"
# propagators: [ tracecontext ]
# tracer_provider:
# processors:
# - simple:
# exporter:
# otlp:
# endpoint: http://<host>:<port>
# sampler:
# always_on: { }
# Дополнительное логирование обработки сообщения
log: {}
# log:
# eventIdHeader: JMSMessageID # заголовок, значение которого будет браться из сообщения для поля eventId лога
# consumerLogEnabled: "false" # логирование вычитки сообщения, по умолчанию false
# producerLogEnabled: "false" # логирование публикации сообщения, по умолчанию false
# processorsLogEnabled: "false" # логирование результатов работы процессоров сообщения (например, валидации), по умолчанию false
# deadLetterLogEnabled: "false" # логирование отправки сообщения в deadLetter, по умолчанию false
# metrics: # настройки метрик
# jmx: # настройки метрик JMX
# enabled: "true" # включение метрик
# domain: ru.sbt.ss.reactive.stream.adapter # корневой пакет для метрик
# step: 1m # интервал для агрегирующих функций
# prometheus: # настройки метрик Prometheus
# enabled: "false" # включение метрик
# histogramFlavor: Prometheus # тип формата гистограмм
# step: 1m # интервал для агрегирующих функций
# # Путь в контейнере до списка с разрешенными DN сертификатов брокеров Kafka/Artemis
# # Файл формируется автоматически из списка reactive_stream_adapter.endpoint_whitelist_dn
# # (не менять или указать путь до заранее сгенерированного файла)
# brokerWhiteListPath: /reactivestreamadapter/ssl/allowed-dn.txt
# audit: # настройки аудита
# audit.service.type: http
# audit.service.url: http://audit.endpoint
# audit.service.request.timeout.ms: 10000
# audit.service.metamodel.path: ./audit/adapter-metamodel.json
# audit.service.send.metamodel: "false"
# audit.service.pretty.print: "false"
# audit.service.ssl.enabled: "false"
# audit.service.ssl.keystore.location: "ssl/audit_keystore.jks"
# audit.service.ssl.keystore.password: __PLACEHOLDER__
# audit.service.ssl.key.password: __PLACEHOLDER__
# audit.service.ssl.truststore.location: "ssl/audit_truststore.jks"
# audit.service.ssl.truststore.password: __PLACEHOLDER__
# audit.service.secret: "file:./ssl/secret.pass"
# audit.service.verify.hostname: "false"
# audit.service.add.redelivery.headers: "false"
# audit.service.redelivery.enabled: "true"
# audit.service.redelivery.interval.ms: 15000
# audit.service.redelivery.initial.delay.ms: 10000
# audit.service.redelivery.stop.on.error: "true"
# audit.service.redelivery.retries: -1
# audit.service.stop.timeout.ms: 3000
# audit.service.redelivery.buffers: in-memory-buffer
# audit.service.redelivery.in-memory-buffer.type: queue
# audit.service.redelivery.in-memory-buffer.clear.logger.name: memory
# audit.service.dead.letter.redelivery.enabled: "true"
# audit.service.dead.letter.redelivery.interval.ms: 15000
# audit.service.dead.letter.redelivery.initial.delay.ms: 10000
# audit.service.dead.letter.redelivery.stop.on.error: false
# audit.service.dead.letter.redelivery.retries: -1
# audit.service.dead.letter.redelivery.buffers: queue-fallback
# audit.service.dead.letter.redelivery.queue-fallback.type: queue
# audit.service.dead.letter.redelivery.queue-fallback.queue.name: logger-fallback
# ## Настройка kafka-транспорта для событий аудита
# audit.service.transport.type: kafka # Тип транспорта, http или kafka, по умолчанию http
# audit.service.metamodel.topic: metamodel-topic # Имя топика для отправки метамодели
# audit.service.event.topic: event-topic # Имя топика для отправки событий
# audit.service.kafka.bootstrap.servers: "localhost:9093" # Адреса kafka
# audit.service.node.id: "hostname-1" # Идентификатор узла, может брать значение переменной окружения (например env:HOSTNAME)
# audit.service.source.system: "source.system" # Название инсталяции, может брать значение переменной окружения (например env:HOSTNAME)
# ## ОПЦИОНАЛЬНО Сериализаторы (по умолчанию org.apache.kafka.common.serialization.StringSerializer)
# audit.service.kafka.key.serializer: org.apache.kafka.common.serialization.StringSerializer
# audit.service.kafka.value.serializer: org.apache.kafka.common.serialization.StringSerializer
# ## ОПЦИОНАЛЬНО идентификатор клиента
# audit.service.kafka.client.id: audit-producer
# ## ОПЦИОНАЛЬНО настройки ssl
# audit.service.kafka.security.protocol: SSL
# audit.service.kafka.ssl.keystore.location: ssl/keystore.jks
# audit.service.kafka.ssl.keystore.password: password
# audit.service.kafka.ssl.truststore.location: ssl/truststore.jks
# audit.service.kafka.ssl.truststore.password: password
# audit.service.kafka.ssl.endpoint.identification.algorithm: ""
# ## ОПЦИОНАЛЬНО вместо задания audit.service.metamodel.path можно задать следующие параметры
# audit.service.metamodel.module: Reactive-stream-adapter
# audit.service.metamodel.version: 1.0
# vault_configs_file: # настройки подключения к Vault, помещаются в файл из параметра vault.properties.file
# security.encoding.class: ru.sbt.ss.password.BaseEncryptor # Класс шифрования паролей
# security.encoding.key: file:./ssl/secret.pass # Путь до файла с ключом шифрования
# ssl.vault.address: https://host:port # Адрес vault-сервера
# ssl.vault.namespace: "" # Используемое пространство в vault
# ssl.vault.tls.enable: "true" # Включение/выключение безопасного подключения к vault
# ssl.vault.tls.truststore.location: ssl/vault-truststore.jks # Хранилище доверенных сертификатов для безопасного подключения к vault
# ssl.vault.tls.truststore.password: encrypted_password # Пароль от хранилища доверенных сертификатов
# ssl.endpoint.identification.algorithm: "" # Отключение проверки хостнейма в сертификате
# ssl.vault.auth.type: approle # Тип аутентификации
# ssl.vault.auth.role.id: role_id # Role ID для типа аутентификации approle
# ssl.vault.auth.secret.id: secret_id # Secret ID для типа аутентификации approle
# ssl.vault.pki.mount: "pki" # Путь до API движка выпуска сертификатов в Vault pki
# ssl.vault.pki.method: "issue" # Метод выпуска сертификатов, 'issue' или 'fetch'
# ssl.vault.pki.role.name: role # Имя роли в PKI Engine
# ssl.vault.pki.common.name: EVTA # Common name (CN) для генерации сертификатов
# ssl.vault.pki.email: email@example.com # Email для генерации сертификатов
# ssl.keystore.location: tmp/vault-keystore.jks # Путь до keystore хранилища
# ssl.keystore.mode: 600 # Права для keystore хранилища на файловой системе
# ssl.truststore.location: tmp/vault-truststore.jks # Путь до truststore хранилища
# ssl.truststore.mode: 600 # Права для keystore хранилища на файловой системе
# ssl.vault.before.expire: P21D # Промежуток времени до истечения сертификата для его перевыпуска в формате java.time.Duration (в примере - 21 день)
# ssl.vault.secret.path: kv1/secret/path # Секретный путь для паролей от ключа, keystore и truststore
# ssl.vault.engine.version: 1 # Версия API для key-value машины
# ssl.vault.kv.mount.path: kv2 # Путь до API движка Key-Value хранилища секретов (обязательно при engine.version: 2)
# ssl.vault.secret.key: key # Secret key для пароля от ключа
# ssl.vault.secret.keystore: keystore # Secret key для пароль от keystore
# ssl.vault.secret.truststore: truststore # Secret key для пароля от truststore
# # В truststore можно подложить дополнительные корневые сертификаты из Vault
# ssl.vault.pem.trust.path: kv1/secret/path-to-trusts # Путь до Key-Value секрета c доверенными сертификатами в формате PEM
# ssl.vault.pem.trust.aliases: ca1, ca2, ca3, ca4 # Список ключей в секрете, содержимое которых необходимо загрузить в хранилище доверенных сертификатов, разделитель запятая
# vault_configs_file: # Можно описать несколько файлов с настройками подключения к vault
# - name: conf/vault-1.properties # Файла обязательно должен находиться в директории conf. Этот же путь можно указать в параметрах vault.properties.file
# params:
# security.encoding.class: ru.sbt.ss.password.BaseEncryptor # Класс шифрования паролей
# security.encoding.key: file:./ssl/secret.pass # Путь до файла с ключом шифрования
# ssl.vault.address: https://host:port # Адрес vault-сервераы
# ssl.vault.namespace: "" # Используемое пространство в vault
# ssl.vault.tls.enable: "true" # Включение/выключение безопасного подключения к vault
# ssl.vault.tls.truststore.location: ssl/vault-truststore.jks # Хранилище доверенных сертификатов для безопасного подключения к vault
# ssl.vault.tls.truststore.password: encrypted_password # Пароль от хранилища доверенных сертификатов
# ssl.endpoint.identification.algorithm: "" # Отключение проверки хостнейма в сертификате
# ssl.vault.auth.type: approle # Тип аутентификации
# ssl.vault.auth.role.id: role_id # Role ID для типа аутентификации approle
# ssl.vault.auth.secret.id: secret_id # Secret ID для типа аутентификации approle
# ssl.vault.pki.mount: "pki" # Путь до API движка выпуска сертификатов в Vault pki
# ssl.vault.pki.method: "issue" # Метод выпуска сертификатов, 'issue' или 'fetch'
# ssl.vault.pki.role.name: role # Имя роли в PKI Engine
# ssl.vault.pki.common.name: EVTA # Common name (CN) для генерации сертификатов
# ssl.vault.pki.email: email@example.com # Email для генерации сертификатов
# ssl.keystore.location: ssl/vault-keystore.jks # Путь до keystore хранилища
# ssl.keystore.mode: 600 # Права для keystore хранилища на файловой системе
# ssl.truststore.location: ssl/vault-truststore.jks # Путь до truststore хранилища
# ssl.truststore.mode: 600 # Права для keystore хранилища на файловой системе
# ssl.vault.before.expire: P21D # Промежуток времени до истечения сертификата для его перевыпуска в формате java.time.Duration (в примере - 21 день)
# ssl.vault.secret.path: kv1/secret/path # Секретный путь для паролей от ключа, keystore и truststore
# ssl.vault.engine.version: 1 # Версия API для key-value машины
# ssl.vault.kv.mount.path: kv2 # Путь до API движка Key-Value хранилища секретов (обязательно при engine.version: 2)
# ssl.vault.secret.key: key # Secret key для пароля от ключа
# ssl.vault.secret.keystore: keystore # Secret key для пароль от keystore
# ssl.vault.secret.truststore: truststore # Secret key для пароля от truststore
# - name: conf/vault-2.properties
# params:
# security.encoding.class: ru.sbt.ss.password.BaseEncryptor # Класс шифрования паролей
# security.encoding.key: file:./ssl/secret.pass # Путь до файла с ключом шифрования
# ssl.vault.address: https://host:port # Адрес vault-сервера номер 2
# ssl.vault.namespace: "" # Используемое пространство в vault 2
# ....
# ssl.vault.secret.keystore: keystore # Secret key для пароль от keystore
# ssl.vault.secret.truststore: truststore # Secret key для пароля от truststore
# processors: # Процессинг
# # Всегда добавляется в блок processors конфига как есть.
# log: # Логирование процессинга
# format: auto
# level: info
######### только при egressType: rest/grpc #########
# # Порт для отправки сообщений
egressPublishPort: 8080
# # Порт для получения сообщений
egressSubscribePort: 8081
# # Поддержка протокола HTTP2
http2: false
# # Настройки роута для ose / ингресса для k8s. Только для rest
route:
create: false
# # Суффикс хоста роута или ингресса
hostName: apps.exampleose.com
egressPublish:
path: /
pathType: Prefix
prefix: adapter-pub
egressSubscribe:
path: /
pathType: Prefix
prefix: adapter-sub
annotations: {}
# autoCommit: false # необходимо ли подтверждение получения сообщения со стороны клиента для его коммита
# # Настройки эндпойнтов
# endpoints:
# - name: "fpss://Domain.Federation.SEGMENT/System/TESTA/1"
# topic: "input"
## "partitionerType" тип алгоритма выбора партиции при отправке сообщения, допустимые значения:
## * `RoundRobin` равномерно распределяет сообщения по партициям, значение по умолчанию
## * `MurMur2` вычисляет номер партиции на основе хеш функции MurMur2 от ключа или тела сообщения
## * `header` вычисляет партицию на основе значения заголовка сообщения с именем из параметра `partitionerHeader`
## * `random` номер партиции выбирается случайным образом
# partitionerType: "murmur2" # тип алгоритма выбора партиции при отправке сообщения, допустимые значения "RoundRobin",
## partitionerHeader: "test"
# preset_name: kafka_example # имя пресета из reactive_stream_adapter_preset
# - name: "fpss://Domain.Federation.SEGMENT/System/TESTB/1"
# topic: "output"
# preset_name: kafka_example
# - name: "fpss://Domain.Federation.SEGMENT/System/TESTC/1"
# queue: "TRANSPORT_FROM_KAFKA"
# preset_name: artemis_example
# - name: "fpss://Domain.Federation.SEGMENT/System/TESTD/1"
# queue: "TRANSPORT_TO_KAFKA"
# preset_name: artemis_example
# # Путь к файлу с настройками эндпойнтов urlConfigPath (не менять, обязательный параметр)
urlConfigPath: "conf/urlConfig.json"
# # Включить механизм подтверждения получения/обработки сообщения
# needInfoAboutAcknowledge: true
# # Кодировка, используемая для конвертации вычитанного значения для REST
# charset: 'UTF-8'
# # Использовать ли механизм отключения неиспользуемого консьюмера
# useStorageTime: false
# # Периодичность проверки в миллисекундах
# delay: 60000
# # Время в миллисекундах после последнего обращения, когда консьюмер считается неиспользуемым
# storageTime: 300000
# ssl:
# preset_name: kafka_example # все ssl настройки берутся из указанного пресета (если параметр задан)
# protocol: "TLSv1.2"
# key:
# password: __PLACEHOLDER__
# keystore:
# location: "ssl/example.jks"
# password: __PLACEHOLDER__
# truststore:
# location: "ssl/example.jks"
# password: __PLACEHOLDER__
# cipher:
# suites: "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_DHE_RSA_WITH_AES_128_GCM_SHA256" # список шифров для TLS соединения
# # при подключении к vault
# vault:
# properties:
# file: conf/vault.properties # имя не изменять
# # при наличии properties.file все настройки подключения к Vault будут браться из блока vault_configs_file
# # переопределить настройки можно ниже
# address: "https://my.vault:8200/"
# tls:
# truststore:
# location: ssl/vault-client.jks
# password: __PLACEHOLDER__
# auth:
# type: APPROLE
# role:
# id: 12345678-abcd-1234-abcd-1234556789abc
# secret:
# id: 12345678-abcd-1234-abcd-1234556789abc
# pki:
# role:
# name: cert-role
# common:
# name: AdapterRest
# crl:
# enable: "true"
# secret:
# path: kv1/certstore
# key: key
# keystore: keystore
# truststore: truststore
# engine:
# version: 1
## Список DN rest/grpc клиентов, которым разрешено подключаться к адаптеру
## Если список пуст - аутентификация не требуется
# auth_clients: []
# # Пример списка DN rest/grpc клиентов
# #auth_clients:
# # - 'CN=Client1, OU=TEST, O=EXAMPLE, L=Moscow, C=RU'
# # - 'CN=Client2, OU=TEST, O=EXAMPLE, L=Moscow, C=RU'
## файл формируется автоматически из списка reactive_stream_adapter.config.ssl.auth_clients
## (не менять или указать путь до заранее сгенерированного файла)
# white:
# list:
# path: "/reactivestreamadapter/ssl/allowed-client-dn.txt"
######################
######### Настройки консьюмера/продюсера (не требуется при egressType: rest/grpc)
# Пример консюмера типа kafka
# consumerType: 'kafka'
# consumer:
# preset_name: kafka_fpss # Обязательный параметр, название пресета
# topic: "input" # Обязательный параметр для консюмера типа кафка
# deadLetter: "deadLetter" # Необязательный параметр для консюмера типа кафка, топик ошибочных сообщений
# charset: # кодировка, используемая для конвертации вычитанного значения (при указании "key.deserializer" или "value.deserializer") в байты
# props: # Пример добавления дополнительных параметров в проперти файл
# group.id: example-consumer
# Пример консюмера типа artemis
# consumerType: 'artemis'
# consumer:
# preset_name: artemis_fpss # Обязательный параметр, название пресета
# queue: "input" # Обязательный параметр, название очереди
# deadLetter: "deadLetter" # Необязательный параметр, очередь ошибочных сообщений
# keyHeader: '' # Необязательный параметр, имя заголовка сообщения для использования в качестве значения ключа, значение по умолчанию ""
# Пример консюмера типа rabbit_mq
# consumerType: 'rabbit'
# consumer:
# preset_name: rabbit_fpss # Обязательный параметр, название пресета
# queue: "input" # Обязательный параметр, название очереди
# Пример продюсера типа kafka
# producerType: 'kafka'
# producer:
# preset_name: kafka_fpss # Обязательный параметр, название пресета
# topic: "output" # Обязательный параметр для продюсера типа кафка
# charset: # кодировка, используемая для конвертации вычитанного значения (при указании "key.deserializer" или "value.deserializer") в байты
## "partitionerType" тип алгоритма выбора партиции при отправке сообщения, допустимые значения:
## * `RoundRobin` равномерно распределяет сообщения по партициям, значение по умолчанию
## * `MurMur2` вычисляет номер партиции на основе хеш функции MurMur2 от ключа или тела сообщения
## * `header` вычисляет партицию на основе значения заголовка сообщения с именем из параметра `partitionerHeader`
## * `random` номер партиции выбирается случайным образом
# partitionerType: "murmur2" # тип алгоритма выбора партиции при отправке сообщения, допустимые значения "RoundRobin",
## partitionerHeader: "test"
# props: # Пример добавления дополнительных параметров в проперти файл
# group.id: example-consumer
# Пример продюсера типа rabbit_mq
# producerType: 'rabbit'
# producer:
# preset_name: rabbit_fpss # Обязательный параметр, название пресета
# queue: "output" # Обязательный параметр, название очереди
# Пример продюсера типа artemis
# producerType: 'artemis'
# producer:
# preset_name: artemis_fpss # Обязательный параметр, название пресета
# queue: "output" # Обязательный параметр, название очереди
# keyHeader: '' # Необязательный параметр, имя заголовка сообщения для использования в качестве значения ключа, значение по умолчанию ""
######################
istio: # настройки манифестов Istio
# destinationRule: # параметры для манифеста DestinationRule Istio
# outlierDetection:
# consecutive5xxErrors: 3
# interval: 30s
# baseEjectionTime: 1m
# maxEjectionPercent: 10
peerAuthentication:
create: false
# name: peer-auth-0
# mtls_mode: PERMISSIVE # UNSET (default) | DISABLE | PERMISSIVE | STRICT
ingress:
deployment:
create: false # создавать ли Deployment для istio ingressgateway
name: evta # Суффикс названия деплоймента и сервиса входного граничного прокси. К этому названию автоматически будет добавлен префикс "ingressgateway-"
# resources:
# limits:
# cpu: 0.1
# memory: 128M
# requests:
# cpu: 0.1
# memory: 64M
podAntiAffinity:
enabled: true # Если значение установлено в true, то антитенантность будет применена к подам ingressgateway
readinessProbe: {}
# initialDelaySeconds: 1
# timeoutSeconds: 1
# periodSeconds: 2
# successThreshold: 1
# failureThreshold: 30
annotations:
sidecar.istio.io/inject: 'false'
# # Дополнительные аннотации для граничного прокси. Здесь можно описать импорт сертификатов из vault/secman
# vault.hashicorp.com/agent-inject-secret-ca.pem: 'true'
# vault.hashicorp.com/secret-volume-path-ca.pem: /vault/ingress
# vault.hashicorp.com/namespace: DEV_DZO
# vault.hashicorp.com/role: role-ga-secman-eda
# 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 "PKI/issue/role-ga-secman-eda"
# "common_name=evta.eda.solution.sbt" "format=pem" "ttl=20h"
# "private_key_format=pkcs8" -}}
# {{ .Data.private_key }}
# {{- end }}
# {%- endraw %}
# vault.hashicorp.com/agent-inject-template-ca.pem: |
# {%- raw %}
# {{- with secret "PKI/issue/role-ga-secman-eda"
# "common_name=evta.eda.solution.sbt" "format=pem" "ttl=20h"
# "private_key_format=pkcs8" -}}
# {{- range $idx, $cert := .Data.ca_chain }}
# {{ $cert }}
# {{- end }}
# {{- end }}
# {%- endraw %}
# vault.hashicorp.com/agent-inject-template-crt.pem: |
# {%- raw %}
# {{- with secret "PKI/issue/role-ga-secman-eda"
# "common_name=evta.eda.solution.sbt" "format=pem" "ttl=20h"
# "private_key_format=pkcs8" -}}
# {{ .Data.certificate }}
# {{- end }}
# {%- endraw %}
labels: {}
# secman-injector: enabled # метка для активации интеграции с secman vault agent injector
# istioDiscoveryService: istiod # название discovery сервиса панели истио к которой подключен ваш неймспейс
# istioControlPlane: control-plane-01 # название неймспейса контрольной панели истио к которой подключен ваш неймспейс
# proxyImage: image # ссылка на образ граничного прокси (IGEG)
service: # параметры сервиса Ingress
create: false # создавать ли манифест сервиса
# name: evta-ingressgateway-svc # имя сервиса Ingress (по умолчанию имя генерируется автоматически)
# port:
# name: https-8082
# number: 8082
# protocol: TCP
# selector: # Селектор для интеграции с уже существующим подом ingressgateway
# istio: ingressgateway-tribe-sy-synes-nt
# app: ingressgateway-tribe-sy-synes-nt
# route, ссылающийся на имя описанного в ingress service порт, по которому будет производиться маршрутизация внутри ingress.
route:
create: false # создавать ли манифест Route
# host: test1-https-ingress.apps.stands-vdc01.solution.sbt
# annotations: {}
# tls:
# termination: passthrough
# service:
# port: https-8082
# name: evta-ingressgateway-svc
# gateway, в котором указывается параметр содержащий ingress url, который указан в route, и порт из service ingress'a, в который будет заворачиваться трафик.
gateway:
create: false # создавать ли манифест Gateway
# name: evta-ingressgateway-gw # имя манифеста (по умолчанию имя генерируется автоматически)
# hosts: test1-https-ingress.apps.stands-vdc01.solution.sbt
# port:
# name: https
# number: 8082
# protocol: HTTPS
# tls:
# caCertificates: /etc/istio/egressgateway0-ca-certs/ca-chain.cert.pem
# cipherSuites:
# - ECDHE-RSA-AES256-GCM-SHA384
# - ECDHE-ECDSA-AES128-GCM-SHA256
# - ECDHE-RSA-AES128-GCM-SHA256
# - AES256-GCM-SHA384
# - AES128-GCM-SHA256
# minProtocolVersion: TLSV1_2
# mode: MUTUAL
# privateKey: /etc/istio/egressgateway0-certs/tls.key
# serverCertificate: /etc/istio/egressgateway0-certs/tls.crt
# virtualService
virtualService:
create: false # создавать ли манифест VirtualService
# hosts: 'test1-https-ingress.apps.stands-vdc01.solution.sbt'
# http:
# # example for rest
# - prefix: /publish
# port: 8080
# - prefix: /subscribe
# port: 8081
# # example for grpc
# - prefix: /ru.sbt.synapse.fpss.adapter.grpc.api.PublishService
# port: 8080
# - prefix: /ru.sbt.synapse.fpss.adapter.grpc.api.SubscribeService
# port: 8081
# массив serviceEntry, которые нужно создать
# serviceEntry:
# - host: my_hostname
# addresses: { IP_ADDRESS }/32
# resolution: NONE
# port:
# name: tcp-kafka
# number: 9092
# protocol: TCP
# # annotations: # раскомментировать, если нужно, чтобы serviceEntry осталась после helm uninstall
# # "helm.sh/resource-policy": keep
# - host: secman-dzo.solution.sbt
# resolution: DNS
# port:
# name: tcp-vault
# number: 8443
# protocol: TCP
# - host: ext.audit2-http-proxy.apps.stands-vdc01.solution.sbt
# resolution: DNS
# port:
# name: https-audit
# number: 443
# protocol: HTTPS
egress:
deployment:
create: false # создавать ли Deployment для istio egressgateway
name: evta # Суффикс названия деплоймента и сервиса выходного граничного прокси. К этому названию автоматически будет добавлен префикс "egressgateway-"
# resources:
# limits:
# cpu: 0.1
# memory: 128M
# requests:
# cpu: 0.1
# memory: 64M
podAntiAffinity:
enabled: true # Если значение установлено в true, то антитенантность будет применена к подам egressgateway
readinessProbe: {}
# initialDelaySeconds: 1
# timeoutSeconds: 1
# periodSeconds: 2
# successThreshold: 1
# failureThreshold: 30
annotations:
sidecar.istio.io/inject: 'false'
# # Дополнительные аннотации для граничного прокси. Здесь можно описать импорт сертификатов из vault/secman
# vault.hashicorp.com/agent-inject-template-cert.pem: |
# {%- raw %}
# {{- with secret "A/DEV/SY/EVTD/KV/example-audit-cert" -}}
# {{ index .Data "cert" }}
# {{- end }}
# {%- endraw %}
# vault.hashicorp.com/agent-inject-secret-ca.pem: 'true'
# vault.hashicorp.com/secret-volume-path-ca.pem: /vault
# vault.hashicorp.com/namespace: DEV_DZO
# vault.hashicorp.com/role: role-ga-secman-eda
# vault.hashicorp.com/agent-inject-secret-cert.pem: 'true'
# vault.hashicorp.com/secret-volume-path-key.pem: /vault
# vault.hashicorp.com/agent-inject: 'true'
# vault.hashicorp.com/secret-volume-path-cert.pem: /vault
# vault.hashicorp.com/agent-inject-secret-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 "A/DEV/SY/EVTD/KV/exampl-audit-cert" -}}
# {{ index .Data "key" }}
# {{- end }}
# {%- endraw %}
# vault.hashicorp.com/agent-inject-template-ca.pem: |
# {%- raw %}
# {{- with secret "A/DEV/SY/EVTD/KV/exampl-audit-cert" -}}
# {{ index .Data "ca" }}
# {{- end }}
# {%- endraw %}
labels: {}
# secman-injector: enabled # метка для активации интеграции с secman vault agent injector
# istioDiscoveryService: istiod # название discovery сервиса панели истио к которой подключен ваш неймспейс
# istioControlPlane: control-plane-01 # название неймспейса контрольной панели истио к которой подключен ваш неймспейс
# proxyImage: image # ссылка на образ граничного прокси (IGEG)
service: # параметры сервиса Egress
name: evta-egressgateway-svc # имя сервиса Egress (по умолчанию имя генерируется автоматически)
create: false # создавать ли манифест сервиса
# internalPort: 9443 # внутренний порт Egress
# internalPortName: http-9443
# internalPortProtocol: http
# selector: # содержимое поля spec.selector в манифесте. По умолчанию выбирается создаваемый выше egressgateway
# app: egressgateway-tribe-sy-synes-nt
# istio: egressgateway-tribe-sy-synes-nt
gateway: # параметры манифеста Gateway для Istio Egress
create: false # создавать ли манифест
# name: evta-egressgateway-gw # имя манифеста (по умолчанию имя генерируется автоматически)
# selector: # содержимое поля spec.selector в манифесте. По умолчанию выбирается создаваемый выше egressgateway
# istio: egressgateway-tribe-sy-synes-nt
destinationRule: # Конфигурация destination rule к сервису egressgateway
create: false
# name: evta-egressgateway-dr # имя манифеста (по умолчанию имя генерируется автоматически)
# outlierDetection:
# consecutive5xxErrors: 3
# interval: 30s
# baseEjectionTime: 1m
# maxEjectionPercent: 10
# # При создании istio манифестов для проксирования трафика kafka из прикладного приложения к bootstrap серверу нужно обращаться на хост следующего формата:
# # {название_сервиса_egressgateway}.{имя_неймспейса}.svc.cluster.local:{gwPort_для_Kafka_указываемый_ниже}
kafka: [] # параметры для направления kafka трафика через istio egressgateway. Можно указать список bootstrap серверов Kafka
# - hosts: bootstrap.server1.host:9093,bootstrap.server2.host: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 # создавать ли манифест
# outlierDetection:
# consecutive5xxErrors: 5
# interval: 5m
# baseEjectionTime: 5m
# maxEjectionPercent: 50
# tls:
# mode: MUTUAL
# clientCertificate: /path/to/egress/certificates/ca-chain.cert.pem
# privateKey: /path/to/egress/certificates/tls.crt
# caCertificates: /path/to/egress/certificates/tls.key
# virtualService: # параметры для манифеста VirtualService для Kafka
# create: true # создавать ли манифест
# serviceEntry: # параметры для манифеста ServiceEntry для Kafka
# create: true # создавать ли манифест
vault: # параметры для интеграции с HashiCorp Vault
# host: vault.url # хост сервиса HashiCorp Vault
# port: 8443 # порт сервиса HashiCorp Vault
# externalPort: 8443 # порт сервиса HashiCorp Vault для обращения из приклада
# # Порты и протоколы ниже используются в манифестах VirtualService, Gateway, Gateway Service
# # Поддерживаемые gwSvc протоколы - "SCTP", "TCP", "UDP"
# gwPort: 9447 # порт на egressGateway
# gwProtocol: TLS # протокол на egressGateway
# gwSvcProtocol: TCP # протокол на service egressGateway
# gwTls:
# mode: ISTIO_MUTUAL # Валидные значения: "PASSTHROUGH", "SIMPLE", "MUTUAL", "AUTO_PASSTHROUGH", "ISTIO_MUTUAL", "OPTIONAL_MUTUAL"
destinationRule: # параметры для манифеста DestinationRule Istio
create: false # создавать ли манифест
# name: evta-vault-dr # имя манифеста (по умолчанию имя генерируется автоматически)
# tls:
# mode: MUTUAL
# caCertificates: /vault/ca.pem
# clientCertificate: /vault/cert.pem
# privateKey: /vault/key.pem
# outlierDetection:
# consecutive5xxErrors: 3
# interval: 30s
# baseEjectionTime: 1m
# maxEjectionPercent: 10
virtualService: # параметры для манифеста VirtualService
create: false # создавать ли манифест VirtualService
# name: evta-vault-vs # имя манифеста (по умолчанию имя генерируется автоматически)
# protocol: tls # протокол для создания virtual service. Валидные значения: http, tls, tcp
audit: # параметры для интеграции с сервисом Аудита
# host: audit.url # хост сервиса Аудита
# port: 80 # порт сервиса Аудита для обращения из pod'а
# externalPort: 443 # порт сервиса Аудита
# # Порты и протоколы ниже используются в манифестах VirtualService, Gateway, Gateway Service
# # Поддерживаемые gwSvc протоколы - "SCTP", "TCP", "UDP"
# gwPort: 9446 # порт на egressGateway
# gwProtocol: HTTP # протокол на egressGateway
# gwSvcProtocol: TCP # протокол на service egressGateway
# gwTls:
# mode: ISTIO_MUTUAL # Валидные значения: "PASSTHROUGH", "SIMPLE", "MUTUAL", "AUTO_PASSTHROUGH", "ISTIO_MUTUAL", "OPTIONAL_MUTUAL"
destinationRule: # параметры для манифеста DestinationRule Istio
create: false # создавать ли манифест
# name: audit-dr # имя манифеста (по умолчанию имя генерируется автоматически)
# tls:
# mode: MUTUAL
# caCertificates: /path/to/egress/certificates/ca-chain.cert.pem
# clientCertificate: /path/to/egress/certificates/tls.crt
# privateKey: /path/to/egress/certificates/tls.key
# outlierDetection:
# consecutive5xxErrors: 3
# interval: 30s
# baseEjectionTime: 1m
# maxEjectionPercent: 10
virtualService: # параметры для манифеста VirtualService
create: false # создавать ли манифест VirtualService
# name: audit-vs # имя манифеста (по умолчанию имя генерируется автоматически)
# protocol: http # протокол для создания virtual service. Валидные значения: http, tls, tcp
telemetry: # параметры для интеграции с сервисом телеметрии
# host: telemetry.url # хост сервиса телеметрии
# port: 4317 # порт сервиса телеметрии для обращения из pod'а
# externalPort: 4317 # порт сервиса телеметрии
# # Порты и протоколы ниже используются в манифестах VirtualService, Gateway, Gateway Service
# # Поддерживаемые gwSvc протоколы - "SCTP", "TCP", "UDP"
# gwPort: 9478 # порт на egressGateway
# gwProtocol: HTTPS # протокол на egressGateway
# gwSvcProtocol: TCP # протокол на service egressGateway
# gwTls:
# mode: ISTIO_MUTUAL
destinationRule: # параметры для манифеста DestinationRule Istio
create: false # создавать ли манифест
# tls:
# mode: MUTUAL
# clientCertificate: /vault/evta-pki-cert-telemetry.pem
# privateKey: /vault/evta-pki-key-telemetry.pem
# caCertificates: /vault/evta-pki-truststore-telemetry.pem
# outlierDetection:
# consecutive5xxErrors: 3
# interval: 30s
# baseEjectionTime: 1m
# maxEjectionPercent: 10
virtualService: # параметры для манифеста VirtualService
create: false # создавать ли манифест VirtualService
# name: telemetry-vs # имя манифеста (по умолчанию имя генерируется автоматически)
# protocol: http # протокол виртуального сервиса
При необходимости раскомментируйте нужные блоки.
Настройки подключения EVTA к IBM MQ#
Настройки подключения#
С релиза EVTD 4.0.0 отсутствует поддержка IBM MQ.
Данный раздел применим при установке компонента EVTA с интеграцией с IBM MQ только на ВМ.
Начиная с версии 3.0.0 компонент EVTA не несет в составе дистрибутива клиентские библиотеки для подключения к IBM MQ.
Перед непосредственной установкой компонента EVTA необходимо вручную подложить дополнительные библиотеки в директорию /<путь_до_будущей_директории_установки_адаптера>/lib на сервер установки компонента EVTA.
Необходимые библиотеки:
com.ibm.mq.allclient-<version>.jar— клиентская библиотека IBM MQ, версии не ниже 9.2.5.0;json-<version>.jar— библиотека для работы с JSON, версии не ниже 20210307 (необходима для корректной работы интеграции компонента EVTA с IBM MQ).
Далее в конфигурационный файл vars.yml необходимо добавить указанные библиотеки в блок настроек
clean_installdir_exclude, где необходимо указать список всех библиотек для настройки интеграцией с IBM MQ:
reactive_stream_adapter_vm:
clean_installdir_exclude: # Какие директории и файлы не очищаются при полной установке.
- lib/com.ibm.mq.allclient-9.2.5.0.jar
- lib/json-20231013.jar
После вышеуказанных пунктов можно приступать к установке компонента EVTA.
Примеры пресетов для подключения к внешним сервисам для EVTA#
Описание примеров пресетов#
Параметры пресетов, используемые для установки на ВМ и в облачной среде, идентичны.
Ознакомиться со всеми пресетами также можно в файле Ansible/roles/common/defaults/main.yml.
При интеграции с HashiCorp Vault (Secret Management System) параметры с префиксом ssl.vault.tls можно задавать как в блоке настроек props, так и на одном уровне с props.
При указании настроек в двух местах, параметры в блоке props являются приоритетней.
Пример пресета для подключения к Kafka#
# Внимание, все хосты указываются только в формате FQDN
#reactive_stream_adapter_preset:
#
# # Пресет для подключения к Kafka
# kafka_example: # пример с указанием адреса подключения через props
# client: kafka # Тип пресета
# props: # Строки, добавляемые в проперти файл как есть
# security.protocol: SSL
# bootstrap.servers: example1.ru:9092,example2.ru:9092
# enable.auto.commit: false # Обязательно, для управления коммитами из кода адаптера
# ssl.endpoint.identification.algorithm: "" # Отключение проверки хостнейма в сертификате, обязательно для стендов Kafka
# # без интеграции с Vault
# ssl.keystore.location: ssl/example.jks
# ssl.keystore.password: __PLACEHOLDER__
# ssl.truststore.location: ssl/example.jks
# ssl.truststore.password: __PLACEHOLDER__
# ssl.key.password: __PLACEHOLDER__
# # при интеграции с Vault
# ssl.keystore.location: /tmp/keystore.jks
# ssl.truststore.location: /tmp/truststore.jks
# ssl.engine.factory.class: ru.sbt.ss.kafka.VaultSslEngineFactory
# ssl.vault.properties.file: conf/vault.properties
# # при наличии properties.file все настройки подключения к Vault будут браться из блока vault_configs_file
# # переопределить любые настройки можно параметрами ниже
# ssl.vault.address: "https://my.vault:8200/"
# ssl.vault.tls.enable: "true"
# ssl.vault.tls.keystore.location: ssl/vault-client.jks # Расположение хранилища сертификатов для подключения к HashiCorp Vault
# ssl.vault.tls.keystore.password: __PLACEHOLDER__ # Пароль от хранилища сертификатов для подключения к HashiCorp Vault
# ssl.vault.tls.key.password: __PLACEHOLDER__ # Пароль от сертификата для подключения к HashiCorp Vault
# ssl.vault.tls.truststore.location: ssl/vault-client.jks # Расположение хранилища доверенных сертификатов для подключения к HashiCorp Vault
# ssl.vault.tls.truststore.password: __PLACEHOLDER__ # Пароль от хранилища доверенных сертификатов для подключения к HashiCorp Vault
# ssl.vault.auth.type: APPROLE
# ssl.vault.auth.role.id: 4d980038-5f78-***-27d8d0ac2c8d
# ssl.vault.auth.secret.id: 1c7526d2-55b6-***-5e97eafbcf1d
# ssl.vault.pki.role.name: cert-role
# ssl.vault.pki.common.name: KafkaClient1
# ssl.vault.pki.crl.enable: "true"
# ssl.vault.before.expire: P21D # Промежуток времени до истечения сертификата для его перевыпуска в формате java.time.Duration (в примере - 21 день)
# ssl.vault.secret.path: kv1/certstore
# ssl.vault.secret.key: key
# ssl.vault.secret.keystore: keystore
# ssl.vault.secret.truststore: truststore
# ssl.vault.engine.version: 1
# # В truststore можно подложить дополнительные корневые сертификаты из Vault
# ssl.vault.pem.trust.path: kv1/secret/path-to-trusts # Путь до Key-Value секрета c доверенными сертификатами в формате PEM
# ssl.vault.pem.trust.aliases: ca1, ca2, ca3, ca4 # Список ключей в секрете, содержимое которых необходимо загрузить в хранилище доверенных сертификатов, разделитель запятая
Пример пресета для подключения к Artemis#
# Внимание, все хосты указываются только в формате FQDN
#reactive_stream_adapter_preset:
#
# # Пресет для подключения к artemis
# artemis_example: # пример с указанием адреса подключения через props
# client: artemis # Тип пресета
# config: # Строки, добавляемые в конфиг файл как есть
# connectors: "localhost:61616,127.0.0.1:61617"
# factory:
# blockOnQueue: false
# loadBalancingPolicyClassName: ru.sbt.ss.reactive.stream.artemis.client.RoundRobinLoadBalancingPolicy
# reconnectAttempts: 1
# recoveryInterval: 2000
# confirmationWindowSize: 1048576
# callTimeout: 30000
# props:
# # без интеграции с Vault
# ssl.keystore.location: ssl/example.jks
# ssl.keystore.password: __PLACEHOLDER__
# ssl.truststore.location: ssl/example.jks
# ssl.truststore.password: __PLACEHOLDER__
# ssl.key.password: __PLACEHOLDER__
# # при интеграции с Vault
# ssl.keystore.location: ssl/artemis-vault-keystore.jks
# ssl.keystore.mode: 600
# ssl.truststore.location: ssl/artemis-vault-truststore.jks
# ssl.truststore.mode: 660
# ssl.vault.properties.file: conf/vault.properties
# # при наличии properties.file все настройки подключения к Vault будут браться из блока vault_configs_file
# # переопределить любые настройки можно параметрами ниже
# ssl.vault.address: "https://my.vault:8200/"
# ssl.vault.tls.enable: "true"
# ssl.vault.tls.keystore.location: ssl/vault-client.jks # Расположение хранилища сертификатов для подключения к HashiCorp Vault
# ssl.vault.tls.keystore.password: __PLACEHOLDER__ # Пароль от хранилища сертификатов для подключения к HashiCorp Vault
# ssl.vault.tls.key.password: __PLACEHOLDER__ # Пароль от сертификата для подключения к HashiCorp Vault
# ssl.vault.tls.truststore.location: ssl/vault-client.jks # Расположение хранилища доверенных сертификатов для подключения к HashiCorp Vault
# ssl.vault.tls.truststore.password: __PLACEHOLDER__ # Пароль от хранилища доверенных сертификатов для подключения к HashiCorp Vault
# ssl.vault.auth.type: APPROLE
# ssl.vault.auth.role.id: 4d980038-5f78-***-27d8d0ac2c8d
# ssl.vault.auth.secret.id: 1c7526d2-55b6-***-5e97eafbcf1d
# ssl.vault.pki.role.name: test1
# ssl.vault.pki.common.name: ArtemisClient1
# ssl.vault.pki.crl.enable: "true"
# ssl.vault.before.expire: P21D # Промежуток времени до истечения сертификата для его перевыпуска в формате java.time.Duration (в примере - 21 день)
# ssl.vault.secret.path: kv1/certstore
# ssl.vault.secret.key: key
# ssl.vault.secret.keystore: keystore
# ssl.vault.secret.truststore: truststore
# ssl.vault.engine.version: 1
Пример пресета для подключения к IBM MQ#
# Внимание, все хосты указываются только в формате FQDN
#reactive_stream_adapter_preset:
# # Пресет для подключения к ibm_mq
# ibm_mq_example:
# client: ibm_mq # Тип пресета
# config: # Строки, добавляемые в конфиг файл как есть
# messageType: byte # пример необязательного параметра
# props: # Cтроки, добавляемые в проперти файл как есть
# # без интеграции с Vault
# ssl.keystore.location: ssl/example.jks
# ssl.keystore.password: __PLACEHOLDER__
# ssl.truststore.location: ssl/example.jks
# ssl.truststore.password: __PLACEHOLDER__
# ssl.key.password: __PLACEHOLDER__
# ssl.conscrypt: false # Обязательное поле для ibm_mq
# ssl.protocol: "TLSv1" # Обязательное поле для ibm_mq
# hostName: example.com # Обязательное поле для ibm_mq
# port: 1420 # Обязательное поле для ibm_mq
# queueManager: PMS.PPRB.IM1 # Обязательное поле для ibm_mq
# channel: CEP.SVRCONN # Обязательное поле для ibm_mq
# SSLCipherSuite: TLS_RSA_WITH_AES_128_CBC_SHA # Обязательное поле для ibm_mq
Пример пресета для подключения к RabbitMQ#
# Внимание, все хосты указываются только в формате FQDN
#reactive_stream_adapter_preset:
# # Пресет для подключения к RabbitMQ
# rabbit_example:
# client: rabbit # Тип пресета
# props: # Строки, добавляемые в проперти файл как есть
# # без интеграции с Vault
# ssl.keystore.location: ssl/example.jks
# ssl.keystore.password: __PLACEHOLDER__
# ssl.truststore.location: ssl/example.jks
# ssl.truststore.password: __PLACEHOLDER__
# ssl.key.password: __PLACEHOLDER__
# uri: uri # URI AMQP, опционально
# user: user # имя пользователя для подключения к брокеру, опционально
# password: __PLACEHOLDER__ # пароль пользователя, опционально
# vhost: vhost # виртуальный хост, используемый при подключении к брокеру, опционально
# recoveryInterval: recoveryInterval # сколько времени ждать автоматическое восстановление перед попыткой повторного подключения, в мс, опционально
# sasl: sasl # при значении external устанавливает external конфигурацию sasl, опционально
# nodes: host1:port1,host2:port2 # массив известных адресов брокера, перечисленных через запятую
# prefetchSize: prefetchSize # максимальное количество сообщений, которые будет доставлять сервер, 0, если не ограничено, опционально
# keyHeader: "" # имя заголовка сообщения для использования в качестве значения ключа
# timeout: 1000 # тайм-аут блокирующих операций
# # при подписке
# receiveMode: subscribe # тип подписки - может принимать значения `subscribe` и `poll`
# deadLetterExchange: deadLetterExchange # точка обмена для ошибочных сообщений, опционален
# deadLetterRoutingKey: deadLetterRoutingKey # ключ для ошибочных сообщений, опционален
# deadLetterPersistence: deadLetterPersistence # режим персистентной отправки для ошибочных сообщений, опционален
# # при публикации
# publishAck: "false" # ждать ли подтверждения получения от rabbit перед подтверждением сообщения
# exchange: exchange # точка обмена для отправки сообщений
# routingKey: routingKey # ключ для отправки сообщений
# persistence: "false # режим персистентной отправки
Пример пресета для логирования в Kafka (при logging.kafka.enabled: true)#
# Внимание, все хосты указываются только в формате FQDN
#reactive_stream_adapter_preset:
# kafka_logs:
# props: # все указанные параметры передаются в настройки продюсера
# bootstrap.servers: example1.ru:9092,example2.ru:9092
# ssl.keystore.location: ssl/example.jks
# ssl.keystore.password: __PLACEHOLDER__
# ssl.truststore.location: ssl/example.jks
# ssl.truststore.password: __PLACEHOLDER__
# ssl.key.password: __PLACEHOLDER__
# security.protocol: SSL
#######
# ssl.endpoint.identification.algorithm: ""
###### при проверке DN для kafka (заполненный endpoint_whitelist_dn или brokerWhiteListPath) заменить на
# ssl.engine.factory.class: ru.sbt.ss.ssl.kafka.DnSslEngineFactory
# ssl.allowed.dn.file: ssl/allowed-dn.txt # Если задан brokerWhiteListPath указать значение равное brokerWhiteListPath
# ssl.endpoint.identification.algorithm: dn
#######
# enable.idempotence: "false"
# config.providers: decode
# config.providers.decode.class: ru.sbt.ss.kafka.DecryptionConfigProvider
# config.providers.decode.param.security.encoding.class: ru.sbt.ss.password.BaseEncryptor
# config.providers.decode.param.security.encoding.key: file:./ssl/secret.pass
Пример пресета для логирования в Kafka с использованием vault (при logging.kafka.enabled: true)#
# Внимание, все хосты указываются только в формате FQDN
#reactive_stream_adapter_preset:
# kafka_logs_vault:
# props: # все указанные параметры передаются в настройки продюсера
# bootstrap.servers: example1.ru:9092,example2.ru:9092
# ssl.keystore.location: ${dollar}{vault:ssl.keystore.location}
# ssl.keystore.password: ${dollar}{vault:ssl.keystore.password}
# ssl.truststore.location: ${dollar}{vault:ssl.truststore.location}
# ssl.truststore.password: ${dollar}{vault:ssl.truststore.password}
# ssl.key.password: ${dollar}{vault:ssl.key.password}
# security.protocol: SSL
# ssl.endpoint.identification.algorithm: ""
# enable.idempotence: "false"
# config.providers: vault
# config.providers.vault.class: ru.sbt.ss.kafka.VaultConfigProvider
# config.providers.vault.param.properties.file: conf/vault.properties
# # при наличии properties.file все настройки подключения к Vault будут браться из блока vault_configs_file
# # переопределить любые настройки можно параметрами ниже
# config.providers.vault.param.security.encoding.class: ru.sbt.ss.password.BaseEncryptor
# config.providers.vault.param.security.encoding.key: file:./ssl/secret.pass
# config.providers.vault.param.ssl.vault.address: https://my.vault:8200/
# config.providers.vault.param.ssl.vault.tls.enable: "true"
# config.providers.vault.param.ssl.vault.tls.keystore.location: ssl/vault-client.jks
# config.providers.vault.param.ssl.vault.tls.keystore.password: __PLACEHOLDER__
# config.providers.vault.param.ssl.vault.tls.key.password: __PLACEHOLDER__
# config.providers.vault.param.ssl.vault.tls.truststore.location: ssl/vault-client.jks
# config.providers.vault.param.ssl.vault.tls.truststore.password: __PLACEHOLDER__
# config.providers.vault.param.ssl.endpoint.identification.algorithm:
# config.providers.vault.param.ssl.vault.auth.type: approle
# config.providers.vault.param.ssl.vault.auth.role.id: 4d980038-5f78-***-27d8d0ac2c8d247ac
# config.providers.vault.param.ssl.vault.auth.secret.id: 1c7526d2-55b6-***-5e97eafbcf1d
# config.providers.vault.param.ssl.vault.pki.role.name: test1
# config.providers.vault.param.ssl.vault.pki.common.name: EVTA-logback
# config.providers.vault.param.ssl.vault.pki.email: vasya@rambler.ru
# config.providers.vault.param.ssl.vault.pki.crl.enable: "true"
# config.providers.vault.param.ssl.keystore.location: ssl/vault-logback-keystore.jks
# config.providers.vault.param.ssl.keystore.mode: 600
# config.providers.vault.param.ssl.truststore.location: ssl/vault-logback-truststore.jks
# config.providers.vault.param.ssl.truststore.mode: 600
# config.providers.vault.param.ssl.vault.before.expire: P21D # Промежуток времени до истечения сертификата для его перевыпуска в формате java.time.Duration (в примере - 21 день)
# config.providers.vault.param.ssl.vault.secret.path: kv1/certstore
# config.providers.vault.param.ssl.vault.engine.version: 1
# config.providers.vault.param.ssl.vault.secret.key: key
# config.providers.vault.param.ssl.vault.secret.keystore: keystore
# config.providers.vault.param.ssl.vault.secret.truststore: truststore
# config.providers.vault.param.ssl.vault.namespace: ""
Создание Jenkins Job для автоматической установки EVTA#
Описание создания Jenkins Job#
Содержимое дистрибутива ./EVTA-scripts-[version]-distrib.zip поместить в Git-репозиторий.
Для корректной работы Jenkins Job необходимо:
получить доступ для скачивания дистрибутива компонента EVTA (учетные данные
nexus_user_cred);создать в Jenkins параметр типа Secret file с паролем от ansible vault.
Выбрать New Item для создания нового Jenkins Job:

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

2.3. Заполнить поля на появившейся странице в блоке Pipeline:
Изменить значение параметра «Definition» на Pipeline script from SCM;
Изменить значение параметра «SCM» на Git;
Заполнить параметр «Repository URL», в параметре указать путь до вашего Git репозитория, содержащего скрипты установки (пункт 1);
Заполнить параметр «Credentials», в параметре указать ваши сredentials с правами на чтение;
В параметре «Branches to build» выбрать ветку, в которой находятся скрипты;
В параметре «Script Path» указать путь до groovy скрипта:
Pipeline/reactive_stream_adapter_deploy_vm.groovy — для установки на ВМ;
Pipeline/reactive_stream_adapter_deploy.groovy — для установки в облачной среде;
Убедиться, что НЕ стоит галочка Lightweight checkout.
Пример заполнения параметров:

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

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

Заполнить следующие параметры на появившейся странице:
jenkins_slave— имя агента Jenkins для сборки;ansible_version— наименование Jenkins Tool с необходимой версией Ansible. Конкретное значение необходимо получить у администратора Jenkins.
Нажать кнопку «Собрать».
Обновить страницу и после окончания работы Jenkins Job снова нажать «Собрать с параметрами».
Появится страница со всем списком настраиваемых параметров.
Параметры для установки на ВМ#
job_config_renew— отвечает за обновление Jenkins Job. При установке приложения должен быть выключен (false). Для обновления текущих параметров и сохранения значений по умолчанию должен быть включен (true);inventory— имя inventory для установки;nexusUrl— ссылка на конфигурационный дистрибутив (при отсутствии — оставить поле пустым);nexusDistribUrl— ссылка на дистрибутив reactive_stream_adapter;playbook— необходимый сценарий установки, где:reactive_stream_adapter_vm.yml — запуск EVTA на ВМ;
reactive_stream_adapter_vm_system_service.yml — создание системных сервисов EVTA;
reactive_stream_adapter_vm_user_service.yml — создание пользовательских сервисов EVTA;
reencrypt_password.yml — перешифрование паролей.
tags— список тегов. При пустом значении выполняется полная установка компонента:run_only — при указании появляется выбор адаптеров (для дальнейших действий) без указания — на все адаптеры;
adapter_already_installed — выполняется установка и запуск EVTA из конфигурационного дистрибутива без выкачивания дистрибутива EVTA из
nexusDistribUrl;backup — создание backup;
backup_remove — удаление backup;
backup_restore — восстановление из backup;
distribute — распаковка дистрибутива
nexusDistribUrl;install — запуск блока установки;
restart — перезапуск сервиса;
start — запуск сервиса;
status — статус установки сервиса; также используется для вывода результата обращения к endpoint дискаверинга EVTA (информация в логах);
stop — остановка сервиса;
uninstall — удаление сервиса.
adapterList— выбор адаптера (при наличии тега run_only);select_all_hosts— выполнение playbook на всех серверах из выбранного inventory;only_on_host— выполнение playbook на выбранных серверах;jenkins_slave— выбор Jenkins Slave;jdk_tool— наименование Jenkins Tool с необходимой версией JDK. Конкретное значение необходимо получить у администратора Jenkins;ansible_branch— ветка скриптов развертывания;ansible_version— наименование Jenkins Tool с необходимой версией Ansible. Конкретное значение необходимо получить у администратора Jenkins;nexus_user_cred— Jenkins Username with Password credential ID для выкачивания дистрибутива. При задании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 с ssh ключом для подключения к конечным серверам. Чтобы получить ssh_username, ssh_key, ssh_key_passsphrase для подключения к серверам из HashiCorp Vault, необходимо заполнить параметр secman_url в формате:JenkinsCredID|SecManPath:SecManKeys|SecManParams, где:JenkinsСredID — Jenkins Vault App Role Credential ID, содержащий реквизиты для подключения к HashiCorp Vault;
SecManPath — путь к секретам в HashiCorp Vault;
SecManKeys — имена полей для ssh_username, ssh_key, ssh_key_passphrase в HashiCorp Vault (через запятую). Ssh_key_passphrase не указывается, если у ssh ключа нет пароля. В секрете, в значении ssh_key обязательно оставить перенос строки после текста с приватным ключом;
SecManParams — параметры подключения к HashiCorp Vault (через точку с запятой). Если данные параметры по умолчанию, то пропускаются вместе с «|» (в качестве ключа можно использовать не строку, а файл в base64 формате и секрет в HashiCorp Vault с именем, оканчивающимся на «Base64», например: myPrivateKeyBase64). Примеры:
SecManAppRoleCred|/CI01994970_CI02618129_ES/A/DEV/APP/JEN/KV/vault:ssh_username,ssh_key
SecManAppRoleCred|/CI01994970_CI02618129_ES/A/DEV/APP/JEN/KV/vault:ssh_username,ssh_key,ssh_key_passphrase
SecManAppRoleCred|/CI01994970_CI02618129_ES/A/DEV/APP/JEN/KV/vault:ssh_username,ssh_key,ssh_key_passphrase|engineVersion:2.
secman_url— URL для подключения к HashiCorp Vault;ssl_verify— проверка, являются ли сертификаты HashiCorp Vault/Nexus доверенными (по умолчанию включен,true);second_hand_approve— подтверждение запуска другим администратором (контроль «второй рукой»; по умолчанию включен,true). При активации параметра одному администратору будет недоступна возможность запуска Jenkins Job без подтверждения со стороны другого администратора. При выключении параметра в логах появится информация об отключении данной проверки;inventories_repo— репозиторий с inventory;inventories_branch— ветка репозитория;inventories_path— путь до inventories от корня репозитория;cleanws— параметр очистки Jenkins workspace (по умолчанию включен,true).
Параметры для установки в облачной среде#
job_config_renew— отвечает за обновление Jenkins Job. При установке приложения должен быть выключен (false). Для обновления текущих параметров и сохранения значений по умолчанию должен быть включен (true);inventory— имя inventory для установки;nexusUrl— ссылка на конфигурационный дистрибутив (при отсутствии – оставить поле пустым);nexusHelmUrl— ссылка на дистрибутивEVTA-cfg-[version]-distrib.zipустановки компонента в OS. Для скачивания дистрибутива используется параметрnexus_user_cred;playbook— необходимый сценарий установки, где:reactive_stream_adapter.yml — запуск EVTA в облачной среде.
tags— список тегов. При пустом значении выполняется установка или обновление EVTA:helm_history — просмотр истории развертывания EVTA;
helm_rollback — откат EVTA на REVISION, выбранную в параметре
helm_rollback_revision;status — статус установки сервиса; также используется для вывода результата обращения к endpoint дискаверинга EVTA (информация в логах);
uninstall — удаление сервиса.
helm_rollback_revision— выбор номера REVISION при выборе тега helm_rollback;jenkins_slave— выбор Jenkins Slave;ansible_branch— ветка скриптов развертывания;ansible_version— наименование Jenkins Tool с необходимой версией Ansible. Конкретное значение необходимо получить у администратора Jenkins;nexus_user_cred— Jenkins username with password credential ID для выкачивания дистрибутива. При задании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;secman_url— URL для подключения к HashiCorp Vault;jdk_tool— наименование Jenkins Tool с необходимой версией JDK. Конкретное значение необходимо получить у администратора Jenkins;ssl_verify— проверка, являются ли сертификаты HashiCorp Vault/Nexus доверенными (по умолчанию включен,true);second_hand_approve— подтверждение запуска другим администратором (контроль «второй рукой»; по умолчанию включен,true). При активации параметра одному администратору будет недоступна возможность запуска Jenkins Job без подтверждения со стороны другого администратора. При выключении параметра в логах появится информация об отключении данной проверки;ocCliVersion— версия утилиты oc;helmCliVersion— версия helm;inventories_repo— репозиторий с inventory;inventories_branch— ветка репозитория;inventories_path— путь до inventories от корня репозитория;cleanws— параметр очистки Jenkins workspace (по умолчанию включен,true).
Успешным результатом работы Jenkins Job будет запущенный EVTA на серверах, указанных в inventory.
Процесс установки EVTA описан в разделе Установка EVTA, подраздел «Автоматическая установка EVTA с использованием Jenkins».