Руководство по установке#
В руководстве приведены инструкции по установке компонента DataSpace Core (DSPC) продукта Platform V DataSpace (APT).
О документе#
Настоящий документ содержит описание процесса установки и настройки компонента DataSpace Core продукта Platform V DataSpace (далее — DataSpace или компонент).
DataSpace Core предоставляет возможность описывать модель данных предметной области и формировать набор сервисов для работы с этими данными: создание, изменение, удаление, объединение в транзакционные группы, гибкие возможности поиска и получения данных.
DataSpace не имеет собственной модели данных предметной области, а ожидает ее от потребителя. Именно сочетание DataSpace и модели потребителя образует полноценный сервис платформы.
Расшифровку основных понятий см. в документе "Термины и определения".
Системные требования#
Настройки безопасности окружения и перечень платформенных (дополнительных внешних) продуктов, используемых для установки, настройки и контроля в конечной информационной системе (далее — ИС), выбираются клиентом при разработке конечной ИС, исходя из характера обрабатываемой в ней информации и иных требований информационной безопасности (далее — ИБ), предъявляемых к ней.
Системное программное обеспечение#
Имеются следующие требования к ПО:
На серверы приложений, использующих DataSpace, должна быть установлена технологическая платформа Kubernetes или Red Hat OpenShift или аналогичная среда контейнеризации приложений.
Для создания проекта с помощью архетипа необходим доступ к репозиторию Maven Central или его зеркалу.
Наличие БД (PostgreSQL, H2 или Oracle). Для возможности репликации в StandIn при использовании DataSpace необходимо наличие второй БД (StandIn БД).
Создан и настроен namespace Kubernetes (см. раздел "Чек-лист по настройке namespace Kubernetes").
Наличие Kubectl на компьютере, с которого производится установка.
Наличие пакетного менеджера Helm на ПК, с которого производится установка.
При построении кластера серверов приложений сервиса DataSpace в случае использования алгоритма SNOWFLAKE для обеспечения уникальности генерации прикладных идентификаторов необходимо соблюсти уникальность IPv4-адресов узлов кластера. Детали см. в разделе "Генерация идентификатора алгоритмом SNOWFLAKE" в документе "Руководство по ведению модели данных".
Ниже представлены категории системного программного обеспечения (далее — ПО), которые обязательны или опциональны для установки, настройки, контроля и функционирования компонента. В каждой категории перечислены все поддерживаемые продукты сторонних правообладателей. Отдельно обозначены варианты, которые рекомендует АО «СберТех» (маркировка «Рекомендовано» в столбце «Продукт, функциональная совместимость с которым подтверждена»). Потребителю DataSpace необходимо выбрать один из продуктов в каждой категории, исходя из условий использования конечной ИС.
Категория ПО |
Обязательность установки |
Наименование ПО |
Версия |
Продукт, функциональная совместимость с которым подтверждена |
Описание |
|---|---|---|---|---|---|
Операционная система |
Да |
Альт 8 СП |
10 и выше |
Рекомендовано. Правообладателем АО «СберТех» также рекомендована операционная система, основанная на Linux — Platform V SberLinux OS Server (SLO), см. раздел «Платформенные зависимости» |
Возможность функционирования продукта |
Red Hat Enterprise Linux |
7.6 и выше |
Опционально |
ОС контейнеров для запуска модулей компонента |
||
Среда контейнеризации |
Да |
1.25 и выше |
Рекомендовано. Правообладателем АО «СберТех» также рекомендована среда контейнеризации, основанная на Kubernetes — Platform V DropApp, см. раздел «Платформенные зависимости» |
Область среды контейнеризации, выделенная под компоненты DataSpace Core и/или приложения потребителя |
|
Red Hat OpenShift |
4 и выше |
Опционально |
|||
Командная строка |
Да |
Kubectl |
Версия, соответствующая версии Kubernetes |
Рекомендовано |
Интерфейс командной строки для управления средой контейнеризации, являющийся его составной частью, устанавливаемой на рабочей станции |
OpenShift CLI |
Версия, соответствующая версии OpenShift |
Опционально |
|||
Инструмент сборки, тестирования, развертывания контейнеризированных приложений |
Нет |
Любая актуальная версия |
Рекомендовано |
Сервер автоматизации, используемый для внедрения непрерывной интеграции и непрерывной доставки (CI/CD) для проектов программного обеспечения |
|
Пакетный менеджер |
Да |
3.4.1 и выше |
Рекомендовано |
Используется для установки компонента DataSpace Core в Kubernetes |
|
Система сбора лог-файлов |
Нет |
1.4.5 |
Рекомендовано |
Подготовка и публикация журналов приложения |
|
Java-машина |
Да |
11.0.16 и более высокая минорная версия |
Рекомендовано |
Возможность функционирования продукта |
|
Система управления базами данных (СУБД) |
Да |
12 и выше |
Рекомендовано. Правообладателем АО «СберТех» также рекомендована СУБД, основанная на PostgreSQL, — Platform V Pangolin SE, см. раздел «Платформенные зависимости» |
Для хранения данных компонента DataSpace Core |
|
Oracle Database |
12.2 и выше |
Опционально |
|||
1.4.200 |
Опционально |
||||
Инструмент управления проектом |
Да |
3.6.3 |
Рекомендовано |
Фреймворк для автоматизации сборки проектов на основе описания их структуры в файлах на языке POM |
|
Сервис централизованного хранения репозиториев артефактов (хранилище артефактов) |
Да |
2.5.1 и выше |
Рекомендовано |
Интегрированная платформа для проксирования, хранения и управления зависимостями Java (Maven), образами, а также распространения ПО |
|
Nexus Repository Manager PRO |
Любая актуальная версия |
Опционально |
|||
Nexus Repository Manager OSS |
Любая актуальная версия |
Опционально |
|||
Сервис интеграции и оркестрации микросервисов в облаке |
Да |
1.12 и выше |
Рекомендовано. Правообладателем АО «СберТех» также рекомендован сервис интеграции и оркестрации микросервисов в облаке, основанный на Istio Service Mesh, — Platform V Synapse Service Mesh, см. раздел «Платформенные зависимости» |
Маршрутизация и защита межсервисных взаимодействий |
|
1.3.2 |
Опционально. Правообладателем АО «СберТех» также рекомендован сервис интеграции и орекстрации микросервисов в облаке, основанный на Istio — Platform V Synapse Service Mesh (SSM), см. раздел «Платформенные зависимости» |
||||
Система мониторинга (сбор и хранение метрик) |
Нет |
2.22.2 и выше |
Рекомендовано. Правообладателем АО «СберТех» также рекомендован Сервис для сбора прикладных и инфраструктурных метрик и отправки их в целевую систему хранения — компонент Объединенный мониторинг Unimon (MONA), см. раздел «Платформенные зависимости» |
Сбор и хранение метрик мониторинга работы приложения |
|
1.8 и выше |
Опционально |
||||
Система мониторинга (визуализация) |
Нет |
7.3 и выше |
Рекомендовано |
Мониторинг работы приложения |
|
Брокер сообщений |
Да |
2.7.0 и выше |
Рекомендовано. Правообладателем АО «СберТех» также рекомендован брокер сообщений, основанный на Kafka, — Platform V Corax, см. раздел «Платформенные зависимости» |
Событийный обмен сообщениями между модулями компонента |
|
Система создания, хранения и распространения секретов |
Нет |
1.5.0 и выше |
Рекомендовано |
Система, обеспечивающая безопасный и надежный способ создания, хранения и распространения секретов |
|
Secret Management System (SecMan) |
1.7.0 и выше |
Опционально |
|||
Средство контейнеризации |
Да |
Любая актуальная версия |
Рекомендовано |
Инструмент для автоматизации работы с контейнерами |
|
Браузер |
Нет |
Яндекс.Браузер |
19 и выше |
Рекомендовано |
Работа пользователя с GraphQL-редактором |
Google Chrome |
90 и выше |
Опционально |
|||
Интегрированная среда разработки |
Нет |
Intellij IDEA Community Edition |
Любая актуальная версия |
Рекомендовано |
Cреда разработки программного обеспечения |
Примечание:
*
Да — категория ПО обязательна для функционирования сервиса (это означает, что сервис не может выполнять свои основные функции без установки данной категории ПО).
Нет — категория ПО необязательна для функционирования сервиса (это означает, что сервис может выполнять свои основные функции без установки данной категории ПО).
**
Рекомендовано — рекомендованный правообладателем АО «СберТех» продукт.
Опционально — альтернативный по отношению к рекомендованному правообладателем АО «СберТех» продукт.
Платформенные зависимости#
Для настройки, контроля и функционирования компонента реализована интеграция с программными продуктами, правообладателем которых является АО «СберТех»:
Наименование продукта |
Код |
Версия продукта |
Код и наименование компонента |
Обязательность установки (да/нет) |
Описание |
Аналог других производителей |
|---|---|---|---|---|---|---|
Platform V Audit SE |
AUD |
2.3 и выше |
AUDT Аудит |
Нет |
Сервис для аудирования событий |
С аналогами других производителей не тестировался |
Platform V Monitor |
OPM |
4.1 и выше |
LOGA Журналирование |
Нет |
Сервис для хранения лог-файлов |
Любой сервис сбора записей о событиях, совместимый с fluent-bit, например, InfluxDB |
MONA Объединенный мониторинг Unimon |
Нет |
Сервис для сбора прикладных и инфраструктурных метрик и отправки их в целевую систему хранения |
||||
Platform V Backend |
#BD |
4.3.1 и выше |
APLJ Прикладной журнал |
Нет |
Сервис для обеспечения отказоустойчивости приложения на уровне базы данных |
С аналогами других производителей не тестировался |
OTTS One-Time Password (OTP) / OTT |
Нет |
Сервис для аутентификации и авторизации межсервисных взаимодействий |
С аналогами других производителей не тестировался |
|||
CCIX Сервис межкластерной индексации |
Нет |
Публикация информации о размещении данных в шардах для поддержки прикладного шардирования |
С аналогами других производителей не тестировался |
|||
Platform V Pangolin SE |
PSQ |
5.2.0 и выше |
PSQL Pangolin |
Да |
Система управления базами данных, основанная на PostgreSQL |
|
Platform V DevOps Tools |
DOT |
1.3 и выше |
CDJE Deploy tools |
Нет |
Сервис для развертывания и обновления компонентов Платформы и приложений потребителей, для настройки и обслуживания инфраструктуры Платформы |
Ручное развертывание |
CIJE Build tools |
Нет |
Сервис для сборки компонентов Платформы и приложений потребителей |
Ручное развертывание |
|||
Platform V Synapse Service Mesh |
SSM |
2.10 и выше |
POLM Управление политиками |
Нет |
Панель управления с открытым исходным кодом, служащая для взаимодействия, мониторинга и обеспечения безопасности контейнеров в среде контейнеризации Kubernetes |
Istio control plane — Istio |
IGEG Граничный и сервисный прокси |
Нет |
Сервис для обеспечения управляемого вызова интеграционных сервисов прикладной части |
Istio proxy — Istio |
|||
Platform V Corax |
KFK |
5.1.7 и выше |
KFKA Corax |
Нет |
Программный брокер сообщений, представляющий собой распределенную, отказоустойчивую, реплицированную и легко масштабируемую систему передачи сообщений, рассчитанную на высокую пропускную способность |
|
Platform V Archiving |
ARC |
4.7.0 и выше |
ARCH Архивирование |
Нет |
Сервис архивирования данных для корпоративной аналитической платформы |
С аналогами других производителей не тестировался |
Platform V DropApp |
K8S |
1.1 и выше |
K8SС K8S Core |
Да |
Область среды контейнеризации, выделенная под компоненты DataSpace Core и/или приложения потребителя |
Kubernetes, Red Hat OpenShift |
Platform V SberLinux OS Server |
SLO |
8.8.2 и выше |
INST Операционная система |
Да |
ОС контейнеров для запуска модулей компонента |
Альт 8 СП, Red Hat Enterprise Linux |
Примечание:
***
Да — компонент или продукт необходим для функционирования сервиса (это означает, что сервис не может выполнять свои основные функции без установки данного компонента).
Нет — необязательный для функционирования сервиса компонент или продукт (это означает, что сервис может выполнять свои основные функции без установки данного компонента).
**** Рекомендуется установка программного продукта, правообладателем которого является АО «СберТех», при этом не исключена возможность (допускается правообладателем) использования аналога других производителей. Аналоги, в отношении которых продукт успешно прошел испытания и подтвердил свою работоспособность, указаны в разделе «Системное программное обеспечение».
Аппаратные требования#
Приведенные в разделе требования для запуска приложений необходимо выполнять для каждого разворачиваемого модуля DataSpace.
Требования для запуска приложений DataSpace расчете на 1 pod:
Тип |
Минимально |
Рекомендовано |
|---|---|---|
Процессор (CPU) |
1 ядро |
2 ядра |
Оперативная память (RAM) |
1 ГБ |
2 Гб и больше |
Примечание
Количество pod DataSpace определяется исходя из требований надежности и производительности (рекомендуется предварительное проведение нагрузочного тестирования).
По умолчанию число pod для каждого разворачиваемого приложения DataSpace равно
1.
В дополнение к этому серверы приложений, использующих DataSpace, должны отвечать требованиям к остальным компонентам реализуемых приложений.
Типовые требования к dev КТС для БД PostgreSQL:
Тип |
Минимально |
Рекомендовано |
|---|---|---|
Процессор (CPU) |
4 ядра |
8 ядер |
Оперативная память (RAM) |
8 ГБ |
16 Гб |
Дисковое пространство (HDD/SSD) |
20 ГБ |
150 Гб |
IOPS |
>50 |
2000 |
При использовании опции функционального StandIn необходимо иметь две БД на разных КТС.
Чек-лист по настройке namespace Kubernetes#
Пространство Kubernetes будет считаться готовым к развертыванию сервисов DataSpace после выполнения всех следующих требований:
В namespace Kubernetes создан secret типа Dockersecret с логином и паролем ТУЗ.
Созданный secret прописан в service accounts:
defaultиdataspace-core.Произведена настройка Ingress Gateway (опционально).
Произведена настройка Egress Gateway (опционально).
Подготовка окружения#
Подготовка базы данных#
Для работы DataSpace требуется развернуть БД. Поддерживаются СУБД PostgreSQL 12.x+, а также Oracle Database 12.2+ (далее Oracle). Для dev-тестов может использоваться H2 версии не ниже 1.4.200.
Рекомендуется использовать продукт Platform V Pangolin SE.
Примечание
Для именования объектов БД (учетных записей, ролей, схем, табличных пространств и т.д.) следует руководствоваться требованиями используемой СУБД для имен без использования кавычек. Обычно в допустимый набор символов входят латинские буквы (a-z, A-Z), цифры (0-9) и символ подчеркивания ( _ ), имена должны начинаться с буквы или символа подчеркивания.
Создание учетных записей#
Для работы модулей DataSpace и для работы скриптов развертывания в БД необходимо создать технологические учетные записи (ТУЗ):
Имя ТУЗ PG |
Имя ТУЗ Oracle |
Назначение |
Условия использования |
|---|---|---|---|
as_admin |
DSPC |
Владелец схемы БД. Для работы скриптов развертывания DataSpace — создание объектов схемы БД средствами Liquibase |
ТУЗ обязательна. При использовании Platform V Pangolin SE в роль as_admin включается заранее созданная доменная ТУЗ владельца схемы БД. Доменная ТУЗ с ролью as_admin, as_admin должна являться владельцем объектов БД, для этого перед выполнением DDL-команд должна выполняться команда |
dsc_appl |
DSC_APPL |
Подключение к БД модуля dataspace-core, чтение и запись |
ТУЗ обязательна. Исключение — локальная БД разработчика для целей тестирования DataSpace |
dsa_appl |
DSA_APPL |
Подключение к БД модуля dataspace-applier, чтение и запись |
ТУЗ опциональна — определяется потребителем. Нужна только при использовании функционального StandIn для возможности раздельного мониторинга основной и вспомогательной нагрузки и управления ресурсами на уровне БД |
dss_appl |
DSS_APPL |
Подключение к БД модуля dataspace-search, чтение |
ТУЗ опциональна — определяется потребителем. Нужна только при использовании отдельной конфигурации DataSpace в режиме search для возможности раздельного мониторинга основной и поисковой нагрузки и управления ресурсами на уровне БД |
Создание схемы при использовании PostgreSQL#
Необходимо создать:
Кластер PostgreSQL.
Роли as_admin, as_TUZ (valid until указать в соответствии с требованиями). Роль as_admin будет являться владельцем схемы, как и в случае использования БД Platform V Pangolin SE.
-- Скрипт выполняет DB admin c привилегией на создание ролей и пользователей
CREATE USER as_admin WITH PASSWORD <пароль> LOGIN NOCREATEROLE NOCREATEDB NOSUPERUSER NOINHERIT NOREPLICATION NOBYPASSRLS VALID UNTIL '2099.12.31';
CREATE USER "as_TUZ" WITH PASSWORD <пароль> LOGIN NOCREATEROLE NOCREATEDB NOSUPERUSER NOINHERIT NOREPLICATION NOBYPASSRLS VALID UNTIL '2099.12.31';
Каталоги Linuх для табличных пространств. Пользователь Linux Postgres должен иметь для них все права (mkdir /pgdata/11/ts/dspc_t; chown postgres /pgdata/11/ts/dspc_t; chmod u+rwx /pgdata/11/ts/dspc_t).
Табличные пространства необходимого размера, БД и схему. Необходимо выдать права владельца.
-- Названия объектов БД и пути даны в качестве примера (обычно они подходят для типовой установки) -- Их необходимо проверить и заменить на актуальные -- 1) Создание табличного пространства. Выполняет DB admin. CREATE TABLESPACE dspc_t OWNER as_admin LOCATION '/pgdata/11/ts/dspc_t'; GRANT CREATE ON TABLESPACE dspc_t TO as_admin; -- 1.1) Следующие 2 команды в случае, если для индексов используется отдельное табличное пространство. CREATE TABLESPACE dspc_i OWNER as_admin LOCATION '/pgdata/11/ts/dspc_i'; GRANT CREATE ON TABLESPACE dspc_i TO as_admin; -- 2) Создаем БД. Выполняет DB admin CREATE DATABASE dspc_db OWNER as_admin ENCODING 'UTF-8' LC_COLLATE 'en_US.UTF-8' LC_CTYPE 'en_US.UTF-8' TABLESPACE dspc_t; -- в зависимости от локали в системе параметры LC_COLLATE и LC_CTYPE могут быть указаны с прописной utf-8. Команда для проверки: -- SELECT datname, datcollate, datctype FROM pg_database WHERE datname LIKE 'template%'; GRANT ALL PRIVILEGES ON DATABASE dspc_db TO as_admin; -- 3) Создаем схему. Выполняет DB admin или as_admin CREATE SCHEMA dspc AUTHORIZATION as_admin; REVOKE ALL ON SCHEMA public FROM public; GRANT ALL PRIVILEGES ON SCHEMA dspc TO as_admin; ALTER DEFAULT PRIVILEGES IN SCHEMA dspc GRANT ALL PRIVILEGES ON TABLES TO as_admin; GRANT USAGE ON SCHEMA dspc TO "as_TUZ"; GRANT SELECT, UPDATE, INSERT, DELETE ON ALL TABLES IN SCHEMA dspc TO "as_TUZ"; ALTER DEFAULT PRIVILEGES IN SCHEMA dspc GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO "as_TUZ"; ALTER ROLE as_admin SET search_path to 'dspc'; -- 4) Назначаем as_admin владельцем схемы (опционально, если схему создавала УЗ с ролью as_admin) ALTER SCHEMA dspc OWNER TO as_admin;ТУЗ владельца схемы — dspc. ТУЗ приложения — dsc_appl, dsa_appl, dss_appl. Выдать ТУЗ права DML на таблицы схемы DML.
-- Выполняет DB admin с привилегиями на создание ролей -- ТУЗ для Liquibase CREATE USER dspc WITH ENCRYPTED PASSWORD <пароль> NOINHERIT; ALTER ROLE dspc SET search_path to 'dspc'; GRANT as_admin TO dspc; ALTER ROLE dspc SET ROLE TO as_admin; -- as_admin является владельцем схемы -- ТУЗ для модуля dataspace-core CREATE USER dsc_appl WITH ENCRYPTED PASSWORD <пароль> INHERIT; GRANT "as_TUZ" TO dsc_appl; ALTER ROLE dsc_appl SET search_path to 'dspc'; -- ТУЗ для модуля dataspace-applier — если необходимо CREATE USER dsa_appl WITH ENCRYPTED PASSWORD <пароль> INHERIT; GRANT "as_TUZ" TO dsa_appl; ALTER ROLE dsa_appl SET search_path to 'dspc'; -- ТУЗ для модуля dataspace-search — если необходимо CREATE USER dss_appl WITH ENCRYPTED PASSWORD <пароль> INHERIT; GRANT USAGE ON SCHEMA dspc TO dss_appl; ALTER ROLE dss_appl SET search_path to 'dspc'; GRANT SELECT ON ALL TABLES IN SCHEMA dspc TO dss_appl; ALTER DEFAULT PRIVILEGES IN SCHEMA dspc GRANT SELECT ON TABLES TO dss_appl;
Создание схемы при использовании Oracle#
Необходимо выполнить следующие действия:
Создать экземпляр БД Oracle.
Создать табличные пространства DSPC_T, DSPC_I необходимого размера (при использовании LOB-типов данных — также табличное пространство DSPC_L).
Создать ТУЗ владельца схемы — DSPC (схема будет называться также).
Дать ТУЗ DSPC QUOTA UNLIMITED на оба табличных пространства.
Дать ТУЗ DSPC привилегии на создание объектов схемы grant CREATE TABLE, CREATE VIEW, CREATE TRIGGER to DSPC.
Создать роли DSPC_ROLE, DSPC_READ_ROLE.
Создать ТУЗ приложения — DSC_APPL, DSA_APPL, DSS_APPL.
Дать ТУЗ права на таблицы схемы DML.
При необходимости создать logon-триггеры для выбора в качестве рабочей схемы DSPC.
Для выполнения вышеуказанных пунктов 2-7 можно использовать скрипт инициализации: схема и ТУЗ (подставить необходимые параметры tablespace, имена схем и ТУЗ):
-- replace placeholder ${default_password} with actual value
-- create tablespace — assign real names and locations and size
CREATE TABLESPACE dspc_t DATAFILE 'dspc_t' SIZE 10G AUTOEXTEND ON ONLINE;
CREATE TABLESPACE dspc_i DATAFILE 'dspc_i' SIZE 10G AUTOEXTEND ON ONLINE;
-- create schema owner
CREATE USER dspc
IDENTIFIED BY ${default_password}
DEFAULT TABLESPACE dspc_t
TEMPORARY TABLESPACE TEMP;
-- assign quota
alter user dspc QUOTA UNLIMITED ON dspc_t;
alter user dspc QUOTA UNLIMITED ON dspc_i;
-- allow login
grant CREATE SESSION, ALTER SESSION to dspc;
-- allow object creation
grant CREATE TABLE, CREATE VIEW, CREATE TRIGGER to dspc;
-- create role for TUZ
create role dspc_role;
create role dspc_read_role;
-- create dsc_appl TUZ
CREATE USER dsc_appl
IDENTIFIED BY ${default_password}
PASSWORD EXPIRE
DEFAULT TABLESPACE dspc_t
TEMPORARY TABLESPACE TEMP;
grant dspc_role to dsc_appl;
alter user dsc_appl default role ALL;
grant CREATE SESSION, ALTER SESSION to dsc_appl;
-- create dsa_appl TUZ
CREATE USER dsa_appl -- если необходимо
IDENTIFIED BY ${default_password}
PASSWORD EXPIRE
DEFAULT TABLESPACE dspc_t
TEMPORARY TABLESPACE TEMP;
grant dspc_role to dsa_appl;
alter user dsa_appl default role ALL;
grant CREATE SESSION, ALTER SESSION to dsa_appl;
-- create dss_appl TUZ — если необходимо
CREATE USER dss_appl
IDENTIFIED BY ${default_password}
PASSWORD EXPIRE
DEFAULT TABLESPACE dspc_t
TEMPORARY TABLESPACE TEMP;
grant dspc_read_role to dss_appl;
alter user dss_appl default role ALL;
grant CREATE SESSION, ALTER SESSION to dss_appl;
Для выполнения пункта 9 можно использовать скрипт создания logon-триггеров:
create or replace trigger dsc_appl.set_default_schema_dsc_appl
after logon on dsc_appl.schema
begin
execute immediate 'alter session set current_schema=dspc';
end;
/
create or replace trigger dsa_appl.set_default_schema_dsa_appl
after logon on dsa_appl.schema
begin
execute immediate 'alter session set current_schema=dspc';
end;
/
create or replace trigger dss_appl.set_default_schema_dss_appl
after logon on dss_appl.schema
begin
execute immediate 'alter session set current_schema=dspc';
end;
/
Для выполнения пункта 8 после каждого выполнения job создания/обновления схемы необходимо выполнять скрипт по грантованию доступов для ролей dspc_role и dspc_read_role:
declare
granttorole varchar2(254);
granttoreadrole varchar2(254);
begin
granttorole := 'dspc_role';
granttoreadrole := 'dspc_read_role';
for i in (select t.table_name
from sys.all_tables t
where t.owner = USER
and NOT (t.table_name like ('DATABASECHANGE%')))
loop
execute immediate 'grant SELECT, INSERT, UPDATE, DELETE ON ' || i.table_name || ' to ' || granttorole;
execute immediate 'grant SELECT ON ' || i.table_name || ' to ' || granttoreadrole;
end loop;
end;
/
Для создания ролей/схемы Postgres/Oracle для случаев вне Динамической инфраструктуры необходимо перечисленные скрипты выполнять отдельными шагами с возможностью выбора УЗ, под которой их выполнять.
Примечание
Использование второго табличного пространства (под индексы) является необязательным. В этом случае в параметрах, где требуется второе табличное пространство, можно указывать первое (dspc_t).
При развертывании на БД Oracle при использовании Binary или Text-атрибутов (BLOB/CLOB полей) целесообразно создать третье табличное пространство dspc_l, в котором будут создаваться LOB-объекты.
В job развертывания DataSpace указывается ТУЗ dpsc и его пароль в качестве владельца схемы БД. Также указывается ТУЗ приложений dsc_appl, dsa_appl, dss_appl, табличные пространства dspc_t, dspc_i, dspc_l и имя схемы dspc.
Настройка соединения с БД в сервисах DataSpace#
В данном разделе описаны шаги настройки сервисов DataSpace и пространства Kubernetes (или OpenShift) для подключения БД (PostgreSQL или Oracle).
Шаги настройки на Kubernetes (или OpenShift)#
Необходимо выполнить следующие действия:
Получить и настроить базу(ы) данных (см. раздел "Подготовка базы данных").
Создать secret(s) с параметрами подключения к базе(-ам) данных в Kubernetes (или OpenShift). Смотрите раздел "Создание secret для базы данных в Kubernetes (или OpenShift)".
Обеспечить доступ из пространства Kubernetes (или OpenShift) к базе(-ам) данных.
Передать в параметры названия созданных secrets в сервисы DataSpace при развертывании в Kubernetes (или OpenShift). Названия параметров:
helm:
appConfig: db: main: secret: "main-db-secret" # имя созданного секрета базы данных main standin: secret: "standin-db-secret" # имя созданного секрета базы данных функционального standinPlatform V DevOps Tools: Секреты создаются автоматически по информации из пункта Проливка Liquibase-скриптов на базу данных
Создание secret для базы данных в Kubernetes (или OpenShift)#
Есть разные варианты хранения секретов: обычные секреты k8s/OpenShift и хранение в системе создания, хранения и распространения секретов HashiCorp Vault.
Для конфигурирования на стендах Kubernetes (или OpenShift) используются объекты secret, содержащие stringData c параметрами подключения. Создать secret можно через cli-приложение (OpenShift cli или kube_ctl).
Внимание!
Secrets для Main и StandIn базы данных отличаются по своему содержимому.
Примечание
В случае использования HashiCorp Vault конфигурация подключения к БД прописывается в ConfigMap приложения (в рамках использования pipeline от продукта Platform V DevOps Tools см. раздел "Настройка параметров подключения к БД").
Пример secret для основной (Main) базы данных PostgreSQL#
apiVersion: v1
kind: Secret
metadata:
name: main-db-secret
data:
stringData:
secret.properties: |-
spring.datasource.username=dsc_appl
spring.datasource.password=<пароль>
spring.datasource.url=jdbc:postgresql://dataspace-core-deposit-16923100-pgdb:5432/dataspace
dataspace.datasource.primary.dbschema=dspc
spring.datasource.driver-class-name=org.postgresql.Driver
spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect
spring.jpa.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
Пример secret для StandIn базы данных PostgreSQL#
apiVersion: v1
kind: Secret
metadata:
name: standin-db-secret
data:
stringData:
secret.properties: |-
standin.datasource.username=dsc_appl
standin.datasource.password=<пароль>
standin.datasource.url=jdbc:postgresql://dataspace-core-deals-17731375-standin-pgdb:5432/dataspace
dataspace.datasource.standin.dbschema=dspc
standin.datasource.driver-class-name=org.postgresql.Driver
standin.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect
standin.jpa.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
Пример secret для основной (main) базы данных Oracle#
apiVersion: v1
kind: Secret
metadata:
name: main-db-secret
data:
stringData:
secret.properties: |-
spring.datasource.username=dsc_appl
spring.datasource.password=dsc_appl_password
spring.datasource.url=jdbc:oracle:thin:@<ip-адрес>:1521:pprb
dataspace.datasource.primary.dbschema=dspc
spring.datasource.driver-class-name=oracle.jdbc.OracleDriver
spring.jpa.database-platform=org.hibernate.dialect.Oracle12cDialect
spring.jpa.hibernate.dialect=org.hibernate.dialect.Oracle12cDialect
Пример secret для StandIn базы данных Oracle#
apiVersion: v1
kind: Secret
metadata:
name: standin-db-secret
data:
stringData:
secret.properties: |-
standin.datasource.username=dsc_appl
standin.datasource.password=dsc_appl_password
standin.datasource.url=jdbc:oracle:thin:@<ip-адрес>:1521:pprbsi
dataspace.datasource.standin.dbschema=dspc
standin.datasource.driver-class-name=oracle.jdbc.OracleDriver
standin.jpa.database-platform=org.hibernate.dialect.Oracle12cDialect
standin.jpa.hibernate.dialect=org.hibernate.dialect.Oracle12cDialect
Описание параметров, используемых в secrets#
Используются следующие параметры:
datasource.username— имя пользователя;datasource.password— пароль пользователя;datasource.url— jdbc-строка соединения с базой данных;dbschema— имя схемы;datasource.driver-class-name— имя драйвера для соединения с БД;database-platform— имя диалекта БД;hibernate.dialect— имя диалекта БД, аналогично значениюdatabase-platform.
Выбор способа установки#
В зависимости от способа развертывания продукта воспользуйтесь одной из инструкций:
опциональная ручная установка сервиса;
рекомендованная автоматизированная установка.
Установка#
Примечание
Установка в DropApp полностью аналогична установке в Kubernetes.
Ручная установка сервиса#
Раздел содержит описание сборки дистрибутива и образов сервисов DataSpace.
Ручная проливка Liquibase скриптов на СУБД#
Примечание
В шаблонном проекте, сформированном на базе архетипа (см. "Быстрый старт") существуют профили
dbScriptsWithOracleиdbScriptsWithoutOracle, по которым формируется архив по пути*-model-jpa/target/db/db-scripts.zip.
dbScriptsWithOracle - добавляется JDBC драйвер для проливки Liquibase скриптов на СУБД Postgres и Oracle;
dbScriptsWithoutOracle - добавляется JDBC драйвер для проливки Liquibase скриптов только на СУБД Postgres.
Все необходимое для проливки liquibase скриптов лежит в полученном архиве.
Описанные ниже параметры и команды базируются на официальной документации Liquibase.
Определение Liquibase параметров запуска (LIQUIBASE_OPTS):
Параметр |
Пример |
Комментарий |
|---|---|---|
|
|
ТУЗ владельца схемы БД для выполнения Liquibase |
|
Пароль dbUser |
|
|
|
JDBC строка подключения к СУБД |
|
|
драйвер, используемый для подключения к СУБД |
|
|
|
|
|
|
|
|
для совместимости с pipeline Platform V DevOps Tools |
|
|
для совместимости с pipeline Platform V DevOps Tools |
|
|
Определение Java параметров запуска (JAVA_OPTS):
Параметр |
Пример |
Комментарий |
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
Степень параллелизма при создании индексов (количество параллельных процессов Oracle или максимальное число параллельных процессов PostgreSQL). Для Oracle значение по умолчанию — 1, для PostgreSQL — в соответствии с настройками сервера БД |
|
|
|
для использования опции |
|
|
для использования опции |
|
|
имя роли для сессии, под которой произойдет создание таблиц в change.log (применимо к PostgreSQL) |
|
|
дублирование параметра |
|
|
выполнять удаление, создание и перестроение индексов, предусмотренные changelog |
|
|
включает выполнение grant create session, alter session. Требуется поскольку OWNER_ROLE не имеет admin option для этих грантов |
export JAVA_OPTS="<JAVA_OPTS>"
export LIQUIBASE_OPTS="<LIQUIBASE_OPTS>"
export LIQUIBASE_HOME=`pwd` # Абсолютный путь до директории исполнения команды
java ${JAVA_OPTS} -classpath './*' liquibase.integration.commandline.Main ${LIQUIBASE_OPTS} update
Сборка базового образа#
В составе дистрибутива компонента DSPC (см. документ "Быстрый старт") в папке package/docker лежит все необходимое для сборки базовых образов сервисов DataSpace.
Основной передаваемый при сборке аргумент — ARG BASE_IMAGE — URL образа операционной системы c OpenJDK, на основе которой будет собираться базовый образ DataSpace.
Сборка производится следующим образом:
Выполняется команда сборки образа из каталога package дистрибутива:
export BASE_IMAGE=<url образа> docker build -f ./docker/<имя сервиса>/Dockerfile -t <имя:тэг> ./ --build-arg BASE_IMAGE
Ручная сборка образов сервисов DataSpace с моделью потребителя#
В данном разделе описаны шаги сборки образов сервисов DataSpace с целью их дальнейшей инсталляции в Kubernetes (или OpenShift).
Для сборки образов сервисов DataSpace необходимо выполнить следующие шаги:
Выбрать версию базового дистрибутива сервиса DataSpace.
Скачать базовый дистрибутив.
Разработать модель согласно инструкциям, описанным в документе "Руководство по ведению модели данных".
Осуществить генерацию артефактов согласно инструкциям, описанным в разделе "Генерация артефактов серверного компонента" документа "Структура артефактов DataSpace".
Примечание
dataspace-core.model.packagesToScan - в этом параметре должно фигурировать значение пакета ранее созданной модели.
Создать следующую структуру папок и файлов:
package
bh/
ext/ — папка с JPA-классами, сгенерированными в шаге 4.
lib/ — папка, в которую можно добавить дополнительные библиотеки. Эти библиотеки будут добавлены в classpath сервиса DataSpace (например,
oracleJdbcDriver).
Скопировать сгенерированные на шаге 4 JPA-классы в формате jar (например, quickstart-model-jpa-1.0.0.jar) в созданную папку ./bh/ext.
В случае необходимости работы с Oracle, добавить в созданную папку ./bh/lib артефакт OJDBC. Пример maven-зависимости OJDBC:
<artifactItem> <groupId>com.oracle.jdbc</groupId> <artifactId>ojdbc8</artifactId> <version>18.3.0.0</version> </artifactItem>Создать в папке ./package/docker файл Dockerfile со следующим ниже содержимым:
urlToDataspaceService — ссылка на базовый образ интересующего сервиса DataSpace.
serviceVersion — версия данного сервиса DataSpace.
ARG BASE_IMAGE=urlToDataspaceService:serviceVersion FROM ${BASE_IMAGE}Должна получиться следующая структура файлов:
package (папка)
bh (папка)
ext
model-jpa.jar
lib
ojdbc8.jar (опционально, в дистрибутиве не поставляется)
docker (папка)
Dockerfile
В корне папки package выполнить команду сборки docker образа, где
yourServiceName:tag— имя и тег результирующего образа. Обычно присваивают наименование по следующему шаблону:{областьDockerRegistry}/{имяСервиса}-{имяМодели}(например,docker.registry/project/dataspace-core-deposit:1.0.0).docker build -f ./docker/Dockerfile -t yourServiceName:tag ./Произвести загрузку собранного образа в хранилище образов:
docker push yourServiceName:tag
После осуществления всех шагов ручной сборки необходимо выполнить следующие шаги:
Произвести загрузку Liquibase-скриптов на базу данных, к которой будет подключен сервис DataSpace. Описано в пункте "Ручная проливка Liquibase скриптов на СУБД".
Произвести установку сервиса при помощи HelmChart или OpenShift Template, хранящихся в базовом дистрибутиве.
Внимание!
Базовый дистрибутив не содержит ссылки на образ. Ссылку на образ необходимо передать при установке шаблона HelmChart или OpenShift, как параметр шаблона, или указать в секцию
image: ***в сущностиDeployment.Дополнительные сведения можно найти в разделе "Ручная установка сервиса".
Возможность использования объединенного модуля#
DataSpace поставляет сервис, который включает несколько компонентов: dataspace-core, dataspace-applier (dataspace-gigabas), dataspace-state-machine, dataspace-migration, dataspace-reference-updater (dataspace-duplication). Пользователи, для которых развертывание всех модулей является затратной операцией, а также избыточной в части ознакомления с функциональностью, могут воспользоваться развертыванием объединенного модуля dataspace-bundle.
Конфигурирование требуемых к включению модулей осуществляется через параметры в ConfigMap сервиса dataspace-bundle:
bundle-configuration: |-
-Ddataspace.core.enable=true
-Ddataspace.applier.enable=true
-Ddataspace.state-machine.enable=true
-Ddataspace.migration.enable=true
-Ddataspace.reference-updater.enable=true
В зависимости от потребности можно включить один или несколько функциональных модулей DataSpace в единый deployment.
Примечание
Разные модули могут требовать доступность разных систем, соответственно при включении компонента с зависимостью на работу другой системы накладывается требование на весь dataspace-bundle. Например, при включении
dataspace.applier.enable=trueтребуется настройка StandIn (Прикладной журнал (APLJ)).Для более гибкого контроля потребления ресурсов рекомендуется использование раздельных модулей.
Пример развертывания deployment:

Установка DataSpace с помощью Helm в Kubernetes (или OpenShift)#
Внимание!
Предварительно необходимо выполнить авторизацию через cli
kubectl/ocв среде контейнеризации.
Примечание
Необходимо наличие Helm на компьютере, с которого производится установка.
Реализована возможность установки DataSpace с помощью Helm — пакетного менеджера Kubernetes. Для данного вида установки нужен специально подготовленный установочный пакет helm chart.
Пакет helm chart#
Структура пакета helm chart DataSpace:

Внутри дистрибутива находится папка helm, содержащая:
Chart.yaml — файл со служебной информацией о chart и приложении, который он разворачивает.
values.yaml — содержит свойства chart с их значениями.
templates/.yaml* — файлы с шаблонами объектов Kubernetes.
templates/tests/.yaml* — файлы с шаблонами для тестов Helm.
Для базовой установки дистрибутива DataSpace необходимо заполнить следующие значения в values.yaml:
appConfig:
packagesToScan: ru.sbt.platformv.dev.duser1 # GroupID Maven артефакта - имя пакета генерируемых JPA-классов, разработанных ранее
fluentBit:
enabled: true # включить/выключить использование Fluent Bit
image: '' # URL образа Fluent Bit
Примечание
Описание
defaultSecretв разделе "Опциональные настройки".
defaultSecret:
create: true # создавать/не создавать (false) дефолтный secret, задается в default-secret.yaml
image:
registryUrl: '' # URL Nexus
registryProject: '' # Project ID
name: "dataspace-core-m7107684626437177346:0.0.1" # имя образа
istio:
enabled: true # использовать/не использовать
appConfig:
jvmArguments: "<преднастроенные JVM-опции для сервиса DataSpace>"
Проверка пакета helm chart:
helm install --dry-run --debug <имя> <путь к папке с chart на локальной машине>
Процесс установки#
Для установки необходимо выполнить команду вида:
helm install <имя> <путь к папке с chart на локальной машине>
В случае успешной установки, в консоль выводится сообщение вида:
NAME: <имя развертывания>
LAST DEPLOYED: <дата последнего успешного развертывания>
NAMESPACE: <namecpace, в котором осуществлено развертывание>
STATUS: deployed
REVISION: 1
NOTES:
You have installed dataspace-core app with model
1.Get the application URL in namespace
http://svc-dataspace-core:8080
2. Get the application URL by running these commands:
Откат при установке с помощью Helm#
Если по какой-то причине установка не прошла или есть необходимость удаления существующего развертывания, следует выполнить команду:
helm uninstall <имя>
Это делается для того, что бы избежать ошибок следующего вида:
helm install dataspace-core dataspace-core-123
Error: INSTALLATION FAILED: cannot re-use a name that is still in use
Опциональные настройки#
Опционально настраиваются следующие файлы:
appJournalStub.yaml — пример настройки подключения к Прикладному журналу (по умолчанию ведет на "заглушку").
apiVersion: v1 kind: Secret metadata: name: {{ include "dataspace-core.appJournalSetting" . }} data: stringData: appJournal.properties: |- standin.cloud.client.stub=true standin.cloud.client.zoneId=test standin.cloud.client.kafka.bootstrapServers=localhostcm-appConfig.yaml — основной ConfigMap модуля DataSpace, в котором задаются override.properties, переопределяющие стандартные значения application.properties, например:
kind: ConfigMap apiVersion: v1 metadata: name: {{ include "dataspace-core.appConfigName" . }} data: override.properties: |- #------------------- Static application properties start Don't change this properties after build ds with model----------------------- dataspace-core.model.packagesToScan={{ .Values.appConfig.packagesToScan }} #------------------- Application Mode end ----------------------- # Активация бинарных файлов для работы с пакетом dataspace.packet.enable={{ .Values.appConfig.dataspace.packet.enabled }} # Активация бинарных файлов для работы с поиском dataspace.search.enable={{ .Values.appConfig.dataspace.packet.enabled }} dataspace.endpoint.jsonrpc.enabled=true
Примечание
dataspace-core.model.packagesToScan - в этом параметре должно фигурировать значение пакета ранее созданной модели.
В этом же файле имеется секция standOverride.yml:
```yaml
standOverride.yml: |-
{{- with .Values.appConfig.overrideProperties }}
```
В standOverride.yml дописываются параметры, определенные в overrideProperties из values.yaml. Это полезно в том случае, когда нужно переопределить стандартные значения override.properties, добавить свои параметры приложений DataSpace, а так же добавить или изменить параметры, общие для SpringBoot приложений.
Кроме того в cm-appConfig.yaml прописываются JVM-аргументы, задаваемые values.yaml (представлен вариант по умолчанию):
```yaml
jvmArguments: "-XX:+AlwaysPreTouch -server -XX:InitialRAMPercentage=50.0 -XX:MaxRAMPercentage=70.0 -XX:+UseG1GC -XX:MaxGCPauseMillis=20 -XX:HeapDumpPath=./ -XX:+UnlockDiagnosticVMOptions -XX:+HeapDumpOnOutOfMemoryError -XX:+DisableExplicitGC -XX:+ScavengeBeforeFullGC -XX:PrintSafepointStatisticsCount=1 -XX:+ParallelRefProcEnabled -XX:+PrintClassHistogram -XX:+PrintFlagsFinal -XX:+LogVMOutput -Xlog:gc*=debug:file=/tmp/gc_log_memory.log:time,uptime,level,tags -Xlog:safepoint=debug:/tmp/gc_log_memory.log:time,uptime,level,tags -Dcom.sun.management.jmxremote.port=5000 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djdk.attach.allowAttachSelf=true --add-exports java.base/jdk.internal.perf=ALL-UNNAMED --add-exports java.management/com.sun.jmx=ALL-UNNAMED"
```
cm-fluentbit.yaml — дефолтный ConfigMap Fluent Bit, включается в deployment.yaml через значения из values.yaml:
fluentBit: enabled: true # включить/выключить image: '' # путь к образу Fluent Bit secret: fluentBitSecret config: '' # если здесь пусто, создается ConfigMap по умолчанию. Если здесь указан собственный ConfigMap Fluent Bit, то дефолтный не создается, а используется указанный в данном полеcm-logback.yaml — дефолтный ConfigMap для логбэка, его использование задается значением customLogback: '' в values.yaml.
default-secret.yaml — дефолтный secret для подключения main-db. Пример:
kind: Secret apiVersion: v1 metadata: name: {{ include "dataspace-core.mainDataBaseSecret" . }} stringData: secret.properties: |- dataspace.replication.enabled=false spring.datasource.url=jdbc:h2:mem:test spring.datasource.username=sa spring.datasource.password= spring.datasource.driver-class-name=org.h2.Driver spring.jpa.database-platform=org.hibernate.dialect.H2Dialect spring.jpa.show-sql=true spring.jpa.properties.hibernate.format_sql=true spring.jpa.hibernate.ddl-auto=none spring.liquibase.enabled=true spring.liquibase.change-log=classpath:db/changelog.xml spring.liquibase.parameters.role=sa spring.liquibase.parameters.tablespace_t=sc_t spring.liquibase.parameters.tablespace_i=sc_i spring.liquibase.parameters.tablespace_l=sc_l dataspace.warmup.enable=falseПо умолчанию создается при развертывании с локальной базой данных H2, если в values.yaml не указан иной secret для подключения к базе данных.
db: ... main: secret: ''Аналогичным образом можно создать свои secrets для Kubernetes (или OpenShift).
destination-rule.yml — сетевые правила для Istio. Задействуется в том случае, если в values.yaml "включены" значения.
istio: enabled: trueи
destinationRule: enabled: true # по умолчанию установлено значение falsehpa.yaml — правила горизонтального масштабирования, берет из values.yaml следующие параметры:
autoscaling: enabled: true # включено/выключено minReplicas: 1 # минимальное количество одновременно запущенных реплик maxReplicas: 3 # максимальное количество одновременно запущенных реплик targetCPUUtilizationPercentage: 80 # процент утилизации CPUНеобходимо для того, чтобы при увеличении нагрузки на приложение, автоматически создавались новые pods (реплики) с приложением и распределяли нагрузку между собой. Когда нагрузка уменьшается, "лишние" реплики удаляются. В базовом варианте указано минимальное значение — "1", максимальное — "3" и утилизация по CPU. Это значит, что в случае повышения нагрузки на pod более 80% процессорного времени, создается вторая реплика приложения и нагрузка распределяется между ними. Когда нагрузка уменьшается, "лишняя" реплика удаляется.
ingress.yaml — настройки Ingress, заполняется параметрами из values.yaml.
ingress: enabled: false # По умолчанию отключено, для использования поменять на true servicePort: '' # Порт сервиса, с которого ожидается входящий трафик. Если одного порта недостаточно, то для других портов прописываются правила маршрутизации annotations: {} rules: {} # Здесь указываются правила маршрутизации для Ingress hosts: # Хосты, с которых ожидается входящий трафик - host: chart-example.local paths: [] tls: [] (Путь к файлам сертификатов, при использовании sslNOTES.txt — параметры сообщения, выдаваемого в консоли после успешного запуска DataSpace. Если включен и настроен Ingress, также выводит в консоль ссылку для внешнего доступа к развернутому приложению.
service.yaml — настройка сетевого сервиса приложения.
serviceaccount.yaml — параметры для service account Kubernetes (или OpenShift), создаваемого если это было задано:
serviceAccount: create: false annotations: {} name: ''virtualservice.yml — параметры виртуального сервиса для Istio, заполняется следующими значениями из values.yaml:
virtualService: enabled: false # По умолчанию отключено, включить поставив в значение true gateways: [] # Имена шлюзов и sidecars для маршрутизации hosts: [] # Список хостов, на которые направляется трафик http: # Правила маршрутизации HTTP-трафика - name: reviews-v1-route route: - destination: host: reviews.prod.svc.cluster.local subset: v1
Альтернативный вариант установки DataSpace в OpenShift#
Обязательные параметры для передачи в OpenShift template при установке:
MODULE_NAME— имя модуля.МainDataBasesecretId— имя secret с конфигурацией подключения к Primary БД (см. раздел "Настройка соединения с БД в сервисах DataSpace").FLUENTBIT_IMAGE— ссылка на образ Fluent Bit.
С дополнительными возможностями конфигурации (ресурсами, readiness/liveness probe и прочим) можно ознакомиться в OpenShift template конкретного сервиса в секции parameters.
Примечание
Blue/green развертывание — это метод развертывания, который снижает время простоя и риски за счет запуска двух идентичных производственных сред, называемых
blueиgreen. В любой момент времени только одна из сред является активной (рабочая среда). Активная среда обслуживает весь производственный трафик.
Данное руководство содержит информацию о загрузке Liquibase-скриптов на базу данных, а также проведения blue/green развертывания средствами Istio в ручном режиме.
Необходимо выполнить следующие действия:
Сконфигурировать подключения к базам данных согласно разделу "Настройка соединения с БД в сервисах DataSpace".
Подключиться к OpenShift через OpenShift cli (oc):
oc loginСкачать дистрибутив, который необходимо установить, из Nexus.
Архив дистрибутива содержит:Манифесты (template) OpenShift с сервисами Data (параметры перечислены для Liquibase cli).
Скрипты Liquibase для создания физики в Базе данных (папка db)
Выполнить скрипты Liquibase. Описано в пункте "Ручная проливка Liquibase скриптов на СУБД"
Установку сервисов DataSpace необходимо производить в соответствии с приоритетом. Чтобы узнать приоритеты сервисов, необходимо открыть манифесты (template.yml) в дистрибутиве и найти следующие поля:
apiVersion: template.OpenShift.io/v1 kind: Template labels: app: ${MODULE_NAME} version: dataspace-release-snapshot type: application installPriority: "4" template: dataspace-core-template template_version: v1 deleteLabel: ${MODULE_NAME}Информация о приоритете хранится в labels.installPriority.
Порядок установки: первым устанавливается приложение с меньшим значением installPriority.Необходимо узнать, какая версия установлена на стенд в текущий момент, чтобы правильно переключать нагрузку средствами istio. Текущая версия хранится в yaml deployments в labels.version.
Выполнить команду, где MODULE_NAME: имя устанавливаемого модуля.oc describe deployments --selector app=MODULE_NAME | grep version% oc describe deployments --selector app=dataspace-core-deals-17724333 | grep version template_version=v1 version=develop-17724333-snapshot Selector: app=dataspace-core-deals-17724333,version=develop-17724333-snapshot version=develop-17724333-snapshotСоздать правило маршрутизации DestinationRule, где:
MODULE_NAME — имя устанавливаемого модуля;
blueVersion — версия в текущий момент установленного сервиса (если нет, то создать равным текущей устанавливаемой версии);
greenVersion — версия устанавливаемого сервиса.
apiVersion: networking.istio.io/v1alpha3 kind: DestinationRule metadata: name: dr-${MODULE_NAME} spec: host: svc-${MODULE_NAME} subsets: — name1: oldVersion labels: version: ${blueVersion} — name2: canaryVersion labels: version: ${greenVersion}Данное правило создает два subset, которыми мы сможем в будущем воспользоваться для маршрутизации трафика.
Создать правило маршрутизации VirtualService, где MODULE_NAME — имя устанавливаемого модуля.
apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: vs-${MODULE_NAME} spec: exportTo: — . hosts: — svc-${MODULE_NAME} http: — route: — destination1: host: svc-${MODULE_NAME} subset: oldVersion weight: 100 — destination2: host: svc-${MODULE_NAME} subset: canaryVersion weight: 0Данным правилом мы гарантируем, что весь трафик в текущий момент будет идти на blue (рабочую) версию (если она имеется).
Произвести установку сервиса из манифеста (template).
oc process -f имяФайла.yaml -p MODULE_NAME=имяМодуля -p ...(перечисляем все параметры, которые необходимо передать при установке) | oc apply -f -Дождаться успешного развертывания сервиса.
Deployment ready:oc get deployments --selector app=dataspace-core-dealsВывод команды:
NAME READY UP-TO-DATE AVAILABLE AGE dataspace-core-deals-4.0.0 1/1 1 1 3h16mREADY 1/1 означает, что Pods успешно поднялись.
В случае, если Pods долго не переходят в состояние READY необходимо зайти в лог-записи Pod, deployment или event, найти причину и устранить проблемы.
Если проблема не была устранена, произвести удаление установленных объектов deployment, configmap.В случае успешного поднятия всех Pods произвести переключение трафика на green-версию. Применить DestinationRule, где
MODULE_NAME — имя устанавливаемого модуля;
greenVersion — версия устанавливаемого сервиса.
apiVersion: networking.istio.io/v1alpha3 kind: DestinationRule metadata: name: dr-${MODULE_NAME} spec: host: svc-${MODULE_NAME} subsets: — name: oldVersion labels: version: ${greenVersion} — name: canaryVersion labels: version: ${greenVersion}Данная операция исключит из маршрутизации старую blue-версию, сделает рабочей новую установленную версию.
Повторить пункты 5-11 для всех template в поставке.
Автоматизированная сборка и установка сервиса#
Сборка с помощью компонента Build Tools (CIJE)#
Для сборки приложений DataSpace с помощью компонента Build tools (CIJE) продукта Platform V DevOps Tools (DOT) достаточно воспользоваться вложенным в архетип проекта файлом Jenkinsfile. Он будет находиться в корне проекта после его развертывания из архетипа.
Основные шаги для подготовки вашего проекта DataSpace к сборке#
Необходимо создать шаблонный проект одним из двух способов:
локально на машине разработчика;
с помощью задачи в Jenkins.
Создание шаблонного проекта на локальной машине#
При использовании данного способа создания шаблонного проекта предварительно необходимо ознакомиться с документом "Руководство прикладного разработчика" компонента Build tools (CIJE) продукта Platform V DevOps Tools (DOT).
Для создания проекта необходимо выполнить следующие действия:
Осуществить генерацию артефактов согласно инструкциям, описанным в документе "Быстрый старт".
Внимание!
После генерации в проекте необходимо:
подменить файлы модели (model.xml, status.xml (опционально)) в папке model/src/main/resources/model;
удалить модуль демонстрационных тестов model-local-test (в том числе удалить упоминание о нем среди модулей в корневом pom.xml проекта).
Заполнить конфигурационный файл pipeline.yml согласно документации продукта Platform V DevOps Tools (DOT), а также ориентируясь на комментарии в файле. При необходимости можно модифицировать данный файл, добавлять требуемые разделы, разрешенные документацией компонента Build tools (CIJE).
Внимание!
В корне проекта расположен Jenkinsfile, описывающий логику сборки. При необходимости можно модифицировать данный файл, добавлять требуемые разделы, разрешенные документацией компонента Build tools (CIJE).
Во избежание ошибки вида "cp: cannot stat ‘/target/*.jar’: No such file or directory", значение artifactId должно совпадать с именем репозитория, из которого берется jenkinsfile.
После заполнения файла pipeline.yml запустить сборку проекта.
Пример заполнения pipeline.yml#
# Свойства дистрибутива
fp:
groupId: # Область в Nexus
artifactId: "${artifactId}" # КЭ, для которого есть область в репозитории
version: "${version}" # К данному свойству будет добавляться номер сборки. Например, для сборки с номером 123 в Nexus артефакт будет выгружен с версией ${version}-123
# Настройки MAVEN
maven:
settings_id: "MavenSetting" # Id maven settings в Jenkins
jdk: "openjdk-11.0.2_linux" # JDK, настроенный в Jenkins (один на все проекты, меняться не должен)
home: "Maven 3.6.3" # Версия maven
# Использовать ли maven для загрузки дистрибутива в Nexus, по умолчанию — "false",
# Чтобы использовать этот параметр, требуется завести credentials в settings-файле и указать их serverId в Nexus_<...>
use_for_deploy: "true"
# Ссылки на сборочные Jenkins-файлы (берется Jenkinsfile из корня проекта)
jenkinsfiles:
- name: "${artifactId}" # Имя артефакта
repo: # URL без хоста, например, "DSPC/dataspace-client.git". Без .git в конце сборки проходить будут, но не получится пройти проверки sast/oss
branch: # Ветка сборки, например, "develop"
# Настройки NEXUS-central
nexus:
creds: # Id ТУЗ c доступом на чтение из root_url
root_url: "" # Адрес репозитория с артефактами для сборки
# Настройки NEXUS-sbrf
nexus_sbrf:
repository: "" # Имя репозитория
creds: # Id ТУЗ с доступом на запись в root_url
serverId: "" # Идентификатор адреса Nexus из settings.xml
root_url: "" # Корневой URL Nexus
upload_url: "" # URL репозитория в Nexus, в который выгружается дистрибутив
groupId: # Имя загрузочной области в Nexus
artifact: "${artifactId}"
# Настройки сборки Dockerfile
docker:
builder_token: # Id ТУЗ с доступом на запись в Nexus3
registry_address: "" # Имя docker репозитория
nexus_url: # Путь до области с образами
#Настройки dataspace
dataspace:
# Если добавлен параметр, то в dc.yaml будет прописан в явном виде
# Вида {{ registry }}{{ registry_path }}<component_code>/<deployment_unit>@sha256:<hash>
# ВАЖНО! docker.nexus_url должен заканчиваться на /<component_code>
component_code: dspc
# Не должно быть параметризаций образов, если эта секция не закомментирована, в dc.yaml будет прописан константой используемый образ
fluentbitSidecar:
component_code: loga
name: fluent-bit
sha: 2e430ac283dc6d09a5cc2de5eb49b3da42696bd71c272dbe4b4806c66e9e29ec
model:
jpaModelVersion: "" # Указать версию модели в semver, если не задано, то возьмется fp.version
build:
mvnArgs: "-P dbScriptsWithoutOracle" # Если требуется проливка liquibase-скриптов на Oracle, использовать dbScriptsWithOracle, также можно задавать дополнительные аргументы для сборки maven-проекта
# Опциональное добавление зависимостей из списка в дистрибутив
externalDependencies:
# - ucp-corp-events
# - ojdbc8
config:
version: "" # Версия dataspace-bom используемых конфигураций для установки сервисов на стенд, по умолчанию берется текущая версия bom
copyDisribYmlAsIs: false # Копирование distrib.yml из корня проекта без обработки
services: # Ниже перечислены доступные сервисы, которые попадут в дистрибутив, ненужные можно удалить или закомментировать
- dataspace-core
# - dataspace-gigabas
# - dataspace-cr-duplication-service
# - dataspace-cr-migration-service
# - dataspace-cr-state-machine
# - dataspace-subscription
# - dataspace-bundle
ownerId: #Параметр, идентифицирующий потребителя DataSpace. Это может быть, например, ТУЗ, КЭ, rn или какая-то другая строка
docker:
registry_address: "" # Корневой URL docker-registry
nexus_url: "" # Путь от корня к целевой папке
images:
version: "" # Версия, с которой будут браться базовые образы DataSpace, если "" — будут браться образы с версией сервисов из dataspace-bom
versionSuffix: "" # Суффикс версии образа, например, dataspace-bom версии 1.0.0. Если образы сервисов 1.0.0_alt — тогда суффикс будет "_alt"
Сборка шаблонного проекта с помощью Build tools (CIJE)#
Для сборки шаблонного проекта с помощью job Jenkins необходимо:
Осуществить генерацию артефактов согласно инструкциям, описанным в документе "Быстрый старт".
Внимание!
После генерации в проекте необходимо:
подменить файлы модели (model.xml, status.xml (опционально)) в папке model/src/main/resources/model;
удалить подмодуль демонстрационных тестов model-local-test (в том числе удалить упоминание о нем среди модулей в корневом pom.xml проекта).
Создать пустой git-репозиторий и выгрузить в него полученный проект.
Подготовить job Build tools (CIJE) (см. документ "Руководство прикладного разработчика" компонента Build tools (CIJE) продукта Platform V DevOps Tools (DOT)).
Заполнить конфигурационный файл pipeline.yml компонента Build tools (CIJE) (<корень_проекта>/config/ufs/pipeline.yml). При необходимости можно модифицировать данный файл, добавлять требуемые разделы, разрешенные документацией компонента Build tools (CIJE) (см. раздел "Пример заполнения pipeline.yml").
Запустить сборку проекта.
Внимание!
В корне проекта расположен Jenkinsfile, описывающий логику сборки. При необходимости можно модифицировать данный файл, добавлять требуемые разделы, разрешенные документацией компонента Build tools (CIJE).
В pom.xml, находящемся в корне проекта, необходимо изменить Url репозиториев в секции distributionManagement на свои. Данный блок используется на шаге mvn deploy для публикации артефактов.
<distributionManagement>
<repository>
<id>release.repo</id>
<url>url_to_maven_repo</url>
</repository>
<snapshotRepository>
<id>corp-snapshots</id>
<url>url_to_maven_repo</url>
</snapshotRepository>
</distributionManagement>
Обратите внимание, что id в repository должен совпадать с именем самого репозитория, а также для них должен быть прописан server в <корень_проекта>/config/settings.xml.
Важно, чтобы структура проекта соответствовала архетипу. Названия модулей с model-jpa, model-sdk обязательно должны быть следующего вида: имяМодели-model-jpa, имяМодели-model-sdk.
При сборке используются те версии артефактов, которые указаны в используемом dataspace-bom (версия dataspace-bom указывается в корневом pom.xml собираемого проекта).
Важно, чтобы имена модулей совпадали с именами артефактов в dataspace-bom.
Не рекомендуется указывать следующим образом:
имя модуля — "test-service";
artifactId в pom.xml — "mega-test-service";
имя модели в ее xml-описании — "mega-test-model".
Это может привести к ошибкам сборки, так как подключаемая библиотека DevOps может ориентироваться на имена модулей при анализе вашего проекта.
Добавление пользовательских параметров в дистрибутив#
При работе с Platform V DevOps Tools (DOT) может потребоваться дополнительно определить пользовательские параметры в рамках работы с модулями DataSpace. Для этого необходимо создать ConfigMap, например, customer-properties-core.yaml с ключом data customer.properties по пути conf/openshift/dataspace-${module}-${modelName} (например, dataspace-core-deposit) в вашем шаблонном проекте(в качестве примера в шаблонный проект добавлен configMap по пути ./dataspace-core-${modelName}/configmaps/customer-properties-core.yaml). Необходимо определить в нем параметры в формате:
kind: ConfigMap
apiVersion: v1
metadata:
name: customer-properties
data:
customer.properties: |-
dataspace.customer.param1=value1
dataspace.customer.param2={{ customer.value2 }}
Параметризацию параметров можно определить, например, в custom_property.conf.yml, после чего иметь доступ к этой конфигурации в репозитории FP на этапе работы Deploy tools (CDJE):
# custom_property.conf.yml
customer.value2=1000
# ...
Обновление конфигурации#
Примечание
Конфигурации выгружаются из репозитория артефактов (например, Nexus) на основе информации из файла
pom_dependencies.xmlв сформированном на базе архетипа шаблонном проекте.Существует возможность зафиксировать конфигурацию, явно указав в секции
pipeline.yml, какую версию конфигурации использовать:dataspace: config: version: "${CONFIG_BOM_VERSION}"где CONFIG_BOM_VERSION — версия dataspace-bom, для которой будут выгружаться инсталляционные манифесты. При
""по умолчанию будет браться текущая выбранная в pom.xml проекта версия dataspace-bom.
При обновлении версии dataspace-bom для корректной работы манифестов инсталляции необходимо сформировать шаблонный проект из архетипа соответствующей версии и актуализировать следующие папки и файлы:
/conf/**/**
/config/**/**
/Jenkinsfile
/distrib.yml
/modelName-model-jpa/assembly/**
В случае отсутствия из /*-model-jpa/pom.xml необходимо добавить профили dbScriptsWithOracle и dbScriptsWithoutOracle.
Установка с помощью Deploy tools (CDJE)#
При использовании данного способа развертывания по всем возникающим вопросам рекомендуется обращаться к документации компонента Deploy tools (CDJE). Ниже представлен краткий алгоритм действий, необходимых для разворачивания дистрибутива Platform V DataSpace.
Подготовка к установке#
Наличие у пользователя, производящего установку, возможности создания репозиториев в хранилище (например, Git) и доступов в целевые области хранилища дистрибутива (в Nexus).
Наличие технической учетной записи для работы с репозиториями и с целевыми областями в Nexus.
Созданы и проинициализированы следующие Git-репозитории в проектной области с основной веткой master:
Репозитории для работы с pipeline Build tools (CIJE):
pipeline — репозиторий с кодовой базой релизов pipeline (на каждый стенд формируется свой репозиторий (например, ci90000026_dspc_pipeline_ift / ci90000026_dspc_pipeline_lt));
common — репозиторий с глобальными (одинаковыми для всех компонент в рамках одного стенда) переменными среды (на каждый стенд формируется свой репозиторий (например, ci90000026_dspc_common_ift / ci90000026_dspc_common_lt)).
Репозитории с конфигурациями функциональных подсистем, для каждой ФП формируется свой репозиторий (например, для ФП dspc-deposit-client — ci90000026_dspc_dspc-deposit-client_ift / ci90000026_dspc_dspc-deposit-client_lt).
Должны быть сконфигурированы следующие инструменты развертывания:
JOB Service — job обновления (первичная загрузка кода JOB Deploy, обновление кода JOB Deploy при выпуске новых релизов JOB Deploy).
JOB Deploy — job для развертывания дистрибутивов.
После настройки репозиториев pipeline и common через JOB Service необходимо заполнить и зашифровать файл _passwords.conf в репозитории common по пути /ansible:
_passwords.conf — файл, содержащий пароли для баз данных, Kafka и т.д., которые будут использоваться для создания secrets в среде контейнеризации.
Необходимо добавить ФП для развертывания в конфигурационный файл subsystems.json в корне common проекта, например:
...
"DSPC_DEPOSIT_CLIENT": {
"fpi_name": "dspc-deposit-client",
"artifactId": "dspc-deposit-client",
"groupId": "nexusProject/dspc",
"versionFilter": "1.1",
"strict": "false",
"fpType": "fp",
}
...
Необходимо добавить стенд для развертывания в конфигурационный файл multiClusters.json в корне common проекта, например:
"Test1": {
"openshiftCluster" : "https://api.apps.example.com:6443",
"openshiftSATokenCred" : "jenkins_auth_stand_token",
"openshiftProjectName" : "project",
"openshiftAppsDomain" : "apps.example.com",
"openshiftWebConsole" : "https://console-openshift-console.apps.example.com/k8s/cluster/projects",
"openshiftRoutersFQDN" : "1.1.1.1",
"openshiftControlPlane" : "example-controlplanev20",
"openshiftControlPlaneIstiodService" : "istiod-common-install"
}
Где openshiftSATokenCred — созданные реквизиты для входа в Jenkins, содержащие токен подключения к среде контейнеризации (это может быть токен пользователя или ServiceAccount)
Подготовка параметров к установке#
После выполнения всех действий произвести миграцию конфигурационных файлов ФП через playbook MIGRATION_FP_CONF (миграция конфигурационных файлов ФП) в JOB Deploy.
Заполнить конфигурационные файлы по пути conf/config/parameters/ в репозитории ФП в соответствии с окружением стенда. Параметры сгруппированы, указаны комментарии в самих файлах.
Файлы:
model_name.all.conf — в файле собраны параметры из application.properties, общие для всех модулей DataSpace:
Внимание!
Для включения k8s совместимой конфигурации, необходимо указать
dataspace.k8s.configuration.enabled=true.
Название параметра |
Параметр application.properties |
Значение |
Описание |
|---|---|---|---|
common.registry.url |
SPECIFY_REGISTRY_DS_IMAGES_FP_CONF |
Название nexus репозитория |
|
common.registry.project |
SPECIFY_REGISTRY_PROJECT_FP_CONF |
Название nexus проекта с образами DataSpace |
|
common.logger.registry.project |
SPECIFY_REGISTRY_PROJECT_FP_CONF |
Название nexus проекта с образами для журналирования |
|
common.openshift.serviceAccount |
default |
Сервисный аккаунт в среде контейнеризации, под которым выкачиваются образы |
|
common.openshift.namespace |
Название проекта в среде контейнеризации |
||
common.openshift.defaultMode |
256 |
Задание прав доступа для подключаемых сущностей при развертывании приложения в среде контейнеризации |
|
common.model.packagesToScan |
${groupId} |
Определение пакета клиентской модели сервисами DataSpace. Задается автоматически при формировании шаблонного проекта |
|
dataspace.model.name |
${modelName} |
Имя клиентской модели. Задается автоматически при формировании шаблонного проекта |
|
dataspace.jvm-arguments.user.timezone |
Europe/Moscow |
Указание таймзоны контейнерам сервисов DataSpace |
|
dataspace.container.securityContext.runAsNonRoot |
true |
Флаг, при котором все процессы в контейнере не могут запуститься под root |
|
dataspace.container.securityContext.privileged |
false |
Флаг, контролирующий доступ к файловой системе хоста |
|
dataspace.container.securityContext.readOnlyRootFilesystem |
true |
Флаг, ограничивающий файловую систему только на чтение |
|
dataspace.k8s.configuration.enabled |
false |
Флаг, для включения совместимости конфигурации с Kubernetes |
|
dataspace.service.core.enabled |
true |
Флаг, переключающий установку dataspace-core |
|
dataspace.service.gigabas.enabled |
true |
Флаг, переключающий установку dataspace-gigabas |
|
dataspace.service.migration.enabled |
false |
Флаг, переключающий установку dataspace-migration |
|
dataspace.service.duplication.enabled |
false |
Флаг, переключающий установку dataspace-duplication |
|
dataspace.service.statemachine.enabled |
false |
Флаг, переключающий установку dataspace-state-machine |
|
dataspace.service.bundle.enabled |
false |
Флаг, переключающий установку dataspace-bundle |
|
dataspace.service.subscription.enabled |
false |
Флаг, переключающий установку dataspace-subscription |
|
dataspace.main.db.user |
spring.datasource.username |
См. пример в разделе "Создание secret для базы данных в Kubernetes (или OpenShift)" |
|
dataspace.main.db.url |
spring.datasource.url |
См. пример в разделе "Создание secret для базы данных в Kubernetes (или OpenShift)" |
|
dataspace.main.db.schema |
dataspace.datasource.primary.dbschem |
См. пример в разделе "Создание secret для базы данных в Kubernetes (или OpenShift)" |
|
dataspace.main.db.driver |
spring.datasource.driver-class-name |
См. пример в разделе "Создание secret для базы данных в Kubernetes (или OpenShift)" |
|
dataspace.main.db.dialect |
spring.jpa.database-platform |
См. пример в разделе "Создание secret для базы данных в Kubernetes (или OpenShift)" |
|
dataspace.db.cert.keystore.path |
- |
См. пример в разделе "SSL-конфигурация для DB" |
|
dataspace.standin.db.user |
standin.datasource.username |
См. пример в разделе "Создание secret для базы данных в Kubernetes (или OpenShift)" |
|
dataspace.standin.db.url |
standin.datasource.url |
См. пример в разделе "Создание secret для базы данных в Kubernetes (или OpenShift)" |
|
dataspace.standin.db.schema |
dataspace.datasource.standin.dbschema |
См. пример в разделе "Создание secret для базы данных в Kubernetes (или OpenShift)" |
|
dataspace.standin.db.driver |
standin.datasource.driver-class-name |
См. пример в разделе "Создание secret для базы данных в Kubernetes (или OpenShift)" |
|
dataspace.standin.db.dialect |
standin.jpa.database-platform |
См. пример в разделе "Создание secret для базы данных в Kubernetes (или OpenShift)" |
|
dataspace.cci.clusterId |
SHARD-ID |
См. раздел "Настройки подключения к Cross Cluster Index" документа "Интеграция с Cервисом межкластерной индексации" |
|
dataspace.cci.host |
localhost |
См. раздел "Настройки подключения к Cross Cluster Index" документа "Интеграция с Cервисом межкластерной индексации" |
|
dataspace.cci.port |
8080 |
См. раздел "Настройки подключения к Cross Cluster Index" документа "Интеграция с Cервисом межкластерной индексации" |
|
dataspace.plugin.cci.useStubCCIServer |
true |
См. раздел "Настройки подключения к Cross Cluster Index" документа "Интеграция с Cервисом межкластерной индексации" |
|
dataspace.app.journal.stub |
standin.cloud.client.stu |
true |
См. описание в разделе "Отключение репликации и отправки векторов в ПЖ" |
dataspace.app.journal.replication.enabled |
dataspace.replication.enabled |
false |
См. описание в разделе "Отключение репликации и отправки векторов в ПЖ" |
dataspace.app.journal.zoneId |
ZONE-ID |
См. описание в разделе "Этап 3 — создание новой зоны ПЖ" |
|
dataspace.app.journal.bootstrapServers |
standin.cloud.client.kafka.bootstrapServers |
; |
Адреса kafka брокеров ПЖ |
dataspace.app.journal.subscriptionKafkaConcurrency |
standin.cloud.client.subscriptionKafkaConcurrency |
10 |
См. описание в разделе "Настройка параметров применения (DataSpace Applier)" |
dataspace.app.journal.heartBeatPeriod |
standin.cloud.client.heartBeatPeriod |
10000 |
См. описание в разделе "Настройка параметров применения (DataSpace Applier)" |
dataspace.app.journal.kafkaRetry |
standin.cloud.client.kafka-retry |
5 |
См. описание в разделе "Настройка параметров применения (DataSpace Applier)" |
dataspace.app.journal.retryTimeout |
standin.cloud.client.retry-timeout |
10000 |
См. описание в разделе "Настройка параметров применения (DataSpace Applier)" |
dataspace.app.journal.maxAggregatesPerTransaction |
dataspace.replication.max-aggregates-per-transaction |
1 |
См. раздел "Транзакционная граница пакета" документа "Руководство прикладного разработчика" |
dataspace.app.journal.confirmationMode |
dataspace.replication.confirmation-mode |
confirmed |
См. описание в разделе "Поддержка режима ожидания подтверждения коммита во всех модулях DataSpace" |
dataspace.app.journal.replicator.dataTypeInfo.ORM_CV.serializerId |
dataspace.replicator.data-type-info.ORM_CV.serializer-i |
change_vector_json |
См. описание в разделе "Бинарная сериализация векторов" |
dataspace.app.journal.replicator.model.sendModelId |
dataspace.replicator.model.send-model-id |
true |
См. описание в разделе "Контроль векторов компонента Прикладной Журнал (APLJ) по имени и версии модели" |
dataspace.app.journal.replicator.model.sendModelVersion |
dataspace.replicator.model.send-model-version |
true |
См. описание в разделе "Контроль векторов компонента Прикладной Журнал (APLJ) по имени и версии модели" |
dataspace.app.journal.replicator.model.versioningEnabled |
dataspace.replicator.model.versioning-enabled |
true |
См. описание в разделе "Контроль векторов компонента Прикладной Журнал (APLJ) по имени и версии модели" |
dataspace.app.journal.mode |
dataspace.replication.appjournal-mode |
si |
См. описание в разделе "Настройка режима передачи векторов в ПЖ" |
dataspace.app.journal.ssl.enabled |
false |
См. описание в разделе "SSL-конфигурация для Kafka компонента APLJ" |
|
dataspace.aj.kafka.cert.keystore.path |
- |
См. описание в разделе "SSL-конфигурация для Kafka компонента APLJ" |
|
dataspace.aj.kafka.cert.truststore.path |
- |
См. описание в разделе "SSL-конфигурация для Kafka компонента APLJ" |
|
dataspace.app.journal.ssl.istio.egress.encryption.enabled |
false |
Флаг переключения шифрования на стороне приложения или egress |
|
dataspace.standin.kafka.producerConfig.security.protocol |
standin.cloud.client.kafka.producerConfig."[security.protocol]" |
SSL |
Протокол безопасности для шифрования на стороне приложения |
dataspace.standin.kafka.producerConfig.ssl.keystore.location |
standin.cloud.client.kafka.producerConfig."[ssl.keystore.location]" |
/opt/keystore/kafka/server.keystore_aj.jks |
Путь на pod к хранилищу сертификатов для шифрования на стороне приложения без Hashicorp Vault |
dataspace.standin.kafka.producerConfig.ssl.truststore.location |
standin.cloud.client.kafka.producerConfig."[ssl.truststore.location]" |
/opt/keystore/kafka/trust_aj.jks |
Путь на pod к trust хранилищу сертификатов для шифрования на стороне приложения без Hashicorp Vault |
dataspace.standin.kafka.producerConfig.ssl.keystore.type |
standin.cloud.client.kafka.producerConfig."[ssl.keystore.type]" |
JKS |
Тип хранилища сертификатов для шифрования на стороне приложения |
dataspace.standin.kafka.producerConfig.ssl.truststore.type |
standin.cloud.client.kafka.producerConfig."[ssl.truststore.type]" |
JKS |
Тип trust хранилища сертификатов для шифрования на стороне приложения |
dataspace.standin.kafka.producerConfig.ssl.protocol |
standin.cloud.client.kafka.producerConfig."[ssl.protocol]" |
TLS |
Класс протокола безопасности для шифрования на стороне приложения |
dataspace.standin.kafka.producerConfig.ssl.enabled.protocols |
standin.cloud.client.kafka.producerConfig."[ssl.enabled.protocols]" |
TLSv1.2 |
Версия протокола безопасности для шифрования на стороне приложения |
dataspace.standin.kafka.producerConfig.ssl.endpoint.identification.algorithm |
standin.cloud.client.kafka.producerConfig."[ssl.endpoint.identification.algorithm]" |
- |
Алгоритм идентификации endpoint, используемый для проверки имени хоста сервера. По-умолчанию выключен, чтобы избежать ошибок |
dataspace.standin.kafka.consumerConfig.security.protocol |
standin.cloud.client.kafka.consumerConfig."[security.protocol]" |
SSL |
Протокол безопасности для шифрования на стороне приложения |
dataspace.standin.kafka.consumerConfig.ssl.keystore.location |
standin.cloud.client.kafka.consumerConfig."[ssl.keystore.location]" |
/opt/keystore/kafka/server.keystore_aj.jks |
Путь на pod к хранилищу сертификатов для шифрования на стороне приложения без Hashicorp Vault |
dataspace.standin.kafka.consumerConfig.ssl.truststore.location |
standin.cloud.client.kafka.consumerConfig."[ssl.truststore.location]" |
/opt/keystore/kafka/trust_aj.jks |
Путь на pod к trust хранилищу сертификатов для шифрования на стороне приложения без Hashicorp Vault |
dataspace.standin.kafka.consumerConfig.ssl.keystore.type |
standin.cloud.client.kafka.consumerConfig."[ssl.keystore.type]" |
JKS |
Тип хранилища сертификатов для шифрования на стороне приложения |
dataspace.standin.kafka.consumerConfig.ssl.truststore.type |
standin.cloud.client.kafka.consumerConfig."[ssl.truststore.type]" |
JKS |
Тип trust хранилища сертификатов для шифрования на стороне приложения |
dataspace.standin.kafka.consumerConfig.ssl.protocol |
standin.cloud.client.kafka.consumerConfig."[ssl.protocol]" |
TLS |
Класс протокола безопасности для шифрования на стороне приложения |
dataspace.standin.kafka.consumerConfig.ssl.enabled.protocols |
standin.cloud.client.kafka.consumerConfig."[ssl.enabled.protocols]" |
TLSv1.2 |
Версия протокола безопасности для шифрования на стороне приложения |
dataspace.standin.kafka.consumerConfig.ssl.endpoint.identification.algorithm |
standin.cloud.client.kafka.consumerConfig."[ssl.endpoint.identification.algorithm]" |
- |
Алгоритм идентификации endpoint, используемый для проверки имени хоста сервера. По-умолчанию выключен, чтобы избежать ошибок |
dataspace.audit.useStubHost |
true |
Переключение режима заглушки платформенного аудита. При включении сообщения не будут передаваться |
|
dataspace.audit.url |
audit2-http-proxy.apps.example.com |
Адрес proxy-приложения сервиса аудит |
|
dataspace.audit.port |
80 |
Порт proxy-приложения сервиса аудит |
|
dataspace.audit.protocol |
https |
Протокол подключения к сервису аудит |
|
dataspace.audit.nodeId |
NO-USERNODE |
FQDN-узла, с которого выполняется запрос |
|
dataspace.audit.moduleName |
example-reference-updater |
Идентификатор модуля (указывается идентификатор приложения-потребителя DataSpace) |
|
dataspace.audit.metamodelVersion |
1.4 |
Версия метамодели |
|
dataspace.audit.userLogin |
NO-LOGIN |
Идентификатор пользователя (опционально) |
|
dataspace.audit.userName |
NO-USER |
Имя пользователя (опционально) |
|
dataspace.tsa.kafka.bootstrapServers |
pprbod.cloud.transport-kafka-lib.kafka.bootstrapServers |
- |
См. описание в разделе "Настройка модуля DataSpace Migration" документа "Руководство по настройке передачи данных в хранилище данных с использованием компонента Архивирование (ARCH)" |
dataspace.tsa.kafka.ssl.enabled |
false |
См. описание в разделе "SSL-конфигурация для Kafka компонента APLJ" |
|
dataspace.tsa.kafka.cert.keystore.path |
- |
См. описание в разделе "SSL-конфигурация для Kafka компонента APLJ" |
|
dataspace.tsa.kafka.cert.truststore.path |
- |
См. описание в разделе "SSL-конфигурация для Kafka компонента APLJ" |
|
dataspace.tsa.kafka.ssl.istio.egress.encryption.enabled |
false |
Флаг переключения шифрования на стороне приложения или egress |
|
dataspace.tsa.kafka.producerConfig.security.protocol |
pprbod.cloud.transport-kafka-lib.kafka.producerConfig."[security.protocol]" |
SSL |
См. описание в разделе "Настройка модуля DataSpace Migration" документа "Руководство по настройке передачи данных в хранилище данных с использованием компонента Архивирование (ARCH)" |
dataspace.tsa.kafka.producerConfig.ssl.keystore.location |
pprbod.cloud.transport-kafka-lib.kafka.producerConfig."[ssl.keystore.location]" |
/opt/keystore/kafka/server.keystore_tsa.jks |
См. описание в разделе "Настройка модуля DataSpace Migration" документа "Руководство по настройке передачи данных в хранилище данных с использованием компонента Архивирование (ARCH)" |
dataspace.tsa.kafka.producerConfig.ssl.truststore.location |
pprbod.cloud.transport-kafka-lib.kafka.producerConfig."[ssl.truststore.location]" |
/opt/keystore/kafka/trust_tsa.jks |
См. описание в разделе "Настройка модуля DataSpace Migration" документа "Руководство по настройке передачи данных в хранилище данных с использованием компонента Архивирование (ARCH)" |
dataspace.tsa.kafka.producerConfig.ssl.keystore.type |
pprbod.cloud.transport-kafka-lib.kafka.producerConfig."[ssl.keystore.type]" |
JKS |
См. описание в разделе "Настройка модуля DataSpace Migration" документа "Руководство по настройке передачи данных в хранилище данных с использованием компонента Архивирование (ARCH)" |
dataspace.tsa.kafka.producerConfig.ssl.truststore.type |
pprbod.cloud.transport-kafka-lib.kafka.producerConfig."[ssl.truststore.type]" |
JKS |
См. описание в разделе "Настройка модуля DataSpace Migration" документа "Руководство по настройке передачи данных в хранилище данных с использованием компонента Архивирование (ARCH)" |
dataspace.tsa.kafka.producerConfig.ssl.protocol |
pprbod.cloud.transport-kafka-lib.kafka.producerConfig."[ssl.protocol]" |
TLS |
См. описание в разделе "Настройка модуля DataSpace Migration" документа "Руководство по настройке передачи данных в хранилище данных с использованием компонента Архивирование (ARCH)" |
dataspace.tsa.kafka.producerConfig.ssl.enabled.protocols |
pprbod.cloud.transport-kafka-lib.kafka.producerConfig."[ssl.enabled.protocols]" |
TLSv1.2 |
См. описание в разделе "Настройка модуля DataSpace Migration" документа "Руководство по настройке передачи данных в хранилище данных с использованием компонента Архивирование (ARCH)" |
dataspace.tsa.kafka.producerConfig.ssl.endpoint.identification.algorithm |
NONE |
См. описание в разделе "Настройка модуля DataSpace Migration" документа "Руководство по настройке передачи данных в хранилище данных с использованием компонента Архивирование (ARCH)" |
|
dataspace.tsa.kafka.producerConfig.partition.assignment.strategy |
pprbod.cloud.transport-kafka-lib.kafka.producerConfig."[partition.assignment.strategy]" |
org.apache.kafka.clients.consumer.RoundRobinAssignor |
См. описание в разделе "Настройка модуля DataSpace Migration" документа "Руководство по настройке передачи данных в хранилище данных с использованием компонента Архивирование (ARCH)" |
dataspace.tsa.kafka.consumerConfig.security.protocol |
pprbod.cloud.transport-kafka-lib.kafka.consumerConfig."[security.protocol]" |
SSL |
См. описание в разделе "Настройка модуля DataSpace Migration" документа "Руководство по настройке передачи данных в хранилище данных с использованием компонента Архивирование (ARCH)" |
dataspace.tsa.kafka.consumerConfig.ssl.keystore.location |
pprbod.cloud.transport-kafka-lib.kafka.consumerConfig."[ssl.keystore.location]" |
/opt/keystore/kafka/server.keystore_tsa.jks |
См. описание в разделе "Настройка модуля DataSpace Migration" документа "Руководство по настройке передачи данных в хранилище данных с использованием компонента Архивирование (ARCH)" |
dataspace.tsa.kafka.consumerConfig.ssl.truststore.location |
pprbod.cloud.transport-kafka-lib.kafka.consumerConfig."[ssl.truststore.location]" |
/opt/keystore/kafka/trust_tsa.jks |
См. описание в разделе "Настройка модуля DataSpace Migration" документа "Руководство по настройке передачи данных в хранилище данных с использованием компонента Архивирование (ARCH)" |
dataspace.tsa.kafka.consumerConfig.ssl.keystore.type |
pprbod.cloud.transport-kafka-lib.kafka.consumerConfig."[ssl.keystore.type]" |
JKS |
См. описание в разделе "Настройка модуля DataSpace Migration" документа "Руководство по настройке передачи данных в хранилище данных с использованием компонента Архивирование (ARCH)" |
dataspace.tsa.kafka.consumerConfig.ssl.truststore.type |
pprbod.cloud.transport-kafka-lib.kafka.consumerConfig."[ssl.truststore.type]" |
JKS |
См. описание в разделе "Настройка модуля DataSpace Migration" документа "Руководство по настройке передачи данных в хранилище данных с использованием компонента Архивирование (ARCH)" |
dataspace.tsa.kafka.consumerConfig.ssl.protocol |
pprbod.cloud.transport-kafka-lib.kafka.consumerConfig."[ssl.protocol]" |
TLS |
См. описание в разделе "Настройка модуля DataSpace Migration" документа "Руководство по настройке передачи данных в хранилище данных с использованием компонента Архивирование (ARCH)" |
dataspace.tsa.kafka.consumerConfig.ssl.enabled.protocols |
pprbod.cloud.transport-kafka-lib.kafka.consumerConfig."[ssl.enabled.protocols]" |
TLSv1.2 |
См. описание в разделе "Настройка модуля DataSpace Migration" документа "Руководство по настройке передачи данных в хранилище данных с использованием компонента Архивирование (ARCH)" |
dataspace.tsa.kafka.consumerConfig.ssl.endpoint.identification.algorithm |
- |
См. описание в разделе "Настройка модуля DataSpace Migration" документа "Руководство по настройке передачи данных в хранилище данных с использованием компонента Архивирование (ARCH)" |
|
dataspace.tsa.kafka.consumerConfig.partition.assignment.strategy |
pprbod.cloud.transport-kafka-lib.kafka.consumerConfig."[partition.assignment.strategy]" |
org.apache.kafka.clients.consumer.RoundRobinAssignor |
См. описание в разделе "Настройка модуля DataSpace Migration" документа "Руководство по настройке передачи данных в хранилище данных с использованием компонента Архивирование (ARCH)" |
dataspace.tsa.stub.enabled |
pprbod.cloud.stub.enabled |
true |
См. описание в разделе "Настройка модуля DataSpace Migration" документа "Руководство по настройке передачи данных в хранилище данных с использованием компонента Архивирование (ARCH)" |
dataspace.tsa.client.polygon |
pprbod.cloud.client.polygon |
stubValueForPolygon |
См. описание в разделе "Настройка модуля DataSpace Migration" документа "Руководство по настройке передачи данных в хранилище данных с использованием компонента Архивирование (ARCH)" |
dataspace.tsa.client.zone |
pprbod.cloud.client.zone |
stubValueForZone |
См. описание в разделе "Настройка модуля DataSpace Migration" документа "Руководство по настройке передачи данных в хранилище данных с использованием компонента Архивирование (ARCH)" |
dataspace.tsa.client.source |
pprbod.cloud.client.source |
stubValueForSource |
См. описание в разделе "Настройка модуля DataSpace Migration" документа "Руководство по настройке передачи данных в хранилище данных с использованием компонента Архивирование (ARCH)" |
dataspace.tsa.client.listeningThreadCount |
pprbod.cloud.client.listeningThreadCount |
5 |
См. описание в разделе "Настройка модуля DataSpace Migration" документа "Руководство по настройке передачи данных в хранилище данных с использованием компонента Архивирование (ARCH)" |
dataspace.tsa.client.clientResponseTimeout |
pprbod.cloud.client.clientResponseTimeout |
40 |
См. описание в разделе "Настройка модуля DataSpace Migration" документа "Руководство по настройке передачи данных в хранилище данных с использованием компонента Архивирование (ARCH)" |
dataspace.epk.synapse.integration.bootstrapServers |
epk.synapse.integration.bootstrap-servers |
- |
Адреса серверов Kafka ЕПК |
dataspace.epk.synapse.integration.clientsMergedTopics |
epk.synapse.integration.clients-merged-topics |
UCPBROKER.CLIENTSMERGED.V1 |
Имя топика для приема сообщений по слиянию физических лиц |
dataspace.epk.synapse.integration.clientsMergedTopics.enable |
epk.synapse.integration.clients-merged-topics.enable |
false |
Включение процесса приема сообщений по слиянию физических лиц |
dataspace.epk.synapse.integration.clientsUnmergedTopics |
epk.synapse.integration.clients-unmerged-topics |
UCPBROKER.CLIENTSUNMERGED.V1 |
Имя топика для приема сообщений по разлиянию физических лиц |
dataspace.epk.synapse.integration.clientsUnmergedTopics.enable |
epk.synapse.integration.clients-unmerged-topics.enable |
false |
Включение процесса приема сообщений по разлиянию физических лиц |
dataspace.epk.synapse.integration.organizationMergedTopics |
epk.synapse.integration.organization-merged-topics |
UCP.ORGANIZATIONMERGEDEVENTEVENT.V1 |
Имя топика для приема сообщений по слиянию юридических лиц |
dataspace.epk.synapse.integration.organizationMergedTopics.enable |
epk.synapse.integration.organization-merged-topics.enable |
false |
Включение процесса приема сообщений по слиянию юридических лиц |
dataspace.epk.synapse.integration.dedub-individual-topics |
epk.synapse.integration.dedub-individual-topics |
UCP.DEDUBINDIVIDUALEVENTEVENT.V1 |
Имя топика для приема сообщений по слиянию связанных физических лиц (СФЛ) |
dataspace.epk.synapse.integration.dedub-individual-topics.enable |
epk.synapse.integration.dedub-individual-topics.enable |
false |
Включение процесса приема сообщений по слиянию связанных физических лиц |
dataspace.epk.kafka.ssl.enabled |
false |
См. описание в разделе "SSL-конфигурация для подключения к Kafka источника событий слияния/разъединения клиентов" |
|
dataspace.epk.kafka.cert.keystore.path |
- |
См. описание в разделе "SSL-конфигурация для подключения к Kafka источника событий слияния/разъединения клиентов" |
|
dataspace.epk.kafka.cert.truststore.path |
- |
См. описание в разделе "SSL-конфигурация для подключения к Kafka источника событий слияния/разъединения клиентов" |
|
dataspace.epk.kafka.ssl.istio.egress.encryption.enabled |
false |
Флаг переключения шифрования на стороне приложения или egress |
|
dataspace.epk.synapse.integration.security-protocol |
epk.synapse.integration.security-protocol |
SSL |
Протокол безопасности для шифрования на стороне приложения |
dataspace.epk.synapse.integration.ssl-keystore-location |
epk.synapse.integration.ssl-keystore-location |
/opt/keystore/epk/epk-ssl-keystore.jks |
Путь на pod к хранилищу сертификатов для шифрования на стороне приложения без Hashicorp Vault |
dataspace.epk.synapse.integration.ssl-truststore-location |
epk.synapse.integration.ssl-truststore-location |
/opt/keystore/epk/epk-ssl-truststore.jks |
Путь на pod к trust хранилищу сертификатов для шифрования на стороне приложения без Hashicorp Vault |
dataspace.epk.synapse.integration.ssl-endpoint-identification-algorithm |
epk.synapse.integration.ssl-endpoint-identification-algorithm |
- |
Алгоритм идентификации endpoint, используемый для проверки имени хоста сервера. По-умолчанию выключен, чтобы избежать ошибок |
dataspace.logger.env.standid |
dev |
Настройка параметров для logger |
|
dataspace.logger.env.zoneid |
default |
Настройка параметров для logger |
|
dataspace.logger.env.cluster |
openshift.url.example.com |
Настройка параметров для logger |
|
dataspace.logger.http.enabled |
true |
Флаг переключения формирования конфигурации для отправки лог-файлов на REST API сервер сервиса журналирования или Kafka |
|
dataspace.logger.ingress.host |
logger-endpoint-demo-http-example.com |
URL REST API сервера сервиса журналирования |
|
dataspace.logger.app.config.port |
80 |
Порт REST API сервера сервиса журналирования |
|
dataspace.logger.conf.uri |
/v1/events |
Endpoint REST API сервера для отправки лог-файлов сервиса журналирования |
|
dataspace.logger.kafka.bootstrapServers |
- |
Адреса kafka брокеров сервиса журналирования |
|
dataspace.logger.kafka.topics |
- |
Topics kafka сервиса журналирования |
|
dataspace.logger.kafka.sticky.partitioning.linger.ms |
4000 |
Задержка для ожидания накопления сообщений в очереди перед формированием пакетов для передачи kafka брокерам |
|
dataspace.logger.kafka.queue.buffering.max.kbytes |
5120 |
Максимальный общий размер сообщений в очереди kafka producer |
|
dataspace.logger.kafka.ssl.enabled |
false |
См. пример в разделе "SSL-конфигурация для Kafka LOGA" |
|
dataspace.logger.kafka.ssl.istio.egress.encryption.enabled |
false |
Флаг переключения шифрования на стороне приложения или egress |
|
dataspace.logger.tracing.enabled |
false |
Флаг переключения отправки трейсинга |
|
dataspace.logger.tracing.http.enabled |
true |
Флаг переключения формирования конфигурации для отправки трейсинга на REST API сервер сервиса журналирования или kafka |
|
dataspace.logger.tracing.spans.port |
2021 |
Порт который предоставит возможность отправки трейсинга через sidecar контейнер |
|
dataspace.logger.tracing.spans.buffer_max_size |
32k |
Максимальный размер буфера Fluent Bit |
|
dataspace.logger.tracing.spans.buffer_chunk_size |
32k |
Максимальный размер фрагмента буфера Fluent Bit |
|
dataspace.logger.tracing.ingress.host |
logger-tracing-endpoint-demo-http-example.com |
URL REST API сервера сервиса журналирования для отправки трейсинга |
|
dataspace.logger.tracing.app.config.port |
80 |
Порт REST API сервера сервиса журналирования для отправки трейсинга |
|
dataspace.logger.tracing.conf.uri |
/trace/api/v2/spans |
Endpoint REST API сервера сервиса журналирования для отправки трейсинга |
|
dataspace.logger.tracing.kafka.bootstrapServers |
- |
Адреса kafka брокеров сервиса журналирования для отправки трейсинга |
|
dataspace.logger.tracing.kafka.topics |
- |
Topics kafka сервиса журналирования для отправки трейсинга |
|
dataspace.logger.tracing.kafka.sticky.partitioning.linger.ms |
4000 |
Задержка для ожидания накопления сообщений в очереди перед формированием пакетов для передачи kafka брокерам |
|
dataspace.logger.tracing.kafka.queue.buffering.max.kbytes |
5120 |
Максимальный общий размер сообщений в очереди kafka producer |
|
dataspace.logger.tracing.kafka.ssl.enabled |
false |
См. пример в разделе "SSL-конфигурация для Kafka LOGA для отправки трейсинга" |
|
dataspace.logger.tracing.kafka.ssl.istio.egress.encryption.enabled |
false |
Флаг переключения шифрования на стороне приложения или egress |
|
global.dataspace.vault_paths |
*(см. примечание к таблице) |
Пути с properties в рамках работы с Hashicorp Vault |
Примечание
Значение global.dataspace.vault_paths:
/secrets/properties/keystore-passphrase-aj.properties, /secrets/properties/truststore-passphrase-aj.properties, /secrets/properties/key-passphrase-aj.properties, /secrets/properties/maindb.properties, /secrets/properties/standin.properties, /secrets/properties/passphrase-db.properties, /secrets/properties/truststore-passphrase-db.properties, /secrets/properties/passphrase-tsa.properties, /secrets/properties/key-passphrase-tsa.properties, /secrets/properties/truststore-passphrase-tsa.properties, /secrets/properties/passphrase-epk.properties, /secrets/properties/truststore-passphrase-epk.properties, /secrets/properties/subscription.properties
istio.all.conf — указываются параметры работы с Istio: настройка создания Ingress/Egress, создание обвязки для внешних сервисов.
Примечание
Необходимо обратить внимание на параметры:
dataspace.ose.istio.deployment.spec.template.spec.containers.istio_proxy.image - ссылка на образ istio sidecar контейнера;
dataspace.ose.istio.deployment.spec.template.spec.containers.ott-sidecar.image - ссылка на образ ott sidecar контейнера;
dataspace.k8s.istio.SSM_CONFIGURATION_ENABLED - флаг, включающий совместимость конфигурации с Synapse Service Mesh.
dataspace-*.conf — файлы с параметрами для конкретного сервиса.
Примечание
Необходимо обратить внимание на блок override.properties с параметрами по паттерну
<prefix>.<параметр_application.properties>:
dataspace-core: prefix = core.cm.properties.*
dataspace-gigabas: prefix = gigabas.cm.properties.*
dataspace-cr-duplication-service: prefix = duplication.cm.properties.*
dataspace-cr-migration-service: prefix = migration.cm.properties.*
dataspace-cr-state-machine: prefix = statemachine.cm.properties.*
dataspace-subscription: prefix = subscription.cm.properties.*
dataspace-bundle: prefix = bundle.cm.properties.*
Проливка Liquibase-скриптов на базу данных#
Предварительно необходимо:
добавить в _passwords.conf пароли для подключения к БД и проливки liquibase-скриптов:
dataspace_main_db_password = "user_main_password";
dataspace_standin_db_password = "user_si_password".
заполнить файл custom_property.conf.yml, расположенный в репозитории по пути conf/custom_property.conf.yml:
# Данные для проливки liquibase-скриптов на main
dataspace_main_db_user: "user_main"
dataspace_main_db_url: "jdbc:postgresql://url:port/user_main_db"
dataspace_main_db_schema: "user_main_schema"
dataspace_main_db_driver: "org.postgresql.Driver"
dataspace_main_db_dialect: "org.hibernate.dialect.PostgreSQLDialect"
dataspace_main_db_tablespace_t: "user_main_tablespace_t"
dataspace_main_db_tablespace_i: "user_main_tablespace_i"
dataspace_main_db_tablespace_l: "user_main_tablespace_l"
# Данные для проливки liquibase-скриптов на standin
dataspace_standin_db_user: "user_si"
dataspace_standin_db_url: "jdbc:postgresql://url:port/user_si_db"
dataspace_standin_db_schema: "user_si_schema"
dataspace_standin_db_driver: "org.postgresql.Driver"
dataspace_standin_db_dialect: "org.hibernate.dialect.PostgreSQLDialect"
dataspace_standin_db_tablespace_t: "user_si_tablespace_t"
dataspace_standin_db_tablespace_i: "user_si_tablespace_i"
dataspace_standin_db_tablespace_l: "user_si_tablespace_l"
# Определяет тип блока SI или нет: "true" — проливка на main, "false" — проливка на standin
isMain: true
Проливка скриптов выполняется путем запуска JOB Deploy с playbook DB_UPDATE (запуск Liquibase-скриптов).
Если необходимо дополнительно проливать БД Standin, то в файле custom_property.conf.yml репозитория ФП необходимо переключить флаг isMain и перезапустить JOB Deploy с playbook DB_UPDATE.
Использование пользовательских параметров в рамках сервиса DataSpace#
Примечание
Изначально требуется, чтобы в дистрибутив был добавлен пользовательский ConfigMap (см. раздел "Добавление пользовательских параметров в дистрибутив").
Для того чтобы пользовательский ConfigMap использовался сервисом DataSpace, необходимо указать его имя в конфигурации .conf (например, dataspace-core-deposit.conf) требуемого сервиса: dataspace.service.cm.customer.properties=customer-properties.
Для добавления пользовательских jvm-аргументов для сервиса DataSpace необходимо перечислить их в конфигурации .conf (например, dataspace-core-deposit.conf) требуемого сервиса (необходимые опции по умолчанию уже перечислены):
dataspace.service.jvm-arguments="-XX:+AlwaysPreTouch -server -XX:InitialRAMPercentage=50.0 -XX:MaxRAMPercentage=70.0 -XX:+UseG1GC -XX:MaxGCPauseMillis=100 -XX:ParallelGCThreads=2 -XX:+ParallelRefProcEnabled -XX:-ResizePLAB -XX:G1ReservePercent=10 -XX:+UnlockExperimentalVMOptions -XX:G1NewSizePercent=20 -XX:HeapDumpPath=/tmp -XX:+UnlockDiagnosticVMOptions -XX:+HeapDumpOnOutOfMemoryError -XX:+DisableExplicitGC -XX:+ScavengeBeforeFullGC -XX:PrintSafepointStatisticsCount=1 -XX:+PrintClassHistogram -XX:+PrintFlagsFinal -XX:+LogVMOutput -Xlog:gc*=info:file=/tmp/gc_log_memory.log:time,uptime,level,tags:filesize={{lookup('custom_vars','core.cm.jvm-arguments.gc.log.gcLogFileSize')}},filecount={{lookup('custom_vars','core.cm.jvm-arguments.gc.log.gcLogFileCount')}} -Xlog:safepoint=info:file=/tmp/gc_log_memory.log:time,uptime,level,tags:filesize={{lookup('custom_vars','core.cm.jvm-arguments.gc.log.gcLogFileSize')}},filecount={{lookup('custom_vars','core.cm.jvm-arguments.gc.log.gcLogFileCount')}} -Djdk.attach.allowAttachSelf=true --add-exports java.base/jdk.internal.perf=ALL-UNNAMED --add-exports java.management/com.sun.jmx=ALL-UNNAMED -Dfile.encoding=UTF8 -Duser.timezone={{lookup('custom_vars','core.cm.jvm-arguments.user.timezone')}}"
При использовании logback.xml, отличного от предоставляемого в поставке, его необходимо указать в dataspace-.conf* используемого сервиса (в данном случае — dataspace-core):
#custom logback config map ( customLogback )
dataspace.service.cm.customer.logback=stub-logback
Используя значение stub-logback в данном параметре, будет использован logback.xml из поставки, находящийся в configmap dataspace-logger-cm.yaml модуля DataSpace.
Пример logback.xml (находится в примере пользовательского configmap, находящегося в шаблонном проекте по пути ./dataspace-core-${modelName}/configmaps/customer-properties-core.yaml):
logback.xml: |-
#Содержание logback.xml
Установка дистрибутива на стенд#
Установка дистрибутива на стенд выполняется путем запуска JOB Deploy с playbook OPENSHIFT_DEPLOY (установка в OpenShift).
Примечание
Все необходимые секреты для взаимодействия с базой данных и Kafka сформируются автоматически на основании параметров из репозитория ФП conf/config/parameters/*.all.conf.
Обзор параметров для подключения по SSL#
Внимание!
Вся описанная ниже конфигурация используется при установке дистрибутива на стенд без Secret Management System.
SSL-конфигурация для DB#
Примечание
Если производится интеграция с HashiCorp Vault (Secret Management System), то см. раздел "Получение сертификатов DB".
Необходимо выполнить следующие действия:
Заполнить параметры в файле ${modelName}.all.conf в репозиторий FP:
# Путь до хранилища относительно common-репозитория # После заполнения данного параметра должен создаться секрет с хранилищем dataspace.db.cert.keystore.path=/ansible/files/ssl/db/keystore.jks dataspace.main.db.url={{ dataspace_main_db_url }}?sslmode=verify-ca&sslfactory=org.postgresql.ssl.DefaultJavaSSLFactoryДобавить параметры в _passwords.conf:
dataspace.main.db.keystore.password = "changeit";dataspace.main.db.truststore.password = "changeit".
SSL-конфигурация для Kafka компонента APLJ#
Примечание
Если производится интеграция с HashiCorp Vault (Secret Management System), то см. раздел "Получение сертификатов Kafka ПЖ".
Необходимо выполнить следующие действия:
Указать путь до хранилища с сертификатами в файле ${modelName}.all.conf в репозиторий FP:
# Путь до хранилищ относительно common-репозитория dataspace.aj.kafka.cert.keystore.path=/ansible/files/ssl/aj/keystore.jks dataspace.aj.kafka.cert.truststore.path=/ansible/files/ssl/aj/keystore.jks dataspace.app.journal.ssl.enabled=trueДобавить параметры в _passwords.conf:
# пароли для приватного ключа и хранилищ сертификатов для подключения к Kafka по SSL dataspace.standin.kafka.producerConfig.ssl.key.password="changeit" dataspace.standin.kafka.producerConfig.ssl.keystore.password="changeit" dataspace.standin.kafka.producerConfig.ssl.truststore.password="changeit" dataspace.standin.kafka.consumerConfig.ssl.key.password="changeit" dataspace.standin.kafka.consumerConfig.ssl.keystore.password="changeit" dataspace.standin.kafka.consumerConfig.ssl.truststore.password="changeit"
После заполнения параметров выше должен создаться секрет с хранилищами.
SSL-конфигурация для Kafka LOGA#
Примечание
Если производится интеграция с HashiCorp Vault (Secret Management System), то см. раздел "Получение сертификатов Kafka компонента Журналирование (LOGA)".
Необходимо выполнить следующие действия:
Включить ssl-режим для подключения к Kafka в файле ${modelName}.all.conf в репозиторий FP:
dataspace.logger.kafka.ssl.enabled=true.Добавить параметр в _passwords.conf:
dataspace.logger.kafka.keyStore.password="changeit".Добавить в репозиторий common в installer/system/efs/config/parameters/ssl.conf следующие параметры:
dataspace.logger.kafka.keyStore.RootCertAlias=root dataspace.logger.kafka.keyStore.CertAlias=cert dataspace.logger.kafka.keyStore.PrivateKeyAlias=key dataspace.logger.kafka.keyStore.password=dataspace.logger.kafka.keyStore.password dataspace.logger.kafka.keyStore.KeyStoreFromFile=ansible/files/ssl/logger/keystore.jks
После добавления параметров выше должен создаться секрет с сертификатом, приватным ключом и коренным сертификатом.
SSL-конфигурация для Kafka LOGA для отправки трейсинга#
Примечание
Если используются те же сервера Kafka, что и для LOGA, то необходимо использовать те же значения параметров в конфигурации, что и для LOGA.
Если производится интеграция с HashiCorp Vault (Secret Management System), то см. раздел "Получение сертификатов Kafka компонента Журналирование (LOGA) для отправки трейсинга".
Необходимо выполнить следующие действия:
Включить ssl-режим для подключения к Kafka в файле ${modelName}.all.conf в репозиторий FP:
dataspace.logger.tracing.kafka.ssl.enabled=true.Добавить параметр в _passwords.conf:
dataspace.logger.tracing.kafka.keyStore.password="changeit".Добавить в репозиторий common в installer/system/efs/config/parameters/ssl.conf следующие параметры:
dataspace.logger.tracing.kafka.keyStore.RootCertAlias=root dataspace.logger.tracing.kafka.keyStore.CertAlias=cert dataspace.logger.tracing.kafka.keyStore.PrivateKeyAlias=key dataspace.logger.tracing.kafka.keyStore.password=dataspace.logger.tracing.kafka.keyStore.password dataspace.logger.tracing.kafka.keyStore.KeyStoreFromFile=ansible/files/ssl/tracing/keystore.jks
После добавления параметров выше должен создаться секрет с сертификатом, приватным ключом и коренным сертификатом.
SSL-конфигурация для Kafka ARCH#
Примечание
Если производится интеграция с HashiCorp Vault (Secret Management System), то см. раздел "Получение сертификатов Kafka компонента Архивирование (ARCH)".
Необходимо выполнить следующие действия:
Указать путь до хранилища с сертификатами в файле ${modelName}.all.conf в репозиторий FP:
# Путь до хранилищ относительно common-репозитория dataspace.tsa.kafka.cert.keystore.path=/ansible/files/ssl/tsa/keystore.jks dataspace.tsa.kafka.cert.truststore.path=/ansible/files/ssl/tsa/keystore.jks dataspace.tsa.kafka.ssl.enabled=trueДобавить параметры в _passwords.conf:
# Пароли для приватного ключа и хранилищ сертификатов для подключения к Kafka по SSL dataspace.tsa.kafka.consumerConfig.ssl.key.password="changeit" dataspace.tsa.kafka.consumerConfig.ssl.keystore.password="changeit" dataspace.tsa.kafka.consumerConfig.ssl.truststore.password="changeit" dataspace.tsa.kafka.producerConfig.ssl.key.password="changeit" dataspace.tsa.kafka.producerConfig.ssl.keystore.password="changeit" dataspace.tsa.kafka.producerConfig.ssl.truststore.password="changeit"
После заполнения параметров выше должен создаться секрет с хранилищами.
SSL-конфигурация для подключения к Kafka источника событий слияния/разъединения клиентов#
Примечание
Если производится интеграция с HashiCorp Vault (Secret Management System), то см. раздел "Получение сертификатов Kafka источника событий слияния/разъединения клиентов".
Необходимо выполнить следующие действия:
Указать путь до хранилища с сертификатами в файле ${modelName}.all.conf в репозиторий FP:
# Путь до хранилищ относительно common репозитория dataspace.epk.kafka.cert.keystore.path=/ansible/files/ssl/epk/keystore.jks dataspace.epk.kafka.cert.truststore.path=/ansible/files/ssl/epk/keystore.jks dataspace.epk.kafka.ssl.enabled=trueДобавить параметры в _passwords.conf:
# пароли хранилищ сертификатов для подключения к Kafka по SSL dataspace.epk.synapse.integration.ssl.keystore.password="changeit" dataspace.epk.synapse.integration.ssl.truststore.password="changeit"
После заполнения параметров выше должен создаться секрет с хранилищами.
Конфигурирование Istio Service Mesh в рамках CDJE#
После проведения необходимого конфигурирования можно воспользоваться JOB Deploy с playbook OPENSHIFT_INGRESS_EGRESS_DEPLOY (установка ingress/egress в OpenShift).
Примеры разворачиваемых модулей и их конфигурации есть в проекте компонента Build tools (CIJE), на базе которого был сформирован дистрибутив для дальнейшей его установки на стенд (см. раздел "Создание шаблонного проекта на локальной машине"). Шаблоны в формате .yaml расположены по пути /conf/openshift/istio.
Конфигурация Ingress#
В репозитории ФП необходимо заполнить секцию с Ingress в conf/config/parameters/istio.all.conf.
Необходимо обратить внимание на параметры:
Флаги инсталляции Ingress:
Флаг включения в Ingress OTT sidecar контейнера, создание OTT-секретов, сущностей EnvoyFilter:
dataspace.ose.istio.ingress.common.ott.enabled=true.Установка сущностей Deployment, Service, Routes, Secrets, Gateway, ConfigMap, EnvoyFilter (если OTT-флаг в true):
dataspace.ose.istio.ingress.deployment.install=true.Установка сущностей VirtualService, DestinationRule, ServiceEntry для устанавливаемых модулей:
dataspace.ose.istio.ingress.config.install=true # Создание VirtualService с endpoint для доступа к сервисам извне по Ingress Route dataspace.ose.istio.service.route.out.enabled=true
Флаги конфигурации — конфигурирования в Ingress Gateway TLS-режима работы:
# PASSTHROUGH | SIMPLE | MUTUAL | AUTO_PASSTHROUGH | ISTIO_MUTUAL dataspace.ose.istio.ingress.gw.tls.mode
Добавить в ansible/_passwords.conf репозитория common параметр dataspace.ingress.keyStore.password = "changeit".
Примечание
Для установки Ingress требуется создание TLS серверных сертификатов и помещение их в хранилище в формате JKS.
Добавить в репозиторий common в installer/system/efs/config/parameters/ssl.conf следующие параметры:
dataspace.ssl.ose.istio.ingress.keyStore.RootCertAlias=root
dataspace.ssl.ose.istio.ingress.keyStore.CertAlias=cert
dataspace.ssl.ose.istio.ingress.keyStore.PrivateKeyAlias=key
dataspace.ssl.ose.istio.ingress.keyStore.password=dataspace.ingress.keyStore.password
dataspace.ssl.ose.istio.ingress.keyStore.KeyStoreFromFile=ansible/files/ssl/ingress.jks
Конфигурация Egress#
В репозитории ФП необходимо заполнить секцию с Egress в conf/config/parameters/istio.all.conf:
Флаги инсталляции Egress:
Флаг включения в Egress OTT sidecar контейнера, создание OTT-секретов, сущностей EnvoyFilter:
conf dataspace.ose.istio.egress.common.ott.enabled=true.Установка сущностей Deployment, Service, Secrets, ConfigMap:
dataspace.ose.istio.egress.deployment.install=true.Установка сущностей VirtualService, DestinationRule, ServiceEntry, Gateway, Secrets, EnvoyFilters (если OTT-флаг в true) для сервисов взаимодействия:
dataspace.ose.istio.egress.config.install=true.
Флаги конфигурации — конфигурирование политики для исходящего трафика:
# REGISTRY_ONLY | ALLOW_ANY dataspace.ose.istio.egress.configmap.outboundTrafficPolicy
Добавить в ansible/_passwords.conf репозитория common параметр dataspace.egress.keyStore.password = "changeit".
Примечание
Для установки Egress требуется создание TLS клиентских сертификатов и помещение их в хранилище в формате JKS.
Добавить в репозиторий common в installer/system/efs/config/parameters/ssl.conf следующие параметры:
dataspace.ssl.ose.istio.egress.keyStore.RootCertAlias=root
dataspace.ssl.ose.istio.egress.keyStore.CertAlias=cert
dataspace.ssl.ose.istio.egress.keyStore.PrivateKeyAlias=key
dataspace.ssl.ose.istio.egress.keyStore.password=dataspace.egress.keyStore.password
dataspace.ssl.ose.istio.egress.keyStore.KeyStoreFromFile=ansible/files/ssl/egress.jks
Конфигурирование режимов работы mTLS внутри кластера#
В репозитории ФП необходимо заполнить в conf/config/parameters/istio.all.conf конфигурирование режима mTLS внутри кластера — создается сущность PeerAuthentification:
# STRICT | PERMISSIVE | DISABLE | UNSET
dataspace.ose.istio.egress.peerauthentication.mtls.mode=STRICT
Конфигурация One-Time Password (OTP) / OTT (OTTS)#
В репозитории ФП необходимо заполнить секцию с OTT для Ingress/Egress в conf/config/parameters/istio.all.conf.
Необходимо обратить внимание на параметры:
Идентификатор модуля, для которого были сформированы необходимые сертификаты:
dataspace.ose.istio.ott.module.id=changeit.Адреса OTT-серверов:
dataspace.ose.istio.ott.service.hosts=ip:port,ip:port.Указание портов, для которых будет создан EnvoyFilter для обертывания трафика OTT-токенами:
dataspace.ose.istio.egress.ott.ef.external.ports=.
Примечание
Если производится интеграция с HashiCorp Vault (Secret Management System), то см. раздел "Конфигурирование компонента One-Time Password (OTTS) на граничных прокси".
Добавить в ansible/_passwords.conf репозитория common следующие параметры:
dataspace_ingress_OTT_CERTSTORE_PRIVATE_KEY_PWD="changeit"
dataspace_ingress_OTT_CERTSTORE_PWD="changeit"
dataspace_ingress_OTT_TRUST_STORE_PWD="changeit"
dataspace_egress_OTT_CERTSTORE_PRIVATE_KEY_PWD="changeit"
dataspace_egress_OTT_CERTSTORE_PWD="changeit"
dataspace_egress_OTT_TRUST_STORE_PWD="changeit"
Добавить в репозиторий common в installer/system/efs/config/parameters/ssl.conf следующие параметры:
dataspace.ssl.ose.istio.ingress.ott.keyStore.path=ansible/files/ssl/module.p12
dataspace.ssl.ose.istio.ingress.ott.trustStore.path=ansible/files/ssl/ott_truststore.p12
dataspace.ssl.ose.istio.egress.ott.keyStore.path=ansible/files/ssl/module.p12
dataspace.ssl.ose.istio.egress.ott.trustStore.path=ansible/files/ssl/ott_truststore.p12
Конфигурация обвязки Istio для компонента Прикладной Журнал (APLJ)#
Для перенаправления трафика к серверам Kafka компонента Прикладной Журнал (APLJ) через Egress в репозитории ФП заполнить секцию с Kafka в conf/config/parameters/istio.all.conf:
Для создания обвязки (GW,SE,VS) для TCP-подключения к серверу Kafka компонента Прикладной Журнал (APLJ):
# Флаг для включения генерации обвязки dataspace.ose.istio.egress.common.tcp_kafka_map.enabled=true # kafka_name_1:kafka_host_1:kafka_host_ip_1:mesh_kafka_port_1:egress_kafka_port_1:external_kafka_port_1;... # egress_kafka_port_* не должны повторяться для корректной генерации обвязки dataspace.ose.istio.egress.common.tcp_kafka_map=kafka-tcp:kafka.host.url:10.10.10.10:10345:9345:8654Для создания обвязки (GW,SE,VS) для TLS-подключения в режиме PASSTHROUGH к серверу Kafka компонента Прикладной Журнал (APLJ):
# Флаг для включения генерации обвязки dataspace.ose.istio.egress.common.tcp_kafka_ssl_map.enabled=true # kafka_name_1:kafka_host_1:mesh_kafka_port_1:egress_kafka_port_1:external_kafka_port_1;... # egress_kafka_port_* не должны повторяться для корректной генерации обвязки dataspace.ose.istio.egress.common.tcp_kafka_ssl_map=kafka-tls:kafka.mtls.url:12345:11345:443Примечание
Должны быть добавлены параметры для включения SSL (см. раздел "SSL-конфигурация для Kafka компонента APLJ").
Для создания обвязки (GW,SE,VS,DR) для TLS-подключения в режиме MUTUAL к серверу Kafka компонента Прикладной Журнал (APLJ):
# Флаг для включения генерации обвязки dataspace.ose.istio.egress.common.tcp_kafka_aj_mtls_map.enabled=false # kafka_name_1:kafka_host_1:kafka_host_ip_1:mesh_kafka_port_1:egress_kafka_port_1:external_kafka_port_1;... # egress_kafka_port_* не должны повторяться для корректной генерации обвязки dataspace.ose.istio.egress.common.tcp_kafka_aj_mtls_map=kafka-mtls:kafka.mtls.url:10.11.12.13:12345:11345:443Примечание
Если производится интеграция с HashiCorp Vault (Secret Management System), то см. раздел "Настройки для ПЖ на egress".
В файле _passwords.conf определить пароль для хранилища:
dataspace.egress.aj.keyStore.password=changeit. Добавить в common репозиторий в installer/system/efs/config/parameters/ssl.conf следующие параметры:dataspace.ssl.ose.istio.egress.aj.keyStore.RootCertAlias=root dataspace.ssl.ose.istio.egress.aj.keyStore.KeyStoreFromFile=/ansible/files/ssl/aj/keystore.jks dataspace.ssl.ose.istio.egress.aj.keyStore.CertAlias=1 dataspace.ssl.ose.istio.egress.aj.keyStore.PrivateKeyAlias=1 dataspace.ssl.ose.istio.egress.aj.keyStore.password=dataspace.egress.aj.keyStore.password
Конфигурация обвязки Istio для компонента Архивирование (ARCH)#
Для перенаправления трафика к серверам Kafka ARCH через Egress в репозитории ФП заполнить секцию с Kafka в conf/config/parameters/istio.all.conf:
Для создания обвязки (GW,SE,VS) для TCP-подключения к серверу Kafka ARCH:
# Флаг для включения генерации обвязки dataspace.ose.istio.egress.common.tcp_kafka_map.enabled=true # kafka_name_1:kafka_host_1:kafka_host_ip_1:mesh_kafka_port_1:egress_kafka_port_1:external_kafka_port_1;... # egress_kafka_port_* не должны повторяться для корректной генерации обвязки dataspace.ose.istio.egress.common.tcp_kafka_map=kafka-tcp:kafka.host.url:10.10.10.10:10345:9345:8654Для создания обвязки (GW,SE,VS) для TLS-подключения в режиме PASSTHROUGH к серверу Kafka ARCH:
# Флаг для включения генерации обвязки dataspace.ose.istio.egress.common.tcp_kafka_ssl_map.enabled=true # kafka_name_1:kafka_host_1:mesh_kafka_port_1:egress_kafka_port_1:external_kafka_port_1;... # egress_kafka_port_* не должны повторяться для корректной генерации обвязки dataspace.ose.istio.egress.common.tcp_kafka_ssl_map=kafka-tls:kafka.mtls.url:12345:11345:443Примечание
Должны быть добавлены параметры для включения SSL (см. раздел "SSL-конфигурация для Kafka ARCH").
Для создания обвязки (GW,SE,VS,DR) для TLS-подключения в режиме MUTUAL к серверу Kafka ARCH:
# Флаг для включения генерации обвязки dataspace.ose.istio.egress.common.tcp_kafka_tsa_mtls_map.enabled=false # kafka_name_1:kafka_host_1:kafka_host_ip_1:mesh_kafka_port_1:egress_kafka_port_1:external_kafka_port_1;... # egress_kafka_port_* не должны повторяться для корректной генерации обвязки dataspace.ose.istio.egress.common.tcp_kafka_tsa_mtls_map=kafka-mtls:kafka.mtls.url:10.11.12.13:12345:11345:443Примечание
Если производится интеграция с HashiCorp Vault (Secret Management System), то см. раздел "Настройки для компонента архивирование (ARCH) на Egress".
В файле _passwords.conf определить пароль для хранилища:
dataspace.egress.tsa.keyStore.password=changeit. Добавить в common репозиторий в installer/system/efs/config/parameters/ssl.conf следующие параметры:dataspace.ssl.ose.istio.egress.tsa.keyStore.RootCertAlias=root dataspace.ssl.ose.istio.egress.tsa.keyStore.KeyStoreFromFile=/ansible/files/ssl/tsa/keystore.jks dataspace.ssl.ose.istio.egress.tsa.keyStore.CertAlias=1 dataspace.ssl.ose.istio.egress.tsa.keyStore.PrivateKeyAlias=1 dataspace.ssl.ose.istio.egress.tsa.keyStore.password=dataspace.egress.tsa.keyStore.password
Конфигурация обвязки Istio для подключения к Kafka источника событий слияния/разъединения клиентов#
Для перенаправления трафика к серверам Kafka ЕПК через Egress в репозитории ФП заполнить секцию с Kafka в conf/config/parameters/istio.all.conf:
Для создания обвязки (GW,SE,VS) для TCP-подключения к серверу Kafka ЕПК:
# Флаг для включения генерации обвязки dataspace.ose.istio.egress.common.tcp_kafka_map.enabled=true # kafka_name_1:kafka_host_1:kafka_host_ip_1:mesh_kafka_port_1:egress_kafka_port_1:external_kafka_port_1;... # egress_kafka_port_* не должны повторяться для корректной генерации обвязки dataspace.ose.istio.egress.common.tcp_kafka_map=kafka-tcp:kafka.host.url:10.10.10.10:10345:9345:8654Для создания обвязки (GW,SE,VS) для TLS-подключения в режиме PASSTHROUGH к серверу Kafka ЕПК:
# Флаг для включения генерации обвязки dataspace.ose.istio.egress.common.tcp_kafka_ssl_map.enabled=true # kafka_name_1:kafka_host_1:mesh_kafka_port_1:egress_kafka_port_1:external_kafka_port_1;... # egress_kafka_port_* не должны повторяться для корректной генерации обвязки dataspace.ose.istio.egress.common.tcp_kafka_ssl_map=kafka-tls:kafka.mtls.url:12345:11345:443Примечание
Должны быть добавлены параметры для включения SSL (см. раздел "SSL-конфигурация для подключения к Kafka источника событий слияния/разъединения клиентов").
Для создания обвязки (GW,SE,VS,DR) для TLS-подключения в режиме MUTUAL к серверу Kafka ЕПК:
# Флаг для включения генерации обвязки dataspace.ose.istio.egress.common.tcp_kafka_epk_mtls_map.enabled=false # kafka_name_1:kafka_host_1:kafka_host_ip_1:mesh_kafka_port_1:egress_kafka_port_1:external_kafka_port_1;... # egress_kafka_port_* не должны повторяться для корректной генерации обвязки dataspace.ose.istio.egress.common.tcp_kafka_epk_mtls_map=kafka-mtls:kafka.mtls.url:10.11.12.13:12345:11345:443Примечание
Если производится интеграция с HashiCorp Vault (Secret Management System), то см. раздел "Настройки для ЕПК на egress".
В файле _passwords.conf определить пароль для хранилища:
dataspace.egress.epk.keyStore.password=changeit.Добавить в common репозиторий в installer/system/efs/config/parameters/ssl.conf следующие параметры:
dataspace.ssl.ose.istio.egress.epk.keyStore.RootCertAlias=root dataspace.ssl.ose.istio.egress.epk.keyStore.KeyStoreFromFile=/ansible/files/ssl/epk/keystore.jks dataspace.ssl.ose.istio.egress.epk.keyStore.CertAlias=1 dataspace.ssl.ose.istio.egress.epk.keyStore.PrivateKeyAlias=1 dataspace.ssl.ose.istio.egress.epk.keyStore.password=dataspace.egress.epk.keyStore.password
Конфигурация обвязки Istio для БД#
Для перенаправления трафика к базе данных через Egress в репозитории ФП заполнить секцию с DB в conf/config/parameters/istio.all.conf:
Для создания обвязки (GW,SE,VS) для TCP подключения к серверу БД:
# Флаг для включения генерации обвязки dataspace.ose.istio.egress.common.tcp_db_map.enabled=true # db_name_1:db_host_1:db_host_ip_1:mesh_db_port_1:egress_db_port_1:external_db_port_1;... # egress_db_port_* не должны повторяться для корректной генерации обвязки dataspace.ose.istio.egress.common.tcp_db_map=db-tcp:db.host.url:10.10.10.10:10345:9345:8654Примечание
Перед тем, как настраивать TLS-подключение к DB через Egress, необходимо произвести настройку SSL (см. раздел "Инструкция для PostgreSQL" или "Инструкция для Oracle").
Для создания обвязки (GW,SE,VS) для TLS-подключения в режиме PASSTHROUGH к БД:
# Флаг для включения генерации обвязки dataspace.ose.istio.egress.common.tcp_db_ssl_map.enabled=true # db_name_1:db_host_1:mesh_db_port_1:egress_db_port_1:external_db_port_1;... # egress_db_port_* не должны повторяться для корректной генерации обвязки dataspace.ose.istio.egress.common.tcp_db_ssl_map=db-tls:db.mtls.url:12345:11345:443Примечание
Должны быть добавлены параметры для включения SSL (см. раздел "SSL-конфигурация для DB").
Конфигурация обвязки Istio для компонента Сервис межкластерной индексации (CCIX)#
При использовании CCIX в репозитории ФП заполнить секцию с параметрами подключения к CCIX в conf/config/parameters/istio.all.conf:
Для создания обвязки (GW,SE,VS) для TCP подключения к серверу CCIX:
# Флаг для включения генерации обвязки dataspace.ose.istio.egress.common.tcp_cci_map.enabled=true # cci_name_1:cci_host_1:cci_host_ip_1:mesh_cci_port_1:egress_cci_port_1:external_cci_port_1;... # egress_cci_port_* не должны повторяться для корректной генерации обвязки dataspace.ose.istio.egress.common.tcp_cci_map=cci-tcp;cci.host.url:10.10.10.10:10345:9345:8654Для создания обвязки (GW,SE,VS,DR) для TLS-подключения в режиме MUTUAL к серверу CCIX:
# Указываем порт Egress'a для создания EnvoyFilter для работы OTT dataspace.ose.istio.egress.ott.ef.external.ports=11345 # Флаг для включения генерации обвязки dataspace.ose.istio.egress.common.tcp_cci_ssl_map.enabled=true # cci_name_1:cci_host_1:mesh_cci_port_1:egress_cci_port_1:external_cci_port_1;... # egress_cci_port_* не должны повторяться для корректной генерации обвязки dataspace.ose.istio.egress.common.tcp_cci_ssl_map=cci-tls:cci.mtls.url:12345:11345:443Примечание
Если производится интеграция с HashiCorp Vault (Secret Management System), то см. раздел "Настройки для CCIX на egress".
Добавить в ansible/_passwords.conf репозитория common параметр
dataspace.egress.cci.keyStore.password = "changeit". Добавить в common репозиторий в installer/system/efs/config/parameters/ssl.conf следующие параметры:dataspace.ssl.ose.istio.egress.cci.keyStore.RootCertAlias=root dataspace.ssl.ose.istio.egress.cci.keyStore.KeyStoreFromFile=/ansible/files/ssl/KeyStoreFromFile.jks dataspace.ssl.ose.istio.egress.cci.keyStore.CertAlias=cert dataspace.ssl.ose.istio.egress.cci.keyStore.PrivateKeyAlias=key dataspace.ssl.ose.istio.egress.cci.keyStore.password=dataspace.egress.cci.keyStore.password
Конфигурация обвязки Istio для компонента Журналирование (LOGA)#
При использовании сервиса журналирования, например, Fluent Bit, в репозитории ФП заполнить секцию с журналированием в conf/config/parameters/istio.all.conf:
TCP-подключение к Журналирование (LOGA)#
Необходимо выполнить следующие действия:
Для создания обвязки (GW,SE,VS) для TCP подключения к REST API серверу журналирования:
# Флаг для включения генерации обвязки dataspace.ose.istio.egress.common.tcp_logger_map.enabled=true # logger_name_1:logger_host_1:logger_host_ip_1:mesh_logger_port_1:egress_logger_port_1:external_logger_port_1;... # egress_logger_port_* не должны повторяться для корректной генерации обвязки dataspace.ose.istio.egress.common.tcp_logger_map=logger-tcp:logger.host.url:10.10.10.10:10345:9345:8654Для создания обвязки (GW,SE,VS) для TCP-подключения к серверу Kafka Logger:
# Флаг для включения генерации обвязки dataspace.ose.istio.egress.common.tcp_kafka_map.enabled=true # kafka_name_1:kafka_host_1:kafka_host_ip_1:mesh_kafka_port_1:egress_kafka_port_1:external_kafka_port_1;... # egress_kafka_port_* не должны повторяться для корректной генерации обвязки dataspace.ose.istio.egress.common.tcp_kafka_map=kafka-tcp:kafka.host.url:10.10.10.10:10345:9345:8654
TLS-подключение в режиме PASSTHROUGH к Журналирование (LOGA)#
Необходимо выполнить следующие действия:
Для создания обвязки (GW,SE,VS) для TLS-подключения в режиме PASSTHROUGH к серверу Kafka LOGA:
# Флаг для включения генерации обвязки dataspace.ose.istio.egress.common.tcp_kafka_ssl_map.enabled=true # kafka_name_1:kafka_host_1:mesh_kafka_port_1:egress_kafka_port_1:external_kafka_port_1;... # egress_kafka_port_* не должны повторяться для корректной генерации обвязки dataspace.ose.istio.egress.common.tcp_kafka_ssl_map=kafka-tls:kafka.mtls.url:12345:11345:443
Примечание
Должны быть добавлены параметры для включения SSL (см. раздел "SSL-конфигурация для Kafka LOGA").
TLS-подключение в режиме MUTUAL к Журналирование (LOGA)#
Примечание
Если производится интеграция с HashiCorp Vault (Secret Management System), то см. раздел "Настройки для компонента Журналирование (LOGA) на Egress".
Необходимо выполнить следующие действия:
Добавить в ansible/_passwords.conf репозитория common параметр
dataspace.egress.logger.keyStore.password = "changeit".Добавить в репозиторий common в installer/system/efs/config/parameters/ssl.conf следующие параметры:
dataspace.ssl.ose.istio.egress.logger.keyStore.RootCertAlias=root dataspace.ssl.ose.istio.egress.logger.keyStore.KeyStoreFromFile=/ansible/files/ssl/KeyStoreFromFile.jks dataspace.ssl.ose.istio.egress.logger.keyStore.CertAlias=cert dataspace.ssl.ose.istio.egress.logger.keyStore.PrivateKeyAlias=key dataspace.ssl.ose.istio.egress.logger.keyStore.password=dataspace.egress.logger.keyStore.passwordДля создания обвязки (GW,SE,VS,DR) для TLS-подключения в режиме MUTUAL к REST API серверу Logger:
# Указываем порт Egress'a для создания EnvoyFilter для работы OTT dataspace.ose.istio.egress.ott.ef.external.ports=11345 # Флаг для включения генерации обвязки dataspace.ose.istio.egress.common.tcp_logger_ssl_map.enabled=true # logger_name_1:logger_host_1:mesh_logger_port_1:egress_logger_port_1:external_logger_port_1;... # egress_logger_port_* не должны повторяться для корректной генерации обвязки dataspace.ose.istio.egress.common.tcp_logger_ssl_map=logger-tls:logger.mtls.url:12345:11345:443Для создания обвязки (GW,SE,VS,DR) для TLS-подключения в режиме MUTUAL к серверу Kafka Logger:
# Флаг для включения генерации обвязки dataspace.ose.istio.egress.common.tcp_kafka_logger_mtls_map.enabled=false # kafka_name_1:kafka_host_1:kafka_host_ip_1:mesh_kafka_port_1:egress_kafka_port_1:external_kafka_port_1;... # egress_kafka_port_* не должны повторяться для корректной генерации обвязки dataspace.ose.istio.egress.common.tcp_kafka_logger_mtls_map=kafka-mtls:kafka.mtls.url:10.11.12.13:12345:11345:443
Конфигурация обвязки Istio для компонента Журналирование (LOGA) для работы с трейсингом#
Внимание!
Если для отправки трейсинга используются те же сервера, что и для отправки лог-файлов, то создание обвязки для трейсинга необходимо опустить и создать только для отправки лог-файлов, если методы транслирования трафика не различаются (например, tls в режиме passthrough для отправки лог-файлов и tls в режиме mutual для отправки трейсинга).
При использовании сервиса журналирования, например, Fluent Bit, в репозитории ФП заполнить секцию с журналированием для отправки трейсинга в conf/config/parameters/istio.all.conf:
Примечание
Для отправки трейсинга через Fluent bit необходимо прописать в dataspace-.conf* файлах репозитория ФП:
*.cm.properties.spring.zipkin.baseUrl=http://localhost:{{ spans_port }}, где spans_port — порт для отправки трейсинга на стороне fluent-bit sidecar. Задается в параметре, на примере dataspace-core:dataspace.service.sidecar.logger.tracing.spans.port.
TCP-подключение к Журналирование (LOGA) для отправки трейсинга#
Необходимо выполнить следующие действия:
Для создания обвязки (GW,SE,VS) для TCP подключения к REST API серверу:
# Флаг для включения генерации обвязки dataspace.ose.istio.egress.common.tcp_tracing_map.enabled=true # tracing_name_1:tracing_host_1:tracing_host_ip_1:mesh_tracing_port_1:egress_tracing_port_1:external_tracing_port_1;... # egress_tracing_port_* не должны повторяться для корректной генерации обвязки dataspace.ose.istio.egress.common.tcp_tracing_map=tracing-tcp:tracing.host.url:10.10.10.10:10345:9345:8654Для создания обвязки (GW,SE,VS) для TCP-подключения к серверу Kafka:
# Флаг для включения генерации обвязки dataspace.ose.istio.egress.common.tcp_kafka_map.enabled=true # kafka_name_1:kafka_host_1:kafka_host_ip_1:mesh_kafka_port_1:egress_kafka_port_1:external_kafka_port_1;... # egress_kafka_port_* не должны повторяться для корректной генерации обвязки dataspace.ose.istio.egress.common.tcp_kafka_map=kafka-tcp:kafka.host.url:10.10.10.10:10345:9345:8654
TLS-подключение в режиме PASSTHROUGH к Журналирование (LOGA) для отправки трейсинга#
Необходимо выполнить следующие действия:
Для создания обвязки (GW,SE,VS) для TLS-подключения в режиме PASSTHROUGH к серверу Kafka:
# Флаг для включения генерации обвязки dataspace.ose.istio.egress.common.tcp_kafka_ssl_map.enabled=true # kafka_name_1:kafka_host_1:mesh_kafka_port_1:egress_kafka_port_1:external_kafka_port_1;... # egress_kafka_port_* не должны повторяться для корректной генерации обвязки dataspace.ose.istio.egress.common.tcp_kafka_ssl_map=kafka-tls:kafka.mtls.url:12345:11345:443
Примечание
Должны быть добавлены параметры для включения SSL (см. раздел "SSL-конфигурация для Kafka LOGA для отправки трейсинга").
TLS-подключение в режиме MUTUAL к Журналирование (LOGA) для отправки трейсинга#
Примечание
Если производится интеграция с HashiCorp Vault (Secret Management System), то см. раздел "Настройки для LOGA для отправки трейсинга на Egress".
Необходимо выполнить следующие действия:
Добавить в ansible/_passwords.conf репозитория common параметр
dataspace.egress.tracing.keyStore.password = "changeit".Добавить в common репозиторий в installer/system/efs/config/parameters/ssl.conf следующие параметры:
dataspace.ssl.ose.istio.egress.tracing.keyStore.RootCertAlias=root dataspace.ssl.ose.istio.egress.tracing.keyStore.KeyStoreFromFile=/ansible/files/ssl/KeyStoreFromFile.jks dataspace.ssl.ose.istio.egress.tracing.keyStore.CertAlias=cert dataspace.ssl.ose.istio.egress.tracing.keyStore.PrivateKeyAlias=key dataspace.ssl.ose.istio.egress.tracing.keyStore.password=dataspace.egress.tracing.keyStore.passwordДля создания обвязки (GW,SE,VS,DR) для TLS-подключения в режиме MUTUAL к REST API серверу:
# Указываем порт Egress'a для создания EnvoyFilter для работы OTT dataspace.ose.istio.egress.ott.ef.external.ports=11345 # Флаг для включения генерации обвязки dataspace.ose.istio.egress.common.tcp_tracing_ssl_map.enabled=true # tracing_name_1:tracing_host_1:mesh_tracing_port_1:egress_tracing_port_1:external_tracing_port_1;... # egress_tracing_port_* не должны повторяться для корректной генерации обвязки dataspace.ose.istio.egress.common.tcp_tracing_ssl_map=tracing-tls:tracing.mtls.url:12345:11345:443Для создания обвязки (GW,SE,VS,DR) для TLS-подключения в режиме MUTUAL к серверу Kafka:
# Флаг для включения генерации обвязки dataspace.ose.istio.egress.common.tcp_kafka_tracing_mtls_map.enabled=false # kafka_name_1:kafka_host_1:kafka_host_ip_1:mesh_kafka_port_1:egress_kafka_port_1:external_kafka_port_1;... # egress_kafka_port_* не должны повторяться для корректной генерации обвязки dataspace.ose.istio.egress.common.tcp_kafka_tracing_mtls_map=tracing-mtls:tracing.mtls.url:10.11.12.13:12345:11345:443
Конфигурация обвязки Istio для компонента Аудит (AUDT)#
При использовании AUDT в репозитории ФП заполнить секцию с audit в conf/config/parameters/istio.all.conf:
Для создания обвязки (GW,SE,VS) для TCP-подключения к серверу Audit:
# Флаг для включения генерации обвязки dataspace.ose.istio.egress.common.tcp_audit_map.enabled=true # audit_name_1:audit_host_1:audit_host_ip_1:mesh_audit_port_1:egress_audit_port_1:external_audit_port_1;... # egress_audit_port_* не должны повторяться для корректной генерации обвязки dataspace.ose.istio.egress.common.tcp_audit_map=audit-tcp:audit.url:10.10.10.10:10345:9345:8654Для создания обвязки (GW,SE,VS,DR) для TLS-подключения в режиме MUTUAL к серверу Audit:
# Указываем порт Egress'a для создания EnvoyFilter для работы OTT dataspace.ose.istio.egress.ott.ef.external.ports=11345 # Флаг для включения генерации обвязки dataspace.ose.istio.egress.common.tcp_audit_ssl_map.enabled=true # audit_name_1:audit_host_1:mesh_audit_port_1:egress_audit_port_1:external_audit_port_1;... # egress_audit_port_* не должны повторяться для корректной генерации обвязки dataspace.ose.istio.egress.common.tcp_audit_ssl_map=audit-tls:audit.mtls.url:12345:11345:443Добавить в ansible/_passwords.conf репозитория common параметр
dataspace.egress.audit.keyStore.password = "changeit". Добавить в common репозиторий в installer/system/efs/config/parameters/ssl.conf следующие параметры:dataspace.ssl.ose.istio.egress.audit.keyStore.RootCertAlias=root dataspace.ssl.ose.istio.egress.audit.keyStore.KeyStoreFromFile=/ansible/files/ssl/KeyStoreFromFile.jks dataspace.ssl.ose.istio.egress.audit.keyStore.CertAlias=cert dataspace.ssl.ose.istio.egress.audit.keyStore.PrivateKeyAlias=key dataspace.ssl.ose.istio.egress.audit.keyStore.password=dataspace.egress.audit.keyStore.password
Конфигурация обвязки Istio для подключения к Rest Subscription#
Примечание
Настройки интеграции с HashiCorp Vault (Secret Management System) см. в разделе "Получение сертификатов Rest Subscription".
Конфигурация следующая:
Для создания обвязки (GW,SE,VS) для TCP-подключения к REST API серверу:
# Флаг для включения генерации обвязки dataspace.ose.istio.egress.common.tcp_subscription_map.enabled=true # subscription_name_1:subscription_host_1:subscription_host_ip_1:mesh_subscription_port_1:egress_subscription_port_1:external_subscription_port_1;... # egress_audit_port_* не должны повторяться для корректной генерации обвязки dataspace.ose.istio.egress.common.tcp_subscription_map=subscription-tcp:subscription.url:10.10.10.10:10345:9345:8654Для создания обвязки (GW,SE,VS,DR) для TLS-подключения в режиме MUTUAL к REST API серверу:
# Указываем порт Egress'a для создания EnvoyFilter для работы OTT (при необходимости) dataspace.ose.istio.egress.ott.ef.external.ports=11345 # Флаг для включения генерации обвязки dataspace.ose.istio.egress.common.tcp_subscription_mtls_map.enabled=true # audit_name_1:audit_host_1:mesh_audit_port_1:egress_audit_port_1:external_audit_port_1;... # egress_audit_port_* не должны повторяться для корректной генерации обвязки dataspace.ose.istio.egress.common.tcp_subscription_mtls_map=subscription-tls:subscription.mtls.url:12345:11345:443
Конфигурация для интеграции с HashiCorp Vault (Secret Management System)#
При интеграции сервисы получают секреты из системы создания, хранения и распространения секретов HashiCorp Vault. При этом дополнительно создается контейнер HashiCorp Vault agent sidecar.
Общие настройки sidecar#
При использовании HashiCorp Vault в репозитории ФП необходимо заполнить секцию с Vault в conf/config/parameters/vault.all.conf:
Параметры, обязательные для определения:
dataspace.vault.enabled=true # включение sidecar vault dataspace.vault.config.namespace=<namespace> #тенант dataspace.vault.config.role=ga-secman-dspc-developers #roleПараметры, которые можно переопределить:
#агент не дает стартовать приложениям пока sidecar не готов. при использовании istio значение false dataspace.vault.initFirst=false #агент получит все данные перед запуском приложений. при использовании istio значение false dataspace.vault.prePopulate=false #уровень детализации выведения лог-записей dataspace.vault.config.logLevel=info dataspace.vault.requests.cpu=100m dataspace.vault.requests.memory=128Mi dataspace.vault.limits.cpu=200m dataspace.vault.limits.memory=128Mi
По умолчанию dataspace.vault.enabled=false.
Настройка логирования sidecar HashiCorp Vault#
При использовании HashiCorp Vault в репозитории ФП необходимо заполнить секцию с Vault в conf/config/parameters/vault.all.conf:
dataspace.vault.logger.enabled=false
dataspace.vault.logger.format=json
dataspace.vault.logger.path=/tmp/log
dataspace.vault.logger.file=vault.log
dataspace.vault.logger.rotate=30
dataspace.vault.logger.maxSize=10MB
dataspace.vault.logger.logLevel=info
По умолчанию логирование в sidecar отключено.
Настройка параметров подключения к БД#
Внимание!
В параметре
global.dataspace.vault_pathsв modelName.all.conf должны фигурировать пути:
/secrets/properties/maindb.properties, /secrets/properties/standin.properties
При использовании HashiCorp Vault в репозитории ФП необходимо заполнить секцию с Vault в conf/config/parameters/vault.all.conf:
dataspace.vault.secrets.db.main.enabled=true
dataspace.vault.secrets.db.main.injectPath='true'
#указывается путь к K/V Secrets Engine или Database Secrets Engine
dataspace.vault.secrets.db.main.template.path=/database/pg/static-creds/role-srv-0-5.pf.dev.sbt-emvl_main-emvl_main
dataspace.vault.secrets.db.main.template.command=false
dataspace.vault.secrets.db.main.template.params=
Для main db (будет сформирован maindb.properties):
spring.datasource.username=<username>
spring.datasource.password=<password>
Возможны два варианта: использование Database Secrets Engine и K/V Secrets Engine.
В случае использования K/V Secrets Engine в параметрах:
dataspace.vault.secrets.db.main.injectPath='true'
dataspace.vault.secrets.db.main.template.path=<secret_path>
В HashiCorp Vault необходимо создать секрет с ключами username и password.
После получения секрета из HashiCorp Vault данные преобразуются следующим шаблоном:
vault.hashicorp.com/agent-inject-template-maindb.properties: |
{{- with secret "{{ dataspace.vault.secrets.db.main.template.path }}"{{ dataspace.vault.secrets.db.main.template.params }}" }}
spring.datasource.username={{ .Data.username }}
spring.datasource.password={{ .Data.password }}
{{end}}
Для получения секрета для StandIn db из HashiCorp Vault в репозитории ФП необходимо заполнить секцию с Vault в conf/config/parameters/vault.all.conf:
dataspace.vault.secrets.db.standin.enabled=false
dataspace.vault.secrets.db.standin.injectPath='true'
dataspace.vault.secrets.db.standin.template.path=A/IFT/PF/DSPC/KV/maindb/properties
dataspace.vault.secrets.db.standin.template.command=false
dataspace.vault.secrets.db.standin.template.params=
Для StandIn db (будет сформирован standin.properties):
standin.datasource.username=<username>
standin.datasource.password=<password>
Возможны два варианта: использование Database Secrets Engine и K/V Secrets Engine.
В случае использования K/V Secrets Engine в параметрах:
dataspace.vault.secrets.db.standin.injectPath='true'
dataspace.vault.secrets.db.standin.template.path=<secret_path>
В HashiCorp Vault необходимо создать секрет с ключами username и password.
После получения секрета из HashiCorp Vault данные преобразуются следующим шаблоном:
vault.hashicorp.com/agent-inject-template-standin.properties: |
{{- with secret "{{ dataspace.vault.secrets.db.standin.template.path }}"{{ dataspace.vault.secrets.db.standin.template.params }}" }}
standin.datasource.username={{ .Data.username }}
standin.datasource.password={{ .Data.password }}
{{end}}
Настройка параметров для получения сертификатов#
Раздел содержит описание параметров для получения сертификатов, используемых для подключения к сервисам интеграции с использованием SSL/TLS в режиме PASSTHROUGH.
Получение сертификатов DB#
Внимание!
В параметре
global.dataspace.vault_pathsв modelName.all.conf должны фигурировать пути:
/secrets/properties/passphrase-db.properties, /secrets/properties/truststore-passphrase-db.properties
Для keystore db:
dataspace.vault.secrets.db.keystore.enabled=true
dataspace.vault.secrets.db.keystore.injectPath='true'
dataspace.vault.secrets.db.keystore.template.path=PKI/fetch/role-ga-secman-dspc-developers
dataspace.vault.secrets.db.keystore.template.params=common_name:db.stands-vdc01.solution.sbt;format:jks;passphrase:qwe123;ttl=5m
dataspace.vault.secrets.db.keystore.template.command=false
dataspace.vault.secrets.db.keystore.passhprase.enabled=true
Для truststore db:
dataspace.vault.secrets.db.truststore.enabled=true
dataspace.vault.secrets.db.truststore.injectPath=true
dataspace.vault.secrets.db.truststore.template.path=PKI/fetch/role-ga-secman-dspc-developers
dataspace.vault.secrets.db.truststore.template.params=common_name:db.stands-vdc01.solution.sbt;format:jks;passphrase:qwe123;ttl=5m
dataspace.vault.secrets.db.truststore.template.command=false
dataspace.vault.secrets.db.truststore.passhprase.enabled=true
Внимание!
В случае использования K/V по указанному пути в
*.template.pathнеобходимо создать секрет с полем certificate, куда будет передано хранилище jks в формате base64.Заполнение
*.template.paramsпроизводится в соответствии с публичной документацией по работе с сертификатами HashiCorp Vault.Если параметр
*.passhprase.enabled=true, будет добавлен секрет с паролем от хранилища сертификатов, возвращаемый HashiCorp Vault.
Примечание
Для работы с механизмом ротации секретов (Hot Reload) необходимо ознакомиться с разделом Datasource Applier.
Параметры из раздела заполняются в репозитории для каждого конфигурационного файла (
dataspace-*.conf) сервиса DataSpace по маске*.cm.properties.<ПАРАМЕТР_ИЗ_ИНСТРУКЦИИ>.
Получение сертификатов Kafka ПЖ#
Внимание!
В параметре
global.dataspace.vault_pathsв modelName.all.conf должны фигурировать пути:
/secrets/properties/keystore-passphrase-aj.properties, /secrets/properties/truststore-passphrase-aj.properties, /secrets/properties/key-passphrase-aj.properties
Для keystore и truststore Kafka ПЖ:
dataspace.vault.secrets.aj.keystore.enabled=false
dataspace.vault.secrets.aj.keystore.injectPath='true'
dataspace.vault.secrets.aj.keystore.template.path=PKI/fetch/role-ga-secman-dspc-developers
dataspace.vault.secrets.aj.keystore.template.params=common_name:aj.stands-vdc01.solution.sbt;format:jks;passphrase:qwe123
dataspace.vault.secrets.aj.keystore.template.command=false
dataspace.vault.secrets.aj.keystore.passhprase.enabled=true
dataspace.vault.secrets.aj.truststore.enabled=false
dataspace.vault.secrets.aj.truststore.injectPath='true'
dataspace.vault.secrets.aj.truststore.template.path=PKI/fetch/role-ga-secman-dspc-developers
dataspace.vault.secrets.aj.truststore.template.params=common_name:aj-trust.stands-vdc01.solution.sbt;format:jks;passphrase:qwe123
dataspace.vault.secrets.aj.truststore.template.command=false
dataspace.vault.secrets.aj.truststore.passhprase.enabled=true
Внимание!
В случае использования K/V по указанным путям в
*.template.pathнеобходимо создать секрет с полем certificate, куда будет передано хранилище jks в формате base64.Заполнение
*.template.paramsпроизводится в соответствии с публичной документацией по работе с сертификатами HashiCorp Vault.В случае наличия параметра
*.passhprase.enabled=trueбудет добавлен секрет с паролем от хранилища сертификатов, возвращаемый HashiCorp Vault.При необходимости использования отдельного приватного ключа для keystore, необходимо изменить на "true" значение параметра
dataspace.vault.secrets.aj.key.passhprase.enabled=true(по умолчанию — "false").Также необходимо заполнить параметры в соответствии с публичной документацией по работе с сертификатами HashiCorp Vault:
dataspace.vault.secrets.aj.key.injectPath=true dataspace.vault.secrets.aj.key.template.path=PKI/fetch/role-ga-secman-dspc-developers dataspace.vault.secrets.aj.key.template.params=common_name:aj-trust.stands-vdc01.solution.sbt;format:jks;passphrase:qwe123 dataspace.vault.secrets.aj.key.template.command=false
Примечание
Для работы с механизмом ротации секретов (Hot Reload) необходимо ознакомиться с разделом Kafka Application Journal Applier.
Параметры из раздела заполняются в репозитории для каждого конфигурационного файла (
dataspace-*.conf) сервиса DataSpace по маске*.cm.properties.<ПАРАМЕТР_ИЗ_ИНСТРУКЦИИ>.
Получение сертификатов Kafka компонента Архивирование (ARCH)#
Внимание!
В параметре global.dataspace.vault_paths в
modelName.all.confдолжны фигурировать пути:
/secrets/properties/passphrase-tsa.properties, /secrets/properties/key-passphrase-tsa.properties, /secrets/properties/truststore-passphrase-tsa.properties
Для keystore и truststore Kafka ARCH:
dataspace.vault.secrets.tsa.keystore.enabled=false
dataspace.vault.secrets.tsa.keystore.injectPath='true'
dataspace.vault.secrets.tsa.keystore.template.path=PKI/fetch/role-ga-secman-dspc-developers
dataspace.vault.secrets.tsa.keystore.template.params=common_name:tsa.stands-vdc01.solution.sbt;format:jks;passphrase:qwe123
dataspace.vault.secrets.tsa.keystore.template.command=false
dataspace.vault.secrets.tsa.keystore.passhprase.enabled=true
dataspace.vault.secrets.tsa.truststore.enabled=false
dataspace.vault.secrets.tsa.truststore.injectPath='true'
dataspace.vault.secrets.tsa.truststore.template.path=PKI/fetch/role-ga-secman-dspc-developers
dataspace.vault.secrets.tsa.truststore.template.params=common_name:tsa-trust.stands-vdc01.solution.sbt;format:jks;passphrase:qwe123
dataspace.vault.secrets.tsa.truststore.template.command=false
dataspace.vault.secrets.tsa.truststore.passhprase.enabled=true
Внимание!
В случае использования K/V по указанным путям в
*.template.pathнеобходимо создать секрет с полем certificate, куда будет передано хранилище jks в формате base64.Заполнение
*.template.paramsпроизводится в соответствии с публичной документацией по работе с сертификатами HashiCorp Vault.Если
dataspace.vault.secrets.tsa.keystore.passhprase.enabled=true, будет добавлен секрет с паролем от хранилища сертификатов, возвращаемый HashiCorp Vault.При необходимости использования отдельного приватного ключа для keystore, необходимо поменять на "true" значение параметра
dataspace.vault.secrets.tsa.key.passhprase.enabled=true(по умолчанию — "false").Также необходимо заполнить параметры в соответствии с публичной документацией по работе с сертификатами HashiCorp Vault:
dataspace.vault.secrets.tsa.key.injectPath=true dataspace.vault.secrets.tsa.key.template.path=PKI/fetch/role-ga-secman-dspc-developers dataspace.vault.secrets.tsa.key.template.params=common_name:aj-trust.stands-vdc01.solution.sbt;format:jks;passphrase:qwe123 dataspace.vault.secrets.tsa.key.template.command=false
Примечание
Для работы с механизмом ротации секретов (Hot Reload) необходимо ознакомиться с разделом Kafka Archiving Applier.
Параметры из раздела заполняются в репозитории для каждого конфигурационного файла (
dataspace-*.conf) сервиса DataSpace по маске*.cm.properties.<ПАРАМЕТР_ИЗ_ИНСТРУКЦИИ>.
Получение сертификатов Kafka источника событий слияния/разъединения клиентов#
Внимание!
В параметре global.dataspace.vault_paths в
modelName.all.confдолжны фигурировать пути:
/secrets/properties/passphrase-epk.properties, /secrets/properties/truststore-passphrase-epk.properties
Для keystore Kafka ЕПК:
dataspace.vault.secrets.epk.keystore.enabled=false
dataspace.vault.secrets.epk.keystore.injectPath=true
dataspace.vault.secrets.epk.keystore.template.path=PKI/fetch/role-ga-secman-dspc-developers
dataspace.vault.secrets.epk.keystore.template.params=common_name:epk.stands-vdc01.solution.sbt;format:jks;passphrase:qwe123
dataspace.vault.secrets.epk.keystore.template.command=false
dataspace.vault.secrets.epk.keystore.passhprase.enabled=true
Для truststore Kafka ЕПК:
dataspace.vault.secrets.epk.truststore.enabled=true
dataspace.vault.secrets.epk.truststore.injectPath=true
dataspace.vault.secrets.epk.truststore.template.path=PKI/fetch/role-ga-secman-dspc-developers
dataspace.vault.secrets.epk.truststore.template.params=common_name:epk.stands-vdc01.solution.sbt;format:jks;passphrase:qwe123
dataspace.vault.secrets.epk.truststore.template.command=false
dataspace.vault.secrets.epk.truststore.passhprase.enabled=true
Внимание!
В случае использования K/V по указанному пути в
*.template.pathнеобходимо создать секрет с полем certificate, куда будет передано хранилище jks в формате base64.Заполнение
*.template.paramsпроизводится в соответствии с публичной документацией по работе с сертификатами HashiCorp Vault.Если
*.passhprase.enabled=true, то будет добавлен секрет с паролем от хранилища сертификатов, возвращаемый HashiCorp Vault.
Примечание
Для работы с механизмом ротации секретов (Hot Reload) необходимо ознакомиться с разделом Kafka ЕПК Applier сервиса дедубликации.
Параметры из раздела заполняются в репозитории для каждого конфигурационного файла (
dataspace-*.conf) сервиса DataSpace по маске*.cm.properties.<ПАРАМЕТР_ИЗ_ИНСТРУКЦИИ>.
Получение сертификатов Kafka компонента Журналирование (LOGA)#
Для сертификатов Kafka Logger:
dataspace.vault.secrets.logger.certs.enabled=true
dataspace.vault.secrets.logger.certs.injectPath=true
dataspace.vault.secrets.logger.certs.template.path=PKI/fetch/role-ga-secman-dspc-developers
dataspace.vault.secrets.logger.certs.template.params=common_name:logger.stands-vdc01.solution.sbt;format:pem;ttl:31536000
dataspace.vault.secrets.logger.certs.template.command=false
Внимание!
В случае использования K/V по указанному пути в
dataspace.vault.secrets.logger.certs.template.pathнеобходимо создать секрет с полями:
certificate — сертификат;
private_key — приватный ключ;
ca_chain — цепочка сертификатов.
Для корректной работы базовых шаблонов рекомендуется создавать секреты в формате JSON.
Заполнение
dataspace.vault.secrets.logger.certs.template.paramsпроизводится в соответствии с публичной документацией по работе с сертификатами HashiCorp Vault.
Получение сертификатов Kafka компонента Журналирование (LOGA) для отправки трейсинга#
Для сертификатов Kafka Tracing:
dataspace.vault.secrets.logger.tracing.certs.enabled=true
dataspace.vault.secrets.logger.tracing.certs.injectPath=true
dataspace.vault.secrets.logger.tracing.certs.template.path=PKI/fetch/role-ga-secman-dspc-developers
dataspace.vault.secrets.logger.tracing.certs.template.params=common_name:tracing.stands-vdc01.solution.sbt;format:pem;ttl:31536000
dataspace.vault.secrets.logger.tracing.certs.template.command=false
Внимание!
В случае использования K/V по указанному пути в
dataspace.vault.secrets.logger.tracing.certs.template.pathнеобходимо создать секрет с полями:
certificate — сертификат;
private_key — приватный ключ;
ca_chain — цепочка сертификатов.
Для корректной работы базовых шаблонов рекомендуется создавать секреты в формате JSON.
Заполнение
dataspace.vault.secrets.logger.tracing.certs.template.paramsпроизводится в соответствии с публичной документацией по работе с сертификатами HashiCorp Vault.
Получение сертификатов Kafka Subscription#
Внимание!
В параметре global.dataspace.vault_paths в
modelName.all.confдолжен фигурировать путь:/secrets/properties/subscription.properties
Все указанные ниже параметры заполняются в файле conf/config/parameters/vault.all.conf в репозитории ФП.
dataspace.vault.secrets.subscription.enabled=true
dataspace.vault.secrets.subscription.properties.injectPath=true
dataspace.vault.secrets.subscription.properties.template.path=A/EXAMPLE/KV/subscription
dataspace.vault.secrets.subscription.properties.template.command=false
dataspace.vault.secrets.subscription.properties.template.params=
dataspace.vault.secrets.subscription.properties.fetch.enabled=false
Примечание
Информация по параметрам, необходимым для подключения к Kafka Subscription, отражена в разделе "Конфигурация" документа "Руководство по работе с сервисом DataSpace Subscription".
Внимание!
В параметрах
*.ssl-keystore-locationи*.ssl-truststore-locationв качестве пути необходимо указывать /secrets/keystore/<ИМЯ_ХРАНИЛИЩА>.jks. Имена хранилищ не должны повторяться.Задать параметры SSL-подключения, кроме параметров паролей для каждой Kafka, можно в пользовательском ConfigMap (см. раздел "Добавление пользовательских параметров в дистрибутив") или же в Hashicorp Vault (примеры в пунктах ниже). Параметры с паролями и пароли будут сгенерированы автоматически в случае fetch.
Параметры:
dataspace.vault.secrets.subscription.properties.fetch.enabled=falseВ Hashicorp Vault необходимо создать секрет в формате JSON по пути, указанном в параметре
dataspace.vault.secrets.subscription.properties.template.path. При этом ключ должен бытьsubscription.properties. Передаем в него параметры, необходимые для SSL подключения для всех серверов Kafka, куда будет осуществляться отправка подписок.Пример:
dataspace.subscription.publisher.kafka.config.KAFKA_SUB1.security-protocol=SSL dataspace.subscription.publisher.kafka.config.KAFKA_SUB1.ssl-keystore-location=/secrets/keystore/keystore-sub1.jks dataspace.subscription.publisher.kafka.config.KAFKA_SUB1.ssl-truststore-location=/secrets/keystore/truststore-sub1.jks dataspace.subscription.publisher.kafka.config.KAFKA_SUB1.ssl-endpoint-identification-algorithm= dataspace.subscription.publisher.kafka.config.KAFKA_SUB1.ssl-keystore-password=PASSWORD dataspace.subscription.publisher.kafka.config.KAFKA_SUB1.ssl-key-password=PASSWORD dataspace.subscription.publisher.kafka.config.KAFKA_SUB1.ssl-truststore-password=PASSWORD dataspace.subscription.publisher.kafka.config.KAFKA_SUB2.security-protocol=SSL dataspace.subscription.publisher.kafka.config.KAFKA_SUB2.ssl-keystore-location=/secrets/keystore/keystore-sub2.jks dataspace.subscription.publisher.kafka.config.KAFKA_SUB2.ssl-truststore-location=/secrets/keystore/truststore-sub2.jks dataspace.subscription.publisher.kafka.config.KAFKA_SUB2.ssl-endpoint-identification-algorithm= dataspace.subscription.publisher.kafka.config.KAFKA_SUB2.ssl-keystore-password=PASSWORD dataspace.subscription.publisher.kafka.config.KAFKA_SUB2.ssl-key-password=PASSWORD dataspace.subscription.publisher.kafka.config.KAFKA_SUB2.ssl-truststore-password=PASSWORDdataspace.vault.secrets.subscription.properties.fetch.enabled=truedataspace.subscription.publisher.kafka.config.KAFKA_SUB1.security-protocol=SSL dataspace.subscription.publisher.kafka.config.KAFKA_SUB1.ssl-keystore-location=/secrets/keystore/keystore-sub1.jks dataspace.subscription.publisher.kafka.config.KAFKA_SUB1.ssl-truststore-location=/secrets/keystore/truststore-sub1.jks dataspace.subscription.publisher.kafka.config.KAFKA_SUB1.ssl-endpoint-identification-algorithm= #... dataspace.subscription.publisher.kafka.config.KAFKA_SUB2.security-protocol=SSL dataspace.subscription.publisher.kafka.config.KAFKA_SUB2.ssl-keystore-location=/secrets/keystore/keystore-sub2.jks dataspace.subscription.publisher.kafka.config.KAFKA_SUB2.ssl-truststore-location=/secrets/keystore/truststore-sub2.jks dataspace.subscription.publisher.kafka.config.KAFKA_SUB2.ssl-endpoint-identification-algorithm=
Для keystore и truststore Kafka Subscription:
# path to keystore and truststore in pod - /secrets/keystore, so use different names for them
#keystore_name,kafka_alias,keystore_template_path,keystore_template_params|keystore_name,kafka_alias,keystore_template_path,|...
# if 1 - without | at the end
# for k/v - keystore_template_params is empty
# for fetch - keystore_template_params=common_name:kafka.stand.address;format:jks;ttl:31536000
dataspace.vault.secrets.subscription.keystore.map.enabled=true
dataspace.vault.secrets.subscription.keystore.map=keystore-sub1,KAFKA_SUB1,A/EXAMPLE/KV/subscription/keystore1,|keystore-sub2,KAFKA_SUB2,A/EXAMPLE/KV/subscription/keystore2,
dataspace.vault.secrets.subscription.keystore.injectPath=true
#keystore_name,kafka_alias,keystore_template_path,keystore_template_params|keystore_name,kafka_alias,keystore_template_path,|...
# if 1 - without | at the end
# for k/v - keystore_template_params is empty
# for fetch - keystore_template_params=common_name:kafka.stand.address;format:jks;ttl:31536000
dataspace.vault.secrets.subscription.truststore.map.enabled=true
dataspace.vault.secrets.subscription.truststore.map=truststore-sub1,KAFKA_SUB1,A/EXAMPLE/KV/subscription/truststore1,|truststore-sub2,KAFKA_SUB2,A/EXAMPLE/KV/subscription/truststore2,
dataspace.vault.secrets.subscription.truststore.injectPath=true
Внимание!
Для получения требуемого количества хранилищ используются параметры
dataspace.vault.secrets.subscription.keystore.mapиdataspace.vault.secrets.subscription.truststore.map.В случае использования K/V по каждому указанному пути в
keystore_template_pathнеобходимо создать секрет с полем certificate, куда будет передано хранилище jks в формате base64.Заполнение
keystore_template_paramsпроизводится в соответствии с публичной документацией по работе с сертификатами HashiCorp Vault.
Примечание
Для работы с механизмом ротации секретов (Hot Reload) необходимо ознакомиться с разделом Kafka Applier в сервисе DataSpace Subscription.
Параметры из раздела заполняются в репозитории для каждого конфигурационного файла (
dataspace-*.conf) сервиса DataSpace по маске*.cm.properties.<ПАРАМЕТР_ИЗ_ИНСТРУКЦИИ>.
Получение сертификатов Rest Subscription#
Все указанные ниже параметры заполняются в файле conf/config/parameters/vault.all.conf в репозитории ФП:
# path to subscription certs in pod - /secrets/ingress/subscription, so use different names for them
#subcription_alias,subscription_template_path,subscription_template_params|subcription_alias,subscription_template_path,|...
# if 1 - without | at the end
# for k/v - subscription_template_params is empty
# for fetch - subscription_template_params=common_name:subscription.mtls.rest.address;format:pem;ttl:31536000
dataspace.vault.secrets.istio.egress.subscription.rest.map.enabled=false
dataspace.vault.secrets.istio.egress.subscription.rest.map.injectPath=true
dataspace.vault.secrets.istio.egress.subscription.rest.map=subscriptionrest,A/EXAMPLE/KV/subscription/rest,
Примечание
Параметры, необходимые для подключения к Rest Subscription, описаны в разделе "Конфигурация" документа "Руководство по работе с сервисом DataSpace Subscription").
Внимание!
В случае использования K/V по указанному пути в
subscription_template_pathнеобходимо создать секрет с полями:
certificate — сертификат;
private_key — приватный ключ;
ca_chain — цепочка сертификатов.
Для корректной работы базовых шаблонов рекомендуется создавать секреты в формате JSON.
Заполнение
subscription_template_paramsпроизводится в соответствии с публичной документацией по работе с сертификатами HashiCorp Vault.
Автоматический перезапуск развертывания после ротации секретов#
Для каждого секрета в vault.all.conf есть параметр вида dataspace.vault.secrets.*.template.command=false. При значении "true" будет добавлена команда, выполняемая sidecar Vault после ротации секрета.
Каждая команда определена в <service_name>-<model_name>.conf. Пример команды:
dataspace.service.sidecar.vault.maindbProperties.command="sh -c 'if [ -f /vault/logs/maindb.properties.check ]; then oc rollout restart deployment {{ lookup('custom_vars', 'dataspace.service.dc.name') }}; else touch /vault/logs/maindb.properties.check; fi'"
Конфигурирование граничных прокси (Ingress и Egress Gateways) для взаимодействия с Hashicorp Vault#
Для перенаправления трафика к серверам Hashicorp Vault через Egress в репозитории ФП заполнить секцию с secman в conf/config/parameters/istio.all.conf.
Для создания обвязки (GW,SE,VS) для TLS-подключения к серверу Hashicorp Vault:
dataspace.ose.istio.egress.common.tcp_secman_ssl_map.enabled=true
# secman_name_1:secman_host_1:mesh_secman_port_1:egress_secman_port_1:external_secman_port_1;...
# egress_secman_port_* не должны повторяться для корректной генерации обвязки
dataspace.ose.istio.egress.common.tcp_secman_ssl_map=secman:<адрес сервера hashicorp vault>:8443:10443:8443
Для формирования конфигураций для работы граничных прокси с HashiCorp Vault в репозитории ФП заполнить секцию с Vault в conf/config/parameters/vault.all.conf.
Обязательно должны быть сконфигурированы параметры для создания vault agent sidecar контейнера следующим образом:
dataspace.vault.istio.initFirst=true
dataspace.vault.istio.injectContainers=istio-proxy,ott-sidecar
dataspace.vault.istio.prePopulate=true
Примечание
Это нужно для корректного монтирования путей со сгенерированными сертификатами в контейнер istio-proxy.
Параметры Ingress#
По методу fetch или через K/V Secrets Engine формируются/добавляются серверные сертификаты.
dataspace.vault.secrets.istio.ingress.injectPath=true
dataspace.vault.secrets.istio.ingress.template.path=PKI/fetch/role-ga-secman-dspc-developers
dataspace.vault.secrets.istio.ingress.template.params=common_name:ingress-certs.solution.sbt;format:pem
Примечание
Для K/V имена ключей должны быть certificate,private_key и ca_chain.
Для корректной работы базовых шаблонов рекомендуется создавать секреты в формате JSON:
{ "ca_chain": [ "-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----\n" ], "certificate": "-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----\n", "private_key": "-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----\n" }
Параметры Egress#
По методу fetch или через K/V Secrets Engine формируются/добавляются клиентские сертификаты.
dataspace.vault.secrets.istio.egress.injectPath=true
dataspace.vault.secrets.istio.egress.template.path=PKI/fetch/role-ga-secman-dspc-developers
dataspace.vault.secrets.istio.egress.template.params=common_name:egress-certs.solution.sbt;format:pem
Примечание
Для K/V имена ключей должны быть certificate,private_key и ca_chain.
Для корректной работы базовых шаблонов рекомендуется создавать секреты в формате JSON:
{ "ca_chain": [ "-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----\n" ], "certificate": "-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----\n", "private_key": "-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----\n" }
Настройки для CCIX на Egress#
По методу fetch или через K/V Secrets Engine формируются/добавляются клиентские сертификаты для подключения к сервису CCIX.
dataspace.vault.secrets.istio.egress.cci.enabled={{ lookup('custom_vars','dataspace.ose.istio.egress.common.tcp_cci_ssl_map.enabled') }}
dataspace.vault.secrets.istio.egress.cci.injectPath=true
dataspace.vault.secrets.istio.egress.cci.template.path=PKI/fetch/role-ga-secman-dspc-developers
dataspace.vault.secrets.istio.egress.cci.template.params=common_name:cci.stands-vdc01.solution.sbt;format:pem
Примечание
Для K/V имена ключей должны быть certificate,private_key и ca_chain.
Для корректной работы базовых шаблонов рекомендуется создавать секреты в формате JSON.
Настройки для компонента Журналирование (LOGA) на Egress#
По методу fetch или через K/V Secrets Engine формируются/добавляются клиентские сертификаты для подключения к сервису журналирования.
dataspace.vault.secrets.istio.egress.logger.enabled={{ lookup('custom_vars','dataspace.ose.istio.egress.common.tcp_logger_ssl_map.enabled') or lookup('custom_vars','dataspace.ose.istio.egress.common.tcp_kafka_logger_mtls_map.enabled') }}
dataspace.vault.secrets.istio.egress.logger.injectPath=true
dataspace.vault.secrets.istio.egress.logger.template.path=PKI/fetch/role-ga-secman-dspc-developers
dataspace.vault.secrets.istio.egress.logger.template.params=common_name:logger.stands-vdc01.solution.sbt;format:pem
Примечание
Для K/V имена ключей должны быть certificate,private_key и ca_chain.
Для корректной работы базовых шаблонов рекомендуется создавать секреты в формате JSON.
Настройки для компонента Журналирование (LOGA) для отправки трейсинга на Egress#
По методу fetch или через K/V Secrets Engine формируются/добавляются клиентские сертификаты для подключения к сервису Tracing:
dataspace.vault.secrets.istio.egress.tracing.enabled={{ lookup('custom_vars','dataspace.ose.istio.egress.common.tcp_kafka_tracing_mtls_map.enabled') }}
dataspace.vault.secrets.istio.egress.tracing.injectPath=true
dataspace.vault.secrets.istio.egress.tracing.template.path=PKI/fetch/role-ga-secman-dspc-developers
dataspace.vault.secrets.istio.egress.tracing.template.params=common_name:tracing.stands-vdc01.solution.sbt;format:pem
Примечание
Для K/V имена ключей должны быть certificate,private_key и ca_chain.
Для корректной работы базовых шаблонов рекомендуется создавать секреты в формате JSON.
Настройки для компонента Прикладной журнал (APLJ) на Egress#
По методу fetch или через K/V Secrets Engine формируются/добавляются клиентские сертификаты для подключения к сервису Kafka ПЖ:
dataspace.vault.secrets.istio.egress.aj.enabled={{ lookup('custom_vars','dataspace.ose.istio.egress.common.tcp_kafka_aj_mtls_map.enabled') }}
dataspace.vault.secrets.istio.egress.aj.injectPath=true
dataspace.vault.secrets.istio.egress.aj.template.path=PKI/fetch/role-ga-secman-dspc-developers
dataspace.vault.secrets.istio.egress.aj.template.params=common_name:kafka-aj.stands-vdc01.solution.sbt;format:pem
Примечание
Для K/V имена ключей должны быть certificate,private_key и ca_chain.
Для корректной работы базовых шаблонов рекомендуется создавать секреты в формате JSON.
Настройки для компонента Архивирование (ARCH) на Egress#
По методу fetch или через K/V Secrets Engine формируются/добавляются клиентские сертификаты для подключения к LOGA:
dataspace.vault.secrets.istio.egress.tsa.enabled={{ lookup('custom_vars','dataspace.ose.istio.egress.common.tcp_kafka_tsa_mtls_map.enabled') }}
dataspace.vault.secrets.istio.egress.tsa.injectPath=true
dataspace.vault.secrets.istio.egress.tsa.template.path=PKI/fetch/role-ga-secman-dspc-developers
dataspace.vault.secrets.istio.egress.tsa.template.params=common_name:kafka-tsa.stands-vdc01.solution.sbt;format:pem
Примечание
Для K/V имена ключей должны быть certificate,private_key и ca_chain.
Для корректной работы базовых шаблонов рекомендуется создавать секреты в формате JSON.
Настройки для ЕПК на Egress#
По методу fetch или через K/V Secrets Engine формируются/добавляются клиентские сертификаты для подключения к LOGA:
dataspace.vault.secrets.istio.egress.epk.enabled={{ lookup('custom_vars','dataspace.ose.istio.egress.common.tcp_kafka_epk_mtls_map.enabled') }}
dataspace.vault.secrets.istio.egress.epk.injectPath=true
dataspace.vault.secrets.istio.egress.epk.template.path=PKI/fetch/role-ga-secman-dspc-developers
dataspace.vault.secrets.istio.egress.epk.template.params=common_name:kafka-epk.stands-vdc01.solution.sbt;format:pem
Примечание
Для K/V имена ключей должны быть certificate,private_key и ca_chain.
Для корректной работы базовых шаблонов рекомендуется создавать секреты в формате JSON.
Настройки для компонента Аудит (AUDT) на Egress#
По методу fetch или через K/V Secrets Engine формируются/добавляются клиентские сертификаты для подключения к компоненту AUDT:
dataspace.vault.secrets.istio.egress.audit.enabled={{ lookup('custom_vars','dataspace.ose.istio.egress.common.tcp_audit_ssl_map.enabled') }}
dataspace.vault.secrets.istio.egress.audit.injectPath=true
dataspace.vault.secrets.istio.egress.audit.template.path=PKI/fetch/role-ga-secman-dspc-developers
dataspace.vault.secrets.istio.egress.audit.template.params=common_name:audit.stands-vdc01.solution.sbt;format:pem
Примечание
Для K/V имена ключей должны быть certificate,private_key и ca_chain.
Для корректной работы базовых шаблонов рекомендуется создавать секреты в формате JSON.
Конфигурирование компонента One-Time Password (OTTS) на граничных прокси#
В K/V Secrets Engine необходимо разместить:
Хранилища сертификатов: keystore с сертификатом и секретным ключом приложения, truststore с сертификатом сервиса OTTS в формате PCKS12, зашифрованном в base64.
Внимание!
Имена ключей должны быть keystore.p12 и truststore.p12 соответственно.
Пароли к хранилищам сертификатов (клиентскому и сервиса OTT) и приватному ключу.
Внимание!
Имена должны быть OTT_CERTSTORE_PWD, OTT_TRUST_STORE_PWD, OTT_CERTSTORE_PRIVATE_KEY_PWD соответственно.
Настройки для Ingress + OTT:
dataspace.vault.secrets.istio.ingress.ott.enabled={{ lookup('custom_vars', 'dataspace.ose.istio.ingress.common.ott.enabled') }}
dataspace.vault.secrets.istio.ingress.ott.injectPath='true'
dataspace.vault.secrets.istio.ingress.ott.kv.enabled=true
# Указываем путь к K/V Secrets Engine
dataspace.vault.secrets.istio.ingress.ott.template.kv.path=A/IFT/PF/DSPC/KV/ott/store
Настройки для Egress + OTT:
dataspace.vault.secrets.istio.egress.ott.enabled={{ lookup('custom_vars', 'dataspace.ose.istio.egress.common.ott.enabled') }}
dataspace.vault.secrets.istio.egress.ott.injectPath='true'
dataspace.vault.secrets.istio.egress.ott.kv.enabled=true
# Указываем путь к K/V Secrets Engine
dataspace.vault.secrets.istio.egress.ott.template.kv.path=A/IFT/PF/DSPC/KV/ott/store
Для генерации сертификатов методом fetch необходимо установить следующие параметры:
Настройки для Ingress + OTT:
dataspace.vault.secrets.istio.ingress.ott.kv.enabled=false dataspace.vault.secrets.istio.ingress.ott.template.path= dataspace.vault.secrets.istio.ingress.ott.template.params= dataspace.vault.secrets.istio.ingress.ott.template.ca_crt.path= dataspace.vault.secrets.istio.ingress.ott.template.ca_crt.params=Внимание!
Common name сертификата, должен совпадать со значением параметра
dataspace.ose.istio.ott.module.id.Настройки для Egress + OTT:
dataspace.vault.secrets.istio.egress.ott.kv.enabled=false dataspace.vault.secrets.istio.egress.ott.template.path= dataspace.vault.secrets.istio.egress.ott.template.params= dataspace.vault.secrets.istio.egress.ott.template.ca_crt.path= dataspace.vault.secrets.istio.egress.ott.template.ca_crt.params=Внимание!
Common name сертификата, должен совпадать со значением параметра
dataspace.ose.istio.ott.module.id.
Варианты запуска сервисов DataSpace#
Запуск DataSpace Core в режиме мультипоиска без подключения к БД#
Для активации режима необходимо в файле dataspace-core-<model_name>.conf (в cd-репозитории) поменять с "true" на "false" значения следующих параметров:
core.cm.properties.dataspace.packet.enable=false
core.cm.properties.dataspace.dictionary.enable=false
core.cm.properties.dataspace.search.enable=false
Также необходимо задать профиль multisearch-only-profile в параметре:
dataspace.deployment.env.active_profile=multisearch-only-profile
Можно воспользоваться инструкциями, приведенными в разделе "Запуск DataSpace Core в режиме read-only" с заменой профиля на multisearch-only-profile.
Запуск DataSpace Core в режиме read-only#
Для активации режима необходимо задать профиль read-only-profile.
В этом режиме разрешается работа API, для которых достаточно прав на чтение БД:
search;
history;
graphql query и subscription.
Развертывание отдельного сервиса dataspace-search средствами автоматизированной установки#
Необходимо ознакомиться с описанием автоматизированной установки в разделе "Установка с помощью Deploy tools (CDJE)".
Выполнить следующие действия:
Задать в файле dataspace-core-.conf* в репозитории системы перед развертыванием дистрибутива параметр
dataspace.deployment.env.active_profile=read-only-profileУказать в файле dataspace-core-.conf* отличное от сервиса dataspace-core имя в параметре
dataspace.service.name, например,dataspace-search-deposit:dataspace.service.name=dataspace-search-{{ lookup('vars', 'dataspace.model.name') | string | replace('_','-') }}В файле modelname.all.conf указать enabled только для dataspace-core:
dataspace.service.core.enabled=true.Отключить ПЖ — в файле modelname.all.conf переопределить параметры:
dataspace.app.journal.stub=true dataspace.app.journal.replication.enabled=falseПереопределить параметры datasource в файле modelname.all.conf, например для выбора read-only реплики БД или для использования ТУЗ
dss_applс доступом "только на чтение" (см. раздел "Создание учетных записей"):dataspace.main.db.user=dss_appl dataspace.main.db.url=jdbc:postgresql://url:port/user_readonly_db dataspace.main.db.schema=user_main_schema dataspace.main.db.driver=org.postgresql.Driver dataspace.main.db.dialect=org.hibernate.dialect.PostgreSQLDialectРазвернуть дистрибутив.
Проверить, создался ли сервис с именем, заданным в пункте 2.
Проверить, доступен ли этот сервис.
Ручное развертывание отдельного сервиса dataspace-search#
Необходимо ознакомиться с описанием ручной установки в разделе "Установка DataSpace с помощью Helm в Kubernetes (или OpenShift)".
Выполнить следующие действия:
Скопировать папку с helm charts dataspace-core в папку
dataspace-search.Перейти в скопированную папку.
В файле values.yaml переопределить параметры
appConfig: properties: active_profile: "read-only-profile" appJournal: config: "appjournal-stub-secret" db: main: secret: "db-search-secret"где
db-search-secret— имя секрета с параметрами read-only подключения к БД (см. раздел "Создание secret для базы данных в Kubernetes (или OpenShift)").Выполнить команду для развертывания сервиса dataspace-search, например с именем
dataspace-search-deposit:helm upgrade dataspace-search-deposit . -f values.yaml —wait —timeout 300s —debug —install
Проверить, создался ли сервис с именем, заданным в пункте 4.
Проверить, доступен ли этот сервис.
Параметризация размера HTTP-заголовков#
По умолчанию размер заголовка HTTP-запросов для сервисов равен 32768 байта.
Изменение значения может быть выполнено глобальной стендозависимой переменной global.server.max-http-header-size или параметром модуля <module_name>.cm.properties.server.max-http-header-size в соответствующем модулю файле dataspace-core-<model_name>.conf.
Обновление#
Внимание!
Перед выполнением обновления схемы БД рекомендуется создать резервную копию БД, если имеется такая возможность.
Если производятся обратно несовместимые изменения (см. раздел "Несовместимые изменения" в документе "Порядок внесения изменений в модель данных"), то создание резервной копии БД является обязательным.
При проведении обновления с использованием rolling update рекомендуется использовать не менее 4-х pod каждого сервиса.
Обновление модели данных#
Для обновления модели данных необходимо выполнить следующие шаги:
Внести обратно совместимые правки в модель данных (файл model.xml).
Пройти CI-процесс генерации новой релизной версии сервисов DataSpace с обновленной моделью данных.
Пройти CD-процесс с новой версией сервисов DataSpace (см. раздел "Установка DataSpace"):
Обновить схему базы данных скриптами Liquibase из дистрибутива сервисов DataSpace.
Установить новую версию сервисов в пространство Kubernetes (или OpenShift).
Проверить работоспособность.
Обновление версии базовых сервисов DataSpace#
Для обновления версии сервисов DataSpace необходимо выполнить следующие шаги:
Поднять версию зависимости dataspace-bom в проекте с моделью.
Пройти CD-процесс с новой версией сервисов DataSpace (см. раздел "Установка DataSpace").
Обновить схему базы данных скриптами Liquibase из дистрибутива сервисов DataSpace.
Установить новую версию сервисов в пространство Kubernetes (или OpenShift). Механизмы установки в контейнеризированной среде не предполагают ручного удаления предыдущих версий в процессе установки.
Проверить работоспособность DataSpace.
Примечание
В случае использования pipeline от Platform V DevOps Tools необходимо:
Поднять версию зависимости dataspace-bom в проекте с моделью.
Обновить конфигурационные файлы (см. раздел "Обновление конфигурации").
Пройти CI-процесс генерации новой релизной версии сервисов DataSpace (см. раздел "Сборка с помощью компонента Build Tools (CIJE)").
Пройти CD-процесс с новой версией сервисов DataSpace (см. раздел "Установка с помощью Deploy tools (CDJE)").
Порядок обновления базовых сервисов DataSpace без недоступности#
Требования для обновления версии без недоступности следующие:
Новая версии модели должна быть обратно-совместимой с текущей (см. "Порядок внесения изменений в модель данных").
Включен режим контроля векторов (см. раздел "Контроль векторов компонента Прикладной Журнал (APLJ) по имени и версии модели).
Приложение потребителя должно быть развернуто в конфигурации:
Функциональный StandIn (см. рaздел "Настройка репликации в StandIn при использовании DataSpace").
МультиЦОД.
Порядок обновления базовых сервисов DataSpace без недоступности при режиме Функциональный StandIn#
Необходимо выполнить следующие действия:
Выполнить BSSI-сверку за весь диапазон и зафиксировать синхронность БД Main и Standin.
Отключить все плагины в АРМ ПЖ.
Выполнить обновление схемы БД StandIn с использованием Liquibase-скриптов устанавливаемой версии DataSpace.
Включить все плагины в АРМ ПЖ и ожидать завершения репликации накопившейся очереди векторов.
Перейти в режим "Функциональный StandIn".
Отключить все плагины в АРМ ПЖ.
Выполнить обновление схемы БД Main с использованием Liquibase-скриптов устанавливаемой версии DataSpace.
Включить все плагины в АРМ ПЖ и ожидать завершения репликации накопившейся очереди векторов.
Выйти из режима "Функциональный StandIn" в Main.
Если сервисы DataSpace приложения-потребителя (далее сервисы DataSpace) развернуты в двух разных кластерах OpenShift (плечах):
Снять нагрузку на сервисы DataSpace с первого плеча. Второе плечо продолжает работать.
Остановить все сервисы DataSpace первого плеча.
Обновить все сервисы DataSpace для первого плеча.
Переключить нагрузку на первое обновленное плечо и ожидать завершения репликации накопившейся очереди векторов.
Проверить, что приложение потребителя DataSpace работает корректно.
Если работает корректно:
Обновить все сервисы DataSpace для второго плеча.
Запустить второе плечо в нагрузку.
Если работает некорректно:
Остановить все сервисы dataspace-applier (gigabas) на втором плече.
Снять нагрузку с первого плеча за исключением сервиса dataspace-applier (gigabas) и переключить нагрузку на второе плечо.
Ожидать завершения репликации накопившейся очереди векторов, созданных первым плечом.
Остановить сервис dataspace-applier (gigabas) на первом плече.
Поднять остановленный ранее сервис dataspace-applier (gigabas) на втором плече.
Проверить, что приложение потребителя DataSpace работает корректно, и репликация выполняется корректно.
Откатить версию сервисов DataSpace на первом плече.
Запустить первое плечо в нагрузку.
Внимание!
Изменения, внесенные на уровне БД, не откатываются!
Если сервисы DataSpace развернуты в одном кластере Kubernetes:
Обновить все сервисы DataSpace с использованием rolling upgrade.
Если приложение потребителя DataSpace работает некорректно, откатить версию сервисов DataSpace с использованием rolling upgrade.
Внимание!
Изменения, внесенные на уровне БД, не откатываются!
Внимание!
Если контроль версии модели данных при применении векторов ПЖ отключен, или используется версия DataSpace ниже 1.9, рекомендуется вручную останавливать все сервисы dataspace-applier (gigabas). В противном случае возможно появление красных векторов, когда сервис dataspace-applier (gigabas) более старой версии будет пытаться применить вектор, созданный более новыми сервисами dataspace.
Порядок обновления базовых сервисов DataSpace без недоступности при режиме МультиЦОД#
Необходимо выполнить следующие действия:
Выполнить обновление схемы БД с использованием Liquibase-скриптов устанавливаемой версии DataSpace на неактивные реплики.
Обновить все сервисы DataSpace в неактивных группах развертывания.
Провести смену активной реплики.
Дождаться завершения репликации.
Выполнить обновление схемы БД ранее активной реплики с использованием Liquibase-скриптов устанавливаемой версии DataSpace.
Обновить все сервисы DataSpace в ранее активной реплике.
Обновление существующей установки с помощью Helm#
Для обновления необходимо выполнить команду вида:
helm upgrade --install <имя> <путь к папке с chart на локальной машине>
Удаление#
Удаление базовых сервисов DataSpace с помощью helm#
В случае установки сервисов с помощью helm charts удаление всех ресурсов осуществляется с помощью команды
helm delete <имя> -n <имя namespace>
Удаление базовых сервисов DataSpace с помощью утилит kubectl#
Для удаления DSPC необходимо удалить все ресурсы его компонентов:
ConfigMaps, Secrets, Deployments, Services, PODs, VirtualServices (только при использовании Istio);
схему базы данных.
Для удаления ресурса необходимо подключиться к Kubernetes (или OpenShift) через терминал и выполнить команду:
kubectl -n <имя namespace> delete <тип компонента Kubernetes (или Openshift)> <имя компонента Kubernetes (или Openshift)>
Для подключения рекомендуется использовать kubectl версии, соответствующей версии Kubernetes. Kubectl является составной частью Kubernetes, устанавливается на рабочей станции.
Удаление схемы базы данных#
Внимание!
Для возможности восстановления удаленных данных перед удалением схемы БД рекомендуется сделать резервную копию.
Для удаления схемы базы данных необходимо открыть клиент для работы с БД, подключиться к серверу БД и выполнить команду:
В случае с PostrgeSQL
DROP SCHEMA <имя схемы> CASCADE;В случае с Oracle
BEGIN FOR c IN (SELECT table_name FROM all_tables WHERE OWNER='<имя схемы>') LOOP EXECUTE IMMEDIATE (\'DROP TABLE <имя схемы>.\'|| c.table_name ||\' CASCADE CONSTRAINTS\'); END LOOP; END;
Допускается использование любого клиента для работы с БД, совместимого с используемой Компонентом СУБД.
Проверка работоспособности#
Для проверки общей работоспособности необходимо выполнить следующие шаги:
Проверить выполнение пунктов из раздела "Чек-лист валидации установки".
Произвести вызов функционального endpoint сервиса DataSpace при помощи SDK или GraphQL. Требуемый код ответа:
200.
Чек-лист проверки работоспособности интеграций#
Необходимо проверить следующие интеграции:
Проверка работоспособности интеграции с HashiCorp Vault#
С целью проверки интеграции с Secret Management System для каждого pod, в котором запущен контейнер Vault-agent, необходимо удостовериться, что в логах этого контейнера были получены необходимые сертификаты. Пример лог-записей, с получением сертификатов из Vault-agent:
2022-12-29T06:47:20.111Z [INFO] (runner) creating watcher
2022-12-29T06:47:20.111Z [INFO] (runner) starting
....
2022-12-29T06:47:20.220Z [INFO] (runner) rendered "(dynamic)" => "/secrets/keystore/keystore-aj.jks"
2022-12-29T06:47:20.220Z [INFO] (runner) rendered "(dynamic)" => "/secrets/properties/passphrase-aj.properties"
....
В случае успешного получения сертификатов из HashiCorp Vault в контейнере DataSpace в начале лога будет выведена соответствующая информация на предмет получения необходимых сертификатов для работы:
--- Started waiting for secret files
Files needed: 4
Waiting 1 s.
....
Found /secrets/keystore/keystore-aj.jks. 3/4
Found /secrets/properties/passphrase-aj.properties. 4/4
Waiting 2 s.
Finished waiting. 2 s.
В случае, если интеграция с HashiCorp Vault настроена некорректно, будет ожидание получения сертификатов на контейнере основного приложения DataSpace:
--- Started waiting for secret files
Files needed: 4
Waiting 1 s.
Waiting 2 s.
Waiting 3 s.
Waiting 4 s.
Waiting 5 s.
Waiting 6 s.
...
Waiting 30 s.
...
Проверка интеграций с Platform V Audit SE#
В случае интеграции с данным сервисом необходимо убедиться в наличии событий дедубликации в пользовательском интерфейсе сервиса Platform V Audit SE.
Проверка интеграций с Platform V Monitor#
В случае интеграции с данным сервисом необходимо убедиться в наличии:
метрик в компоненте Объединенный мониторинг Unimon (MONA);
журнала лог-записей в компоненте Журналирование (LOGA).
Проверка интеграций с компонентом One-Time Password (OTP) / OTT (OTTS)#
В случае интеграции с данным сервисом необходимо убедиться в наличии следующих сообщений в логе sidecar контейнера ott-sidecar, запущенного на граничных прокси:
[INFO ] [c.s.o.b.a.s.impl.TokenServiceImpl] [main] - Запрос на генерацию токена для вызова [<Параметры токена>] отправлен на сервер ОТТ
[INFO ] [c.s.o.b.a.c.impl.task.RootTokenTask] [main] - OnNext class com.sbt.ott.base.api.client.impl.task.LocalStoreTask
[INFO ] [c.s.o.b.a.c.impl.task.RootTokenTask] [main] - OnNext class com.sbt.ott.base.api.client.impl.task.FbtTask
[INFO ] [c.s.o.b.a.c.impl.task.RootTokenTask] [main] - OnNext class com.sbt.ott.base.api.client.impl.task.TransportTask
[INFO ] [c.s.o.b.a.c.impl.task.RootTokenTask] [main] - OnComplete
[INFO ] [c.s.o.b.a.s.impl.TokenServiceImpl] [pool-7-thread-1] - Токен для вызова [<Параметры токена>] успешно получен. Ответ от сервера ОТТ - [<Параметры ответа>]
[INFO ] [c.s.o.b.a.c.impl.task.RootTokenTask] [main] - Вернулся токен с сервера OTT.
Такие сообщения появляются в момент оборачивания трафика OTT-токеном при подключении к целевому сервису, где на входе запущен такой же sidecar контейнер ott-sidecar с соответствующей конфигурацией по приему шифрованных OTT-токеном запросов.
Откат#
В разделе описаны шаги, которые необходимо выполнить для отката изменений в сервисах DataSpace и используемых базах данных.
Откат сервисов DataSpace необходимо производить в следующей последовательности:
Откат сервисов DataSpace.
Откат изменений БД (если необходимо).
Откат сервисов DataSpace#
В пространство Kubernetes (или OpenShift) необходимо установить старую версию сервисов. Для этого достаточно пройти CD-процесс со старой версией сервисов DataSpace.
Откатываться можно на любое число версий со следующими ограничениями:
Откатываться можно только до совместимой версии, то есть не было удалений, переименований, несовместимых изменений типов.
Не должно быть создано данных, которые могут повлиять на возможность отката. Например записи с null полем, которое раньше было mandatory.
При использовании оптимизированного changelog можно откатиться только на предыдущую версию (раздел "Оптимизация размера генерируемого DataSpace Liquibase changelog" документа Порядок внесения изменений в модель данных).
Откат изменений БД#
Внимание!
В случае, если на откатываемой версии БД уже проводились изменения данных, рекомендуется перед выполнением отката изменений БД сделать резервную копию для возможности последующего восстановления.
Для отката изменений БД применяется механизм Liquibase rollback. Для выполнения отката требуется передать тег, до которого необходим откат (см. раздел "Формирование тега rollback").
Формирование тега rollback#
После выпуска новой релизной версии модели в changelog добавляются все изменения БД относительно предыдущего выпуска. Все изменения размещаются между тегами:
<modelName>-<version>-before— тег, обозначающий начало новых изменений;<modelName>-<version>-applied— тег, обозначающий окончание изменений.
Формирование тегов позволяет осуществить быстрый откат до необходимой версии.
Ручной откат с помощью Liquibase#
Примечание
Параметры JAVA_OPTS и LIQUIBASE_OPTS описаны в разделе "Ручная проливка Liquibase скриптов на СУБД"
Для ручного отката изменений БД необходимо наличие последнего клиентского дистрибутива с моделью и утилиты Liquibase. С принципами отката с помощью Liquibase можно ознакомиться в официальной документации утилиты.
Необходимо распаковать клиентский дистрибутив с моделью, перейти в ./package/db, распаковать архив db-scripts.zip и в полученной директории запустить утилиту Liquibase:
export JAVA_OPTS="<JAVA_OPTS>"
export LIQUIBASE_OPTS="<LIQUIBASE_OPTS>"
export LIQUIBASE_HOME=`pwd` # Абсолютный путь до директории исполнения команды
java ${JAVA_OPTS} -Dliquibase.rollbackTag=<tag> -classpath './*' liquibase.integration.commandline.Main ${LIQUIBASE_OPTS} --changeLogFile=rollback-changelog.xml rollback
Пример тега: deposit-4.1.0-applied.
Чек-лист валидации установки#
В данном разделе описаны методы проверки валидности установки сервисов DataSpace.
Для того чтобы удостовериться в валидности установки, необходимо проверить следующие пункты:
Успешно пролиты скрипты Liquibase на базу данных.
Успешная установка в Kubernetes (или OpenShift).
Endpoint сервиса DataSpace доступен из других установленных в Kubernetes (или OpenShift) сервисов.
Успешно пролиты скрипты Liquibase на базу данных#
Для валидации успешного выполнения скриптов Liquibase необходимо проверить выполнение следующего условия: при подключении к базе данных видны все таблицы для сущностей, описанных в модели (в файле model.xml).
Успешная установка в Kubernetes (или OpenShift)#
Для валидации установки в Kubernetes (или OpenShift) необходимо проверить выполнение следующего условия: deployment перешел в статус "Ready". Увидеть его можно при помощи cli. Для этого необходимо:
Авторизоваться в Kubernetes с использованием kubectl.
Выполнить следующую команду, заменив переменные своими значениями:
kubectl get deployment имяDeploymentСервиса -n имяNamespaceПроверить, что все Pods находятся в статусе "ready". Столбец должен иметь следующий вид:
Ready 1/1,Ready 2/2и т.д. (в зависимости от количества поднятых Pods).
Endpoint сервиса DataSpace доступен из других установленных в Kubernetes (или OpenShift) сервисов#
Для проверки доступности сервиса необходимо выполнить следующие действия:
Из терминала любого Pod другого сервиса выполнить команду:
curl -v svc-имяСервисаDataSpace:8080/actuator/infoНапример:
curl -v svc-dataspace-core-deposit:8080/actuator/infoПри этом должен вернуться JSON-файл с информацией.
Имя сервиса можно посмотреть следующей командой:
kubectl get service -n ИмяВашегоNamespaceИз терминала любого Pod другого сервиса выполнить команду:
curl -v -X GET svc-имяСервисаDataSpace:8080/packet
Должна вернуться ошибка: HTTP ERROR 400.
Чек-лист валидации настроек#
Если не работает/не корректно работает один или несколько модулей, необходимо выполнить данные проверки:
Проверка настройки secret для подключения к основной БД (main-db-secret) (см. раздел Создание secret для базы данных в Kubernetes (или OpenShift)).
Внимание!
Поиск secret следует выполнять только через Deployment, чтобы исключить вероятность работы с другим похожим seret.
Внимание!
Необходимо посимвольно проверить правильность написания следующих элементов:
текст ключа secret;
текст имен параметров secret;
значения параметров, которые являются общими для всех.
Проверка настройки secret для подключения к БД StandIn. Проверка выполняется с учетом всех замечаний аналогично проверке по п.1. В случае, если StandIn не используется, рекомендуется настроить второй secret (standin-db-secret) согласно документации (имена параметров отличаются от имен secret для основной БД), но значения для него присвоить те же самые, которые используются для main-db-secret.
Проверка настройки secret для подключения к ПЖ (appjournal-config) (см. раздел "Этап 5 — настройка secret ПЖ"). Проверка выполняется с учетом всех замечаний аналогично проверке по п.1. В случае, если StandIn не используется, рекомендуется создать secret с отключением ПЖ (см. раздел "Отключение репликации и отправки векторов в ПЖ").
Отключение контейнера (Containers) istio-proxy для всех Deployments.
Внимание!
Отключение является временным. После решения проблемы данную настройку необходимо включить снова:
Зайти в Deployment и установить количество pods — "0".
Зайти непосредственно в YAML развертывания.
Найти строку
sidecar.istio.io/inject: 'true'и заменить значение на "false".Сохранить.
Зайти в Deployment и установить количество pods — "1", чтобы поднять один pod.
Повторить для всех Deployments.
Повторное тестирование.
Дополнительные операции#
Настройки безопасности#
По требованиям безопасности, контейнеризированные приложения продуктов Platform V должны работать в непривилегированном режиме. Для этого при установке в Openshift (см. раздел "Установка с помощью Deploy tools (CDJE)") необходимо определить значения параметрам:
dataspace.container.securityContext.runAsNonRoot=true;dataspace.container.securityContext.privileged=false;dataspace.container.securityContext.readOnlyRootFilesystem=true.
При установке в Kubernetes для подстановки дополнительных параметров достаточно выставить значение dataspace.k8s.configuration.enabled=true.
При установке через Helm в Openshift (см. раздел "Установка DataSpace с помощью Helm в Kubernetes (или OpenShift)"), необходимо указать:
securityContext:
runAsNonRoot: true
privileged: false
readOnlyRootFilesystem: true
capabilities:
drop:
- ALL
При установке в Kubernetes для основных приложений необходимо дополнительно указать:
securityContext:
runAsUser: 1000
runAsGroup: 1000
allowPrivilegeEscalation: false
seccompProfile:
type: RuntimeDefault
Для sidecars указать:
podSecurityContext:
fsGroup: 1000
runAsUser: 1000
runAsGroup: 1000
Взаимодействие с компонентом Объединенный мониторинг Unimon#
В установочных манифестах сервисов DataSpace присутствуют аннотации prometheus.io, необходимые для сбора метрик в формате Prometheus, что совместимо с платформенным компонентом Объединенный мониторинг Unimon (MONA) продукта Platform V Monitor (OPM).
Список параметров на примере dataspace-core приведен в таблице:
Аннотация |
Параметр |
Значение по умолчанию |
|---|---|---|
prometheus.io.scrape |
dataspace.service.annotations.promethus.scrape |
true |
prometheus.io.path |
dataspace.service.annotations.promethus.scrape |
/actuator/prometheus |
prometheus.io.port |
dataspace.service.annotations.prometheus.port |
9080 |
prometheus.io/scheme |
dataspace.service.annotations.prometheus.scheme |
https |
Аналогичные параметры для остальных сервисов компонента DataSpace.
Для сбора метрик через компонент Объединенный мониторинг Unimon (MONA) достаточно будет установки и настройки клиентской части.
Детали установки и настройки компонента Объединенный мониторинг Unimon описаны в документе "Руководство по установке" компонента "Объединенный мониторинг Unimon (MONA)" продукта Platform V Monitor.
Настройка SSL-соединения с БД в сервисах DataSpace#
В данном разделе описаны шаги конфигурирования базы данных, сервисов DataSpace для активации SSL режима соединения. Для выполнения шагов инструкции понадобится ПК (КТС) с установленными утилитами openssl и keytool.
Должны быть выполнены следующие требования:
Сертификаты client и root ca должны подключаться через secret.
Необходимо указать признак работы с tls / без tls через jdbc-строку соединения.
Для Main и SI необходимо использовать одинаковые сертификаты, т.к. это один и тот же объект доступа. Для основного приложения и для DataSpace Applier (gigabas) необходимо использовать одинаковые сертификаты, т.к. это один субъект доступа в двух частях.
Настройка SSL-соединения Kubernetes-DataBase#
Подключение к БД по SSL в сервисах DataSpace должно производиться с помощью KeyStore, как хранилища сертификатов.
Чтобы настроить SSL-соединение с базой из установленного в Kubernetes сервиса DataSpace необходимо выполнить следующие действия:
Сконфигурировать базу. Инструкции по конфигурации баз (PostgreSQL или Oracle) можно найти ниже по тексту текущего раздела.
Создать keystore с клиентскими сертификатами.
Создать kind secret c keystore(.jks) в Kubernetes.
Сконфигурировать kind secret с настройками подключения к БД. Выставить SSL-подключение. Обратите внимание, что для каждого типа базы данных имеется свой способ указания типа подключения.
Передать имя secret c keystore в параметры dbSslKeyStoresecret и secrets с данными подключения в параметры (mainDataBaseSecretId/standinDataBaseSecretId).
Инструкция для PostgreSQL#
Для подключения к базе данных PostgreSQL необходимо выполнить следующие шаги:
Выпустить сертификаты.
Для версии PostgreSQL ниже 4.2.1 сконфигурировать базу данных.
Сконфигурировать secrets kind secret для SSL-подключения к базам данных:
основной БД;
резервной (StandIn) БД.
Проверить правильность настройки.
Выпуск сертификатов#
Производить выпуск сертификатов необходимо согласно разделу "Настройка SSL" для PostgreSQL.
Необходимо получить следующие файлы:
root.crt(сертификат CA);root.key;server.crt(сертификат для БД);server.key,client.crt(сертификат для пользователя);client.key.
Конфигурирование kind secret с настройками подключения к PostgreSQL с включенным TLS#
Производить конфигурирование базы данных необходимо согласно разделу "Настройка SSL" для PostgreSQL.
Для подключения к основной БД необходимо в main-db-secret добавить параметры keyStorePassword и trustStorePassword, как показано в примере ниже:
apiVersion: v1
kind: Secret
metadata:
name: main-db-secret
data:
stringData:
secret.properties: |-
spring.datasource.username=username
spring.datasource.password=password
spring.datasource.url=jdbc:postgreSQL://dataspace-core-deposit-16923100-pgdb:5432/dataspace?sslmode=verify-ca&sslfactory=org.postgresql.ssl.DefaultJavaSSLFactory
spring.datasource.driver-class-name=org.postgreSQL.Driver
spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect
spring.jpa.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
dataspace.db.ssl.keyStorePassword=changeit
dataspace.db.ssl.trustStorePassword=changeit
Для подключения к резервной БД параметры keyStorePassword и trustStorePassword не нужны, как показано в примере standin-db-secret ниже:
apiVersion: v1
kind: Secret
metadata:
name: standin-db-secret
data:
stringData:
secret.properties: |-
standin.datasource.username=username
standin.datasource.password=password
standin.datasource.url=jdbc:postgreSQL://dataspace-core-deals-17731375-StandIn-pgdb:5432/dataspace?sslmode=verify-ca&sslfactory=org.postgresql.ssl.DefaultJavaSSLFactory
standin.datasource.driver-class-name=org.postgreSQL.Driver
standin.jpa.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
standin.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect
Проверка правильности настройки#
Для проверки SSL-соединения должны быть выполнены следующие требования:
Модуль успешно устанавливается в Kubernetes.
При выполнении SQL-запроса к БД отображается свойство TLS True для соединения, указанного в данных подключения пользователя.
Инструкция для Oracle#
Перечень операций на стороне БД Oracle#
На сервере БД под УЗ, с которой запущен экземпляр Oracle (обычно УЗ oracle), необходимо выполнить следующие шаги:
Указать переменные окружения. Переменные нужны только на этапе генерации сертификатов и действовать будут только на один текущий SSH-сеанс. Сохранять их для будущих сеансов не требуется.
export DIR_SSL=$ORACLE_BASE/admin/$ORACLE_SID //где будет лежать ewallet export WALLET_NAME=server_wallet //имя ewallet-а export FQDN_HOSTNAME=$(hostname -f) //имя хостаСоздать хранилище сертификатов (wallet):
orapki wallet create -wallet $DIR_SSL/$WALLET_NAME -auto_login -pwd mgr123456 Oracle PKI Tool Release 21.0.0.0.0 — Production ... Operation is successfully completed.Создать сертификат:
orapki wallet add -wallet $DIR_SSL/$WALLET_NAME -pwd mgr123456 -dn CN=$FQDN_HOSTNAME,C=RU -keysize 2048 ... Operation is successfully completed.Создать запрос на подпись CA:
orapki wallet export -wallet $DIR_SSL/$WALLET_NAME -pwd mgr123456 -dn CN=$FQDN_HOSTNAME,C=RU -request $DIR_SSL/$WALLET_NAME/server.csr ... Operation is successfully completed.Будет создан "файл-запрос" server.csr в каталоге $DIR_SSL/$WALLET_NAME. Данный файл необходимо отправить на подпись корневым доверенным сертификатом. Для DEV-стендов можно выпустить самоподписанные сертификаты.
Узнать каталог с wallet можно следующим образом:
cd $ORACLE_BASE/admin/$ORACLE_SID/$WALLET_NAME # к примеру /diag/19/admin/pprb/server_wallet pwdВнести изменения в настройки сетевых компонентов экземпляра Oracle. В listener.ora для требуемого listener необходимо добавить раздел TCPS с новым номером порта:
LIPPRB = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = IPC)(KEY = KEYPPRB)) (ADDRESS = (PROTOCOL = TCP)(HOST = <ip-адрес>)(PORT = 1521)) (ADDRESS = (PROTOCOL = TCPS)(HOST = <ip-адрес>)(PORT = 1522)) ) )Добавляем в listner.ora раздел со своим путем до хранилища, используемого при генерации (см. выше $DIR_SSL/$WALLET_NAME):
WALLET_LOCATION= (SOURCE= (METHOD=FILE) (METHOD_DATA= (DIRECTORY=/diag/19/admin/pprb/server_wallet) ) ) SQLNET.AUTHENTICATION_SERVICES = (TCPS) CLIENT_AUTHENTICATION=TRUE SSL_CLIENT_AUTHENTICATION=TRUEВ SQLnet.ora:
WALLET_LOCATION= (SOURCE= (METHOD=FILE) (METHOD_DATA= (DIRECTORY=/diag/19/admin/pprb/server_wallet) ) ) SSL_CLIENT_AUTHENTICATION=TRUE SQLNET.AUTHENTICATION_SERVICES = (tcps, beq, none) SSL_VERSION=1.2Отправить на подпись файл server.csr.
Перечень операций на стороне клиента (JVM)#
Предположим, клиент (по отношению в БД Oracle) находится на хосте myhostname.ru.
Необходимо выполнить следующие действия:
Чтобы создать пустое хранилище для клиента, необходимо выполнить команду:
keytool -genkey -alias client -dname "CN=myhostname.ru,C=RU" -storepass "orapki1234" -storetype JKS -keystore /home/pprb_dev/key/client.jks -keyalg RSA -keypass "orapki1234"Создать запрос на подпись:
keytool -certreq -alias client -file /home/pprb_dev/key/client.csr -keystore /home/pprb_dev/key/client.jks -storepass "orapki1234"Отправить на подпись файл client.csr с клиентского хоста.
Перечень операций на стороне БД Oracle#
Под УЗ Oracle необходимо выполнить следующие шаги:
Полученные файлы (root.crt, server.crt) после подписи перезаписать в любой каталог на сервер БД Oracle. Пример пути: /home/oracle/oracle_server.
Установить подписанный и корневой сертификаты в кошелек:
orapki wallet add -wallet $DIR_SSL/$WALLET_NAME -trusted_cert -cert "/home/oracle/oracle_server/root.crt" -pwd <пароль>
orapki wallet add -wallet $DIR_SSL/$WALLET_NAME -cert /home/oracle/oracle_server/server.crt -user_cert -pwd <пароль>
Применить настройки к Listener-у БД Oracle:
lsnrctl stop LIPPRB lsnrctl start LIPPRB или lsnrctl reload LIPPRBПроверить, что на порте 1522 успешно установлен SSL:
openssl s_client -showcerts -connect $FQDN_HOSTNAME:1522 -debug CONNECTED(00000003) write to 0xb83170 [0xb831f0] (289 bytes => 289 (0x121)) 0000 — 16 03 01 01 1c 01 00 01-18 03 03 51 08 97 41 3d ...........Q..A= 0010 — 3d bc 67 3c aa c8 97 67-05 55 7b a7 3a 69 d1 42 =.g<...g.U{.:i.B .. .. Peer signing digest: SHA384 Server Temp Key: ECDH, P-256, 256 bits --- SSL handshake has read 2117 bytes and written 93 bytes --- New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES256-GCM-SHA384 Server public key is 2048 bit Secure Renegotiation IS supported Compression: NONE Expansion: NONE No ALPN negotiated SSL-Session: Protocol : TLSv1.2 Cipher : ECDHE-RSA-AES256-GCM-SHA384 Session-ID: 53A47C3344B12DDB65FD33D52F905CE9062E0B86FA20B096C98488C00AEA1D23 Session-ID-ctx: Master-Key: E48654516019C80490ECBD343D5DD83270FBA04B8A28BF7DAB398FDD6E7569B7FC2FF4DECF3299CE6E5BACEF0E922987 Key-Arg : None Krb5 Principal: None PSK identity: None PSK identity hint: None Start Time: 1611759356 Timeout : 300 (sec) Verify return code: 19 (self signed certificate in certificate chain) ---
Проверить содержание кошелька:
orapki wallet display -wallet $DIR_SSL/$WALLET_NAME
Oracle PKI Tool Release 21.0.0.0.0 — Production
Version 21.0.0.0.0
Copyright (c) 2004, 2020, Oracle and/or its affiliates. All rights reserved.
Requested Certificates:
User Certificates:
Subject: CN=myhostname.ru,C=RU
Trusted Certificates:
Subject: CN=myhostname.ru
Конфигурирование kind secret с настройками подключения к Oracle с включенным TLS#
Признак работы с TLS / без TLS определяется строкой подключения JDBC. Ссылку такого вида необходимо передать в параметры подключения к базе данных.
Для secret основной БД необходимо в main-db-secret добавить параметры keyStorePassword и trustStorePassword, как показано в примере ниже:
apiVersion: v1
kind: Secret
metadata:
name: main-db-secret
data:
stringData:
secret.properties: |-
spring.datasource.username=username
spring.datasource.password=password
spring.datasource.url=jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS =(PROTOCOL=tcps)(HOST=127.0.0.1)(PORT=1522))(CONNECT_DATA=(SID=pprb))(SECURITY=(ssl_server_cert_dn="CN=127.0.0.1,C=RU")))
dataspace.datasource.primary.dbschema=schemaName
spring.datasource.driver-class-name=oracle.jdbc.OracleDriver
spring.jpa.database-platform=org.hibernate.dialect.Oracle12cDialect
spring.jpa.hibernate.dialect=org.hibernate.dialect.Oracle12cDialect
dataspace.db.ssl.keyStorePassword=changeit
dataspace.db.ssl.trustStorePassword=changeit
Для secret резервной БД параметры keyStorePassword и trustStorePassword не нужны, как показано в примере standin-db-secret ниже:
apiVersion: v1
kind: Secret
metadata:
name: standin-db-secret
data:
stringData:
secret.properties: |-
standin.datasource.username=dataspace
standin.datasource.password=dataspace
standin.datasource.url=jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS =(PROTOCOL=tcps)(HOST=127.0.0.1)(PORT=1522))(CONNECT_DATA=(SID=pprbsi))(SECURITY=(ssl_server_cert_dn="CN=127.0.0.1,C=RU")))
standin.datasource.driver-class-name=oracle.jdbc.OracleDriver
standin.jpa.database-platform=org.hibernate.dialect.Oracle12cDialect
standin.jpa.hibernate.dialect=org.hibernate.dialect.Oracle12cDialect
Проверка правильности настройки#
Для проверки SSL-соединения должны быть выполнены следующие требования:
Модуль успешно устанавливается в Kubernetes.
При выполнении SQL-запроса к БД отображается свойство TLS True для соединения, указанного в данных подключения пользователя.
Публикация модели DataSpace в META#
Для публикации модели DataSpace в репозиторий META необходимо выполнить следующие шаги:
В файле model.xml указать уникальный код компонента (component-code) для META.
Сформировать LDM-файл. Для генерации LDM необходимо использовать соответствующий maven-плагин в модуле deposit-model-jpa:
<profile> <id>meta</id> <build> <plugins> <plugin> <groupId>sbp.com.sbt.dataspace</groupId> <artifactId>model-api-generator-maven-plugin</artifactId> <executions> <execution> <id>createMeta</id> <goals> <goal>generateMeta</goal> </goals> <configuration> <ldmVersion>${ldmVersion}</ldmVersion> <basePackage>${modelPackage}</basePackage> <shortClassNames>${shortClassNames}</shortClassNames> <useModelVersion>${useModelVersion}</useModelVersion> <primitiveWithPackage>${primitiveWithPackage}</primitiveWithPackage> <excludeSystemClasses>${excludeSystemClasses}</excludeSystemClasses> <excludeSystemAttributes>${excludeSystemAttributes}</excludeSystemAttributes> <includeClassTypeDiscriminator>${includeClassTypeDiscriminator}</includeClassTypeDiscriminator> </configuration> </execution> </executions> </plugin> </plugins> </build> </profile>Описание переменных:
ldmVersion— версия ldm, будет указана в теге schema-version элемента metaModel;basePackage— базовый пакет;shortClassNames—falseилиtrue:если
false: атрибутnameклассов содержит полное имя класса (с пакетом), напримерsbp.com.sbt.jpa.Product;если
true: атрибутnameклассов содержит короткое имя класса (без пакета), например,Product.
useModelVersion— еслиtrue, то в свойствеmodelVersionуказывается версия maven-артефакта, иначе — значение свойстваversionиз тега<model>в pdm.xml.primitiveWithPackage— еслиtrue, то для примитивных типов формируются полные имена классов с пакетом;excludeSystemClasses— еслиtrue, то все классы, для которых проставляется свойствоsystem="true"исключаются из ldm (в том числе, если для заданного ldm-version не предполагается заполнение свойства system). Также исключаются все атрибуты с типом системный (исключаемый из модели) класс;excludeSystemAttributes— еслиtrue, то исключаем все атрибуты, у которых свойствоsystem=true, кромеobjectId,lastChangeDate,ownerId,isDeleted;includeClassTypeDiscriminator— еслиfalse, то исключается из всех классов атрибут (элементproperty) с именемtypeиchangeable="READ_ONLY". Также исключаются все индексы со свойствомtype. По умолчаниюfalse, так как в большинстве случаев служебный атрибутtypeне должен попадать в модель для МЕТА.
Подключить meta-maven-plugin в главный pom-файл проекта для публикации LDM-файла в META и прописать свойства, необходимые для работы плагина. Указать адрес сервера META как свойство
headless.meta.
<profile>
<id>meta</id>
<properties>
<headless.version>LATEST</headless.version>
<headless.execution>deploy</headless.execution>
<headless.meta>адрес сервера meta</headless.meta>
</properties>
<build>
<plugins>
<plugin>
<groupId>ru.sbt.meta</groupId>
<artifactId>meta-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</profile>
В результате сборки maven-модуля deposit-model-jpa будет сформирован LDM-файл, на основе которого произойдет публикация модели в META.

Примечание
При выборе версии ldmVersion=1.5 и выше в ldm-файле будут дополнительно приведены элементы привязки к физическим объектам БД:
"table-name" — наименование таблицы БД;
"column-name" — наименование столбца в БД;
"column-comment" — комментарий в БД.
Настройка репликации в StandIn при использовании DataSpace#
Возможности StandIn при использовании DataSpace#
При использовании DataSpace для работы с данными консистентная репликация изменений в БД StandIn обеспечивается автоматически при выполнении следующих условий:
агрегатоцентричная модель данных;
наличие на стенде корректно настроенного и функционирующего компонента Прикладной журнал (APLJ) (ПЖ), в том числе плагинов в ПЖ (для репликации в StandIn используются плагины Kafka EXPORT_FUNC_SI и EXPORT_FUNC_SI_LCK);
корректные настройки приложения dataspace-core подключения к ПЖ и к БД StandIn;
разворачивание модуля применения векторов изменений в OS с корректными настройками.
Этапы настройки репликации в StandIn для новых пользователей DataSpace#
Этап 1 — проверка модели данных#
Необходимо убедиться, что модель данных удовлетворяет критерию агрегатоцентричности или разработать такую модель данных (сведения о реализации предметной модели можно найти в документе "Руководство по ведению модели данных").
Этап 2 — проверка наличия ПЖ#
Убедиться, что на стенде имеется развернутый компонент Прикладной журнал (APLJ), или заказать разворачивание этого сервиса. Описание установки компонента Прикладной журнал (APLJ) приводится в его эксплуатационной документации.
Режим ожидания подтверждения коммита#
Концепция:
В этом режиме ПЖ буферизирует вектора изменений до получения флага успешного коммита соответствующей транзакции с БД источника.
Если вместо флага подтверждения пришел флаг отката, то транзакция не будет передана в модуль применения векторов.
Если истекло время ожидания, и не пришло ни подтверждение, ни отмена транзакции — ПЖ отправит запрос на получение нового подтверждение в модуль применения векторов.
Данный режим является целевым для использования и исключает получение неподтвержденных данных потребителями векторов DataSpace, такими, как:
репликация в StandIn;
потоковая загрузка в хранилище данных текущих транзакций, обеспечиваемая компонентом Архивирование (ARCH) продукта Platform V Archiving.
Для функционирования данного режима вводятся новые topics, по которым нужно получить права на чтение/запись:
journal_request_topic_confirmed_{zoneId}_{datatype};
journal_confirmation_{zoneId}_{datatype}.
Особенность настройки плагина EXPORT_FUNC_SI#
При настройке плагина EXPORT_FUNC_SI необходимо включить режим "Ожидание при подтверждении".

После настройки ПЖ должен быть перегружен для создания новых вышеупомянутых topics.
Проверить наличие новых topics можно в режиме "Мониторинг" в UI ПЖ.

Поддержка режима ожидания подтверждения коммита во всех модулях DataSpace#
Необходимо прописать для модуля dataspace-applier (gigabas) следующие параметры со значениями:
dataspace.replication.confirmation-mode=confirmed;dataspace.standin.applier.lock-control-logic-mode=VERSION_WITH_DELETE.
Если требуется вернуться в режим по умолчанию, необходимо вернуть этим параметрам следующие значения:
dataspace.replication.confirmation-mode=unconfirmed;dataspace.standin.applier.lock-control-logic-mode=LOCK_EVENT_TABLE.
Этап 3 — создание новой зоны ПЖ#
Необходимо выбрать идентификатор StandIn-зоны (зоны ПЖ) и заказать создание новой зоны ПЖ с данным идентификатором на стенде. За подробностями можно обратиться к эксплуатационной документации компонента Прикладной журнал (APLJ).
После получения новой зоны ее необходимо определить в параметре standin.cloud.client.zoneId=<ИМЯ_ЗОНЫ>.
Этап 4 — настройка плагинов ПЖ#
Необходимо заказать настройку плагинов ПЖ для DataSpace или убедиться, что такая настройка произведена. Настройка осуществляется согласно таблице:
Имя плагина |
Тип данных |
Комментарий |
|---|---|---|
EXPORT_FUNC_SI |
DATASPACE |
Вектора изменений DataSpace, формат — JSON |
EXPORT_FUNC_SI_LCK |
LCK |
StandIn блокировки агрегатов, формат — JSON |
EXPORT_FUNC_SI_LCK |
ULCK |
StandIn разблокировки агрегатов, формат — JSON |
EXPORT_FUNC_SI_REJ |
REJ |
StandIn флаг отката, формат — JSON |

Дополнительно необходимо заказать настройку использования блокировок для указанной зоны: параметр force.func.standin.enabled должен быть установлен в "true".
Обычно ПЖ по умолчанию устанавливает в "false", в "true" он устанавливается по запросу.

Этап 5 — настройка secret ПЖ#
Настройка параметров должна быть выполнена для всех модулей DataSpace.
После настройки ПЖ необходимо запросить параметры подключения к ПЖ на данном стенде и создать secret с определением ресурса appJournal.properties.
Пример шаблона secret для dev-стенда с ПЖ:
apiVersion: v1
kind: Secret
metadata:
name: secret-appjournalsettings
data:
stringData:
appJournal.properties: |-
standin.cloud.client.stub=false
standin.cloud.client.zoneId=<укажите свою зону>
standin.cloud.client.kafka.bootstrapServers=<адрес:порт>
standin.cloud.client.subscriptionKafkaConcurrency=10
standin.cloud.client.heartBeatPeriod=10000
standin.cloud.client.kafka-retry=5
standin.cloud.client.retry-timeout=10000
Пример шаблона secret для конфигурации подключения к ПЖ на стендах с указанием параметров SSL-подключения:
apiVersion: v1
kind: Secret
metadata:
name: secret-appjournalsettings
data:
stringData:
appJournal.properties: |-
standin.cloud.client.stub=false
standin.cloud.client.zoneId=${ZONE_ID}
standin.cloud.client.kafka.bootstrapServers=${KAFKA_BOOTSTRAP_SERVERS}
standin.cloud.client.kafka.producerConfig."[security.protocol]"=SSL
standin.cloud.client.kafka.producerConfig."[ssl.key.password]"=${SSL_KEY_PASSWORD}
standin.cloud.client.kafka.producerConfig."[ssl.keystore.location]"=/opt/keystore/kafka/server.keystore.jks
standin.cloud.client.kafka.producerConfig."[ssl.keystore.password]"=${SSL_KEYSTORE_PASSWORD}
standin.cloud.client.kafka.producerConfig."[ssl.truststore.location]"=/opt/keystore/kafka/trust.jks
standin.cloud.client.kafka.producerConfig."[ssl.truststore.password]"=${SSL_TRUSTSTORE_PASSWORD}
standin.cloud.client.kafka.producerConfig."[ssl.keystore.type]"=JKS
standin.cloud.client.kafka.producerConfig."[ssl.truststore.type]"=JKS
standin.cloud.client.kafka.producerConfig."[ssl.protocol]"=TLS
standin.cloud.client.kafka.producerConfig."[ssl.enabled.protocols]"=TLSv1.2
standin.cloud.client.kafka.producerConfig."[ssl.endpoint.identification.algorithm]"=
standin.cloud.client.kafka.consumerConfig."[security.protocol]"=SSL
standin.cloud.client.kafka.consumerConfig."[ssl.key.password]"=${SSL_KEY_PASSWORD}
standin.cloud.client.kafka.consumerConfig."[ssl.keystore.location]"=/opt/keystore/kafka/server.keystore.jks
standin.cloud.client.kafka.consumerConfig."[ssl.keystore.password]"=${SSL_KEYSTORE_PASSWORD}
standin.cloud.client.kafka.consumerConfig."[ssl.truststore.location]"=/opt/keystore/kafka/trust.jks
standin.cloud.client.kafka.consumerConfig."[ssl.truststore.password]"=${SSL_TRUSTSTORE_PASSWORD}
standin.cloud.client.kafka.consumerConfig."[ssl.keystore.type]"=JKS
standin.cloud.client.kafka.consumerConfig."[ssl.truststore.type]"=JKS
standin.cloud.client.kafka.consumerConfig."[ssl.protocol]"=TLS
standin.cloud.client.kafka.consumerConfig."[ssl.enabled.protocols]"=TLSv1.2
standin.cloud.client.kafka.consumerConfig."[ssl.endpoint.identification.algorithm]"=
Все свойства с префиксом standin.cloud.client.kafka отвечают за соединение с Kafka ПЖ.
По значениям остальных параметров можно обратиться к эксплуатационной документации компонента Прикладной журнал (APLJ).
Этап 6 — обеспечение доступа к Kafka ПЖ из кластера#
Необходимо обеспечить доступ из пространства Kubernetes (или OpenShift) к Kafka ПЖ.
При интеграции на dev-средах, можно создать ServiceEntry по образцу:
kind: ServiceEntry
spec:
addresses:
- 1.2.3.4
endpoints:
- address: 1.2.3.4
exportTo:
- .
hosts:
- dataspace.client.kafka.poseidon
location: MESH_EXTERNAL
ports:
- name: tcp
number: 9092
protocol: TCP
resolution: DNS
Этап 7 — конфигурирование параметров приложений DataSpace#
Для обеспечения репликации в SI помимо остальных приложений DataSpace требуется разворачивать также приложение для применения векторов изменений DataSpace Applier (или Gigabas). Необходимо указывать параметры SpringBoot-приложений явно:
Обязательно должно быть сконфигурировано соединение с Kafka ПЖ по аналогии с secret-appJournalSettings из этапа 5 (добавьте актуальные значения всех параметров из
appJournal.propertiesв конфигурационные файлы приложений DataSpace Core и DataSpace Gigabas, например, вapplication.properties).Должны быть сконфигурированы оба datasource:
для main БД — это свойства
spring.datasource.*(spring.datasource.url,spring.datasource.username,spring.datasource.passwordи при необходимости другие);для standin БД — это те же свойства, только с префиксом standin вместо spring:
standin.datasource.url,standin.datasource.username,standin.datasource.passwordи другие при необходимости.
Настройка параметров применения (DataSpace Applier)#
Существует возможность переопределения параметров применения векторов изменений.
Описание параметров:
Параметр |
Значение |
Комментарий |
|---|---|---|
|
10 |
Настройка клиентской библиотеки ПЖ. Рекомендуемое значение — 10. Количество потоков, читающих topic с журналами на одно приложение. Это означает, что один модуль Applier (Gigabas) будет использовать 10 потоков для обработки партиций в topics Kafka. Рекомендуемое значение количества партиций — тоже 10 по следующим причинам: 1. Если количество партиций будет меньше 10, тогда Applier (Gigabas) будет иметь неиспользуемые зарезервированные ресурсы. 2. Если количество партиций будет больше 10, в этом случае 10 потоков Applier (Gigabas) будут переключаться для обработки излишних партиций. Если один pod Applier (Gigabas) не справляется с нагрузкой, рекомендуется для каждого нового pod Applier (Gigabas), использующего 10 потоков, добавлять 10 новых партиций в topics. Например, при использовании трех pods Applier (Gigabas) на одном плече и трех pods Applier (Gigabas) на втором плече рекомендуется создать 60 партиций для topics |
|
5 |
Настройка клиентской библиотеки ПЖ. Количество попыток применения вектора изменений |
|
10000 |
Настройка клиентской библиотеки ПЖ. Задержка между попытками обработать вектор изменений с ошибками репликации (в мс) |
|
10000 |
Настройка клиентской библиотеки ПЖ |
Проверка интеграции DataSpace с ПЖ на стенде разработки/тестирования#
Проверка интеграции DataSpace с ПЖ на стенде разработки /тестирования осуществляется:
по логам;
через UI ПЖ;
через тестовый запрос.
Внимание!
Рекомендуется использовать проверку через тестовый запрос.
Проверка интеграции DataSpace с ПЖ на стенде по логам#
Выполните создание сущности (в данном примере создается сущность Product) и убедитесь, что она появилась в БД основного контура.
В логах DataSpace найдите следующие текстовые термы: Sent LCK+DATA journal. Данная строка лога означает, что в ПЖ отправлен вектор с данными. В этой же строке уникальный идентификатор в терминах ПЖ — id сервиса. Пример данной информации: serviceId 909ee533-36d2-4be9-b214-4ca55c676c7f_6904652537442598913#Product, где:
909ee533-36d2-4be9-b214-4ca55c676c7f — идентификатор транзакции;
6904652537442598913 — идентификатор агрегата;
Product — тип агрегата.
Пример строки лога:
2020-12-10 18:38:14,884 [general-pool-thread-3] [INFO] (sbp.com.sbt.dataspace.replication.PostTransactionConfirmatorImpl) [sbp.com.sbt.dataspace.replication.PostTransactionConfirmatorImpl::sendAck:23] mdc:()| tx 909ee533-36d2-4be9-b214-4ca55c676c7f: Received ACK
В логах Applier найти следующие текстовые термы: Applied journal createMode = 0, dataType = DATASPACE (означает, что вектор с данными успешно применен). В этой же строке находится id сервиса: serviceId = 909ee533-36d2-4be9-b214-4ca55c676c7f_6904652537442598913#Product (тот же, что и в логах DataSpace).
Пример строки лога:
2020-12-10 18:38:15,123 [consumer-2-C-1] [INFO] (sbp.dataspace.standin.journal.StandInJournalConsumer) [sbp.dataspace.standin.journal.StandInJournalConsumer::handle:60] mdc:()| Applied journal createMode = 0, dataType = DATASPACE, serviceId = 909ee533-36d2-4be9-b214-4ca55c676c7f_6904652537442598913#Product
Проверка интеграции DataSpace с ПЖ на стенде через UI ПЖ#
Для того чтобы осуществить проверку через UI ПЖ, необходимо:
В режиме журнала установить фильтр по полю ID Сервиса.
В качестве значения указать значение из лога DataSpace: 909ee533-36d2-4be9-b214-4ca55c676c7f_6904652537442598913#Product.
В итоге должно быть найдено две строки:
первая — с типами данных LCK и DATASPACE;
вторая — с типом данных ULCK.
Проверка интеграции DataSpace с ПЖ на стенде через тестовый запрос#
Для того чтобы осуществить проверку через тестовый запрос, необходимо:
Убедиться, что активным является основной контур (Normal).
Выполнить создание сущности в контуре Main (например, Product), получить в ответе идентификатор (например, 6904652537442522222).
Выполнить SQL-запрос в БД основного контура и убедиться, что данная сущность присутствует. Для контроля убедиться, что дата создания сущности соответствует действительности.
Выполнить SQL-запрос в БД контура SI и убедиться, что данная сущность присутствует. Для контроля убедиться, что дата создания сущности соответствует действительности и совпадает с датой на основном контуре.
Убедиться, что все поля в таблице по данной сущности (Product с id = 6904652537442522222) полностью совпадают на обоих контурах.
Выполнить переход в режим "Функциональный StandIn".
Выполнить создание сущности в контуре StandIn (например, Product), получить в ответе идентификатор (например, 6904652537442577777).
Выполнить SQL-запрос в БД контура SI и убедиться, что данная сущность присутствует. Для контроля убедиться, что дата создания сущности соответствует действительности.
Выполнить SQL-запрос в БД основного контура и убедиться, что данная сущность отсутствует, поскольку при переходе в SI автоматически отключаются плагины репликации.
Выполнить переход в основной контур (Normal). При этом плагины автоматически включатся и репликация в основной должна быть выполнена.
Выполнить SQL-запрос в БД основного контура и убедиться, что данная сущность присутствует. Для контроля убедиться, что дата создания сущности соответствует действительности и совпадает с датой в контуре StandIn.
Убедиться, что все поля в таблице по данной сущности (Product с id = 6904652537442577777) полностью совпадают на обоих контурах.
Отключение репликации и отправки векторов в ПЖ#
Возможна ситуация, когда все вышеперечисленное на этапе настроено и работает, но при этом необходимо отключить репликацию и отправку векторов в ПЖ (как правило, временно).
Для этого нужно установить значения параметров во всех модулях DataSpace:
standin.cloud.client.stub=true;dataspace.replication.enabled=false.
Чтобы включить репликацию, вернуть значения по умолчанию параметров во всех модулях DataSpace:
standin.cloud.client.stub=false;dataspace.replication.enabled=true.
Контроль векторов компонента Прикладной журнал (APLJ) по имени и версии модели#
Данный режим нужен для корректной обработки следующих ситуаций:
Ошибочная настройка модулей DataSpace для разных моделей данных на одну и ту же зону ПЖ.
Штатный режим обновления модулей DataSpace с новой версией модели данных, при этом могут возникнуть следующие ситуации:
Версия модели данных модуля обработчика векторов (Applier/Gigabas) новее, чем версия в векторе, и обратно совместима.
Версия модели данных модуля обработчика векторов (Applier/Gigabas) новее, чем версия в векторе, и обратно несовместима.
Версия модели данных в векторе новее, чем версия модуля обработчика векторов (Applier/Gigabas).
Описание параметров#
Имеются следующие параметры:
dataspace.replicator.model.send-model-id— признак включения режима добавления имени модели в заголовок вектора (по умолчанию — "true").dataspace.replicator.model.send-model-version— признак включения режима добавления версии модели в заголовок вектора (по умолчанию — "true").dataspace.replicator.model.versioning-enabled— признак включения режима контроля имени и версии модели (по умолчанию — "true").
Алгоритм контроля#
Имеется следующий алгоритм контроля:
Если в векторе нет имени модели, в рамках поддержки обратной совместимости контроль завершается успешно.
Если в векторе есть имя модели и оно не совпадает с именем модели модуля обработчика векторов Applier/Gigabas (далее — Applier), возникает ошибка применения вектора, контроль завершается неудачно.
Если версия модели в векторе отсутствует или не задана, в рамках поддержки обратной совместимости считается, что версия модели равна 0.0.0 для последующих пунктов контроля.
Если версия модели в векторе строго равна версии модели Applier, контроль завершается успешно.
Если версия модели в векторе строго больше (новее) версии модели Applier, контроль завершается неудачно и происходит отписка Applier от topics Kafka ПЖ для исключения дальнейшей обработки векторов данным конкретным экземпляром Applier. Возникновение данной ситуации подразумевает выполнение обновления версий модулей и появление в числе прочих обновленных Applier, которые и предназначены для дальнейшей работы по применению векторов.
Если версия модели в векторе строго меньше (старее) версии модели Applier, и при этом данная версия обратно не совместима с версией Applier, контроль завершается неудачно. Неудачный вектор сможет применить только Applier с той же самой версией.
Во всех остальных ситуациях контроль завершается успешно.
Примеры отражения контроля в логах#
Примеры:
В векторе нет имени модели. Ключевая фраза:
detected JournalDataContainer without modelId.2023-03-20 05:43:51,209 [consumer_DZ-49_EXPORT_FUNC_SI_DATASPACE-6-C-1] [WARN] (sbp.dataspace.standin.listener.modelversion.ModelVersionApplyingPipelineListener) [sbp.dataspace.standin.listener.modelversion.ModelVersionApplyingPipelineListener::preApply:49] mdc:()| e9164099-a0fa-43f0-bc39-c16d748017f8: detected JournalDataContainer without modelIdВ векторе имя модели не совпадает. Ключевая фраза:
detected JournalDataContainer without modelVersion, use DEFAULT modelVersion='0.0.0'.2023-03-20 06:50:02,212 [consumer_DZ-49_EXPORT_FUNC_SI_DATASPACE-8-C-1] [ERROR] (sbp.dataspace.standin.journal.StandinJournalConsumer) [sbp.dataspace.standin.journal.StandinJournalConsumer::handle:72] mdc:()| Исключение при попытке применения журнала sbp.dataspace.standin.listener.modelversion.ModelVersionIncompatibleException: 97340eb2-a636-4553-b9d6-093ed1a3d051: ModelId mismatch was found. applier='jjj5', received='jjj5_v2'В векторе нет версии модели. Ключевая фраза:
detected JournalDataContainer without modelVersion, use DEFAULT modelVersion='0.0.0'.2023-03-20 05:59:22,747 [consumer_DZ-49_EXPORT_FUNC_SI_DATASPACE-9-C-1] [WARN] (sbp.dataspace.standin.listener.modelversion.ModelVersionApplyingPipelineListener) [sbp.dataspace.standin.listener.modelversion.ModelVersionApplyingPipelineListener::preApply:63] mdc:()| 381c392f-c304-41f3-907c-84d9db6bda78: detected JournalDataContainer without modelVersion, use DEFAULT modelVersion='0.0.0'Успешный контроль. Ключевая фраза:
JournalDataContainer model version is compatible.2023-03-20 07:14:02,229 [consumer_DZ-49_EXPORT_FUNC_SI_DATASPACE-5-C-1] [DEBUG] (sbp.dataspace.standin.listener.modelversion.ModelVersionApplyingPipelineListener) [sbp.dataspace.standin.listener.modelversion.ModelVersionApplyingPipelineListener::preApply:79] mdc:()| 048cd268-4010-4828-a8b0-73485b1c48d1: JournalDataContainer model version is compatible. applier='DEV-SNAPSHOT', received='DEV-SNAPSHOT' 2023-03-20 13:21:50,129 [consumer_DZ-46_EXPORT_FUNC_SI_DATASPACE-5-C-1] [DEBUG] (sbp.dataspace.standin.listener.modelversion.ModelVersionApplyingPipelineListener) [sbp.dataspace.standin.listener.modelversion.ModelVersionApplyingPipelineListener::preApply:79] mdc:()| ca4722e9-4d1d-4da5-b375-6760f3d8be8b: JournalDataContainer model version is compatible. applier='3.0.1', received='3.0.1' 2023-03-20 15:01:52,652 [consumer_DZ-46_EXPORT_FUNC_SI_DATASPACE-4-C-1] [DEBUG] (sbp.dataspace.standin.listener.modelversion.ModelVersionApplyingPipelineListener) [sbp.dataspace.standin.listener.modelversion.ModelVersionApplyingPipelineListener::preApply:79] mdc:()| a154ab5e-02b3-434f-bd53-e86400723d02: JournalDataContainer model version is compatible. applier='5.0.1', received='5.0.0'Версия в векторе новее. Ключевая фраза:
Received version more than model version.2023-03-20 15:12:47,673 [consumer_DZ-46_EXPORT_FUNC_SI_DATASPACE-9-C-1] [ERROR] (sbp.dataspace.standin.journal.StandinJournalConsumer) [sbp.dataspace.standin.journal.StandinJournalConsumer::handle:72] mdc:()| Исключение при попытке применения журнала sbp.dataspace.standin.listener.modelversion.ModelVersionMoreThanCurrentException: e96be73c-5714-48b1-a776-467b53e6a535: Received version more than model version. applier = 5.0.0, received = 5.0.1И отписка от чтения остальных векторов:
2023-03-20 15:12:48,167 [consumer_DZ-46_EXPORT_FUNC_SI_DATASPACE-9-C-1] [INFO] (org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler) [org.springframework.scheduling.concurrent.ExecutorConfigurationSupport::shutdown:218] mdc:()| Shutting down ExecutorService 2023-03-20 15:12:48,270 [consumer_DZ-46_EXPORT_FUNC_SI_DATASPACE-4-C-1] [INO] (org.springframework.kafka.listener.KafkaMessageListenerContainer$ListenerConsumer) [org.springframework.core.log.LogAccessor::info:292] mdc:()| reader_DZ-46_DATASPACE_EXPORT_FUNC_SI: Consumer stopped 2023-03-20 15:12:48,271 [consumer_DZ-46_EXPORT_FUNC_SI_DATASPACE-1-C-1] [INFO] (org.springframework.kafka.listener.KafkaMessageListenerContainer$ListenerConsumer) [org.springframework.core.log.LogAccessor::info:292] mdc:()| reader_DZ-46_DATASPACE_EXPORT_FUNC_SI: Consumer stoppedВерсия в векторе старая и обратно не совместимая. Ключевая фраза:
JournalDataContainer model version is not compatible.2023-03-20 15:21:05,351 [consumer_DZ-46_EXPORT_FUNC_SI_DATASPACE-0-C-1] [ERROR] (sbp.dataspace.standin.journal.StandinJournalConsumer) [sbp.dataspace.standin.journal.StandinJournalConsumer::handle:72] mdc:()| Исключение при попытке применения журнала sbp.dataspace.standin.listener.modelversion.ModelVersionIncompatibleException: a78b86fe-922c-47e8-a530-5a0a2ec50a74: JournalDataContainer model version is not compatible. applier = 5.0.0, received = 3.0.1
Бинарная сериализация векторов#
Данный режим нужен для корректной обработки следующих ситуаций:
Бизнес-данные содержат спецсимволы, которые не обрабатываются обычной сериализацией.
Затруднить просмотр бизнес-данных.
Уменьшить размер вектора при использовании бинарной сериализации с компрессией.
Описание параметров#
Для указания алгоритма сериализации используется параметр dataspace.replicator.data-type-info.ORM_CV.serializer-id.
Значения:
change_vector_json— JSON-сериализация (значение по умолчанию);change_vector_kryo— бинарная Kryo сериализация;change_vector_kryz— бинарная Kryo сериализация с компрессией в gzip формат.
Примеры векторов#
Сериализация выполняется по бизнес-данным, которые указаны в качестве значения атрибута data.
JSON-сериализация:
{
"type": "DATASPACE",
"txId": "0d6acf3e-1ce2-4fb1-bdf9-884bbc866145",
"headers": {
"rootClass": "sbp.com.sbt.dataspace.jpa.RootEntity",
"prevRootVersion": 0,
"siVersion": 1,
"rootId": "7213244565303459841",
"modelId": "jjj5",
"modelVersion": "DEV-SNAPSHOT",
"rootVersion": 1,
"guid": "53273065-a618-4b90-b50f-69633857ae8c",
"protocolVersion": "1.1.0",
"txTimestamp": 1679464374617
},
"partitions": [
{
"type": "ORM_CV",
"serializer": "change_vector_json",
"format": "JSON",
"payload": {
"serializerInfo": {
"id": "3375153340802439707",
"name": "json_gson",
"format": "JSON"
},
"data": {
"type": "DELTA",
"txId": null,
"partitionId": null,
"changeSets": [
{
"createEvents": [
{
"alias": "sbp.com.sbt.dataspace.jpa.RootEntity",
"id": "7213244565303459841",
"primitives": {
"partitionId": 0,
"syalReason": null,
"lastChangeDate": "2023-03-22T05:52:54.602Z",
"recModelVersion": null,
"syalActive": false,
"ownerId": null,
"syalToken": null,
"uniqueName": null,
"isDeleted": false,
"syalTimeout": null,
"name": "createRootEntity",
"offFlag": null,
"syalChangeDate": null,
"chgCnt": null
},
"references": {},
"primitiveCollections": {},
"referenceCollections": {
"leafEntitys": [],
"apiCalls": []
},
"version": null
}
],
"updateEvents": [],
"deleteEvents": [],
"snapshotEvents": []
}
]
}
}
}
]
}
Бинарная Kryo-сериализация:
{
"type": "DATASPACE",
"txId": "1d445403-9bd5-41c8-9b87-a6649cad2e21",
"headers": {
"rootClass": "sbp.com.sbt.dataspace.jpa.RootEntity",
"prevRootVersion": 0,
"siVersion": 1,
"rootId": "7213242447844868097",
"modelId": "jjj5",
"modelVersion": "DEV-SNAPSHOT",
"rootVersion": 1,
"guid": "28edafed-c6ef-4829-a14f-4abcdfc4cc37",
"protocolVersion": "1.1.0",
"txTimestamp": 1679463882048
},
"partitions": [
{
"type": "ORM_CV",
"serializer": "change_vector_kryo",
"format": "JSON",
"payload": {
"serializerInfo": {
"id": "4086061529959564203",
"name": "binary_kryo",
"format": "BASE64"
},
"data": "CxeCDAAXgg0ApXNicC5jb20uc2J0LmRhdGFzcGFjZS5qcGEuUm9vdEVudGl0eQM3MjEzMjQyNDQ3ODQ0ODY4MDm3FgEWD3BhcnRpdGlvbknkAgBzeWFsUmVhc2_uAGxhc3RDaGFuZ2VEYXTlH5G45L7wMHJlY01vZGVsVmVyc2lv7gBzeWFsQWN0aXblBQBvd25lcknkAHN5YWxUb2tl7gB1bmlxdWVOYW3lAGlzRGVsZXRl5AUAc3lhbFRpbWVvdfQAbmFt5QNjcmVhdGVSb290RW50aXT5b2ZmRmxh5wBzeWFsQ2hhbmdlRGF05QBjaGdDbvQAFgNsZWFmRW50aXR58xcBYXBpQ2FsbPMXARYBABcBFwEXAYAAAQ\u003d\u003d"
}
}
]
}
Бинарная Kryo-сериализация с компрессией в gzip-формат:
{
"type": "DATASPACE",
"txId": "2fe40d1e-3359-4fc5-926c-cdd2e609ffc5",
"headers": {
"rootClass": "sbp.com.sbt.dataspace.jpa.RootEntity",
"prevRootVersion": 0,
"siVersion": 1,
"rootId": "7213240770615050241",
"modelId": "jjj5",
"modelVersion": "DEV-SNAPSHOT",
"rootVersion": 1,
"guid": "dce2dcf9-a40c-4706-b720-69fd020d6221",
"protocolVersion": "1.1.0",
"txTimestamp": 1679463491424
},
"partitions": [
{
"type": "ORM_CV",
"serializer": "change_vector_kryz",
"format": "JSON",
"payload": {
"serializerInfo": {
"id": "5762210136291029842",
"name": "binary_kryo_gzip",
"format": "BASE64"
},
"data": "H4sIAAAAAAAAAEWPMU7DQBBFx1ipIKKzS26w2pgE18gBKQUUEaKfbMbJwnrX7K5B6VDuwgGo6DgB4hS26CIk0qTDSSTQb0bzXvH_Ybw8gnjZhRc3KZkwBXMTz6bo0ZUoiN2VyMbG-AvtpV-EadI7Tfo8TflZb8AHPOm_RkF0XKJtsTR6VB-AW6AaEzqzAoXOZ3PUMxqib07ePj_ev7klcWWmpG7JOtlKW_9cePnYdMA8abKjeve7Mfe0gkrLh4qusWhAuiEp8lR39lwWZKo16JaFwhJ6-mu6MXl-qfBrJ_43ADGfZXoNUagI8_2mnzjAUmaoVHtFAcTBNs8Q_ALUyf1_GwEAAA\u003d\u003d"
}
}
]
}
Методика выполнения BSSI-инициализации и BSSI-сверки в ПЖ#
Методика выполнения BSSI-инициализации#
Внимание!
Данная методика относится только к синхронизации контура StandIn и не затрагивает возможное влияние на смежные системы (например, ARCH).
Необходимо выполнить следующие действия:
Убедиться, что находимся в функциональном NORMAL.
Отключить вручную плагины по репликации:
EXPORT_FUNC_SI (тип данных = DATASPACE);
EXPORT_FUNC_SI_LCK (тип данных = LCK);
EXPORT_FUNC_SI_LCK (тип данных = ULCK);
EXPORT_FUNC_SI_REJ (тип данных = REJ).
Запустить BSSI-инициализацию.
Включить вручную плагины по репликации (список плагинов см. в п.2).
Запустить BSSI-сверку и получить 100% совпадение.
Отключить вручную плагины по репликации (список плагинов см. в п.2).
Дождаться появления нагрузки.
Запустить BSSI-сверку и получить расхождения.
Включить вручную плагины по репликации (список плагинов см. в п.2).
Запустить BSSI-сверку и получить 100% совпадение.
Перейти в режим "Функциональный StandIn".
Дождаться, когда весь поток векторов в направлении на SI по всем плагинам из п.2 реплицируется.
Отключить вручную плагины по репликации (список плагинов см. в п.2).
Дождаться появления нагрузки.
Запустить BSSI-сверку и получить расхождения.
Включить вручную плагины по репликации (список плагинов см. в п.2).
Запустить BSSI-сверку и получить 100% совпадение.
Вернуться в функциональный NORMAL.
Методика для настройки конфигуратора BSSI-сверки#
Необходимо выполнить следующие действия:
Загрузить абсолютно все таблицы по схеме, ни одну из них не удалять!
Исключить из BSSI-сверки таблиц целиком:
Исключить служебные таблицы Liquibase:
DATABASECHANGELOG,
DATABASECHANGELOGLOCK,
LIQ_DATABASECHANGELOG,
LIQ_DATABASECHANGELOGLOCK.
Исключить служебную таблицу по обслуживанию StandIn-блокировок агрегатов T_REPL_AGGLOCKEVENT.
Исключить служебные таблицы, используемые в процессе инициализации в ARCH:
T_DSPC_SYS_INIT_TASK,
T_DSPC_SYS_INIT_SUBTASK,
T_DSPC_SYS_CHANGE_EVENT.
Исключить служебные таблицы DataSpace Subscription:
T_DSPC_SYS_SUBSCRIPTION_PROCESS,
T_DSPC_SYS_SUBSCRIPTION_WORKER.
Исключить служебное представление (VIEW) SYSGETCURRENTTIME.
Исключить таблицы, которые не относятся к DataSpace, но созданы сторонними процессами.
Исключить из BSSI-сверки отдельные колонки в таблицах:
У таблицы T_DSPC_SYS_CONFIG исключить колонкy LASTPING,
У таблицы T_SYS_HISTORY_VERSIONS исключить колонкy STARTTIMEDRAFT,
У всех служебных таблиц T_REPL_AGGLOCK_<имя_класса_агрегата> исключить колонки:
CHGCNT,
INITSTATUS,
MIGRATIONSTATUS.
Методика для настройки конфигуратора BSSI-инициализации#
Необходимо выполнить следующие действия:
Исключить из BSSI-инициализации служебной таблицы целиком T_DSPC_SYS_CONFIG.
Исключить из BSSI-инициализации служебных таблиц в хранилище данных посредством ARCH целиком:
T_DSPC_SYS_INIT_TASK,
T_DSPC_SYS_INIT_SUBTASK,
T_DSPC_SYS_CHANGE_EVENT.
Исключить из BSSI-инициализации служебные таблицы DataSpace Subscription:
T_DSPC_SYS_SUBSCRIPTION_PROCESS,
T_DSPC_SYS_SUBSCRIPTION_WORKER.
Исключить из BSSI-инициализации таблицы, которые не относятся к DataSpace, но созданы сторонними процессами.
Настройка размера векторов#
Данная настройка выполняется на клиентской части и должна быть поддержана настройками серверной части.
Пример лога, когда размер вектора превышает допустимый на клиентской части (ключевая фраза: The message is 3949669 bytes when serialized which is larger than 1048576):
2023-04-25 09:11:49,015 [general-pool-thread-44] [ERROR] (org.springframework.kafka.support.LoggingProducerListener) [org.springframework.core.log.LogAccessor::error:261] mdc:()| Exception thrown when sending a message with key='7225866311241105409#EncashmentContract' and payload='<?xml version="1.0" encoding="UTF-8" standalone="yes"?><ns2:journal xmlns:ns2="http://journal.sbrf.r...' to topic journal_writer_topic_cash-collection-fabric: org.apache.kafka.common.errors.RecordTooLargeException: The message is 3949669 bytes when serialized which is larger than 1048576, which is the value of the max.request.size configuration.
Если точно известно, что сервер поддерживает размер сообщений 5 Мб, необходимо указать следующие параметры для всех модулей DataSpace:
standin.cloud.client.kafka.producerConfig."[max.request.size]"=5242880;standin.cloud.client.kafka.consumerConfig."[fetch.max.bytes]"=5242880.
Настройка представления данных в ПЖ в режиме Журнал#
Имеются следующие параметры для настройки представлений данных в журнале ПЖ:
dataspace.replication.transaction-id-format— выбор представления векторов в журнале ПЖ:V1 — представление 1 (по умолчанию);
V2 — представление 2.
dataspace.replication.transaction-id-length(только для представления V2) — принудительное обрезание значений колонок ID КЛИЕНТА и SERVICEIDTYPE до указанного количества символов (по умолчанию — "100"). Значения менее "100" не разрешены (будет принудительно установлено значение "100"). Значение данного параметра может быть увеличено только в том случае, если на стороне ПЖ будут реализованы доработки по увеличению допустимого размер указанных колонок.
Представление 1 (V1)#
Представление 1 используется по умолчанию и в общем случае отображает всю необходимую информацию о транзакциях и затронутых ими агрегатах.
Пример представления 1:

Описание таблицы:
ДАТА СОБЫТИЯ — дата и время (с указанием миллисекунд) создания вектора при его формировании модулем, создающим транзакцию (обычно — это модуль dataspace-core).
ID СЕРВИСА — уникальный идентификатор вектора. Пример значения: c740cbdc-85f2-406b-a922-3f1ae83a3344_7257461774256242691#AnalyticByDirection, где:
c740cbdc-85f2-406b-a922-3f1ae83a3344 — уникальное значение длиной 36 символов;
_ — разделитель;
7257461774256242691#AnalyticByDirection — значение из колонки ID КЛИЕНТА.
SERVICEIDTYPE — дополнительный идентификатор для усиления уникальности совместно со значением ID СЕРВИСА. Пример значения: datalck_0710051a-781c-4718-a879-46baa375f15c, где:
datalck — информационная метка о том, что этот вектор является вектором с данными (data) и имеет вектор с блокировкой StandIn (lck);
_ — разделитель;
0710051a-781c-4718-a879-46baa375f15c — частичное значение из колонки ID транзакции, которое содержит в себе уникальную строку, обозначающую создавшую данный вектор транзакцию.
ID СОБЫТИЯ — уникальный идентификатор вектора, сформированный самим ПЖ.
КОД ОПЕРАЦИИ — версия агрегата.
ID КЛИЕНТА — идентификатор и тип агрегата. Пример значения: 7257461774256242691#AnalyticByDirection, где:
7257461774256242691 — идентификатор агрегата;
# — разделитель;
AnalyticByDirection — корневой тип агрегата.
РЕЖИМ ФОРМИРОВАНИЯ — состояние StandIn в момент формирования вектора (NORMAL или STANDIN).
Дата записи — дата и время (с указанием миллисекунд) записи вектора в журнал ПЖ.
partitionDate — дата записи вектора в журнал ПЖ.
ID транзакции — уникальный идентификатор транзакции вектора, используется в режиме с подтверждениями коммитов. Пример значения: 0710051a-781c-4718-a879-46baa375f15c_7257461774256242691#AnalyticByDirection, где:
0710051a-781c-4718-a879-46baa375f15c — уникальное значение длиной 36 символов;
_ — разделитель;
7257461774256242691#AnalyticByDirection — значение из колонки ID КЛИЕНТА.
Система инициатор — будет установлено значение DATASPACE при формировании вектора любым модулем DataSpace.
Оператор — значение будет установлено в зависимости от модуля DataSpace, сформировавшего вектор:
DATASPACE — вектор создал модуль dataspace-core или dataspace-bundle;
SM — вектор создал модуль dataspace-cr-state-machine;
DM — вектор создал модуль dataspace-cr-duplication-service;
MG — вектор создал модуль dataspace-cr-migration-service.
Продукт — имеет значение только в случае мультитранзакций, когда в одной транзакции затрагивается несколько агрегатов. В этом случае формируется несколько векторов в соответствии с числом затронутых агрегатов. Значение поля является числом и показывает, сколько всего векторов сформировано вместе с данным. Пример значения: 3. То есть всего сформировано три вектора (или всего затронуто три агрегата), включая и текущий вектор. Чтобы найти, какие три вектора сформированы одной и той же транзакцией, нужно организовать поиск в фильтре по колонке SERVICEIDTYPE, значение взять из текущего вектора, поскольку это поле будет одинаковым у всех искомых векторов. На приведенном выше рисунке видно, что у всех трех векторов — одинаковое значение в колонке SERVICEIDTYPE.
Представление 2 (V2)#
Недостаток представления V1 состоит в том, что размер колонок ID СЕРВИСА, ID КЛИЕНТА и ID транзакции является не управляемым и может превысить размер, который задан в БД ПЖ (на момент написания документации — 100 символов). Это может произойти из-за того, что длины идентификатора агрегата и корневого типа агрегата являются переменными величинами. Так как максимальная поддерживаемая DataSpace длина идентификатора равна 254 символа, и максимальная длина имени корневого класса также равна 254 символа, такие строки не могут поместиться в БД ПЖ.
Для решения данной проблемы было разработано представление 2 (V2).
Пример представления 2:

Описание таблицы:
ДАТА СОБЫТИЯ — дата и время (с указанием миллисекунд) создания вектора при его формировании модулем, создающим транзакцию (обычно — это модуль dataspace-core).
ID СЕРВИСА — уникальный идентификатор вектора. Пример значения: 22948533-052c-493b-8bea-bf26d76e8f8a_fe21c1, где:
22948533-052c-493b-8bea-bf26d76e8f8a — уникальное значение длиной 36 символов;
_ — разделитель;
fe21c1 — первые 6 знаков от результата вычисления хеш по функции md5, где входной строкой является значение колонки ID КЛИЕНТА для представления V1. Таким образом размер колонки ID СЕРВИСА всегда будет равен 43 символам.
SERVICEIDTYPE — тип агрегата. Пример значения: PaymentDetails. По умолчанию если значение имеет размер более 100 символов, в ПЖ подставляется первые 100 символов имени типа агрегата. Таким образом размер колонки SERVICEIDTYPE ограничен 100 символами.
ID СОБЫТИЯ — уникальный идентификатор вектора, сформированный самим ПЖ.
КОД ОПЕРАЦИИ — версия агрегата.
ID КЛИЕНТА — идентификатор агрегата. Пример значения: 7257526704546775041. По умолчанию если значение имеет размер более 100 символов, в ПЖ подставляется первые 100 символов идентификатора агрегата. Таким образом, размер колонки ID КЛИЕНТА ограничен 100 символами.
РЕЖИМ ФОРМИРОВАНИЯ — состояние StandIn в момент формирования вектора (NORMAL или STANDIN).
Дата записи — дата и время (с указанием миллисекунд) записи вектора в журнал ПЖ.
partitionDate — дата записи вектора в журнал ПЖ.
ID транзакции — уникальный идентификатор транзакции вектора, используется в режиме с подтверждениями коммитов. Пример значения: 5e1ed659-9c7b-4531-bbb3-60d0ffaa91c9_fe21c18fdc3d05de2ac9b36d55979952, где:
5e1ed659-9c7b-4531-bbb3-60d0ffaa91c9 — уникальное значение длиной 36 символов;
_ — разделитель;
fe21c18fdc3d05de2ac9b36d55979952 — результат вычисления хеш по функции md5, где входной строкой является значение колонки ID КЛИЕНТА для представления V1, значение длиной 32 символа. Кроме того, данное значение подставляется в служебное поле ПЖ, по которому выполняется раскладывание векторов по партициям. Таким образом, размер колонки ID транзакции всегда будет равен 69 символов.
Система инициатор — будет установлено значение DATASPACE при формировании вектора любым модулем DataSpace.
Оператор — значение будет установлено в зависимости от модуля DataSpace, сформировавшего вектор:
DATASPACE — вектор создал модуль dataspace-core или dataspace-bundle;
SM — вектор создал модуль dataspace-cr-state-machine;
DM — вектор создал модуль dataspace-cr-duplication-service;
MG — вектор создал модуль dataspace-cr-migration-service.
Продукт — имеет значение только в случае мультитранзакций, когда в одной транзакции затрагивается несколько агрегатов. В этом случае формируется несколько векторов в соответствии с числом затронутых агрегатов. Значение поля является числом и показывает, сколько всего векторов сформировано вместе с данным. Пример значения: 3#c710461687154732b90a669da9cd6f, где:
3 — всего сформировано векторов (или всего затронуто агрегатов) включая и текущий вектор;
# — разделитель;
c710461687154732b90a669da9cd6f — результат вычисления хеш по функции md5, где входной строкой является первая часть колонки ID транзакции (уникальное значение длиной 36 символов). В ПЖ подставляется первые 32 символа вычисленного таким образом значения. Чтобы найти, какие три вектора сформированы одной и той же транзакцией, нужно организовать поиск в фильтре по колонке Продукт, значение взять из текущего вектора, поскольку это поле будет одинаковым у всех искомых векторов. На приведенном выше рисунке видно, что у всех трех векторов — одинаковое значение в поле Продукт.
Настройка подключения к ПЖ с отключенной репликацией в StandIn#
Существуют конфигурации развертывания DataSpace, в которых репликация StandIn не используется, а подключение к Прикладному Журналу (APLJ) требуется для других целей, например, для интеграции с ARCH или для организации межшардовой миграции.
Описание настройки#
Необходимо выполнить следующие действия:
При настройке секрета БД для StandIn необходимо указать те же самые параметры для подключения к БД, которые указаны в секрете Main. Это нужно для того, чтобы случайный переход в режим "Функциональный StandIn" через UI ПЖ не привел к проблемам.
Не требуется настраивать (а если уже настроены, необходимо удалить) плагины, необходимые для репликации:
EXPORT_FUNC_SI (тип данных = DATASPACE);
EXPORT_FUNC_SI_LCK (тип данных = LCK);
EXPORT_FUNC_SI_LCK (тип данных = ULCK);
EXPORT_FUNC_SI_REJ (тип данных = REJ).
Исключить из развертывания модуль dataspace-applier (gigabas) и в случае использования dataspace-bundle не включать в его состав модуль dataspace-applier (gigabas).
В остальном при подключении к ПЖ руководствоваться разделом "Настройка репликации в StandIn при использовании DataSpace".
Для потребления другими системами данных DataSpace через ПЖ необходимо настраивать плагины и типы данных, описанные в руководстве по эксплуатации этих систем.
Настройка режима передачи векторов в ПЖ#
Для оптимизации объема отправляемых в ПЖ данных в зависимости от набора опций развертывания DataSpace предусмотрена настройка dataspace.replication.appjournal-mode.
Допустимые значения:
migration— передаются вектора изменений только типов MC и MD;tca— передаются вектора изменений только типов IC, CV;si— передаются все типы векторов изменений (включая AT);subscription— передаются вектора изменений только типов CV, MC, AT, IC;none— не передаются никакие типы векторов изменений.
По умолчанию передаются все типы векторов. Допустима комбинация значений, например, migration,tca — в этом случае передаются вектора всех типов, предусмотренных комбинацией значений.
Настройка механизма ротации секретов (Hot Reload)#
Механизм осуществляет отслеживание изменений файлов секретов через определенный интервал, задаваемый настройкой dataspace.secret.scan.period в секундах в отдельном потоке.
При изменении файла секрета выполняется задержка для накопления изменений, заданная настройкой dataspace.secret.scan.window, во избежание одновременного применения изменений на всех экземплярах приложения на случайное время в пределах значения dataspаce.secret.apply.max.time.
Для каждого измененного файла вызывается соответствующий обработчик применения файла секрета, заданный настройками.
Изменение файла отслеживается по изменению времени модификации файла и по хеш-сумме файла.
В случае успешной обработки измененного файла секрета запоминается новое значение времени модификации файла и хеш-суммы. Иначе формируется сообщение в журнал, и осуществляется попытка применения изменений в следующий интервал отслеживания изменений файла.
Перед применением файла секрета проверяется работоспособность приложения с новым секретом.
При обнаружении проблем, новые значение не применяются, в журнал фиксируется ошибка.
Если при применении файла секрета возникает проблема, то состояние сервиса readiness переводится в значение DOWN.
Настройки:
dataspace.secret.scan.period— период отслеживания изменений файла секрета, задается в секундах. По умолчанию — "0" (механизм ротации секретов отключен).dataspace.secret.scan.window— длительность окна накопления изменений секретов в секундах, по умолчанию — 30 сек, задается стендозависимым параметром.dataspаce.secret.apply.max.time— максимально допустимое время ротации секретов, по умолчанию — 600 сек, задается стендозависимым параметром.
Параметры ниже необходимо задавать группой. Группа определяется значением между префиксом dataspace.secret и, например, filename:
dataspace.secret.*.filename— имя контролируемого файла с секретом. Обязательный параметр.dataspace.secret.*.applier— имя класса обработчика применения секрета. Обязательный параметр. Обработчик должен реализовывать интерфейсsbp.com.sbt.dataspace.support.secret.api.SecretReload, переопределив методreload(File secretFile, String secretGroup), для применения секрета с предварительной проверкой его работоспособности.dataspace.secret.*.order— порядок применения секрета. Не обязательный параметр. Если не задан — в конец списка.
Пример:
dataspace.secret.datasource.primary.filename=/tmp/database.secret
dataspace.secret.datasource.primary.applier=sbp.com.sbt.dataspace.support.secret.implementation.appliers.datasource.DataSourceApplier
dataspace.secret.datasource.primary.order=5
dataspace.secret.datasource.ssl.filename=/tmp/stores.secret
dataspace.secret.datasource.ssl.applier=sbp.com.sbt.dataspace.support.secret.implementation.appliers.datasource.StorePasswordApplier
dataspace.secret.datasource.ssl.order=1
dataspace.secret.datasource.jks.filename=/tmp/cacert.jks
dataspace.secret.datasource.jks.applier=sbp.com.sbt.dataspace.support.secret.implementation.appliers.datasource.StoreCertificateApplier
dataspace.secret.datasource.jks.order=2
В примере выше datasource.primary — группа настроек.
Необходимо следить за тем, чтобы названия групп настроек не дублировались. Если будут присутствовать одинаковые группы, то результат обработки изменений предсказать невозможно.
Применение секретов (Secret Applier)#
Datasource Applier#
Полное имя класса обработчика применения секрета БД — sbp.com.sbt.dataspace.support.secret.implementation.appliers.datasource.DataSourceApplier.
При изменении файла секрета создает новое подключение к БД. Если успешно — пересоздает подключения в пуле с обновленными секретами.
Успешное обновление отражается в журнале с уровнем INFO.
Если неуспешно — в журнал выводится ошибка и откладывается применение обновленных секретов на следующую итерацию.
StorePassword Applier#
Полное имя класса обработчика — sbp.com.sbt.dataspace.support.secret.implementation.appliers.datasource.StorePasswordApplier.
При изменении паролей к keyStore, trustStore создает подключение к активной БД. Если успешно — пересоздает подключения в пуле с той же авторизацией, но с новыми паролями к хранилищам. Если не успешно — в журнал выводится ошибка и откладывается применение на следующую итерацию.
Также создает подключение к неактивной БД. Если не успешно — журналирует ошибку. В любом случае пересоздает подключения в пуле для неактивной БД.
В файле секрета необходимо присутствие параметров javax.net.ssl.keyStorePassword и javax.net.ssl.trustStorePassword.
Для того чтобы пароль keystore был прочитан заранее, в настройках для этого секрета необходимо указать значение order меньше, чем значение order для StoreCertificate Applier.
StoreCertificate Applier#
Полное имя класса обработчика — sbp.com.sbt.dataspace.support.secret.implementation.appliers.datasource.StoreCertificateApplier.
При изменении файла хранилища сертификатов создает подключение к активной БД. Если успешно — пересоздает подключения в пуле с той же авторизацией, но с новыми паролями к хранилищам. Не успешно — в журнал выводится ошибка и откладывается применение на следующую итерацию.
Также создает подключение к неактивной БД. Если не успешно — журналирует ошибку. В любом случае пересоздает подключения в пуле для неактивной БД.
Для того чтобы сертификат прочитан заранее, в настройках для этого секрета необходимо указать значение order меньше, чем значение order для Datasource Applier.
Kafka Application Journal Applier#
Обработчики применения секретов для Kafka AJ идут парой:
sbp.com.sbt.dataspace.replication.hotreload.KafkaAjPasswordsApplier— отвечает за обработку секретов с паролями от keystore/truststore (ssl.keystore.password,ssl.truststore.password) и секрета с паролем от приватного ключа (ssl.key.password);sbp.com.sbt.dataspace.replication.hotreload.KafkaAjKeyStoreApplier— отвечает за обработку секретов keystore/truststore.
Предполагается, что, если изменились пароли, то секреты keystore/truststore тоже изменились.
KafkaAjPasswordsApplier всегда должен запускаться раньше KafkaAjKeyStoreApplier, для этого необходимо использовать dataspace.secret.*.order.
При изменении файлов секретов с паролями KafkaAjPasswordsApplier запоминает новые значения паролей от keystore/truststore.
При изменении файлов секретов keystore/truststore KafkaAjKeyStoreApplier получает новые значения паролей от KafkaAjPasswordsApplier и пробует установить соединение с Kafka AJ с использованием новых секретов. Если успешно — обновляет контекст подключения к Kafka AJ.
Успешное обновление отражается в журнале с уровнем INFO. Если неуспешно — в журнал выводится ошибка и откладывается применение обновленных секретов на следующую итерацию.
Если пароли ssl.keystore.password, ssl.truststore.password, ssl.keystore.password разнесены по нескольким секретам, то для каждого секрета необходимо задать группу параметров c applier KafkaAjPasswordsApplier.
Для секретов keystore и truststore необходимо задавать отдельные группы, т.к. это разные файлы.
Пример:
dataspace.secret.aplj.kafka.password.keystore.filename=/secrets/properties/keystore-passphrase-aj.properties
dataspace.secret.aplj.kafka.password.keystore.applier=sbp.com.sbt.dataspace.replication.hotreload.KafkaAjPasswordsApplier
dataspace.secret.aplj.kafka.password.keystore.order=1
dataspace.secret.aplj.kafka.password.truststore.filename=/secrets/properties/truststore-passphrase-aj.properties
dataspace.secret.aplj.kafka.password.truststore.applier=sbp.com.sbt.dataspace.replication.hotreload.KafkaAjPasswordsApplier
dataspace.secret.aplj.kafka.password.truststore.order=1
dataspace.secret.aplj.kafka.password.key.filename=/secrets/properties/key-passphrase-aj.properties
dataspace.secret.aplj.kafka.password.key.applier=sbp.com.sbt.dataspace.replication.hotreload.KafkaAjPasswordsApplier
dataspace.secret.aplj.kafka.password.key.order=1
dataspace.secret.aplj.kafka.keystore.filename=/secrets/keystore/keystore-aj.jks
dataspace.secret.aplj.kafka.keystore.applier=sbp.com.sbt.dataspace.replication.hotreload.KafkaAjKeyStoreApplier
dataspace.secret.aplj.kafka.keystore.order=2
dataspace.secret.aplj.kafka.truststore.filename=/secrets/keystore/truststore-aj.jks
dataspace.secret.aplj.kafka.truststore.applier=sbp.com.sbt.dataspace.replication.hotreload.KafkaAjKeyStoreApplier
dataspace.secret.aplj.kafka.truststore.order=2
В примере выше пароли могут находиться как в трех разных файлах секретов, так и в каком-то одном или двух из них, а другие файлы могут при этом отсутствовать. Ошибки в этом случае не будет, в журнал будет записано сообщение, что файл не существует, а механизм вычитает пароли из доступных файлов секретов.
Kafka Archiving Applier#
Обработчик применения секретов для Kafka Archiving Applier — sbp.sbt.tsa.integration.hotreload.HotReloadContextRefresher — отвечает за обработку секретов keystore/truststore.
Успешное обновление отражается в журнале с уровнем INFO. Если неуспешно — в журнал выводится ошибка и откладывается применение обновленных секретов на следующую итерацию.
Для секретов keystore и truststore необходимо задавать отдельные группы, т.к. это разные файлы.
Пример:
dataspace.secret.tsa.kafka.keystore.filename=/secrets/keystore/keystore-tsa.jks
dataspace.secret.tsa.kafka.keystore.applier=sbp.sbt.tsa.integration.hotreload.HotReloadContextRefresher
dataspace.secret.tsa.kafka.truststore.filename=/secrets/keystore/truststore-tsa.jks
dataspace.secret.tsa.kafka.truststore.applier=sbp.sbt.tsa.integration.hotreload.HotReloadContextRefresher
Kafka ЕПК Applier сервиса дедубликации#
Обработчики применения секретов для Kafka ЕПК идут парой:
sbp.sbt.relocation.publisher.epk.synapse.hotreload.KafkaEpkPasswordsApplier— отвечает за обработку секретов с паролями от keystore/truststore (ssl.keystore.password,ssl.truststore.password) и секрета с паролем от приватного ключа (ssl.key.password);sbp.sbt.relocation.publisher.epk.synapse.hotreload.KafkaEpkKeyStoreApplier— отвечает за обработку секретов keystore/truststore.
Предполагается, что, если изменились пароли, то секреты keystore/truststore тоже изменились.
KafkaEpkPasswordsApplier всегда должен запускаться раньше KafkaEpkKeyStoreApplier, для этого необходимо использовать dataspace.secret.*.order.
При изменении файлов секретов с паролями KafkaEpkPasswordsApplier запоминает новые значения паролей от keystore/truststore.
При изменении файлов секретов keystore/truststore KafkaEpkKeyStoreApplier получает новые значения паролей от KafkaEpkPasswordsApplier и пробует установить соединение с Kafka ЕПК с использованием новых секретов. Если успешно — обновляет контекст подключения к Kafka ЕПК.
Успешное обновление отражается в журнале с уровнем INFO. Если неуспешно — в журнал выводится ошибка и откладывается применение обновленных секретов на следующую итерацию.
Если пароли ssl.keystore.password, ssl.truststore.password, ssl.keystore.password разнесены по нескольким секретам, то для каждого секрета необходимо задать группу параметров c applier KafkaEpkPasswordsApplier.
Для секретов keystore и truststore необходимо задавать отдельные группы, т.к. это разные файлы.
Пример:
dataspace.secret.epk.synapse.password.keystore.filename=/secrets/properties/passphrase-epk.properties
dataspace.secret.epk.synapse.password.keystore.applier=sbp.sbt.relocation.publisher.epk.synapse.hotreload.KafkaEpkPasswordsApplier
dataspace.secret.epk.synapse.password.keystore.order=1
dataspace.secret.epk.synapse.keystore.filename=/secrets/keystore/keystore-epk.jks
dataspace.secret.epk.synapse.keystore.applier=sbp.sbt.relocation.publisher.epk.synapse.hotreload.KafkaEpkKeyStoreApplier
dataspace.secret.epk.synapse.keystore.order=2
dataspace.secret.epk.synapse.password.truststore.filename=/secrets/properties/truststore-passphrase-epk.properties
dataspace.secret.epk.synapse.password.truststore.applier=sbp.sbt.relocation.publisher.epk.synapse.hotreload.KafkaEpkPasswordsApplier
dataspace.secret.epk.synapse.password.truststore.order=1
dataspace.secret.epk.synapse.truststore.filename=/secrets/keystore/truststore-epk.jks
dataspace.secret.epk.synapse.truststore.applier=sbp.sbt.relocation.publisher.epk.synapse.hotreload.KafkaEpkKeyStoreApplier
dataspace.secret.epk.synapse.truststore.order=2
В примере выше пароли могут лежать как в нескольких разных файлах секретов (под каждый файл при этом должна быть отдельная группа параметров с applier KafkaEpkPasswordsApplier), так и в каком-то одном или двух из них, а другие файлы могут при этом отсутствовать. Ошибки в этом случае не будет, в журнал будет записано сообщение, что файл не существует, а механизм вычитает пароли из доступных файлов секретов.
Kafka Applier в сервисе DataSpace Subscription#
Обработчики применения секретов для Kafka идут парой:
sbp.com.sbt.dataspace.subscription.kafka.hotreload.KafkaSubscriptionsPasswordApplier— отвечает за обработку секретов с паролями от keystore/truststore (ssl.keystore.password,ssl.truststore.password) и секрета с паролем от приватного ключа (ssl.key.password);sbp.com.sbt.dataspace.subscription.kafka.hotreload.KafkaSubscriptionsKeyStoreApplier— отвечает за обработку секретов keystore/truststore.
Предполагается, что, если изменились пароли, то секреты keystore/truststore тоже изменились.
KafkaSubscriptionsPasswordApplier всегда должен запускаться раньше KafkaSubscriptionsKeyStoreApplier, для этого необходимо использовать dataspace.secret.*.order.
При изменении файлов секретов с паролями KafkaSubscriptionsPasswordApplier запоминает новые значения паролей от keystore/truststore.
При изменении файлов секретов keystore/truststore KafkaSubscriptionsKeyStoreApplier получает новые значения паролей от KafkaSubscriptionsPasswordApplier и пробует установить соединение с Kafka с использованием новых секретов. Если успешно — обновляет контекст подключения к Kafka.
Успешное обновление отражается в журнале с уровнем INFO. Если неуспешно — в журнал выводится ошибка и откладывается применение обновленных секретов на следующую итерацию.
Если пароли ssl.keystore.password, ssl.truststore.password, ssl.keystore.password разнесены по нескольким секретам, то для каждого секрета необходимо задать группу параметров c applier KafkaSubscriptionsPasswordApplier.
Для секретов keystore и truststore необходимо задавать отдельные группы, т.к. это разные файлы.
В сервисе DataSpace Subscription может быть сконфигурировано несколько кластеров Kafka, с которыми может работать сервис.
Для каждого кластера Kafka необходимо объявить свою группу параметров hot reload.
При этом после dataspace.secret. у каждого параметра в группе настроек необходимо добавить subscription.kafka.<наименование_кластера_Kafka>.
Группа настроек принимает следующий вид:
dataspace.secret.subscription.kafka.<наименование_кластера_Kafka>.*.filename;dataspace.secret.subscription.kafka.<наименование_кластера_Kafka>.*.applier;dataspace.secret.subscription.kafka.<наименование_кластера_Kafka>.*.order.
Пример:
kind: ConfigMap
apiVersion: v1
metadata:
name: customer-properties
data:
customer.properties: |-
#Настройки для кластера KAFKA_INSTANCE_NAME1
dataspace.subscription.publisher.kafka.config.KAFKA_INSTANCE_NAME1.bootstrap-servers={{ kafka.instance1.bootstrap.servers }}
dataspace.subscription.publisher.kafka.config.KAFKA_INSTANCE_NAME1.key-serializer=org.apache.kafka.common.serialization.StringSerializer
dataspace.subscription.publisher.kafka.config.KAFKA_INSTANCE_NAME1.value-serializer=org.apache.kafka.common.serialization.StringSerializer
dataspace.subscription.publisher.kafka.config.KAFKA_INSTANCE_NAME1.acks={{ kafka.instance1.acks }}
dataspace.subscription.publisher.kafka.config.KAFKA_INSTANCE_NAME1.delivery-timeout-ms={{ kafka.instance1.delivery.timeout.ms }}
dataspace.subscription.publisher.kafka.config.KAFKA_INSTANCE_NAME1.request-timeout-ms=200
dataspace.subscription.publisher.kafka.config.KAFKA_INSTANCE_NAME1.retry-backoff-ms=500
dataspace.subscription.publisher.kafka.config.KAFKA_INSTANCE_NAME1.linger-ms={{ kafka.instance1.linger.ms }}
dataspace.subscription.publisher.kafka.config.KAFKA_INSTANCE_NAME1.enable-idempotence={{ kafka.instance1.enable.idempotence }}
dataspace.subscription.publisher.kafka.config.KAFKA_INSTANCE_NAME1.max-in-flight-requests-per-connection={{ kafka.instance1.max.in.flight.requests.per.connection }}
dataspace.subscription.publisher.kafka.config.KAFKA_INSTANCE_NAME1.security-protocol=SSL
dataspace.subscription.publisher.kafka.config.KAFKA_INSTANCE_NAME1.ssl-keystore-location=/deployments/credentials/keystore.jks
dataspace.subscription.publisher.kafka.config.KAFKA_INSTANCE_NAME1.ssl-truststore-location=/deployments/credentials/truststore.jks
dataspace.subscription.publisher.kafka.config.KAFKA_INSTANCE_NAME1.ssl-endpoint-identification-algorithm=
dataspace.secret.subscription.kafka.KAFKA_INSTANCE_NAME1.password.key.filename=/deployments/credentials/password-instance1.properties
dataspace.secret.subscription.kafka.KAFKA_INSTANCE_NAME1.password.key.applier=sbp.com.sbt.dataspace.subscription.kafka.hotreload.KafkaSubscriptionsPasswordApplier
dataspace.secret.subscription.kafka.KAFKA_INSTANCE_NAME1.password.key.order=1
dataspace.secret.subscription.kafka.KAFKA_INSTANCE_NAME1.keystore.filename=/deployments/credentials/keystore-instance1.jks
dataspace.secret.subscription.kafka.KAFKA_INSTANCE_NAME1.keystore.applier=sbp.com.sbt.dataspace.subscription.kafka.hotreload.KafkaSubscriptionsKeyStoreApplier
dataspace.secret.subscription.kafka.KAFKA_INSTANCE_NAME1.keystore.order=2
dataspace.secret.subscription.kafka.KAFKA_INSTANCE_NAME1.truststore.filename=/deployments/credentials/truststore-instance1.jks
dataspace.secret.subscription.kafka.KAFKA_INSTANCE_NAME1.truststore.applier=sbp.com.sbt.dataspace.subscription.kafka.hotreload.KafkaSubscriptionsKeyStoreApplier
dataspace.secret.subscription.kafka.KAFKA_INSTANCE_NAME1.truststore.order=2
#Настройки для кластера KAFKA_INSTANCE_NAME2
dataspace.subscription.publisher.kafka.config.KAFKA_INSTANCE_NAME2.bootstrap-servers={{ kafka.instance2.bootstrap.servers }}
dataspace.subscription.publisher.kafka.config.KAFKA_INSTANCE_NAME2.key-serializer=org.apache.kafka.common.serialization.StringSerializer
dataspace.subscription.publisher.kafka.config.KAFKA_INSTANCE_NAME2.value-serializer=org.apache.kafka.common.serialization.StringSerializer
dataspace.subscription.publisher.kafka.config.KAFKA_INSTANCE_NAME2.acks={{ kafka.instance2.acks }}
dataspace.subscription.publisher.kafka.config.KAFKA_INSTANCE_NAME2.delivery-timeout-ms={{ kafka.instance2.delivery.timeout.ms }}
dataspace.subscription.publisher.kafka.config.KAFKA_INSTANCE_NAME2.request-timeout-ms=200
dataspace.subscription.publisher.kafka.config.KAFKA_INSTANCE_NAME2.retry-backoff-ms=500
dataspace.subscription.publisher.kafka.config.KAFKA_INSTANCE_NAME2.linger-ms={{ kafka.instance2.linger.ms }}
dataspace.subscription.publisher.kafka.config.KAFKA_INSTANCE_NAME2.enable-idempotence={{ kafka.instance2.enable.idempotence }}
dataspace.subscription.publisher.kafka.config.KAFKA_INSTANCE_NAME2.max-in-flight-requests-per-connection={{ kafka.instance2.max.in.flight.requests.per.connection }}
dataspace.subscription.publisher.kafka.config.KAFKA_INSTANCE_NAME2.security-protocol=SSL
dataspace.subscription.publisher.kafka.config.KAFKA_INSTANCE_NAME2.ssl-keystore-location=/deployments/credentials/keystore.jks
dataspace.subscription.publisher.kafka.config.KAFKA_INSTANCE_NAME2.ssl-truststore-location=/deployments/credentials/truststore.jks
dataspace.subscription.publisher.kafka.config.KAFKA_INSTANCE_NAME2.ssl-endpoint-identification-algorithm=
dataspace.secret.subscription.kafka.KAFKA_INSTANCE_NAME2.password.key.filename=/deployments/credentials/password-instance2.properties
dataspace.secret.subscription.kafka.KAFKA_INSTANCE_NAME2.password.key.applier=sbp.com.sbt.dataspace.subscription.kafka.hotreload.KafkaSubscriptionsPasswordApplier
dataspace.secret.subscription.kafka.KAFKA_INSTANCE_NAME2.password.key.order=1
dataspace.secret.subscription.kafka.KAFKA_INSTANCE_NAME2.keystore.filename=/deployments/credentials/keystore-instance2.jks
dataspace.secret.subscription.kafka.KAFKA_INSTANCE_NAME2.keystore.applier=sbp.com.sbt.dataspace.subscription.kafka.hotreload.KafkaSubscriptionsKeyStoreApplier
dataspace.secret.subscription.kafka.KAFKA_INSTANCE_NAME2.keystore.order=2
dataspace.secret.subscription.kafka.KAFKA_INSTANCE_NAME2.truststore.filename=/deployments/credentials/truststore-instance2.jks
dataspace.secret.subscription.kafka.KAFKA_INSTANCE_NAME2.truststore.applier=sbp.com.sbt.dataspace.subscription.kafka.hotreload.KafkaSubscriptionsKeyStoreApplier
dataspace.secret.subscription.kafka.KAFKA_INSTANCE_NAME2.truststore.order=2
В примере выше пароли могут лежать как в нескольких разных файлах секретов (под каждый файл при этом должна быть отдельная группа параметров с applier KafkaSubscriptionsPasswordApplier), так и в каком-то одном или двух из них, а другие файлы могут при этом отсутствовать. Ошибки в этом случае не будет, в журнал будет записано сообщение, что файл не существует, а механизм вычитает пароли из доступных файлов секретов.
Пример password-instance1.properties:
dataspace.subscription.publisher.kafka.config.KAFKA_INSTANCE_NAME1.ssl-key-password=qwe123
dataspace.subscription.publisher.kafka.config.KAFKA_INSTANCE_NAME1.ssl-keystore-password=12456
dataspace.subscription.publisher.kafka.config.KAFKA_INSTANCE_NAME1.ssl-truststore-password=54321
Пример password-instance2.properties:
dataspace.subscription.publisher.kafka.config.KAFKA_INSTANCE_NAME2.ssl-key-password=123qwe
dataspace.subscription.publisher.kafka.config.KAFKA_INSTANCE_NAME2.ssl-keystore-password=56789
dataspace.subscription.publisher.kafka.config.KAFKA_INSTANCE_NAME2.ssl-truststore-password=98765
Пример custom_property.conf.yml:
kafka.instance1.bootstrap.servers=<список_адресов_брокеров_Kafka>
kafka.instance1.acks=all
kafka.instance1.delivery.timeout.ms=5000
kafka.instance1.linger.ms=0
kafka.instance1.enable.idempotence=true
kafka.instance1.max.in.flight.requests.per.connection=5
kafka.instance2.bootstrap.servers=<список_адресов_брокеров_Kafka>
kafka.instance2.acks=all
kafka.instance2.delivery.timeout.ms=5000
kafka.instance2.linger.ms=0
kafka.instance2.enable.idempotence=true
kafka.instance2.max.in.flight.requests.per.connection=5
# ...
Метрики#
Ведутся следующие метрики:
Counter
dataspace.secret.apply.errors— число ошибок применения секрета в разрезе имен секретов (часть имени настройки), в разрезе типов exception. Считается каждая неуспешная попытка применения.Timer
dataspace.secret.apply.delay— общее время от обновления файла секрета до успешного завершения применения секрета в разрезе имен секретов. Считается от времени изменения файла (по метке времени) до момента применения.Timer
dataspace.secret.apply.time— время непосредственно применения секрета в разрезе имен секретов (часть имени настройки), в разрезе success/failure. Считается время выполнения методаreload.
Часто встречающиеся проблемы и пути их устранения#
Проблема 1: приложение не запускается#
Приложение не запускается, например:
Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured
Решение:
необходимо проверить доступность к БД Main и StandIn внутри Kubernetes (или OpenShift), которые были указаны в secret.
Обратить внимание на распространенную ошибку при настройке secrets основного контура и StandIn:
для secret основного контура используется префикс spring;
для secret контура StandIn используется префикс standin.
Проблема 2: Любая непонятная ситуация, связанная с отсутствием репликации#
Если возникла любая непонятная ситуация, связанная с отсутствием репликации, необходимо проверить, что в конфигурации всех модулей DataSpace установлены следующие параметры:
standin.cloud.client.stub=false;dataspace.replication.enabled=true.
На уже установленном Core можно выполнить проверку с помощью actuator/env, что в списке параметров имеются параметры со значениями dataspace.replication.enabled=true (лучше всего в терминале pod Core запросить: curl http://localhost:8080/actuator/env).
Проблема 3: запись должна выполняться в БД SI, но выполняется в БД Main#
Вектора изменений применяются в БД Main вместо того, чтобы применяться в БД SI.
При модификации созданных сущностей выдаются ошибки вида:
"message":"Object <ID сущности>#<тип сущности> is locked by StandIn","data":"sbp.sbt.sdk.exception.detailedexception.SystemLockException"
Чтобы проверить наличие проблемы, необходимо убедиться, что:
Активный контур в ПЖ — Main.
При создании сущности запись в БД производится в БД Main.
Переходим в ПЖ в StandIn. При создании сущности запись в БД производится снова в БД Main, а не в БД SI.
Решение:
С помощью команды
curl http://localhost:8080/actuator/envв терминале pod модуля dataspace-core получить информацию о значениях параметров подключения к БД:spring.datasource.url;standin.datasource.url.
Убедиться, что значения заданы корректно и направлены на разные и правильные БД.
Если настройки заданы верно, значит ошибку необходимо искать в настройках Kubernetes (или OpenShift).
Описание первого метода решения: ранее через 2 VirtualService приходили запросы на хосты host1.dev.local:6544 и host2.dev.local:6544, которые маршрутизировались на Egress, где был открыт порт 2798 для TCP-трафика. Здесь имелось пересечение трафика. Далее трафик при помощи 2 VirtualService маршрутизировался с порта 2798 на данные указанные хосты. Было предположено, что селектор VirtualService не отрабатывает, и созданы новые порты 3000 и 3001, чтобы трафик для контура Main шел через порт 3001, а VirtualService — через 3000.
Пример второго метода решения:

Проблема 4: приложение не запускается из-за проблем с соединением с БД SI#
Приложение не запускается, в логах выводится информация вида:
[com.sbt.pprb.standin.em.dialect.DialectAutoDetector::getDialectResolutionInfo:53]dataSource=proxyDataSourceDecorator [net.ttddyy.dsproxy.support.ProxyDataSource] -> StandInDataSource [com.zaxxer.hikari.HikariDataSource]
org.postgreSQL.util.PSQLException: The connection attempt failed.
Решение: указать параметры БД Main для secret SI. Если ошибка исчезает, то проблема с БД SI или внутри OS неверно настроена маршрутизация на внешнюю БД SI. Метод решения проблемы см. в разделе "Проблема 3: запись должна выполняться в БД SI, но выполняется в БД Main".
Проблема 5: приложение не запускается из-за проблем с соединением с Kafka ПЖ#
Приложение не запускается, в логах выводится информация вида:
2022-01-18 11:28:33,579 [consumer-0-C-1] [INFO] (org.apache.kafka.clients.consumer.internals.AbstractCoordinator)
[org.apache.kafka.clients.consumer.internals.AbstractCoordinator::markCoordinatorUnknown:849] mdc:()|
[Consumer clientId=consumer-event-dataspace-core-def-02.020.00-5df84f64dc-h6hvh_-2,
groupId=event-dataspace-core-tam-02.020.00-5df84f64dc-h6hvh_]
Group coordinator 127.0.0.1:9092 (id: 2147483643 rack: null) is unavailable or invalid, will attempt rediscovery
Или выводится ошибка вида:
2022-01-18 11:28:33,683 [consumer-0-C-1] [INFO] (org.apache.kafka.clients.consumer.internals.AbstractCoordinator)
[org.apache.kafka.clients.consumer.internals.AbstractCoordinator::joinGroupIfNeeded:455] mdc:()|
[Consumer clientId=consumer-event-dataspace-core-def-02.020.00-5df84f64dc-h6hvh_-2,
groupId=event-dataspace-core-tam-02.020.00-5df84f64dc-h6hvh_]
Join group failed with org.apache.kafka.common.errors.DisconnectException
Решение:
Проверить параметры подключения к Kafka ПЖ (в secret-appjournalsettings).
Проверить доступ из namespace в Kafka (например, с pod выполнить
curl –v kafkaBrokerHost:9093):если доступа нет, то проверить наличие и корректность настроек примитивов Kubernetes (или OpenShift), обеспечивающих такой доступ;
если доступ есть — обратиться к команде ПЖ для диагностики проблем с Kafka.
Проблема 6: ошибка контрольных сумм при проливке скриптов Liquibase на БД StandIn#
Поскольку BSSI-инициализация выполняет полный перенос абсолютно всех данных с БД Main на БД StandIn, переносятся также и данные по служебным таблицам Liquibase.
Liquibase рассчитывает контрольные суммы миграций с учетом параметров, с которыми запускается Liquibase, и эти параметры могут отличаться для БД Main и БД StandIn. Как следствие, при выполнении обновления БД StandIn, созданной в результате BSSI-инициализации, могут возникнуть ошибки контрольных сумм (checksum).
С целью решения проблемы необходимо выполнить перечисленные ниже действия, если после выполнения BSSI-инициализации при выполнении установки новой версии при проливке скриптов Liquibase на БД StandIn возникнет ошибка контрольных сумм следующего вида:
Validation Failed:
1 change sets check sum
com/example/changelog.xml::1::example was: 8:63f82d4ff1b9dfa113739b7f362bd37d but is now: 8:b4fd16a20425fe377b00d81df722d604
Действия:
Проверить параметры запуска Liquibase, заданные в конфигурации (в частности, названия табличных пространств, параметры параллелизма при создании индексов и т.д.). Убедиться, что они заданы корректно, при необходимости скорректировать и повторить обновление.
Если параметры для БД StandIn заданы корректно и они действительно отличаются для БД Main и БД StandIn, необходимо предварительно запустить на БД StandIn Liquibase c командой
clear-checksumsc теми же параметрами подключения, что и для командыupdate.
Проблема 7: проблема конкурентного доступа к служебной таблице T_REPL_AGGLOCKEVENT#
В лог-записях модуля dataspace-applier (gigabas) может быть получена ошибка вида: Failed to select eventId=… row after actual insert collision.
Пример:
2023-10-07 15:12:09,422 [consumer_PPRB_EXPORT_FUNC_SI_LCK_LCK-1-C-1] [INFO] (sbp.dataspace.standin.journal.StandinJournalConsumer) [sbp.dataspace.standin.journal.StandinJournalConsumer::handle:45] mdc:()| Received journal confirmationMode = UNCONFIRMED, createMode = 0, dataType = LCK, serviceId = 6b313c51-eda5-4c53-ba86-d0b4eae43f12_7253054643664388099#ClientRko, version = 27, prevTxId = 4dff75a7-d6ff-4062-966a-3c96f1e9e905_7253054643664388099#ClientRko
2023-10-07 15:12:09,435 [consumer_PPRB_EXPORT_FUNC_SI_LCK_LCK-1-C-1] [INFO] (sbp.com.sbt.dataspace.replication.control.delegate.postgresql.PostgresqlLockControlLogicDelegateImpl) [sbp.com.sbt.dataspace.replication.control.delegate.postgresql.PostgresqlLockControlLogicDelegateImpl::insertEventLine:78] mdc:()| A collision has been detected while inserting an event line into dspc.T_REPL_AGGLOCKEVENT for root=7253054643664388099#ru.pprb.jpa.ClientRko , eventId=6b313c51-eda5-4c53-ba86-d0b4eae43f12
2023-10-07 15:12:09,446 [consumer_PPRB_EXPORT_FUNC_SI_LCK_LCK-1-C-1] [ERROR] (sbp.com.sbt.dataspace.replication.control.VersionLockControlLogicImpl) [sbp.com.sbt.dataspace.replication.control.VersionLockControlLogicImpl::processEvent:61] mdc:()| Error while processing LCK_ARRIVED event=sbp.com.sbt.dataspace.replication.control.ApplicableEvent:[eventId=6b313c51-eda5-4c53-ba86-d0b4eae43f12,rootClass=ru.pprb.jpa.ClientRko,rootId=7253054643664388099,eventCreatedTimestamp=2023-10-07 15:12:09.411,info=null,mask=1,eventTypeName=LCK_ARRIVEDidempotenceKey=nullversion=27]
java.lang.IllegalStateException: Failed to select eventId=6b313c51-eda5-4c53-ba86-d0b4eae43f12 row after actual insert collision
Ошибка происходит из-за высокой конкуренции доступа к строке таблицы T_REPL_AGGLOCKEVENT, описывающей одну транзакцию, в тот момент, когда одновременно разные потоки пытаются применить два или даже три вектора с типами данных LCK, DATASPACE, ULCK и записать служебные данные в одну и ту же строку.
Рекомендуется:
Выполнить настройки согласно описанию в разделе "Поддержка режима ожидания подтверждения коммита во всех модулях DataSpace".
Убедиться, что установлено значение параметра
dataspace.standin.applier.lock-control-logic-mode=VERSION_WITH_DELETE.
Проблема 8: ошибка репликации вектора в случае, если текущая версия больше ожидаемой#
Все транзакции по одному экземпляру агрегата выполняются строго последовательно, и после каждой транзакции версия агрегата увеличивается на единицу.
Векторы, описывающие каждую транзакцию, также имеют версию агрегата и также применяются на StandIn-контуре последовательно в соответствии с версиями векторов. Может получиться, что вектор версии N по какой-то причине не применится на StandIn-контуре или будет потерян. В этом случае вектор версии N+1 при попытке применения не применится по причине неприменения вектора предыдущей версии N.
В лог-записях модуля dataspace-applier (gigabas) появится ошибка вида: Expected version: 2 but received version was: 3.
Пример:
2023-11-02 09:46:46,846 [/] [consumer_DZ-49_EXPORT_FUNC_SI_DATASPACE-0-C-1] [ERROR] (sbp.com.sbt.dataspace.locks.VectorVersionValidatorImpl) [sbp.com.sbt.dataspace.locks.VectorVersionValidatorImpl::throwInvalidVersionException:248] mdc:()| Invalid ROOT version of vector has been received. Expected version: 2 but received version was: 3. Object: 7296752134225985537#AggHuge
2023-11-02 09:46:46,848 [/] [consumer_DZ-49_EXPORT_FUNC_SI_DATASPACE-0-C-1] [ERROR] (sbp.dataspace.standin.journal.StandinJournalConsumer) [sbp.dataspace.standin.journal.StandinJournalConsumer::handle:77] mdc:()| Исключение при попытке применения журнала
sbp.com.sbt.dataspace.locks.versioning.InvalidVectorVersionException: Invalid ROOT version of vector has been received. Expected version: 2 but received version was: 3. Object: 7296752134225985537#AggHuge. versionType: ROOT
Чтобы выполнить репликацию вектора с версией N+1, нужно найти вектор с версией N и выполнить его репликацию. В противном случае необходимо выполнить BSSI-инициализацию (см. раздел "Методика выполнения BSSI-инициализации и BSSI-сверки в ПЖ" документа "Руководство по установке").
Проблема 9: Проблема репликации при переходе на новую версию и откате на предыдущую#
Возможна ситуация, когда выполняется переход фабрики с версии N на новую версию N+1 своего приложения, и соответственно, новую версию модели данных. Но в какой-то момент перехода принимается решение об откате обратно на версию N, и возникает проблема репликации векторов.
Правильная последовательность действий описана в данном разделе (см. раздел "Порядок обновления базовых сервисов DataSpace без недоступности при режиме Функциональный StandIn" документа "Руководство по установке")
Описание неправильной последовательности действий отката при возникновении проблемы:
Выполняется выключение всех модулей dataspace-core и dataspace-applier (gigabas) версии N+1 и включение этих же модулей версии N, не дожидаясь корректного завершения репликации накопившихся векторов.
Фиксируется появление в векторах при репликации ошибок вида:
Исключение при попытке применения журнала sbp.dataspace.standin.listener.modelversion.ModelVersionMoreThanCurrentException: e96be73c-5714-48b1-a776-467b53e6a535: Received version more than model version. applier = 5.0.0, received = 5.0.1Модули dataspace-applier (gigabas) отписываются от topics ПЖ и прекращают работу.
Правильная последовательность действий в случае отката на предыдущую версию:
Проверить, что все модули dataspace-core версии N+1 действительно выключены, в работе находятся только модули dataspace-core версии N.
Выключить все модули dataspace-applier (gigabas) версии N.
Включить один или несколько модулей dataspace-applier (gigabas) версии N+1.
Запустить повторно на исполнение красные векторы с ошибкой ModelVersionMoreThanCurrentException.
Зафиксировать, что все красные векторы исполнены, все новые векторы реплицируются корректно.
Выждать время для гарантированного исполнения всех векторов, которые были сформированы до начала данного процесса (нужно, чтобы гарантированно исполнились все векторы, созданные модулями dataspace-core версии N+1).
Выключить все модули dataspace-applier (gigabas) версии N+1.
Включить штатное количество модулей dataspace-applier (gigabas) версии N.