Подготовка окружения 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#

Убедитесь, что выполнены следующие действия:

  1. Выбран и установлен транспорт. Возможные виды транспорта:

  • ActiveMQ Artemis (SMBX, программный компонент «Синапс.Брокер сообщений») — подробнее об установке в разделе Руководство по установке продукта SMB;

  • Platform V Corax — подробнее об установке в разделе Руководство по установке продукта Platform V Corax;

  • Apache Kafka;

  • IBM MQ (с релиза EVTD 4.0.0 отсутствует поддержка IBM MQ);

  • RabbitMQ.

  1. Известны точки подключения к выбранному транспорту (адреса и очереди подключения):

  • для SMBX: адреса и порты брокера, имя адреса и имя очереди;

  • для EVTD: адреса и порты брокера, имя топика;

  • для IBM MQ: адреса и порты брокера, имя очереди;

  • для RabbitMQ: адреса и порты брокера, имя заголовка.

  1. Созданы сертификаты.

  2. Получены все дистрибутивы компонента, описанные в разделе Состав дистрибутива и информация о дистрибутиве EVTA.

Предусловия установки с помощью Jenkins Job#

Для установки компонента EVTA необходимо создать и настроить Jenkins Job. Подрообнее в подразделе «Создание Jenkins Job для автоматической установки EVTA».

Предусловия установки EVTA в облачной среде#

Убедитесь, что выполнены следующие действия:

  • Установлен OpenShift версии 4.8 и выше (обслуживается средствами сторонних администраторов СПО);

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

  • Установлены утилиты oc и helm (находятся в разделе помощи «Command Line Tools» в OpenShift) на сервер, с которого производится установка.

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

oc login <cluster_url>

Реквизиты для консольной утилиты oc login можно получить в веб-интерфейсе OpenShift. Для этого в выпадающем меню под пользователем необходимо выбрать «Copy login command», где будет указан API token для работы с OpenShift.

  1. Далее выбрать проект в облачной среде:

oc project <project_name>
  1. Создать сервисного пользователя:

oc create sa <service_user_name>
  1. Выдать созданному пользователю права, достаточные для запуска сценариев:

oc policy add-role-to-user <role_name> system:serviceaccount:<project_name>:<service_user_name>

, где <role_name> — роль, имеющая права на запуск/создание приложений в облачной среде. Имя роли необходимо получить у администраторов OS (возможно admin).

  1. Создать секрет для скачивания образов:

oc create secret docker-registry
  <pull_secret_name> \
  --docker-server=<registry_server> \
  --docker-username=<username> \
  --docker-password=<password> \
  --docker-email=unused
  1. Привязать созданный секрет к созданному сервисному пользователю:

oc secrets link default <pull_secret_name> --for=pull,mount
  1. Получить токен сервисного пользователя для использования в 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:

  1. Добавьте строки с логинами пользователей в файл /etc/systemd/logind.conf:

KillExcludeUsers=adapter

Логины пользователей добавляются через пробел.

  1. Для возможности пользовательским сервисам работать как долговременные выполните команды:

systemctl restart systemd-logind
loginctl enable-linger adapter

Создание системных и пользовательских сервисов обслуживания с помощью Jenkins Job#

  1. Необходимо заполнить настройки inventory из подраздела «Настройка inventory для EVTA».

  2. Выбрать соответствующий playbook в Jenkins Job в параметре playbook:

    • reactive_stream_adapter_vm_system_service.yml — создание системного сервиса обслуживания EVTA;

    • reactive_stream_adapter_vm_user_service.yml — создание пользовательского сервиса обслуживания EVTA.

  3. В параметре only_on_host выберите необходимый сервер.

  4. Запустите работу Jenkins Job.

  5. Проверьте статус Jenkins Job. Для успешной работы должно быть - «Finished: SUCCESS».

Создание системного сервиса обслуживания EVTA с помощью ansible#

Под пользователем adapter выполните действия:

  1. Создайте файл сервиса adapter.service:

sudo /bin/sudoedit /etc/systemd/system/adapter.service
  1. Заполните созданный файл:

[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 }} — каталог, в который устанавливается адаптер на конечном сервере.

  1. Для инициализации сервиса выполните команду:

sudo systemctl daemon-reload

Создание пользовательского сервиса обслуживания EVTA с помощью ansible#

Под пользователем adapter выполните действия:

  1. Создайте файл сервиса ~/.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 }} — каталог, в который устанавливается адаптер на конечном сервере.

  1. Для инициализации сервиса выполните команду:

sudo systemctl --user daemon-reload

Процесс удаления системных и пользовательских сервисов обслуживания описан в документе: «Руководство администратора» в разделе «Удаление системных и пользовательских сервисов обслуживания на ВМ для EVTA».

Настройка inventory для EVTA#

Установка на ВМ#

  1. Создайте в директории inventories свою директорию (с вашим названием) с параметрами. Пример настроек находится в директории EXAMPLE_REACTIVE_STREAM_ADAPTER_VM (внутри папки inventories).

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

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
├──...
  1. В файл inventory добавьте список серверов, на которые будет производиться установка.

Пример:

localhost ansible_connection=local

[reactive_stream_adapter_vm]
hostname-1.my.host
hostname-2.my.host
  1. Перейдите к заполнению файла в директории group_vars/all.

Файл vars.yml заполните по аналогии с имеющимися примерами файла vars.yml в директории EXAMPLE_REACTIVE_STREAM_ADAPTER_VM. Ознакомиться с примером заполненного файла vars.yml можно в подразделе «Пример заполненного файла vars.yml для EVTA».

При этом необходимо задать пароли в зашифрованном виде (описано далее в п.5).

  1. Продолжите заполнение файлов в директории group_vars/all. Файл vault.yml содержит пароли в зашифрованном виде.

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

  1. Поместите используемые сертификаты в директорию ssl.

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

Установка в облачной среде#

  1. Создайте в директории inventories свою директорию (с вашим названием) с параметрами. Пример настроек находится в директории EXAMPLE_REACTIVE_STREAM_ADAPTER (внутри папки inventories).

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

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
├──...
  1. Для заполнения файла inventory используйте параметр из директории EXAMPLE_REACTIVE_STREAM_ADAPTER.

Параметр:

localhost ansible_connection=local
  1. Перейдите к заполнению файлов в директории group_vars/all.

Файл vars.yml заполните по аналогии с имеющимися примерами файла vars.yml в директории EXAMPLE_REACTIVE_STREAM_ADAPTER. Ознакомиться с примером заполненного файла vars.yml можно в подразделе «Пример заполненного файла vars.yml для EVTA».

При этом необходимо задать пароли в зашифрованном виде (описано далее в п.5). Шифровать пароли можно используя механизм ansible-vault. Подробнее в разделе Использование утилиты «ansible-vault» для шифрования паролей.

  1. Продолжите заполнение файлов в директории group_vars/all. Файл vault.yml содержит пароли в зашифрованном виде.

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

  1. Поместите используемые сертификаты в директорию 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.

  1. Перед непосредственной установкой компонента EVTA необходимо вручную подложить дополнительные библиотеки в директорию /<путь_до_будущей_директории_установки_адаптера>/lib на сервер установки компонента EVTA.

Необходимые библиотеки:

  • com.ibm.mq.allclient-<version>.jar — клиентская библиотека IBM MQ, версии не ниже 9.2.5.0;

  • json-<version>.jar — библиотека для работы с JSON, версии не ниже 20210307 (необходима для корректной работы интеграции компонента EVTA с IBM MQ).

  1. Далее в конфигурационный файл 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
  1. После вышеуказанных пунктов можно приступать к установке компонента 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#

  1. Содержимое дистрибутива ./EVTA-scripts-[version]-distrib.zip поместить в Git-репозиторий.

Для корректной работы Jenkins Job необходимо:

  • получить доступ для скачивания дистрибутива компонента EVTA (учетные данные nexus_user_cred);

  • создать в Jenkins параметр типа Secret file с паролем от ansible vault.

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

NewItem

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

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

NewItem_create

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

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

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

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

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

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

  • В параметре «Script Path» указать путь до groovy скрипта:

    • Pipeline/reactive_stream_adapter_deploy_vm.groovy — для установки на ВМ;

    • Pipeline/reactive_stream_adapter_deploy.groovy — для установки в облачной среде;

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

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

Pipeline_create

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

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

Now

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

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

Params

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

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

  • ansible_version — наименование Jenkins Tool с необходимой версией Ansible. Конкретное значение необходимо получить у администратора Jenkins.

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

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

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

Параметры для установки на ВМ#

  • 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».