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

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

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

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

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

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

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

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

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

    • Apache Kafka (Сервис передачи событий) — подробнее об подключении описано в подразделе «Пример заполненного файла vars.yml для EVPC».

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

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

    • для Apache Kafka: адреса и порты брокера, имя топика.

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

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

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

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

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

Предусловия установки в OS#

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

oc login <cluster_url>
  1. Выбрать проект в OS:

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. Имя роли необходимо получить у администраторов OS.

  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>-

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

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

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

  1. OpenShift доступен для вызова со стороны Jenkins.

  2. Настроен доступ в Jenkins, и в нем созданы необходимые сущности.

  3. Настроен доступ в Nexus, и в нем расположен дистрибутив адаптера.

  4. Настроен доступ в Git-репозиторий, и в нем создан проект для помещения скриптов.

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

  1. Создать новую директорию в папке Ansible/inventories Git-репозитория, задать название директории и заполнить по примеру директории !EXAMPLE!.

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

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

ssl — директория с сертификатами;

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

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

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

Параметр:

localhost ansible_connection=local
  1. Перейти к заполнению файла vars.yml в директории group_vars/all. Заполнять по аналогии с файлом vars.yml в папке !EXAMPLE! и подразделом «Пример заполненного файла vars.yml для EVPC».

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

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

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

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

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

Пример заполненного файла vars.yml для EVPC#

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

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

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

api_url: https://api.example.ru:6443 # URL API openshift/k8s (не требуется при наличии kubeconfig_path)
token: __PLACEHOLDER__ # токен пользователя (сервис аккаунта) для установки (не требуется при наличии kubeconfig_path)
namespace: my_dev_namespace # Наименование пространства в openshift/k8s

epf:
  registry: example.space   # Адрес репозитория до образа
  registry_path: /path/to/registry   # Путь в репозитории
  replicas: 1   # Количество реплик
  pullImage: docker-registry-access   # ТУЗ для подключения к репозиторию образов
  #healthCheck: # Параметры healthCheck
  #  port: 8081 # Порт проверки состояния доступности приложения
  #  changeLoggersAvailable: false # Возможность изменения уровня незаданных в logback логеров
  #  changeRootAvailable: false # Возможность изменения уровня root логера
  jvmArgs: "-Dcom.ibm.mq.cfg.useIBMCipherMappings=true -noverify -XX:+AlwaysPreTouch -XX:+AlwaysActAsServerClassMachine -XX:+UseContainerSupport"   # Дополнительные аргументы JVM
  serviceAccountName: serviceAccountName # Сервисный аккаунт в openshift
  flow:   # Конфигурация обработчика
    config: "flow.conf" # Имя конфигурационного файла потока обработки
    logLevel: "debug"  # Уровень логирования трансформации сообщений
    parallel: 1 # Количество параллельных потоков обработки для одного экземпляра приложения
  common:
    batchSize: 1000 # Размер обрабатываемой пачки сообщений
    timeout: 3600000 # Таймаут обработки пачки сообщений в миллисекундах
    queryPartitionsInterval: 60000 # Интервал опроса исходящего топика на количество партиций
    producerFlushInterval: 1000 # Интервал принудительной отправки сообщений в исходящий топик в миллисекундах
    secret: "ssl/secret.pass" # Секрет для расшифровки паролей конфигурации
    cloudEvents: true # Включение прямой поддержки транспорта событий в формате CloudEvents
  pekko: # Общие параметры для системы акторов
    logger: # Параметры логирования акторов
      logger-startup-timeout: "30s" # Таймаут инициализации системы логирования акторов

  logback: # Настройки логов
    level: info # Уровень вывода логов
 enable.idempotence: false # Обязательный параметр. При подключении к брокеру Kafka версии ниже 3 необходимо в настройках клиента указывать данный параметр
epf_defaults: # Настройки адаптеров
  grpc1:  # Используется для параметра ${defaults.grpc_fpss_example} из *.conf
    type: "grpc" # Тип адаптера. Доступные значения: gRPC или REST
    url: "fpss://Example.Common.CLOUD/System/TESTA/1" # Точка подключения в fpss формате (fpss://домен.федерация.сегмент/система/имя_события/версия)
    host: "reactive-stream-adapter-evta-os" # Имя сервиса egress адаптера
    port: 8081  # Порт сервиса egress адаптера
  grpc2:
    type: "grpc" # Тип адаптера. Доступные значения: gRPC или REST
    url: "fpss://Example.Common.CLOUD/System/TESTB/1" # Точка подключения в fpss-формате (fpss://домен.федерация.сегмент/система/имя_события/версия)
    host: "reactive-stream-adapter-evta-os" # Имя сервиса egress адаптера
    port: 8080 # Порт сервиса egress адаптера
    timeout: 5000 # Таймаут обработки пачки сообщений в миллисекундах

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

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

При использовании HashiCorp Vault необходимо выбрать один из вариантов получения сертификатов.

Ниже представлен вариант выпуска сертификата через «PKI Engine HashiCorp Vault». Тип алгоритма аутентификации и необходимые учетные данные требуется запросить у Администратора HashiCorp Vault.

Данный файл подразумевает включение всех блоков для работы с EVPC. Пример расширенного файла настроек vars.yml:

# Блок настроек с Openshift
ansible_no_log: true # Маскирование сенситивных сообщений в ansible
wait_for_start: 120 # Время в секундах на старт приложения

#helm_cli: helm # путь до helm
#kubeconfig_path: /home/user/kubeconfig # путь до файла kubeconfig (может быть зашифрован через ansible-vault). Например, файл kubeconfig можно скачать через графический интерфейс.
api_url: https://api.example.ru:6443 # URL API openshift/k8s (не требуется при наличии kubeconfig_path)
token: __PLACEHOLDER__ # токен пользователя (сервис аккаунта) для установки (не требуется при наличии kubeconfig_path). Можно получить с помощью консоли графического интерфейса k8s или запросить у Администратора сопровожения.
skip_tls_verify: false # игнорировать проверку доверия для URL API (не требуется при наличии kubeconfig_path)
namespace: my-evpc-namespace # наименование проекта в openshift/k8s

# Блок настроек прессетов транспорта для обработчика, данные настройки будут использоваться в конфигурации обработчика по имени прессета
epf_defaults: # Настройки адаптеров
#  shared_grpc_example: # используется для параметра ${defaults.shared_grpc_example} из *.conf
#    type: shared-grpc
#    timeout: 30000
#    bufferSize: 1000
#    host: "localhost"
#    port: 8989
#    source: "ru.sbt.ss.event"
#    restartAttempts: 3
#  grpc_fpss_example: # Используется для параметра ${defaults.grpc_fpss_example} из *.conf
#    type: grpc # Тип адаптера
#    url: fpss://k2_simple.common.segment/system/testevent/1 # Точка подключения в fpss формате (fpss://домен.федерация.сегмент/система/имя_события/версия)
#    host: reactive-stream-adapter-epfegress # Имя сервиса egress адаптера
#    port: 8081 # Порт сервиса egress адаптера

#  kafka_example: # Пример настройки kafka
#    type: kafka # Тип брокера
#    bootstrap.servers: example1.ru:9092,example2.ru:9092 # Bootstrap подключения к Apache Kafka вида host:port,host2:port2
#    security.protocol: SSL # Тип протокола подключения. Значение по умолчанию: SSL
#    ssl.endpoint.identification.algorithm: "" # Обязательный параметр. Значение "" не изменяемое. Отключение проверки хостнейма в сертификате, обязательно для стендов Kafka
#    ssl.keystore.location: ${vault:ssl.keystore.location} # При использовании Vault (без Vault указывается путь к сертификату для подключения к Kafka)
#    ssl.keystore.password: ${vault:ssl.keystore.password} # Пароль от keystore
#    ssl.key.password: ${vault:ssl.key.password} # Пароль для key.password
#    ssl.truststore.location: ${vault:ssl.keystore.location} # Путь до truststore
#    ssl.truststore.password: ${vault:ssl.keystore.password} # Пароль от truststore
#    enable.idempotence: false # Обязательный параметр. При подключении к брокеру Kafka версии ниже 3 необходимо в настройках клиента указывать данный параметр
#    config.providers.vault.class: ru.sbt.ss.kafka.VaultConfigProvider # Используемый класс vault
#    config.providers.vault.param.security.encoding.class: ru.sbt.ss.password.BaseEncryptor # Используемый класс шифрования
#    config.providers.vault.param.security.encoding.key: ./config/encrypt.pass # Путь до файла, в который записывается ключ шифрования
#    config.providers.vault.param.ssl.vault.address: https://vault_address # Адрес к подключение vault
#    config.providers.vault.param.ssl.vault.tls.enable: "true" # Включение ssl для vault
#    config.providers.vault.param.ssl.vault.tls.keystore.location: /path/to/*.jks # Сертификат для подключения к vault
#    config.providers.vault.param.ssl.vault.tls.keystore.password: "{{ jks_password }}" # Пароль для сертификата
#    config.providers.vault.param.ssl.vault.tls.key.password: "{{ jks_password }}" # Пароль для сертификата
#    config.providers.vault.param.ssl.vault.tls.truststore.location: /path/to/*.jks # Сертификат для подключения к vault
#    config.providers.vault.param.ssl.vault.tls.truststore.password: "{{ jks_password }}" # Пароль для сертификата
#    config.providers.vault.param.ssl.keystore.mode: 600 # Права для keystore хранилища
#    config.providers.vault.param.ssl.truststore.mode: 600 # Права для truststore хранилища
#    config.providers.vault.param.ssl.endpoint.identification.algorithm: "" # Обязательный параметр. Значение "" не изменяемое. Отключение проверки хостнейма в сертификате, обязательно для стендов Kafka
#    config.providers.vault.param.ssl.vault.auth.type: approle # Тип аутентификации в vault
#    config.providers.vault.param.ssl.vault.auth.role.id: __PLACEHOLDER__ # Роль для аутентификации в vault
#    config.providers.vault.param.ssl.vault.auth.secret.id: __PLACEHOLDER__ # Секрет для аутентификации в vault
#    config.providers.vault.param.ssl.vault.pki.role.name: pki-role # Роль для генерации сертификатов в vault
#    config.providers.vault.param.ssl.vault.pki.common.name: __PLACEHOLDER__ # Common name (CN) для генерации сертификатов
#    config.providers.vault.param.ssl.keystore.location: /path/to/*.jks # Путь для сертификата на сервере
#    config.providers.vault.param.ssl.truststore.location: /path/to/*.jks # Путь для сертификата на сервере
#    config.providers.vault.param.ssl.vault.secret.path: kv1/certstore # Секретный путь для ключа, keystore и truststore паролей
#    config.providers.vault.param.ssl.vault.engine.version: 1 # Версия API для key-value машины
#    config.providers.vault.param.ssl.vault.secret.key: key # Secret key для пароля ключа
#    config.providers.vault.param.ssl.vault.secret.keystore: keystore # Secret key для keystore пароля
#    config.providers.vault.param.ssl.vault.secret.truststore: truststore # Secret key для truststore пароля
#    config.providers.vault.param.ssl.vault.pki.email: email@example.com # Email для генерации сертификатов
#    config.providers.vault.param.ssl.vault.namespace: my_namespace # Используемое пространство в vault
##  Параметры для подключения к cloudEvent
#    value.deserializer: "io.cloudevents.kafka.CloudEventDeserializer"
#    value.serializer: "io.cloudevents.kafka.CloudEventSerializer"
#    cloudevents.serializer.encoding: "STRUCTURED"
#    cloudevents.serializer.event_format: "application/cloudevents+json"
#  kafka_from_istio_proxy: # Пресет для kafka при пробросе кафка трафика через egressgateway
#    type: kafka
#    bootstrap.servers: egressgateway-svc-example.evpc-namespace.svc.cluster.local:10092
#    group.id: __PLACEHOLDER__
#    enable.idempotence: "false"
#  postgre_vault_example # При использовании HashiCorp Vault
#    type: database # Тип прессета
#    url: "jdbc:postgresql://db_url:5432/evtp" # Адрес базы данных
#    driver: "org.postgresql.Driver" # Используемый драйвер для базы данных
#    vaultSecretPath: "kv1/flink" # Путь до key-value хранилища, в котором лежат секреты, необходимые для подключения к БД. Опциональная настройка (если необходимы секреты из Vault)
#    sslfactory: "ru.sbt.cep.flow.event.process.config.parsing.flow.step.storage.postgresql.PostgresqlSslFactory" # Указывается пользовательский класс для создания защищенного подключения к БД
#    sslmode: "verify-ca" # Режим подключения, возможные значения disable , allow , prefer , require , verify-ca и verify-full
#    user: evpc # Пользователь базы данных
#    password: vault:dbpass # Пароль для базы данных
#    ssl.enabled: "true" # Включение ssl для точки подключения
#    ssl.keystore.location: /path/to/*.jks # Путь до хранилища сертификатов для подключения к postgre
#    ssl.truststore.location: /path/to/*.jks # Путь до truststore
#    ssl.vault.enabled: "true" # Включение интеграции с HashiCorp Vault
#    ssl.vault.address: https://my_vault_url # HashiCorp Vault URL. Если параметр задан, то сертификаты будут из Vault
#    ssl.vault.namespace: "" # Используемое пространство в vault
#    ssl.vault.pki.role.name: <role_name> # Роль для генерации сертификатов в vault
#    ssl.vault.pki.common.name: <common_name> # Common name (CN) для генерации сертификатов
#    ssl.vault.pki.email: email@example.com # Email для генерации сертификатов
#    ssl.vault.auth.type: approle # Тип аутентификации в vault
#    ssl.vault.auth.role.id: __PLACEHOLDER__ # Роль для аутентификации в vault
#    ssl.vault.auth.secret.id: __PLACEHOLDER__ # Секрет для аутентификации в vault
#    ssl.vault.tls.enable: "true" # Наличие защищенного соединения с HashiCorp Vault
#    ssl.vault.tls.truststore.location: /path/to/*.jks # Путь до truststore хранилища
#    ssl.vault.tls.truststore.password: "{{ jks_password }}" # Пароль от truststore хранилища
#    ssl.vault.engine.version: 1 # Версия API для key-value машины
#    ssl.vault.secret.path: kv1/flink # Секретный путь для ключа, keystore и truststore паролей
#    ssl.vault.secret.key: certpass # Secret key для пароля ключа
#    ssl.vault.secret.keystore: certpass # Secret key для keystore пароля
#    ssl.vault.secret.truststore: certpass # Secret key для truststore пароля
#    ssl.vault.pem.trust.path: kv1/kvtrust # Путь до Key-Value секрета c доверенными сертификатами в формате PEM
#    ssl.vault.pem.trust.aliases: ca1, ca2 # Список ключей в секрете, содержимое которых необходимо загрузить в хранилище доверенных сертификатов
#    ssl.keystore.mode: 600 # Права для keystore хранилища
#    ssl.truststore.mode: 600 # Права для truststore хранилища

# Блок настроек развертывания обработчика EVPC
epf:
  # Наименование деплоймента. Результат: eventprocessflowakka-example
  #name: example
  openshiftInstall: true # Установка в openshift (true) или в k8s (false)
  registry: "example.registry.address" # Адрес репозитория до образа
  registry_path: "example_repo/example_path" # Путь в репозитории
  replicas: 1 # Количество реплик
  pullImage: "docker-registry-access" # ТУЗ для подключения к репозиторию образов
  serviceAccountName: default # Сервисный аккаунт для запуска контейнера
  # Параметры healthCheck
  #healthCheck:
  #  port: 8081 # Порт проверки состояния доступности приложения
  #  changeLoggersAvailable: false # Возможность изменения уровня незаданных в logback логеров
  #  changeRootAvailable: false # Возможность изменения уровня root логера
  ## Настройки deployment
  jvmArgs: "-Dcom.ibm.mq.cfg.useIBMCipherMappings=true -noverify -XX:+AlwaysPreTouch -XX:+AlwaysActAsServerClassMachine -XX:+UseContainerSupport"   # Дополнительные аргументы JVM
  jsEnable: false # Включение трансфомации с использованием JavaScript
  # Ожидание старта Vault Sidecar, при наличии аннотации "vault.hashicorp.com/agent-inject" со значением true
  waitVault: true
  # Ожидание старта Istio Sidecar, при наличии аннотации "sidecar.istio.io/inject" со значением true
  waitIstio: true

# Пример переопределения парамметров readinessProbe
  readinessProbe: {}
  #  initialDelaySeconds: 60
  #  timeoutSeconds: 10
  #  periodSeconds: 10
  #  successThreshold: 1
  #  failureThreshold: 20
  # Пример переопределения парамметров livenessProbe
  livenessProbe: {}
  #  initialDelaySeconds: 30
  #  timeoutSeconds: 10
  #  periodSeconds: 10
  #  successThreshold: 1
  #  failureThreshold: 20

  # FeatureToggle для включения/отключения антитенантности (pod anti-affinity)
  # Если значение установлено в true, то антитенантность будет применена к подам,
  # чтобы они не размещались на одном узле (node).
  # Значение по умолчанию: true
  feature:
    SelfAntiAffinity:
      enabled: true

  rollingUpdate:
    maxUnavailable: 25% # Максимальное количество недоступных подов во время обновления
    maxSurge: 25% # Максимальное количество дополнительных подов во время обновления

  #resources:   # Пример переопределения дефолтных ресурсов
  #  limits:  # Ресурсы для лимитов
  #    cpu: 10.5 # Устанавливаемый лимит для CPU
  #    memory: 1600000M # Устанавливаемый лимит для памяти
  #  requests: # Ресурсы для запросов
  #    cpu: 10.3 # Запрашиваемое CPU
  #    memory: 1400000M # Запрашиваемая памяти
  annotations: {}   # Аннотации для Deployment
    "sidecar.istio.io/inject": "false" # Включение/выключение интеграции с Сервисным прокси SVPX/ istio
  # пример сбора метрик агентом prometheus:
  #    "prometheus.io/scrape": 'true'
  #    "prometheus.io/path": '/metrics'
  #    "prometheus.io/port": '8081'
  labels: {}
    # "secman-injector": "enabled" # adds vault sidecar
  flow:   # Конфигурация обработчика
    config: "mapping/flow.conf" # Путь до конфигурационного файла потока обработки
    # При использовании нескольких обработчиков необходимо указать пути до конфигурационных файлов потоков обработки
    #config: "mapping/flow_js.conf,mapping/flow_tr.conf"
    logLevel: "debug" # Уровень логирования трансформации сообщений
    parallel: 1 # Количество параллельных потоков обработки для одного экземпляра приложения
    telemetryConfig: "telemetry.json" # Имя файла конфигурации телеметрии
    # Включение трассировки задержки обработки событий
    #trace: true
    # Перечень классов ошибок через запятую для остановки обработки событий
    #interruptClasses: "com.fasterxml.jackson.core.JsonParseException, org.xml.sax.SAXParseException"
    # Количество попыток восстановления после падения
    #repeat: 2
    # Множитель интервала следующего восстановления, начиная со второй попытки
    #repeatMultiplier: 3
    # Интервал в миллисекундах между попытками восстановления
    #repeatDelay: 10000
  common:
    batchSize: 1000  # Размер обрабатываемой пачки сообщений
    timeout: 3600000 # Таймаут обработки пачки сообщений в миллисекундах
    threads: # Настройки пулов потоков системы акторов
      flowSize: 32 # Размер пула потоков для шагов трансформации кроме "source" и "destination"
      sourceSize: 32 # Размер пула потоков для шагов трансформации "source"
      destinationSize: 32 # Размер пула потоков для шагов трансформации "destination"
    shutdownInterval: 3000 # Интервал в миллисекундах между завершением source и sink
    queryPartitionsInterval: 60000 # Интервал опроса исходящего топика на количество партиций
    producerFlushInterval: 1000     # Интервал принудительной отправки сообщений в исходящий топик в миллисекундах
    secret: "ssl/secret.pass" # Секрет для расшифровки паролей конфигурации
    cloudEvents: true # Включение прямой поддержки транспорта событий в формате CloudEvents
    stopOnError: true # Флаг, отвечающий за остановку потока, при ошибке во время обработки. При указании dead.letter следует установить в false
  dead: # Используются для отправки событий, во время обработки которых произошла ошибка
    letter: {}
  #    # Пример настройки подключения к kafka
  #    type: kafka
  #    topic: "dead.letter.topic"
  #    bootstrap.servers": "example1.ru:9092,example2.ru:9092"
  #    enable.idempotence": "false"
  #    "group.id": "kafka_deadletter"
  metrics: # Параметры публикации метрик приложения (в формате Prometheus)
    prometheus.enabled: true # включение метрик в формате Prometheus
  environment:
    LANG: "ru_RU.UTF-8" # Язык для локализации сообщений программы
    LC_ALL: "ru_RU.UTF-8" # Устанавливает язык и локализацию для всех категорий
    LANGUAGE: "en_US:en:ru_RU.UTF-8:ru_RU:ru" # Язык для интерфейса пользователя и сообщений об ошибках

  # Параметры используемого хранилища
  #storage:
  ## Параметры для использования в качестве хранилища kafka/grpc
  #  type: kafka # kafka/grpc
  #  topic: storage
  #  initMs: 200
  #  pollTimeout: 100
  #  kafka:
  #    "bootstrap.servers": "localhost:9092"
  ## Параметры для использования в качестве хранилища database (Postgres, Ignite)
  #  type: database
  #  pollTimeout: 100 # Таймаут для проверки соединения с базой данных
  #  syncTimeout: 1000 # Интервал синхронизации хранилища
  #  retry: 10 # Количество попыток при подключении клиента к базе
  #  retryInterval: 1000 # Интервал ожидания между попытками
  #  retryMultiplier: 1 # Множитель ожидания между попытками
  #  database:
  #    table: storagess
  #    driver: "org.postgresql.Driver" # Драйвер для подключения к базе данных Postgres
  #    driver: "org.apache.ignite.IgniteJdbcThinDriver" # Драйвер для подключения к базе данных Ignite
  #    url: "jdbc:postgresql://localhost:5432/batch" # Url для подключения к базе данных Postgres
  #    url: "jdbc:ignite:thin://localhost:10800/PUBLIC" # Url для подключения к базе данных Ignite
  #    minPoolSize: 3 # Минимальный размер пула соединений с базой данных
  #    maxPoolSize: 15 # Максимальный размер пула соединений с базой данных
  #    initialPoolSize: 3 # Изначальный размер пула подключений с базой данных
  #    maxIdleTime: 0 # Время жизни неиспользуемого соединения в пуле. Значение по умолчанию 0 - соединение никогда не удаляется из пула
  #    acquireIncrement: 3 # Количество соединений, которые будут созданы в пуле при отсутствии свободных соединений
  #    user: batchuser
  #    password: vault:db_pass
  #    ssl.enabled: "true" # Включение ssl для точки подключения
  #    sslFactory: "ru.sbt.cep.flow.event.process.config.parsing.flow.step.storage.postgresql.PostgresqlSslFactory" # sslFactory для подключения к базе данных Postgres
  #    sslFactory: "ru.sbt.cep.flow.event.process.config.parsing.flow.step.storage.ignite.IgniteSslFactory" # sslFactory для подключения к базе данных Ignite
  #    ssl.keystore.location: /path/to/*.jks # Путь до хранилища сертификатов для подключения к postgre
  #    ssl.truststore.location: /path/to/*.jks # Путь до truststore
  #    ssl.vault.enabled: "true" # Включение интеграции с HashiCorp Vault
  #    ssl.vault.address: https://my_vault_url # HashiCorp Vault URL. Если параметр задан, то сертификаты будут из Vault
  #    ssl.vault.namespace: "" # Используемое пространство в vault
  #    ssl.vault.pki.role.name: <role_name> # Роль для генерации сертификатов в vault
  #    ssl.vault.pki.common.name: <common_name> # Common name (CN) для генерации сертификатов
  #    ssl.vault.pki.email: email@example.com # Email для генерации сертификатов
  #    ssl.vault.auth.type: kubernetes # Тип аутентификации в vault
  #    ssl.vault.auth.rolename: default # Роль для подключения к Vault
  #    ssl.vault.auth.jwt: "file:/var/run/secrets/kubernetes.io/serviceaccount/token" # Service account jwt для подключения к Vault. Значение с префиксом "env:" - будет браться из переменных среды, с префиксом "file:" - будет браться из файла
  #    ssl.vault.auth.provider: kubernetes # Провайдер для подключения к Vault
  #    ssl.vault.engine.version: 1 # Версия API для key-value машины
  #    ssl.vault.secret.path: kv1/db_pass # Секретный путь для ключа, keystore и truststore паролей
  #    ssl.vault.secret.key: certpass # Secret key для пароля ключа
  #    ssl.vault.secret.keystore: certpass # Secret key для keystore пароля
  #    ssl.vault.secret.truststore: certpass # Secret key для truststore пароля

  ## Параметры для использования в качестве хранилища timeseries (Cassandra)
  #  type: "timeseries"
  #  database:
  #    keyspace: "test" # обязательное поле
  #    tableName: EVPC_STORAGE,
  #    windowTableName: EVPC_WINDOW_STORAGE,
  #    contactPoints: "127.0.0.1:9042"
  #    username: "cassandra"
  #    password: vault:cassandra
  #    localDataCenter: "datacenter1"
  #    ssl.enabled: "true" # Включение ssl для точки подключения
  #    ssl.keystore.location: /path/to/*.jks # Путь до хранилища сертификатов для подключения к cassandra
  #    ssl.truststore.location: /path/to/*.jks # Путь до truststore
  #    ssl.vault.enabled: "true" # Включение интеграции с HashiCorp Vault
  #    ssl.vault.address: https://my_vault_url # HashiCorp Vault URL. Если параметр задан, то сертификаты будут из Vault
  #    ssl.vault.namespace: "" # Используемое пространство в vault
  #    ssl.vault.pki.role.name: <role_name> # Роль для генерации сертификатов в vault
  #    ssl.vault.pki.common.name: <common_name> # Common name (CN) для генерации сертификатов
  #    ssl.vault.pki.email: email@example.com # Email для генерации сертификатов
  #    ssl.vault.auth.type: kubernetes # Тип аутентификации в vault
  #    ssl.vault.auth.rolename: default # Роль для подключения к Vault
  #    ssl.vault.auth.jwt: "file:/var/run/secrets/kubernetes.io/serviceaccount/token" # Service account jwt для подключения к Vault. Значение с префиксом "env:" - будет браться из переменных среды, с префиксом "file:" - будет браться из файла
  #    ssl.vault.auth.provider: kubernetes # Провайдер для подключения к Vault
  #    ssl.vault.engine.version: 1 # Версия API для key-value машины
  #    ssl.vault.secret.path: kv1/cassandra # Секретный путь для ключа, keystore и truststore паролей
  #    ssl.vault.secret.key: certpass # Secret key для пароля ключа
  #    ssl.vault.secret.keystore: certpass # Secret key для keystore пароля
  #    ssl.vault.secret.truststore: certpass # Secret key для truststore пароля

  # Параметры для преопределния дефолтных значений драйвера при использовании в качестве storage Cassandra
  #datastaxJavaDriver:
  #  advanced.protocol.version: V4
  #  profiles.slow.basic.request.timeout: "10 seconds"

    # Параметры используемого EVPT
  #scheduler:
  #  url: "localhost:8080"
  #  timeout: 5000
  #  flow.port: 9090
  #  flow.host: 0.0.0.0
  # Порт сервиса для callback от EVPT
  #  flow.advertisedPort: 9090
  # Имя сервиса для callback от EVPT
  #  flow.advertisedHost: localhost

  # Параметры синхронизации таймеров через компактный топик Kafka при агрегации сообщений
  #scheduler:
  #  type: kafka
  ## компактный топик Kafka для синхронизации таймеров
  #  topic: "aggregation.scheduler"
  ## таймаут для клиента Kafka
  #  timeout: "1000"
  ## Параметры клиента Kafka для подключения
  #  kafka:
  #    "security.protocol": "SSL"
  #    "bootstrap.servers": "localhost:9092"
  #    "enable.auto.commit": "false"
  #    "enable.idempotence": "false"
  #    "ssl.endpoint.identification.algorithm": ""
  #    "ssl.protocol": "TLSv1.2"
  #    "ssl.keystore.type": "PEM"
  #    "ssl.truststore.type": "PEM"
  #    "ssl.keystore.location": "/vault/pki-keystore.pem"
  #    "ssl.truststore.location": "/vault/pki-truststore.pem"
  #    "group.id": "__PLACEHOLDER__"
  # Параметры healthCheck
  healthCheck:
    port: 8081
  #  changeLoggersAvailable: false # Возможность изменения уровня незаданных в logback логеров
  #  changeRootAvailable: false # Возможность изменения уровня root логера

  fluentBit: # Подключение к fluentBit
    create: false
  #    logLevel: info # Уровень логирования
  #    image: fluent-bit:latest # Используемый образ fluent-bit
  #    kafka: # Настройки Kafka, в которую будут отправляться логи
  #      brokers: localhost:9092
  #      topics: logstash
  #      protocol: SSL
  #      keyFilePath: /vault/logger-key.pem
  #      certificateFilePath: /vault/logger-cert.pem
  #      caFilePath: /vault/logger-cacerts.pem
  #      ## Опциональные парамтеры для kafka
  #    extraConfig: # Опциональные парамтеры для kafka
  #      rdkafka.queue.buffering.max.messages: 100000
  #      rdkafka.request.required.acks: 1
  #      rdkafka.ssl.key.password: <password>
  #    resources: # Опциональная настройка ресурсов для fluentBit
  #      limits:
  #        cpu: 100m
  #        memory: 200mi
  #      requests:
  #        cpu: 50m
  #        memory: 100mi

  telemetry:  {} # Конфигурация для Open 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: { }

  # Параметры для создания конфигураций обработчиков
  mappings: []
  #    - fileName: "flow-example.conf"
  #      content: |-
  #        {
  #          source: {
  #            name: "source"
  #            type: "source"
  #            topic: "input"
  #            offset: "begin"
  #            config: ${defaults.grpc1}
  #            destination: ${dslStep}
  #          }
  #
  #          destination: {
  #            name: "output"
  #            type: "destination"
  #            topic: "output"
  #            config: ${defaults.grpc2}
  #          }
  #
  #          dslStep: {
  #            name: "simple-dsl"
  #            type: "dsl"
  #            format: {
  #              input: "json"
  #              output: "json"
  #            }
  #            dsl: {
  #              source: "file"
  #              path: "simple.tr"
  #            }
  #            destination: ${destination}
  #          }
  #
  #          flow: {
  #            name: "TEST"
  #            source: [${source}]
  #          }
  #        }
  #    - fileName: "simple.tr"
  #      content: |-
  #        debug(in)
  #        debug(environment)
  #        out = in

  pekko: # Общие параметры для системы акторов
    logger: # Параметры логирования акторов
      logger-startup-timeout: "30s" # Таймаут инициализации системы логирования акторов

  #  vaultConfigsFile: # Настройки подключения к 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.keystore.location: ssl/vault-client.jks
  #    ssl.vault.tls.keystore.password: "{{ jks_password }}"
  #    ssl.vault.tls.key.password: "{{ jks_password }}"
  #    ssl.vault.tls.truststore.location: ssl/vault-client.jks # Хранилище доверенных сертификатов для безопасного подключения к vault
  #    ssl.vault.tls.truststore.password: "{{ jks_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.role.name: default # Имя роли в PKI Engine
  #    ssl.vault.pki.common.name: EVPC-logback # Common name (CN) для генерации сертификатов
  #    ssl.vault.pki.email: vasya@rambler.ru # 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.secret.path: kv1/certstore # Секретный путь для паролей от ключа, keystore и truststore
  #    ssl.vault.engine.version: 1 # Версия API для key-value машины
  #    ssl.vault.secret.key: password # Secret key для пароля от ключа
  #    ssl.vault.secret.keystore: password # Secret key для пароль от keystore
  #    ssl.vault.secret.truststore: password # Secret key для пароля от truststore

  logback: # Настройки логов
    level: info # Уровень вывода логов
  #    podLogs: true # Включение логирования бизнес логов в stdout пода
  #    loggers: # Настройка логгеров
  #      - name: "ru.example.cep" # Наименование логгера
  #        level: info # Уровень логирования. Возможные значения: info/warn/debug
  #      - name: "ru.example.ss"
  #        level: info # Уровень логирования. Возможные значения: info/warn/debug
  #      - name: "org.apache.kafka"
  #        level: warn
  #      - name: "com.typesafe.akka"
  #        level: info # Уровень логирования. Возможные значения: info/warn/debug
  #    rest: # HTTP appender для отправки логов через rest адаптер EVTA
  #      url: exampleadapter
  #      port: 8081
  #      path: /publish/ALPHA/K2_IAZCommon/Common/example/TESTA/1
  #      reconnectDelay: 10
  #      systemLogsUrl: example-system-logs-adapter
  #      systemLogsPort: 9082
  #      systemLogsPath: /publish/ALPHA/K2_IAZCommon/Common/systemLogs/TESTA/1
  #      businessLogsUrl: example-business-logs-adapter
  #      businessLogsPort: 9083
  #      businessLogsPath: /publish/ALPHA/K2_IAZCommon/Common/businessLogs/TESTA/1
  #      systemLogs_never_block: true # блокировка работы приложения при недоступности рест адаптера (по умолчанию - блокируется, при true недоставленные сообщения отбрасываются)
  #      systemLogs_discarding_threshold: 20 # процент свободного места в очереди отправки сообщений при достижении которого будут удаляться сообщения уровня TRACE, DEBUG, INFO
  #      systemLogs_queue_size: 512 # размер очереди для отправки
  #      businessLogs_never_block: true # блокировка работы приложения при недоступности рест адаптера (по умолчанию - блокируется, при true недоставленные сообщения отбрасываются)
  #      businessLogs_discarding_threshold: 20 # процент свободного места в очереди отправки сообщений при достижении которого будут удаляться сообщения уровня TRACE, DEBUG, INFO
  #      businessLogs_queue_size: 512 # размер очереди для отправки
  #      businessLogs_log_level: "info" # уровень логирования TRACE, DEBUG, INFO
  #    kafka:
  #      systemLogsTopic: sys-topic # Топик для отправки системных логов
  #      systemLogsTopic_never_block: true # Блокировка работы приложения при недоступности Kafka (по умолчанию - блокируется, при true недоставленные сообщения в kafka отбрасываются)
  #      systemLogsTopic_discarding_threshold: 20 # Процент свободного места в очереди отправки сообщений при достижении которого будут удаляться сообщения уровня TRACE, DEBUG, INFO
  #      systemLogsTopic_queue_size: 512 # Размер очереди для отправки в Кафку
  #      businessLogsTopic: business-topic # Топик для отправки бизнес логов
  #      businessLogsTopic_never_block: true # Блокировка работы приложения при недоступности Kafka (по умолчанию - блокируется, при true недоставленные сообщения в kafka отбрасываются)
  #      businessLogsTopic_discarding_threshold: 20 # Процент свободного места в очереди отправки сообщений при достижении которого будут удаляться сообщения уровня TRACE, DEBUG, INFO
  #      businessLogsTopic_queue_size: 512 # Размер очереди для отправки в Кафку
  #      businessLogsTopic_log_level: "info" # Уровень логирования TRACE, DEBUG, INFO
  #      retries: 3 # Количество переиницилизации продьюсера, если параметр не задан, по умолчанию значение 3
  #      interval: 1000 # Интервал между переиницилизациями, по умолчанию 1000 мс. Задается в мс
  #      multiplier: 1 # Множитель интервала переинициализации, по умолчанию значение 1
  #      never_block: true # Блокировка работы приложения при недоступности Kafka (при true недоставленные сообщения в kafka отбрасываются)
  #      discarding_threshold: 20 # Процент свободного места в очереди отправки сообщений при достижении которого будут удаляться сообщения уровня TRACE, DEBUG, INFO
  #      queue_size: 512 # Размер очереди для отправки в Kafka
  #      properties:
  #        "bootstrap.servers": "hostname-1:9092,hostname-2:9092" # Bootstrap подключения к Apache Kafka вида host:port,host2:port2
  #        "client.id": "__PLACEHOLDER__" # Идентификатор клиента в Kafka
  #        "config.providers": decode # Объявление провайдера шифрования паролей. Значение не изменять
  #        "config.providers.decode.class": ru.sbt.ss.kafka.DecryptionConfigProvider # Класс провайдера шифрования паролей. Значение не изменять
  #        "config.providers.decode.param.security.encoding.key": ssl/secret.pass # Путь до файла, содержащего ключ шифрования паролей
  #        "config.providers.decode.param.security.encoding.class": ru.sbt.ss.password.BaseEncryptor # Класс шифрования паролей. Значение не изменять
  #
  #        "security.protocol": SSL # Тип протокола подключения. Значение по умолчанию: SSL
  #        "ssl.endpoint.identification.algorithm": "" # Обязательный параметр. Значение "" не изменяемое. Отключение проверки хостнейма в сертификате, обязательно для стендов Kafka
  #        "ssl.keystore.location": "path/to/*.jks" # Путь до хранилища сертификатов, для отправки логов kafka
  #        "ssl.truststore.location": "path/to/*.jks" # Путь до truststore
  #
  #        "ssl.keystore.password": __PLACEHOLDER__ # Пароль от keystore
  #        "ssl.truststore.password": __PLACEHOLDER__ # Пароль от truststore
  #        "ssl.key.password": _PLACEHOLDER_ # Пароль для key.password

  # Блок настроек аудита
  audit:
    service:
      type: log # Вариант отправки событий аудита (http или log)
  #    type: http # Вариант отправки событий аудита (http или log)
  #    url.base: "http://ext-http.audit.example.ru" # Точка подключения для событий аудита
  #    url.event.path: "/v1/event" # Суффикс для отправки событий
  #    url.metamodel.path: "/v1/metamodel" # Суффикс для отправки метамодели
  #    node.id: "__PLACEHOLDER__" # Идентификатор узла
  #    source.system: "source.system" # Название инсталляции
  #    ssl.enabled: "false" # Включение ssl для точки подключения
  #    ssl.keystore: "/path/to/*.jks" # Путь до хранилища сертификатов, для отправки отправки события аудита
  #    ssl.keystore.password: "password" # Пароль от keystore
  #    ssl.key.password: "password" # Пароль для key.password
  #    ssl.truststore: "path/to/*.jks" # Путь до truststore
  #    ssl.truststore.password: "password" # Пароль от truststore
  #    ssl.protocol: "TLSv1.2" # Используемая версия протокола для TLS
  #    ssl.verify.hostname: "false" # Проверка имени сервера в его сертификате

  #    ## Настройка kafka-транспорта для событий аудита
  #    transport.type: kafka # Тип транспорта, http или kafka, по умолчанию http
  #    metamodel.topic: metamodel-topic # Имя топика для отправки метамодели
  #    event.topic: event-topic # Имя топика для отправки событий
  #    kafka.bootstrap.servers: "localhost:9093" # Адреса kafka
  #    ## ОПЦИОНАЛЬНО Сериализаторы (по умолчанию org.apache.kafka.common.serialization.StringSerializer)
  #    kafka.key.serializer: org.apache.kafka.common.serialization.StringSerializer
  #    kafka.value.serializer: org.apache.kafka.common.serialization.StringSerializer
  #    ## ОПЦИОНАЛЬНО идентификатор клиента
  #    kafka.client.id: __PLACEHOLDER__
  #    ## ОПЦИОНАЛЬНО настройки ssl
  #    kafka.security.protocol: SSL
  #    kafka.ssl.keystore.location: ssl/keystore.jks
  #    kafka.ssl.keystore.password: <password>
  #    kafka.ssl.truststore.location: ssl/truststore.jks
  #    kafka.ssl.truststore.password: <password>
  #    kafka.ssl.endpoint.identification.algorithm: ""

  #    send.metamodel: "true" # Отправка метамодели при старте приложения
  #    metamodel.module: EVPC Stream Processor # Переопределить module.id метамодели
  #    metamodel.version: 1.0 #  Переопределить версию метамодели

  #    redelivery.enabled: "true" # Параметры включение/выключение переотправки событий аудита
  #    add.redelivery.headers: "true" # Добавление заголовков в переотправленные события аудита
  #    redelivery.buffers: "in-memory-buffer" # Список буфферов для повторной отправки сообщений
  #    redelivery.in-memory-buffer.type: "queue" # Хранение событий в памяти
  #    redelivery.in-memory-buffer.max.size: "10k" # Максимальный размер хранимых событий
  #    redelivery.in-memory-buffer.clear.logger.name: "memory" # При переполнении буфера старые сообщения будут залогированы в блоггер с именем memory
  #    request.timeout.ms: "30000" # Максимальное время требуемое на отправку события аудита

  #    Конфигурация аудита для получения сертификатов из HashiCorp Vault
  #    ssl.keystore.location: ${vault:ssl.keystore.location} # Путь до keystore хранилища сертификата, где будет размещен сертификат сгенерированный Vault
  #    ssl.truststore.location: ${vault:ssl.truststore.location} # Путь до truststore хранилища
  #    ssl.keystore.mode: 600 # Права для keystore хранилища
  #    ssl.truststore.mode: 600 # Права для truststore хранилища
  #    ssl.vault.address: https:/host:port # HashiCorp Vault URL.
  #    ssl.vault.pki.role.name: <role_name> # Имя роли в PKI Engine
  #    ssl.vault.pki.common.name: <common_name> # Common name (CN) для генерации сертификатов
  #    ssl.vault.pki.mount: "" # Путь до API движка выпуска сертификатов в Vault pki
  #    ssl.vault.pki.email: email@example.com # Email для генерации сертификатов
  #    ssl.vault.namespace: "" # Используемое пространство в vault
  #    ssl.vault.auth.type: approle # Тип аутентификации в vault
  #    ssl.vault.auth.role.id: <role_id> # Role ID для типа аутентификации approle
  #    ssl.vault.auth.secret.id: "{{ vault_secret }}" # Secret ID для типа аутентификации approle
  #    ssl.vault.tls.enable: "true" # Наличие защищенного соединения с HashiCorp Vault
  #    ssl.vault.tls.truststore.location: /path/to/*.jks # Путь до truststore хранилища
  #    ssl.vault.tls.truststore.password: "{{ jks_password }}" # Пароль от truststore хранилища
  #    ssl.vault.engine.version: 1 # Версия API для key-value машины
  #    ssl.vault.secret.path: path/to/certstore # Секретный путь для ключа, keystore и truststore паролей
  #    ssl.vault.secret.key: key # Secret key для пароля ключа
  #    ssl.vault.secret.keystore: keystore # Secret key для keystore пароля
  #    ssl.vault.secret.truststore: truststore # Secret key для truststore пароля
  #    ssl.vault.pem.trust.path: kv1/kvtrust # Путь до Key-Value секрета c доверенными сертификатами в формате PEM
  #    ssl.vault.pem.trust.aliases: ca1, ca2 # Список ключей в секрете, содержимое которых необходимо загрузить в хранилище доверенных сертификатов
  #    redelivery.memory.type: queue # Тип буфера
  #    redelivery.memory.max.size: 100m # Максимальный размер буфера, может быть установлен в гига/мега/кило/байтах,например: 1024, 1024b, 100k, 10m, 1g, -1 для неограниченного размера
  #    redelivery.kafka-buffer.ssl.keystore.location: ${vault:ssl.keystore.location} # Путь до keystore хранилища сертификата, где будет размещен сертификат сгенерированный Vault
  #    redelivery.kafka-buffer.ssl.truststore.location: ${vault:ssl.truststore.location} # Путь до truststore хранилища
  #    redelivery.kafka-buffer.ssl.endpoint.identification.algorithm: "" # Обязательный параметр. Значение "" неизменяемое. Отключение проверки хостнейма в сертификате, обязательно для стендов Kafka
  #    '"redelivery.kafka-buffer.config.providers"': vault # Обязательно в кавычках
  #    redelivery.kafka-buffer.config.providers.vault.class: ru.sbt.ss.kafka.VaultConfigProvider # Объявление провайдера шифрования паролей. Значение не изменять
  #    redelivery.kafka-buffer.config.providers.vault.param.security.encoding.class: ru.sbt.ss.password.BaseEncryptor # Значение не изменяется. Используемый класс для расшифровки пароля
  #    redelivery.kafka-buffer.config.providers.vault.param.security.encoding.key: file:path/to/encrypt.pass # Путь до файла, содержащего ключ шифрования паролей
  #    redelivery.kafka-buffer.config.providers.vault.param.ssl.vault.address: https:/host:port # HashiCorp Vault URL.
  #    redelivery.kafka-buffer.config.providers.vault.param.ssl.vault.tls.enable: "true" # Наличие защищенного соединения с HashiCorp Vault
  #    redelivery.kafka-buffer.config.providers.vault.param.ssl.vault.tls.truststore.location:
  #    redelivery.kafka-buffer.config.providers.vault.param.ssl.vault.tls.truststore.password: "{{ jks_password }}" # Пароль от truststore хранилища
  #    redelivery.kafka-buffer.config.providers.vault.param.ssl.endpoint.identification.algorithm: "" # Обязательный параметр. Значение "" неизменяемое. Отключение проверки хостнейма в сертификате, обязательно для стендов Kafka
  #    redelivery.kafka-buffer.config.providers.vault.param.ssl.vault.auth.type: approle # Тип аутентификации. Доступные значения: approle, token, password, cert
  #    redelivery.kafka-buffer.config.providers.vault.param.ssl.vault.auth.role.id: <role_id> # Role ID для типа аутентификации approle
  #    redelivery.kafka-buffer.config.providers.vault.param.ssl.vault.auth.secret.id: "{{ vault_secret }}" # Secret ID для типа аутентификации approle
  #    redelivery.kafka-buffer.config.providers.vault.param.ssl.vault.pki.mount: "" # Путь до API движка выпуска сертификатов в Vault pki
  #    redelivery.kafka-buffer.config.providers.vault.param.ssl.vault.pki.role.name: <role_name> # Имя роли в PKI Engine
  #    redelivery.kafka-buffer.config.providers.vault.param.ssl.vault.pki.common.name: <common_name> # Common name (CN) для генерации сертификатов
  #    redelivery.kafka-buffer.config.providers.vault.param.ssl.keystore.location: ${vault:ssl.keystore.location} # Путь до keystore хранилища сертификата, где будет размещен сертификат сгенерированный Vault
  #    redelivery.kafka-buffer.config.providers.vault.param.ssl.truststore.location:${vault:ssl.truststore.location} # Путь до truststore хранилища
  #    redelivery.kafka-buffer.config.providers.vault.param.ssl.vault.secret.path: path/to/certstore # Секретный путь для ключа, keystore и truststore паролей
  #    redelivery.kafka-buffer.config.providers.vault.param.ssl.vault.engine.version: 1 # Версия API для key-value машины
  #    redelivery.kafka-buffer.config.providers.vault.param.ssl.vault.secret.key: key # Secret key для пароля ключа
  #    redelivery.kafka-buffer.config.providers.vault.param.ssl.vault.secret.keystore: keystore # Secret key для keystore пароля
  #    redelivery.kafka-buffer.config.providers.vault.param.ssl.vault.secret.truststore: truststore # Secret key для truststore пароля
  #    redelivery.kafka-buffer.config.providers.vault.param.ssl.vault.pki.email: email@example.com # Email для генерации сертификатов
  #    redelivery.kafka-buffer.config.providers.vault.param.ssl.vault.namespace: "" # Используемое пространство в vault

  # Пример использования для файлового буфера:
  #    redelivery.file-buffer.type: "file" # Тип буфера
  #    redelivery.file-buffer.file.name: "buffers/redelivery.txt" # Используемый файл
  #    redelivery.file-buffer.encryption.enabled: "true" # Включить шифрование событий
  #    redelivery.file-buffer.encryption.class: "ru.sbt.ss.password.BaseEncryptor" # ОПЦИОНАЛЬНО Указать класс шифрования, по умолчанию ru.sbt.ss.password.BaseEncryptor
  #    redelivery.file-buffer.encryption.encrypt.key: "file:ssl/secret.pass" # Ключ шифрования (encrypt.key)
  #    redelivery.file-buffer.encryption.encrypt.algorithm: "PBEWithHmacSHA512AndAES_256" # Алгоритм шифрования (algorithm), по умолчанию PBEWithHmacSHA512AndAES_256

  istio: # настройки манифестов Istio
    egress:
      deployment:
        create: false # создавать ли Deployment для istio egressgateway
        name: evpc-egressgateway
        readinessProbe: {}
        #  initialDelaySeconds: 1
        #  timeoutSeconds: 1
        #  periodSeconds: 2
        #  successThreshold: 1
        #  failureThreshold: 30
        # resources:
        #   limits:
        #     cpu: 0.1
        #     memory: 128M
        #   requests:
        #     cpu: 0.1
        #     memory: 64M
        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_example
          # 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: 'false'
          # 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/example-audit-cert" -}}
          #   {{ index .Data "key" }}
          #   {{- end }}
          #   {%- endraw %}
          # vault.hashicorp.com/agent-inject-template-ca.pem: |
          #   {%- raw %}
          #   {{- with secret "A/DEV/SY/EVTD/KV/example-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)
    peerAuthentication:
      create: false
  #    name: peer-auth-0
  #    mtls_mode: PERMISSIVE # UNSET (default) | DISABLE | PERMISSIVE | STRICT
    egressService: # параметры сервиса Egress
  #    name: "egressgateway0-svc" # имя сервиса Egress
      create: false # создавать ли манифест сервиса
  #    internalPort: 15021 # внутренний порт Egress
  #    internalPortName: status-port # имя внутреннего порта Egress
  #    internalPortProtocol: TCP # протокол внутреннего порта Egress
  #    selector: # содержимое поля spec.selector в манифесте сервиса
  #      app: egressgateway-tribe-sy-synes-dev
  #      istio: egressgateway-tribe-sy-synes-dev
    gateway: # параметры манифеста Gateway для Istio Egress
  #    name: egressgateway0-gw # имя манифеста
      create: false # создавать ли манифест
  #    selector: # содержимое поля spec.selector в манифесте
  #      istio: egressgateway-tribe-sy-synes-dev
      destinationRule: # параметры для манифеста DestinationRule Istio
  #      name: epf-vault-dr # имя манифеста
        create: false # создавать ли манифест
  #      tls: # параметры TLS в манифесте spec.trafficPolicy.portLevelSettings[0].tls
  #        mode: MUTUAL # DISABLE | SIMPLE | MUTUAL (own certs) | ISTIO_MUTUAL (control plane certs)
  #        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: 5
  #        interval: 5m
  #        baseEjectionTime: 5m
  #        maxEjectionPercent: 50

  # # При создании 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.host # хост сервиса HashiCorp Vault
  #    port: 8200 # порт сервиса HashiCorp Vault для обращения из pod'а
  #    externalPort: 8200 # порт сервиса HashiCorp Vault
  #    # Порты и протоколы ниже используются в манифестах VirtualService, Gateway, Gateway Service
  #    # Поддерживаемые gwSvc протоколы - "SCTP", "TCP", "UDP"
  #    gwPort: 9444 # порт на egressGateway
  #    gwProtocol: TLS # протокол на egressGateway
  #    gwSvcProtocol: TCP # протокол на service egressGateway
  #    gwTls:
  #      mode: ISTIO_MUTUAL # Валидные значения: "PASSTHROUGH", "SIMPLE", "MUTUAL", "AUTO_PASSTHROUGH", "ISTIO_MUTUAL", "OPTIONAL_MUTUAL"
      destinationRule: # параметры для манифеста DestinationRule Istio
  #      name: epf-audit-dr # имя манифеста
        create: false # создавать ли манифест
  #        tls: # параметры TLS в манифесте spec.trafficPolicy.portLevelSettings[0].tls
  #          mode: MUTUAL # DISABLE | SIMPLE | MUTUAL (own certs) | ISTIO_MUTUAL (control plane certs)
  #          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: 5
  #        interval: 5m
  #        baseEjectionTime: 5m
  #        maxEjectionPercent: 50
      virtualService: # параметры для манифеста VirtualService
  #      name: epf-audit-vs # имя манифеста
  #      protocol: http # протокол для создания virtual service. Валидные значения: http, tls, tcp
        create: false # создавать ли манифест VirtualService
    audit: # параметры для интеграции с сервисом Аудита
  #    host: audit.host # хост сервиса Аудита
  #    port: 80 # порт сервиса Аудита для обращения из pod'а
  #    externalPort: 443 # порт сервиса Аудита
  #    # Порты и протоколы ниже используются в манифестах VirtualService, Gateway, Gateway Service
  #    # Поддерживаемые gwSvc протоколы - "SCTP", "TCP", "UDP"
  #    gwPort: 9443 # порт на egressGateway
  #    gwProtocol: HTTP # протокол на egressGateway
  #    gwSvcProtocol: TCP # протокол на service egressGateway
  #    gwTls:
  #      mode: ISTIO_MUTUAL # Валидные значения: "PASSTHROUGH", "SIMPLE", "MUTUAL", "AUTO_PASSTHROUGH", "ISTIO_MUTUAL", "OPTIONAL_MUTUAL"
      destinationRule: # параметры для манифеста DestinationRule Istio
  #      name: epf-audit-dr # имя манифеста
        create: false # создавать ли манифест
  #      tls:
  #        mode: MUTUAL # DISABLE | SIMPLE | MUTUAL (own certs) | ISTIO_MUTUAL (control plane certs)
  #        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: 5
  #        interval: 5m
  #        baseEjectionTime: 5m
  #        maxEjectionPercent: 50
      virtualService: # параметры для манифеста VirtualService
  #      name: epf-audit-vs # имя манифеста
  #      protocol: http # протокол для создания virtual service. Валидные значения: http, tls, tcp
        create: false # создавать ли манифест VirtualService

   telemetry: # параметры для интеграции с OpenTelemetry
#      host: telemetry.url # хост сервиса OpenTelemetry
#      port: 80 # порт сервиса OpenTelemetry для обращения из pod'а
#      externalPort: 443 # порт сервиса OpenTelemetry
#      # Порты и протоколы ниже используются в манифестах VirtualService, Gateway, Gateway Service
#      # Поддерживаемые gwSvc протоколы - "SCTP", "TCP", "UDP"
#      gwPort: 9449 # порт на egressGateway
#      gwProtocol: HTTP # протокол на egressGateway
#      gwSvcProtocol: TCP # протокол на service egressGateway
#      gwTls:
#        mode: ISTIO_MUTUAL # Валидные значения: "PASSTHROUGH", "SIMPLE", "MUTUAL", "AUTO_PASSTHROUGH", "ISTIO_MUTUAL", "OPTIONAL_MUTUAL"
      destinationRule: # параметры для манифеста DestinationRule Istio
        name: telemetry-dr # имя манифеста
        create: false # создавать ли манифест
#        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: 5
#          interval: 5m
#          baseEjectionTime: 5m
#          maxEjectionPercent: 50
      virtualService: # параметры для манифеста VirtualService
        name: telemetry-vs # имя манифеста
        protocol: http # протокол для создания virtual service. Валидные значения: http, tls, tcp
        create: false # создавать ли манифест VirtualService
    cassandra: # настройки манифестов Istio для работы с базой данных Cassandra
#      host: cassandra.host # хост сервиса Cassandra
#      port: 9042 # порт сервиса Cassandra для обращения из pod'а
#      externalPort: 9042 # порт сервиса Cassandra
#      # Порты и протоколы ниже используются в манифестах VirtualService, Gateway, Gateway Service
#      # Поддерживаемые gwSvc протоколы - "SCTP", "TCP", "UDP"
#      gwPort: 9446 # порт на egressGateway
#      gwProtocol: TCP # протокол на egressGateway
#      gwSvcProtocol: TCP # протокол на service egressGateway
#      gwTls:
#        mode: ISTIO_MUTUAL # Валидные значения: "PASSTHROUGH", "SIMPLE", "MUTUAL", "AUTO_PASSTHROUGH", "ISTIO_MUTUAL", "OPTIONAL_MUTUAL"
      destinationRule:
#        name: cassandra-dr # имя манифеста
        create: false # создавать ли манифест
#        tls:
#          mode: MUTUAL # DISABLE | SIMPLE | MUTUAL (own certs) | ISTIO_MUTUAL (control plane certs)
#          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: 5
#          interval: 5m
#          baseEjectionTime: 5m
#          maxEjectionPercent: 50
      virtualService: # параметры для манифеста VirtualService
#        name: cassandra-vs # имя манифеста
#        protocol: tcp # протокол для создания virtual service. Валидные значения: http, tls, tcp
        create: false # создавать ли манифест VirtualService
    ignite: # настройки манифестов Istio для работы с базой данных ignite
#      host: ignite.host # хост сервиса ignite
#      port: 10800 # порт сервиса ignite для обращения из pod'а
#      externalPort: 10800 # порт сервиса Cassandra
#      # Порты и протоколы ниже используются в манифестах VirtualService, Gateway, Gateway Service
#      # Поддерживаемые gwSvc протоколы - "SCTP", "TCP", "UDP"
#      gwPort: 9447 # порт на egressGateway
#      gwProtocol: TCP # протокол на egressGateway
#      gwSvcProtocol: TCP # протокол на service egressGateway
#      gwTls:
#        mode: ISTIO_MUTUAL # Валидные значения: "PASSTHROUGH", "SIMPLE", "MUTUAL", "AUTO_PASSTHROUGH", "ISTIO_MUTUAL", "OPTIONAL_MUTUAL"
      destinationRule:
#        name: ignite-dr # имя манифеста
        create: false # создавать ли манифест
#        tls:
#          mode: MUTUAL # DISABLE | SIMPLE | MUTUAL (own certs) | ISTIO_MUTUAL (control plane certs)
#          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: 5
#          interval: 5m
#          baseEjectionTime: 5m
#          maxEjectionPercent: 50
      virtualService: # параметры для манифеста VirtualService
#        name: ignite-vs # имя манифеста
#        protocol: tcp # протокол для создания virtual service. Валидные значения: http, tls, tcp
        create: false # создавать ли манифест VirtualService

   postgres: [] # настройки манифестов Istio для работы с базой данных
#      - host: postgres.host # хост сервиса Postgres; указывать валидный SAN из сертификата
#        port: 5432 # порт сервиса Postgres для обращения из pod'а
#        externalPort: 5432 # порт сервиса Postgres
#        # Порты и протоколы ниже используются в манифестах VirtualService, Gateway, Gateway Service
#        # Поддерживаемые gwSvc протоколы - "SCTP", "TCP", "UDP"
#        gwPort: 9445 # порт на egressGateway
#        gwProtocol: TCP # протокол на egressGateway
#        gwSvcProtocol: TCP # протокол на service egressGateway
#        gwTls:
#          mode: ISTIO_MUTUAL # Валидные значения: "PASSTHROUGH", "SIMPLE", "MUTUAL", "AUTO_PASSTHROUGH", "ISTIO_MUTUAL", "OPTIONAL_MUTUAL"
#        destinationRule:
#          create: false # создавать ли манифест
#          tls:
#            mode: MUTUAL # DISABLE | SIMPLE | MUTUAL (own certs) | ISTIO_MUTUAL (control plane certs)
#            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: 5
#            interval: 5m
#            baseEjectionTime: 5m
#            maxEjectionPercent: 50
#        virtualService: # параметры для манифеста VirtualService
#          create: false # создавать ли манифест VirtualService
  # # Массив serviceEntry, которые нужно создать
  # # Для postgres указать протокол postgres, а не tcp
  #  serviceEntry:
  #    - host: my_hostname
  #      port:
  #        name: tcp-kafka
  #        number: 9092
  #        protocol: TCP
  #      resolution: DNS
  #      annotations: # расскомментировать если нужно чтобы serviceEntry осталась после helm uninstall
  #        "helm.sh/resource-policy": keep
  #    - host: my_hostname_2
  #      addresses: "{ IP_ADDRESS }/32"
  #      port:
  #        name: tcp-kafka
  #        number: 9092
  #        protocol: TCP
  #      resolution: STATIC
  #    - host: my_hostname_3
  #      port:
  #        name: tcp-kafka
  #        number: 9092
  #        protocol: TCP
  #      resolution: NONE

# Файл настроек для playbook DB
db:
  host: localhost # адрес БД
  database: batch # наименовнавие БД
  schema: public # схема БД
  username: __PLACEHOLDER__ # пользователь БД
  password: __PLACEHOLDER__ # пароль БД
  ssl:
    enabled: false # включение/выключение SSL соединения
    keystore_path: ssl/test.jks # путь до keystore относительно inventory
    keystore_password: __PLACEHOLDER__ # пароль от keystore
    truststore_path: ssl/test.jks # Путь до truststore
    truststore_password: __PLACEHOLDER__ # пароль от truststore
    key: __PLACEHOLDER__ # key для truststore пароля

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

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

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

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

NewFile

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

Jenkins

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

Jenkins

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

Jenkins

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

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

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

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

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

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

Jenkins

Создание Jenkins Job для установки EVPC в Openshift#

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

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

NewItem

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

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

NewItem_create

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

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

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

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

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

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

  • В параметре «Script Path» указать путь до groovy-скрипта Pipeline/evpc.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. Появится страница со всем списком настраиваемых параметров, отвечающих за установку EVPC:

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

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

  • nexusUrl — ссылка на конфигурационный дистрибутив. Для скачивания дистрибутива используется параметр nexus_user_cred. Если поле остается пустым, то устанавливаются все EVPC, описанные в inventory;

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

  • tags – cписок тегов. При пустом значении выполняется установка или обновление EVPC. При теге uninstall выполняется удаление EVPC;

  • jenkins_slave — выбор Jenkins Slave;

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

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

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

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

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

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

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

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

  • helmCliVersion — указание Jenkins Tool с необходимой версией Helm (Конкретное знчение необходимо найти в Jenkins Job по кнопке Pipeline Syntax, далее в поле Sample Step выбрать tool, в поле Tool Type выбрать Custom tool, в поле Tool выбрать необходимую врсию из раздела Системное программное обеспечение).

  • inventories_repo, inventories_branch, inventories_path — необязательные параметры. Выкачивание inventory из стороннего репозитория.

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

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

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

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

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

Создание Jenkins Job evpc_image_create#

Задание Jenkins evpc_image_create используется для создания конфигурационных дистрибутивов.

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

NewItem

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

NewItem_create

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

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

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

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

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

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

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

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

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

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

Now

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

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

Params

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

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

Если параметры не появились, то в настройках необходимо самостоятельно добавить приведенные параметры.

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

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

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

  • nexusDownloadImageRegistry — полный путь до registry, для скачивания базового образа дистрибутива;

  • nexusUploadImageRegistry — полный путь до registry, для публикации конфигурационного образа дистрибутива;

  • DownloadRegistryUrl — URL registry, определяется автоматически из nexusDownloadImageRegistry, при необходимости заполнить вручную;

  • UploadRegistryUrl — URL registry, определяется автоматически из nexusUploadImageRegistry, при необходимости заполнить вручную;

  • customChartName — произвольный .Chart.Name (используется в имени манифестов, теге конфигурационного образа и имени дистрибутива ./EVPC-cfg-[version]-distrib.zip);

  • nexusDownloadCfgUrl — ссылка на скачивание дистрибутива ./EVPC-cfg-[version]-distrib.zip облачных скриптов развертывания из Nexus;

  • nexusUploadCfgUrl — ссылка на пространство, для публикации дистрибутива ./EVPC-cfg-[version]-distrib.zip облачных скриптов развертывания в Nexus;

  • istioProxyHash — hach-сумма образа c Istio для фиксации ее в процессе развертывания граничного прокси;

  • nexus_user_cred — Jenkins Username With Password Credential ID для скачивания конфигурационного дистрибутива в Nexus. Чтобы получить username и password для Nexus из HashiCorp Vault, необходимо заполнить параметр secman_url в формате: JenkinsCredID |SecManPath:SecManKeys|SecManParams, где:

    • JenkinsСredID — Jenkins Vault App Role Credential ID c реквизитами для подключения к HashiCorp Vault;

    • SecManPath — путь к секретам в HashiCorp Vault;

    • SecManKeys — имена полей для username и password в HashiCorp Vault (через запятую);

    • SecManParams — параметры для подключения к HashiCorp Vault (через точку с запятой). Если данные параметры по умолчанию, то пропускаются вместе с «|». Примеры:

      • SecManAppRoleCred|/CI01994970_CI02618129_ES/A/DEV/APP/JEN/KV/nexus:username,password;

      • SecManAppRoleCred|/CI01994970_CI02618129_ES/A/DEV/APP/JEN/KV/nexus:username,password|engineVersion:2;

  • nexus_user_cred_download_image — Jenkins Username With Password Credential ID для загрузки исходного образа из Nexus. При указании поля пустым, будет использоваться значение параметра nexus_user_cred. Чтобы получить username и password для Nexus из HashiCorp Vault, необходимо заполнить параметр secman_url в формате: JenkinsCredID |SecManPath:SecManKeys|SecManParams, где:

    • JenkinsСredID — Jenkins Vault App Role Credential ID c реквизитами для подключения к HashiCorp Vault;

    • SecManPath — путь к секретам в HashiCorp Vault;

    • SecManKeys — имена полей для username и password в HashiCorp Vault (через запятую);

    • SecManParams — параметры для подключения к HashiCorp Vault (через точку с запятой). Если данные параметры по умолчанию, то пропускаются вместе с «|». Примеры:

      • SecManAppRoleCred|/CI01994970_CI02618129_ES/A/DEV/APP/JEN/KV/nexus:username,password;

      • SecManAppRoleCred|/CI01994970_CI02618129_ES/A/DEV/APP/JEN/KV/nexus:username,password|engineVersion:2;

  • nexus_user_cred_upload_image — Jenkins Username With Password Credential ID для публикации нового образа в Nexus. При указании поля пустым, будет использоваться значение параметра nexus_user_cred. Чтобы получить username и password для Nexus из HashiCorp Vault, необходимо заполнить параметр secman_url в формате: JenkinsCredID |SecManPath:SecManKeys|SecManParams, где:

    • JenkinsСredID — Jenkins Vault App Role Credential ID c реквизитами для подключения к HashiCorp Vault;

    • SecManPath — путь к секретам в HashiCorp Vault;

    • SecManKeys — имена полей для username и password в HashiCorp Vault (через запятую);

    • SecManParams — параметры для подключения к HashiCorp Vault (через точку с запятой). Если данные параметры по умолчанию, то пропускаются вместе с «|». Примеры:

      • SecManAppRoleCred|/CI01994970_CI02618129_ES/A/DEV/APP/JEN/KV/nexus:username,password;

      • SecManAppRoleCred|/CI01994970_CI02618129_ES/A/DEV/APP/JEN/KV/nexus:username,password|engineVersion:2;

  • nexus_user_cred_distr — Jenkins Username With Password Credential ID для публикации нового конфигурационного дистрибутива в Nexus. При указании поля пустым, будет использоваться значение параметра nexus_user_cred. Чтобы получить username и password для Nexus из HashiCorp Vault, необходимо заполнить параметр secman_url в формате: JenkinsCredID |SecManPath:SecManKeys|SecManParams, где:

    • JenkinsСredID — Jenkins Vault App Role Credential ID c реквизитами для подключения к HashiCorp Vault;

    • SecManPath — путь к секретам в HashiCorp Vault;

    • SecManKeys — имена полей для username и password в HashiCorp Vault (через запятую);

    • SecManParams — параметры для подключения к HashiCorp Vault (через точку с запятой). Если данные параметры по умолчанию, то пропускаются вместе с «|». Примеры:

      • SecManAppRoleCred|/CI01994970_CI02618129_ES/A/DEV/APP/JEN/KV/nexus:username,password;

      • SecManAppRoleCred|/CI01994970_CI02618129_ES/A/DEV/APP/JEN/KV/nexus:username,password|engineVersion:2;

  • configManualUpload — загрузка конфигурационного дистрибутива вручную; если значение «false» то конфигурация будет скачиваться из Git и необходимо заполнить параметры: issueID, gitPath, gitUrl, gitCred, gitBranch;

  • issueID — поле для указания номера задачи (пример: XXXX-12345);

  • gitPath — путь до файлов конфигурации в репозитории;

  • gitUrl — ссылка на репозиторий;

  • gitCred — Jenkins Username With Password Credential ID или Jenkins SSH Username With private key Credential ID для выкачивания конфигурационных файлов из Bitbucket. Чтобы получить username и password для Nexus из HashiCorp Vault, необходимо заполнить параметр secman_url в формате: JenkinsCredID|SecManPath:SecManKeys|SecManParams, где:

    • JenkinsCredID — Jenkins Vault App Role Credential ID с реквизитами для подключения к HashiCorp Vault;

    • SecManPath — путь к секретам в HashiCorp Vault;

    • SecManKeys — имена полей для username и password в HashiCorp Vault (через запятую);

    • SecManParams — параметры для подключения к HashiCorp Vault (через точку с запятой). Если данные параметры по умолчанию, то пропускаются вместе с «|». Примеры:

      • SecManAppRoleCred|/CI01994970_CI02618129_ES/A/DEV/APP/JEN/KV/nexus:username,password;

      • SecManAppRoleCred|/CI01994970_CI02618129_ES/A/DEV/APP/JEN/KV/nexus:username,password|engineVersion:2;

  • gitBranch — ветка репозитория;

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

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

  • jenkinsSlaveNode — метка слейвов Jenkins для сборки;

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

  • ansible_branch — ветка скриптов развертывания (в настройках Jenkins указать ${ansible_branch}).

Создание Jenkins Job db_action#

Задание Jenkins db_action используется для настройки базы данных.

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

NewItem

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

NewItem_create

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

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

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

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

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

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

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

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

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

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

Now

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

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

Params

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

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

Если параметры не появились, то в настройках необходимо самостоятельно добавить приведенные параметры.

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

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

  • job_config_renew — перенастройка задания Jenkins. Данный параметр используется, если был добавлен новый inventory. Меняет значения по умолчанию всех параметров. Сохраняет предыдущее состояние параметров inventories_repo, inventories_branch, inventories_path;

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

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

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

  • jenkins_slave — выбор jenkins slave;

  • jdk_tool — указание Jenkins Tool с нужной версией JDK, конкретное значение необходимо получить у администратора Jenkins;

  • ansible_branch — используется для работы с несколькими ветками скриптов развертывания. Работает только при значении Branch Specifier (blank for „any“) равным ${ansible_branch};

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

  • nexus_user_cred — ID credential типа username with password для выкачивания дистрибутива компонента из Nexus. Чтобы получить username и password для Nexus из SecMan, необходимо заполнить параметр secman_url в формате: JenkinsCredID |SecManPath:SecManKeys|SecManParams, где:

    • JenkinsСredID — Jenkins Vault App Role Credential ID c реквизитами для подключения к SecMan;

    • SecManPath — путь к секретам в SecMan;

    • SecManKeys — имена полей для username и password в SecMan (через запятую);

    • SecManParams — параметры для подключения к SecMan (через точку с запятой). Если данные параметры по умолчанию, то пропускаются вместе с «|». Примеры:

      • SecManAppRoleCred|/CI01994970_CI02618129_ES/A/DEV/APP/JEN/KV/nexus:username,password

      • SecManAppRoleCred|/CI01994970_CI02618129_ES/A/DEV/APP/JEN/KV/nexus:username,password|engineVersion:2

  • vault_cred — ID credential типа secret file со строкой для расшифровки паролей ansible vault (можно указывать несколько через запятую). Чтобы получить ansible vault password из SecMan, необходимо заполнить параметр secman_url в формате: JenkinsСredID|SecManPath:SecManKey|SecManParams, где:

    • JenkinsСredID — Jenkins Vault App Role Credential ID с реквизитами для подключения к SecMan;

    • SecManPath — путь к секрету в SecMan;

    • SecManKey — имя поля для ansible vault password в SecMan;

    • SecManParams — параметры для подключения к SecMan (через точку с запятой). Если данные параметры по умолчанию, то пропускаются вместе с «|» (в качестве пароля можно использовать не строку, а файл в base64 формате и секрет в SecMan с именем, оканчивающимся на «Base640», например: myVaultBase64). Примеры:

      • SecManAppRoleCred|/CI01994970_CI02618129_ES/A/DEV/APP/JEN/KV/vault:ansible_vault_password

      • SecManAppRoleCred|/CI01994970_CI02618129_ES/A/DEV/APP/JEN/KV/vault:ansible_vault_password|engineVersion:2

      • SecManAppRoleCred1|/CI01994970_CI02618129_ES/A/DEV/APP/JEN/KV/vault:ansible_vault_password1,SecManAppRoleCred2|/CI01994970_CI02618129_ES/A/DEV/APP/JEN/KV/vault:ansible_vault_password2

      • SecManAppRoleCred1|/CI01994970_CI02618129_ES/A/DEV/APP/JEN/KV/vault:ansible_vault_password1|engineVersion:2,SecManAppRoleCred2|/CI01994970_CI02618129_ES/A/DEV/APP/JEN/KV/vault:ansible_vault_password2|engineVersion:2

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

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

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

  • inventories_repo — репозиторий с inventory (ssh://);

  • inventories_branch — ветка репозитория;

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