Руководство по установке#
В руководстве приведены инструкции по установке компонента Сервис управления справочными данными (NSIX) продукта Platform V Dictionaries (SDT).
Системные требования#
Настройки безопасности окружения и перечень платформенных (дополнительных внешних) продуктов, используемых для установки, настройки и контроля в конечной информационной системе (далее — ИС), выбираются при разработке конечной ИС, исходя из характера обрабатываемой в ней информации и иных требований информационной безопасности (далее — ИБ), предъявляемых к ней.
Системное программное обеспечение#
Категории системного программного обеспечения (далее — ПО), которые обязательны или опциональны для установки, настройки, контроля и функционирования компонента:
Категория ПО |
Обязательность установки |
Наименование ПО |
Версия |
Продукт, функциональная совместимость с которым подтверждена |
Описание |
|---|---|---|---|---|---|
Операционная система |
Да |
ОС Альт 8 СП |
10.0 и выше |
Рекомендовано |
ОС контейнеров для запуска модулей компонента |
8.8.1 и выше |
Опционально |
||||
Среда контейнеризации |
Да |
1.21.6 и выше |
Рекомендовано |
Платформа контейнеризации для запуска компонентов сервиса |
|
Red Hat OpenShift 4+ |
8.4 и выше |
Опционально |
|||
4.8 и выше |
Опционально |
||||
Средство контейнеризации |
Да |
Любая актуальная версия |
Рекомендовано |
Инструмент для автоматизации работы с контейнерами |
|
Инструмент сборки, тестирования, развертывания контейнеризированных приложений |
Да |
Jenkins |
2.361.4 и выше |
Рекомендовано |
Сервер автоматизации, используемый для внедрения непрерывной интеграции и непрерывной доставки (CI/CD) для проектов программного обеспечения |
Java-машина |
Да |
AdoptOpenJDK (Adoptium) |
11 и выше |
Рекомендовано |
Окружение для работы модулей компонента |
11 и выше |
Опционально |
||||
Система управления базами данных (СУБД) |
Да |
11.7 и выше |
Рекомендовано. Правообладателем АО «СберТех» также рекомендована СУБД, основанная на PostgreSQL, Platform V Pangolin SE, см. раздел «Платформенные зависимости» |
ПО, взаимодействующее с конечными пользователями, приложениями и базой данных для сбора и анализа данных |
|
Инструмент управления проектом |
Да |
3.5.4 и выше |
Рекомендовано |
Фреймворк для автоматизации сборки проектов на основе описания их структуры в файлах на языке POM |
|
Сервис централизованного хранения репозиториев артефактов (хранилище артефактов) |
Да |
2.5.1 и выше |
Рекомендовано |
Интегрированная платформа для проксирования, хранения и управления зависимостями Java (Maven), образами, а также распространения ПО |
|
Любая актуальная версия |
Опционально |
||||
Любая актуальная версия |
Опционально |
||||
Сервис централизованного хранения репозиториев исходного кода |
Да |
15.0 и выше |
Рекомендовано |
Хранение конфигураций при автоматизированной установке |
|
7.6 и выше |
Опционально |
||||
Сервис интеграции и оркестрации микросервисов в облаке |
Да |
1.12 и выше |
Рекомендовано. Правообладателем АО «СберТех» также рекомендован сервис интеграции и оркестрации микросервисов в облаке, основанный на Istio, Platform V Synapse Service Mesh, см. раздел «Платформенные зависимости» |
Сервис интеграции микросервисов в облаке |
|
Система управления secrets |
Нет |
1.15.4 и выше |
Рекомендовано |
Система управления аутентификационными данными сервисных аккаунтов или учетных записей |
|
Secret Management System (SecMan) |
1.7.0 и выше |
Опционально |
|||
Браузер |
Да |
Яндекс |
19.10 и выше |
Рекомендовано |
Браузер для входа в UI |
Google Chrome |
79.0 и выше |
Опционально |
|||
Safari |
10.12 и выше |
Опционально |
|||
Система для управления изменениями баз данных |
Liquibase |
Любая актуальная версия |
Рекомендовано |
Библиотека для отслеживания, управления и применения изменений схемы базы данных |
Примечание
*
Да — категория ПО обязательна для функционирования сервиса (это означает, что сервис не может выполнять свои базовые функции без установки данной категории ПО).
Нет — категория ПО необязательна для функционирования сервиса (это означает, что сервис может выполнять свои базовые функции без установки данной категории ПО).
**Рекомендовано — рекомендованный правообладателем АО «СберТех» продукт.
Опционально — альтернативный по отношению к рекомендованному правообладателем АО «СберТех» продукт.
Платформенные зависимости#
Для настройки, контроля и функционирования Компонента NSIX реализована интеграция с программными продуктами, правообладателем которых является АО «СберТех»:
Наименование продукта |
Код |
Версия |
Код и наименование компонента |
Обязательность установки (да/нет) |
Описание |
Аналог других производителей |
|---|---|---|---|---|---|---|
Platform V Pangolin SE |
PSQ |
5.3.1 и выше |
PSQL Pangolin |
Да |
Система управления базами данных |
PostgreSQL |
Platform V Audit SE |
AUD |
2.3 и выше |
AUDT Аудит |
Нет |
Сервис для аудирования событий |
С аналогами других производителей не тестировался |
Platform V Synapse Service Mesh |
SSM |
2.10 и выше |
IGEG Граничный прокси |
Да |
Сервис для обеспечения управляемого вызова интеграционных сервисов прикладной части |
Istio |
Platform V Synapse Service Mesh |
SSM |
2.10 и выше |
SVPX Сервисный прокси |
Да |
Сервис для предоставления базовых интеграционных операций прикладной части интеграционного сервиса |
Istio |
Platform V Monitor |
OPM |
4.1 и выше |
LOGA Журналирование |
Нет |
Сервис для хранения лог-файлов |
С аналогами других производителей не тестировался |
Platform V Monitor |
OPM |
4.1 и выше |
MONA Объединенный мониторинг Unimon |
Нет |
Сервис для сбора прикладных и инфраструктурных метрик и отправки их в целевую систему хранения |
С аналогами других производителей не тестировался |
Platform V IAM SE |
IAM |
1.3 и выше |
AUTH IAM Proxy |
Нет |
Сервис управления доступом и информационными ресурсами |
С аналогами других производителей не тестировался |
Platform V IAM SE |
IAM |
4.3 и выше |
AUTZ Объединенный сервис авторизации (ОСА) |
Нет |
Сервис для авторизации |
С аналогами других производителей не тестировался |
Platform V DevOps Tools |
DOT |
1.2 и выше |
CDJE Deploy tools |
Нет |
Сервис для автоматической установки и обновления технологических сервисов и бизнес приложений на существующих и вновь создаваемых стендах |
С аналогами других производителей не тестировался |
Platform V Backend |
#BD |
4.2.2 и выше |
AUTZ Объединенный сервис авторизации (ОСА) 3g |
Нет |
Сервис для авторизации |
С аналогами других производителей не тестировался |
Platform V Backend |
#BD |
4.3 и выше |
OTTS One-Time Password (OTP) / OTT |
Нет |
Сервис для аутентификации и авторизации межсервисных взаимодействий |
С аналогами других производителей не тестировался |
Примечание
***
Да — компонент или продукт необходим для функционирования сервиса (это означает, что сервис не может выполнять свои основные функции без установки данного компонента).
Нет — необязательный для функционирования сервиса компонент или продукт (это означает, что сервис может выполнять свои базовые функции без установки данного компонента).
****Рекомендуется установка программного продукта, правообладателем которого является АО «СберТех», при этом не исключена возможность (допускается правообладателем) использования аналога других производителей. Аналоги, в отношении которых продукт успешно прошел испытания и подтвердил свою работоспособность, указаны в разделе «Системное программное обеспечение».
Аппаратные требования#
Для установки компонента требуется следующая конфигурация аппаратного обеспечения:
Квота на проект: 16 CPU, 32 ГБ Mem.
Количество pod на один элемент развертывания (deployment unit): 1.
Параметры для аппаратного обеспечения работы каждого компонента описаны в таблице:
Компонент |
CPU limit |
Mem limit |
CPU request |
Mem request |
|---|---|---|---|---|
mdc-ivs |
1 |
2Gi |
1 |
2Gi |
mdc-jobs |
2 |
4Gi |
2 |
4Gi |
mdc-kmd |
1 |
2Gi |
1 |
2Gi |
mdc-api |
2 |
4Gi |
2 |
4Gi |
mdc-ui |
- |
- |
- |
- |
fluent-bit-sidecar |
50m |
32Mi |
50m |
32Mi |
ott-sidecar |
700m |
900Mi |
50m |
700Mi |
istio-proxy-sidecar |
300m |
500Mi |
50m |
500Mi |
vault-agent |
50m |
64Mi |
100m |
128Mi |
Состав дистрибутива#
Состав дистрибутивного комплекта при первоначальной установке компонента:
\package\bh — исполняемые jar-файлы в среде JVM (mdc-api.jar, ivs-rest-cloud.jar) jobs-rest-cloud.jar, kmd-rest-cloud.jar;
\package\conf — конфигурационные файлы компонента;
\package\conf\config\parameters — файлы конфигурационных параметров общие для всех Pods оркестратора среды контейнеризации mdc.all.conf, а также в частности для каждого Pod (mdc-api.conf, mdc-jobs.conf и т.д.);
\package\conf\config\data — каталоги, которые содержат файлы импорта данных для платформенных компонентов IAM Proxy (AUTH) продукта Platform V IAM SE (IAM), Журналирование (LOGA) продукта Platform V Monitor (OPM);
\package\conf\k8s\base — каталог содержит общие файлы настроек: docker, istio, configmaps, secrets для оркестраторов контейнеров среды контейнеризации, а также deployment configs только для Kubernetes;
\package\conf\k8s\overrides\openshift — каталог содержит файлы настроек deployment configs для оркестратора контейнеров OpenShift (опционально);
\package\distrib.yml — файл, описывающий расположение и состав дистрибутива;
\package\pipeline.yml — файлы с настройками для системы CI/CD по установке сервиса;
\package\db — скрипты (Liquibase) для инициализации объектов базы данных.
Выбор способа установки#
Реализован следующий способ установки компонента с помощью компонента Deploy tools (CDJE) продукта Platform V DevOps Tools (DOT).
Подготовка окружения#
Настройка системного ПО сервера приложений компонента NSIX#
Настройки из данного раздела выполняются системным администратором компонента. Действия осуществляются под учетной записью пользователя root, либо через sudo, если права позволяют редактирование текста системных файлов, владельцем которых является root.
Настройка сетевого взаимодействия#
На двух серверах БД компонента в файле /etc/hosts должна присутствовать информация об именах серверов приложений компонента и должен быть обеспечен сетевой доступ к данным серверам. Должен быть обеспечен сетевой доступ к БД серверу конфигуратора Платформы. IP адреса и порты серверов следует запросить у администраторов NSIX.
Настройка при развертывании в кластере#
На двух серверах приложений компонента в файле /etc/hosts должна присутствовать следующая информация об именах серверов:
IP
Кластерное имя сервера приложений компонента Кластерное имя сервера приложений компонента (на первом сервере)IP
Кластерное имя сервера приложений компонента Кластерное имя сервера приложений компонента (на втором сервере)IP Внутреннее кластерное имя сервера приложений компонента;
IP Внутреннее кластерное имя сервера баз данных компонента.
Должен быть обеспечен сетевой доступ ко всем указанным выше серверам.
Внутреннее кластерное имя сервера приложений компонента NSIX используется для организации прямого сетевого взаимодействия с сервером баз данных Продукта. На сервере баз данных для этих целей используется внутреннее кластерное имя сервера баз данных Продукта.
В качестве примера внутреннего кластерного имени сервера приложений компонента используется имя mdmpapp.
В качестве примера внутреннего кластерного имени сервера баз данных компонента используется имя mdmpdb.
Требования к среде установки#
Для корректной работы функциональности компонента необходимо проверить, работают ли следующие модули Platform V:
mdc-ivs;
mdc-jobs;
mdc-kmd;
mdc-api;
mdc-ui.
Компонент использует модули ядра Platform V. До установки модуля сервисов прикладного ядра следует развернуть и настроить компоненты, указанные в разделе Платформенные зависимости настоящего документа. Для развертывания компонента NSIX должен быть установлен сервер приложений Kubernetes или Openshift (опционально).
Установка#
Здесь и далее поддерживаемой системой приложений-контейнеров является Kubernetes (использование OpenShift — опционально), в инструкциях по настройке, в именах переменных и параметрах системы могут встречаться названия систем контейнеризации (оркестрации), которые одинаковы и применимы для обеих сред контейнеризации.
Автоматизированная установка сервиса с использованием Deploy Tools#
Настройка интеграции#
Перед установкой компонента убедитесь, что выполнены все следующие условия:
Наличие у пользователя, производящего установку компонента, возможности создания репозиториев в GitLab СЕ, Nexus Public и получения прав на чтение/запись, включая права на чтение/запись в ветке master.
Наличие технической учетной записи для работы с репозиториями.
Должны быть созданы следующие pipeline репозитории GitLab СЕ в проектной области, например:
pipeline — репозиторий с кодовой базой релизов pipeline (на каждый стенд свой репозиторий);
common — репозиторий с глобальными (одинаковыми для всех компонентов в рамках одного стенда) переменными среды (на каждый стенд свой репозиторий).
mdc с параметрами конфигурациями подсистемы MDC.
Должны быть прописаны доступы в репозитории по протоколам SSH + HTTP на чтение/запись во все ветки, в т.ч. в ветку master.
В Nexus Public должны быть размещены дистрибутивы разворачиваемых функциональных подсистем, к данным репозиториям должен быть доступ с правами на чтение для технической учетной записи.
В Nexus Public должны быть созданы следующие репозитории, в которые загружены дистрибутивы всех компонентов pipeline (Installer.Base, Installer.Migration, Installer.Common):
AS_EFS_Installer.Base — глобальные настройки и утилиты для pipeline;
AS_EFS_Installer.Migration — дистрибутив утилиты миграции;
AS_EFS_Installer.Common — базовый дистрибутив common. Это глобальные параметры по умолчанию для pipeline.
К перечисленным в данном пункте репозиториям должен быть доступ с правами на чтение для ТУЗ.
В GitLab СЕ должны быть созданы репозитории, в которые загружены дистрибутивы всех компонентов pipeline.
Подготовка инструментов развертывания
Предусмотрены следующие инструменты развертывания:
JOB Service — job обновления (первичная загрузка кода JOB Deploy на полигон, обновление кода JOB Deploy при выпуске новых релизов JOB Deploy);
JOB Deploy — job развертывания дистрибутивов.
Используя Service job, выполните миграцию актуальных данных для репозиториев common и pipeline.
pipelineVersion=release/D-01.038.794-304
commonVersion=D-01.001.00-464
Настройка параметров конфигурации в common-репозитории#
После завершения миграции:
Добавьте подсистему MDC в common репозиторий.
Заполните environment.json в блоке ENVIR: main.
Пример:
{
"main": {
"credentials": {
"SshKeyCreds": "git_ssh_tech",
"UserPassCreds": "user_pass_tech",
"ansible_vault_id": "encrypt_secret",
"ansible_vault_id_ops": "encrypt_secret",
"jenkinsQAkitCred": "85618fbf-6aac-4c69-be1d-d1fd1895d189",
"openshiftOpsPasswordsCred": "encrypt_pass",
"gatewayClientCer": "gateway_client_cer",
"gatewayClientKey": "gateway_client_key",
"gatewayClientKeystore": "gateway_client_keystore"
},
"ticketID": "true",
"addMarker": "false",
"iag": "true",
"efsReleaseRepo": "",
"platformVersions": [
"R20.1"
],
"openshiftCluster": "https://api.stands-vdc01.solution.mycompany:6443",
"openshiftAppsDomain": "apps.ift-efs1-ds.mycompany.ru",
"openshiftRegistry": "mycompany/public_efs/v2/efs",
"openshiftInnerRegistry": "mycompany",
"openshiftInnerRegistryCommonNamespace": "devopsefs",
"openshiftInnerRegistryAlias": "mycompany",
"openshiftUseSkopeo": "true",
"openshiftOuterRegistryTLSVerify": "false",
"openshiftInnerRegistryTLSVerify": "false",
"openshiftWaitForDeploySeconds": "600",
"openShiftNewPasswords": "true",
"openshiftMultiClusters": "true",
"openshiftNginx": "true",
"openshiftDeploySteps": {
"deployProtocol": "true",
"archiveConfigs": "true",
"deployConfigMaps": "true",
"deployApps": "true",
"deployJKS": "true",
"deployHPA": "false",
"deployServices": "true",
"deployRoutes": "true",
"deploySecrets": "true"
},
"oseProjectMapping": {
"config": {
"sector": "conf"
}
},
"sector": "true",
"sectorFilter": [
"config"
],
"cleanupPattern": "**/conf/config/parameters/*.conf **/conf/data/**/parameters/*.conf"
}
}
{
"main": {
"credentials": {
"SshKeyCreds": "git_ssh_tech",
"UserPassCreds": "user_pass_tech",
"ansible_vault_id": "encrypt_secret",
"ansible_vault_id_ops": "encrypt_secret",
"jenkinsQAkitCred": "85618fbf-6aac-4c69-be1d-d1fd1895d189",
"openshiftOpsPasswordsCred": "encrypt_pass",
"gatewayClientCer": "gateway_client_cer",
"gatewayClientKey": "gateway_client_key",
"gatewayClientKeystore": "gateway_client_keystore"
},
"ticketID": "true",
"addMarker": "false",
"iag": "true",
"efsReleaseRepo": "",
"platformVersions": [
"R20.1"
],
"openshiftCluster": "https://api.stands-vdc01.solution.mycompany:6443",
"openshiftAppsDomain": "apps.ift-efs1-ds.mycompany.ru",
"openshiftRegistry": "mycompany/public_efs/v2/efs",
"openshiftInnerRegistry": "mycompany",
"openshiftInnerRegistryCommonNamespace": "devopsefs",
"openshiftInnerRegistryAlias": "mycompany",
"openshiftUseSkopeo": "true",
"openshiftOuterRegistryTLSVerify": "false",
"openshiftInnerRegistryTLSVerify": "false",
"openshiftWaitForDeploySeconds": "600",
"openShiftNewPasswords": "true",
"openshiftMultiClusters": "true",
"openshiftNginx": "true",
"openshiftDeploySteps": {
"deployProtocol": "true",
"archiveConfigs": "true",
"deployConfigMaps": "true",
"deployApps": "true",
"deployJKS": "true",
"deployHPA": "false",
"deployServices": "true",
"deployRoutes": "true",
"deploySecrets": "true"
},
"oseProjectMapping": {
"config": {
"sector": "conf"
}
},
"sector": "true",
"sectorFilter": [
"config"
],
"cleanupPattern": "**/conf/config/parameters/*.conf **/conf/data/**/parameters/*.conf"
}
}
Пример subsystem.json
{
"__default": {
"classifier": "distrib",
"groupId": "Nexus_PROD",
"packaging": "zip",
"strict": "false",
"sqlReport": "false",
"limit": 200,
"deployType": "manual",
"fpType": "p69",
"openshiftProject": "",
"at": {
"groupId": "Nexus_PROD",
"branch": "master",
"classifier": "distrib",
"packaging": "zip"
},
"at_ui": {
"groupId": "Nexus_PROD",
"branch": "master",
"classifier": "distrib",
"packaging": "zip"
}
},
"MDC": {
"app_name": [
"mdc-ivs",
"mdc-jobs",
"mdc-kmd",
"mdc-api",
"mdc-ui"
],
"groupId": "Nexus_PROD",
"artifactId": "CI02910046_MDC",
"fpType": "bts",
"fpi_name": "mdc",
"versionFilter": "4."
},
"MDC_mycompany": {
"app_name": [
"mdc-ivs",
"mdc-jobs",
"mdc-kmd",
"mdc-api",
"mdc-ui"
],
"groupId": "mycompany_PROD.CI90000122_pprbnsi",
"artifactId": "CI90000127_mdc_cloud",
"nexus_repo": "mycompany_PROD",
"fpType": "bts",
"fpi_name": "mdc",
"versionFilter": "4."
}
}
При добавлении нового сектора в subsystem.json добавьте запись о нем в environment.json.
openshiftProjectName — название проекта.
openshiftSATokenCred — credentials из Jenkins (Secret text c содержанием токена сервисного аккаунта с правами развертывания).
Пример multiclusters.json
{
"datacenters": {
"tribe-pf-dev-nsix-vdc16-01": {
"openshiftCluster": "https://api.stands-vdc01.solution.mycompany:6443",
"openshiftSATokenCred": "dev-nsix-vdc16-01-token",
"openshiftProjectName": "tribe-pf-dev-nsix-vdc16-01",
"openshiftNewRoute": "dummyNewRoute",
"openshiftControlPlane": "dummyIp",
"openshiftControlPlaneIstiodService": "istiod-common-install",
"openshiftRoutersFQDN": [
"dummyIp"
]
}
}
}
При использовании глобальных переменных отредактируйте их под свое окружение и добавьте переменные для компонента.
В common.conf.yml
# адрес БД продукта
global.jdbc.mdc_postgres.url=jdbc:postgresql://хост:порт/имя_бд?prepareThreshold=0
# Установка инициализационных скриптов + патчей метамодели. Проводится только 1 раз на чистую схему
isInstallDBInit: false
# Установка всех скриптов патчей (метамодель, модель и данные). Выбрать true только на схему с данными, иначе false
isInstallDBPatchesAll: true
# Установка скриптов патчей метамодели и модели без данных. Проводится, если предыдущий вариант выбран false
isInstallDBPatchesModel: false
# Если выбрать все варианты как "false", по умолчанию устанавливаются только скрипты патчей метамодели
# Имя дополнительного пользователя (не владельца схемы), под которым работает приложение. Если отдельного пользователя нет, параметр не задается
MDC_APPL_USER: mdc_cloud_appl
# Имя дополнительной роли, которую наследуют вспомогательные пользователи приложения. Если таковой нет, параметр не задается
MDC_APPL_ROLE: mdc_cloud_appl_role
В _global.jdbc.conf
# адрес БД продукта
global.jdbc.mdc_postgres.url=jdbc:postgresql://хост:порт/имя_бд?prepareThreshold=0
В _global.resources.conf внесите конечные хосты, пример:
# Хосты ingress Продукта
global.platform.ingress.route.https=mdc-01.mdc-dev.apps.stands-vdc01.solution.mycompany
global.platform.ingress.route.http=mdc-http-01.mdc-dev.apps.stands-vdc01.solution.mycompany
global.platform.ingress.gateway.https=ingress-gw-mdc-unver
global.platform.ingress.gateway.http=ingress-gw-mdc-unver
global.platform.sgw.route.core.host=mdc-http-test-01.mdc-dev.apps.stands-vdc01.solution.mycompany
# Хосты Продукта
global.platform.baseurl.mdc.ivs=mdc-http-01.mdc-dev.apps.stands-vdc01.solution.mycompany
global.platform.baseurl.mdc.jobs=mdc-http-01.mdc-dev.apps.stands-vdc01.solution.mycompany
global.platform.baseurl.mdc.kmd=mdc-http-01.mdc-dev.apps.stands-vdc01.solution.mycompany
global.platform.baseurl.mdc.api=mdc-http-01.mdc-dev.apps.stands-vdc01.solution.mycompany
global.platform.baseurl.rspit=rspit.dev.apps.stands-vdc01.solution.mycompany
# Контрольная панель Istio
global.multiClusters.openshiftControlPlane=имя_контрольной_панели_istio
В глобальные переменные в ресурсы на данном этапе добавьте
NAMESPACE=название_проектной_области_в_Openshift
В ssl.conf закомментируйте значения параметров ssl.ose.keyStore.mq.keyStoreFromFile и ssl.ose.keyStore.mq.CertAlias, связанных с сертификатами mq, т.к. на данный момент в приложении они не используются:
#ssl.ose.keyStore.mq.keyStoreFromFile=ansible/files/ssl/ukoflssl.jks
#ssl.ose.keyStore.mq.CertAlias=${ssl.ose.istio.keyStore.egress.certAlias}
В openshift.conf
#Параметры ОТТ
# Указывается true, если используется ОТТ, и false в противном случае
global.ott.ose_deploy=true
# Указывается true, если в качестве маршрута ингресса deploy объект типа Route, совместимый только с Openshift, и false, если deploy объект типа Ingress
ose.kind_route.deploy=true
#Параметры Secret Management System (SecMan)
# Указывается true, если используется хранилище паролей и сертификатов Secret Management System (SecMan) вместо обычных secrets
secman.secman_injector=true
Далее задайте значения параметров, связанных с сертификатами Istio egress/ingress, а также ОТТ если используется:
##########################
# Параметры egress/ingress (в примере используется один общий сертификат)
##########################
ssl.ose.istio.keyStore.ingress.CertAlias=ingress
ssl.ose.istio.keyStore.ingress.KeyStoreFromFile=ansible/files/ssl/ingress.jks
ssl.ose.istio.keyStore.egress.CertAlias=ingress
ssl.ose.istio.keyStore.egress.KeyStoreFromFile=ansible/files/ssl/ingress.jks
ssl.ose.istio.keyStore.RootCertAlias=root
ssl.ose.istio.keyStore.ingress.password=ssl.ose.istio.keyStore.ingress.password
ssl.ose.istio.keyStore.egress.password=ssl.ose.istio.keyStore.egress.password
##########################
# Параметры One-Time Password (OTP) / OTT (OTTS)
##########################
ssl.ose.istio.keyStore.ott.KeyStoreFromFile=ansible/files/ssl/ott_store.jks
ssl.ose.istio.trustStore.ott.TrustStoreFromFile=ansible/files/ssl/ott_trust.jks
ssl.ose.istio.keyStore.ott.password=ssl.ose.istio.keyStore.ott.password
ssl.ose.istio.trustStore.ott.password=ssl.ose.istio.trustStore.ott.password
Далее перейдите к созданию secrets и последующих параметров, касающихся сервиса.
Образы#
В _global.resources.conf внесите образы, пример:
# Образ Istio
global.multiClusters.openshiftEnvoyImage=mycompany/registry_redhat_io/openshift-service-mesh/proxyv2-rhel8@sha256:320f5bd35c208e00005c01ce0e83c8f05276119f273e9f881da950fdfff59a13
Настройка интеграции с AUTH и AUTZ#
Для настройки интеграции с авторизатором AUTZ необходимо указать его адрес для NSIX. Для этого необходимо в параметре mdc.configmap.spas.url
прописать URL-адрес сервиса авторизации, на который NSIX будет отправлять запросы на получение прав аутентифицированного пользователя.
AUTZ при получении запроса от NSIX по указанному URL-адресу возвращает ответ, в котором содержатся права конкретного пользователя.
Специальной настройки для интеграции с AUTH не требуется. AUTH перехватывает запрос, выполняющийся через браузер, и проверяет наличие открытой сессии. Если сессия отсутствует, AUTH запрашивает данные авторизации пользователя (имя пользователя и пароль) и передает запрос в NSIX. NSIX проверяет входящий запрос от AUTH на предмет информации о пользователе.
Установка типа авторизации#
Для установки типа авторизации необходимо установить значение для параметра mdc.configmap.security.authorization.
Допустимы значения в зависимости от типа авторизации:
SPAS —
spas;AUTZ Объединенный сервис авторизации (ОСА) —
auth.
Также необходимо в параметре mdc.configmap.spas.url указать URL до сервиса авторизации и заполнить параметры группы mdc.istio.egress.common.spas.* для подключения к сервису по egress.
### Параметры настройки интеграции с сервисом авторизации
#### Параметры для SPAS
mdc.configmap.spas.authentication=none # none — если не используется аутентификация, spas — если используется
mdc.configmap.spas.url=https://адрес_сервера/spas/rest # адрес сервера spas (если не используется — задать произвольный)
#### Параметры для AUTZ
mdc.configmap.security.authentication=iam # none — если не используется аутентификация, iam — если используется
mdc.configmap.security.authorization=autz # Тип авторизации IAM
mdc.configmap.security.iam_channel=SUPPORT # Канал IAM
mdc.configmap.security.iam_mode=PROD # Режим IAM (true/false)
mdc.configmap.security.iam_dev_mode='false' # Dev-режим IAM (true/false)
mdc.configmap.security.iam_tenant=DEFAULT_TENANT # Тенант IAM
mdc.configmap.security.iam_auth_pool_size='20' # Размер пула IAM
mdc.configmap.security.iam_ssl='false' # Использовать ли SSL в IAM
mdc.configmap.security.iam_trust_store_path="" # Путь к trust store IAM
mdc.configmap.security.iam_trust_store_password="" # Пароль trust store IAM
mdc.configmap.security.iam_public_key_locations="" # Путь к публичным ключам IAM
Создание secret#
Пример. Создание secret входного шлюза
Secret входного шлюза состоит из двух ресурсов типа secret. Создание ресурса выполняется с помощью утилиты командной строки − OC client с локальной машины.
Перед началом создания secrets получите следующие файлы:
приватный ключ;
серверный сертификат, подписанный удостоверяющим центром;
цепочка сертификатов.
Выпуск сертификата для создания secret входного шлюза
Выдача сертификатов осуществляется удостоверяющим центром.
Выполните следующие шаги:
Создайте конфигурационный файл запроса на сертификат request.cnf.
[ req ] default_bits = 2048 distinguished_name = req_distinguished_name req_extensions = req_ext prompt = no [ req_distinguished_name ] C = RU L = Moscow ST = Moscow O = my company OU = 00CA CN = 00CA0001TEST [ req_ext ] subjectAltName = @alt_names extendedKeyUsage = serverAuth,clientAuth - указать нужный [alt_names] DNS.1 = test1.mycompany DNS.2 = test2.mycompany DNS.3 = test3.mycompany DNS.4 = test4.delta.mycompanyИсправьте поля OU и CN на нужные. В commonName указывается один из полных адресов хостов сервиса или произвольная строка. В DNS.1, DNS.2 и далее, указываются полные имена хостов сервиса. Все адреса приведены в качестве примера и для реальной инсталляции могут отличаться.
Далее выполните генерацию запроса на сертификат и приватный ключ.
openssl req -out {НАЗВАНИЕ_ЗАПРОСА_НА_ПОДПИСЬ_В_УЦ}.csr -newkey rsa:2048 -nodes -keyout {НАЗВАНИЕ_КЛЮЧА}.key -config {НАЗВАНИЕ_КОНФИГ_ФАЙЛА}.conf
Создание хранилищ .jks для K8/OSE (ingress/egress)#
Получены: приватный ключ, целевой сертификат и цепочка подписи (промежуточный УЦ, корневой УЦ):
osecer.key — приватный ключ
osecer.cer — целевой сертификат
middle.cer — сертификат промежуточного УЦ
root.cer — сертификат корневого УЦ
Переведите все 3 сертификата в формат .pem
openssl x509 -inform der -in osecer.cer -out osecer.pem openssl x509 -inform der -in middle.cer -out middle.pem openssl x509 -inform der -in root.cer -out root.pemВ текстовом редакторе создайте новый файл chain.pem, в него поочереди вставьте содержимое файлов с сертификатами middle.pem и root.pem.
В конец файла osecer.pem добавьте содержимое файла chain.pem.
Сгенерируйте хранилище .p12 следующим образом:
openssl pkcs12 -export -in osecer.pem -inkey osecer.key -out cert_and_key.p12 -name ingress -CAfile chain.pem -caname rootИмпортируйте .p12 в .jks.
keytool -importkeystore -destkeystore test.jks -srckeystore cert_and_key.p12 -srcstoretype PKCS12 -alias ingress # ingress — этот alias уйдет в ssl.conf в common репозиторий.Импортируйте сертификат корневого УЦ в .jks.
keytool -import -trustcacerts -alias root -file root.pem -keystore test.jks # root — этот alias уйдет в ssl.conf в common репозиторий.Проверьте созданное хранилище.
keytool -list -v -keystore test.jksИмпортируйте сертификаты промежуточного и корневого УЦ в .jks.
keytool -import -trustcacerts -alias middle -file middle.pem -keystore mq.jks keytool -import -trustcacerts -alias root -file root.pem -keystore mq.jksДобавьте One-Time Password (OTP) / OTT (OTTS) в egress.jks.
keytool -list -keystore egress_ui.jksСформируйте .p12 хранилище для последующего импорта в jks.
openssl pkcs12 -export -in ci90000103_smgx_ui_st.pem -inkey ci90000103_smgx_ui_st.key -out ci90000103_smgx_ui_st.p12 -name ci90000103_smgx_ui_st -mycompany.pem -caname ott-caИмпортируйте полученное хранилище в основной nginx.jks.
keytool -importkeystore -destkeystore egress_ui.jks -srckeystore ci90000103_smgx_ui_st.p12 -srcstoretype PKCS12 -alias ci90000103_smgx_ui_stТакже зашифруйте пароли в _passwords.conf
Шифрование _passwords.conf производится командами:
зашифроватьopenssl enc -aes-256-cbc -salt -in _passwords_d.conf -out _passwords.confрасшифровать
openssl enc -aes-256-cbc -salt -in _passwords.conf -out _passwords_d.conf -dШифрование secret.yml производится командами: зашифровать
ansible-vault encrypt secret.ymlрасшифровать
ansible-vault decrypt secret.yml
Создание secrets One-Time Password (OTP) / OTT (OTTS)#
Для job нужно по аналогии с вышеуказанным примером создать два jks-хранилища: основное и trust. Пароль от основного хранилища - значение параметра ssl.ose.istio.keyStore.ott.password. Пароль от trust - ssl.ose.istio.trustStore.ott.password.
В первом хранилище нужно разместить публичный сертификат сервера ОТТ с alias ott-service и подписанный сертификат приложения с alias mdc-cloud. Во втором хранилище нужно разместить trust-сертификат с alias sber_root_ca. Оба файла хранилища следует положить в репозиторий common в папку ansible/files/ssl/ и указать относительный путь к ним в параметрах:
Пример:
ssl.ose.istio.keyStore.ott.KeyStoreFromFile=ansible/files/ssl/ott_store.jks
ssl.ose.istio.trustStore.ott.TrustStoreFromFile=ansible/files/ssl/ott_trust.jks
После внесения изменений в Common, которые должны привести к изменению UI, запустите job без выбора параметров.
Настройка репозитория#
В репозитории mdc должны содержаться все значения стендовых параметров приложения. Создайте в репозитории mdc корневую папку с именем как в репозитории common. В ней создайте папку conf, куда сохраните файл versions.conf, содержащий строку вида:
scriptsVersion=#1d7e44fdf33
Версии скриптов могут меняться. Также в новой папке conf создайте подпапку /config/parameters и в нее сохраните conf файлы, аналогичные тем, что в дистрибутиве в папке parameters, и задайте свои/нужные значения.
mdc.all.conf
# Параметры Docker
registry=mycompany/docker # адрес Docker Registry
registry_path=/xxx/nsix_cloud # относительный путь к образам в Docker Registry
# Параметры БД
mdc.configmap.db.dialect=org.hibernate.dialect.PostgreSQL95Dialect # диалект СУБД
mdc.configmap.db.driver=org.postgresql.Driver # драйвер БД
mdc.configmap.db.schema=mdc # название схемы БД
mdc.configmap.db.url=jdbc:postgresql://хостБД:портБД/имяБД?prepareThreshold=0 # ссылка на БД
mdc.configmap.db.connection_init_query=SELECT 1 # Начальный запрос для подключения к БД
mdc.configmap.db.connection_test_query=SELECT 1 # Запрос проверки подключения к БД
# Параметры безопасности
mdc.configmap.spas.authentication=none # none - если не используется аутентификация, spas - если используется
mdc.configmap.spas.url=https://адрес_сервера/spas/rest # адрес сервера spas (если не используется - задать произвольный)
mdc.configmap.security.authentication=iam # none - если не используется аутентификация, iam - если используется
mdc.configmap.security.authorization=autz # Тип авторизации IAM
mdc.configmap.security.iam_channel=SUPPORT # Канал IAM
mdc.configmap.security.iam_mode=PROD # Режим IAM (true/false)
mdc.configmap.security.iam_dev_mode='false' # Dev-режим IAM (true/false)
mdc.configmap.security.iam_tenant=DEFAULT_TENANT # Тенант IAM
mdc.configmap.security.iam_auth_pool_size='20' # Размер пула IAM
mdc.configmap.security.iam_ssl='false' # Использовать ли SSL в IAM
mdc.configmap.security.iam_trust_store_path="" # Путь к trust store IAM
mdc.configmap.security.iam_trust_store_password="" # Пароль trust store IAM
mdc.configmap.security.iam_public_key_locations="" # Путь к публичным ключам IAM
# Параметры fluent-bit
mdc.fluent-bit-forwarder-sidecar.deployment.image=pprb/ci00641491/ci02469991_logger/fluent-bit:1.4.5 # относительная ссылка на Docker-образ fluent bit
mdc.fluent-bit-forwarder-sidecar.configmap.host=vm-st-wf-loga-1042.stands-vdc02.solution.mycompany # хост сервера fluent-bit
mdc.fluent-bit-forwarder-sidecar.configmap.port=80 # порт
mdc.fluent-bit-forwarder-sidecar.configmap.uri=/v1/events # uri
# Параметры-заглушки для конфигмапы фильтра fluent-bit
mdc.fluent-bit-forwarder-sidecar.configmap.filter.namespace={namespace}
mdc.fluent-bit-forwarder-sidecar.configmap.filter.service={service}
mdc.fluent-bit-forwarder-sidecar.configmap.filter.pod={pod}
mdc.fluent-bit-forwarder-sidecar.configmap.filter.moduleId={moduleId}
mdc.fluent-bit-forwarder-sidecar.configmap.filter.moduleVersion={moduleVersion}
mdc.fluent-bit-forwarder-sidecar.configmap.filter.nodeId={nodeId}
mdc.fluent-bit-forwarder-sidecar.configmap.filter.zoneId={zoneId}
# Параметры для logger kafka LOGA (fluent-bit)
mdc.fluent-bit-forwarder-sidecar.configmap.kafka.enabled=true # Включение logger Kafka
mdc.fluent-bit-forwarder-sidecar.configmap.kafka.bootstrap.servers=kafka-server-01.mydomain:9093,kafka-server-02.mydomain:9093 #Список серверов LOGA Kafka для отправки данных
mdc.fluent-bit-forwarder-sidecar.configmap.kafka.topic=mdc.logs #Название топика Kafka, куда будут отправляться данные
mdc.fluent-bit-forwarder-sidecar.configmap.kafka.security.protocol=SSL #Режим шифрования. Указывается SSL или PLAINTEXT при шифровании на стороне egress
mdc.fluent-bit-forwarder-sidecar.configmap.kafka.ssl.ca.location=/etc/kafka/certs/CA.crt # Путь к файлу корневого сертификата egress в pod приложения
mdc.fluent-bit-forwarder-sidecar.configmap.kafka.ssl.key.location=/etc/kafka/certs/tls.key # Путь к файлу клиентского ключа egress в pod приложения
mdc.fluent-bit-forwarder-sidecar.configmap.kafka.ssl.certificate.location=/etc/kafka/certs/tls.crt # Путь к файлу клиентского сертификата egress в pod приложения
# Параметры аудита
mdc.configmap.audit.host=demo.audit2-client-proxy.apps.stands-vdc01.solution.mycompany # адрес сервиса аудит
mdc.configmap.audit.enabled='false' # включить аудит или нет
mdc.configmap.audit.security_change_audit_enabled='false' # включить аудит изменения записей или нет
# Параметры ссылок на приложения mdc
mdc.configmap.url.ivs=http://mdc-http.mdc-dev.apps.stands-vdc01.solution.mycompany # ссылка на хост приложения IVS
mdc.configmap.url.jobs=http://mdc-http.mdc-dev.apps.stands-vdc01.solution.mycompany # ссылка на хост приложения JOBS
mdc.configmap.url.kmd=http://mdc-http.mdc-dev.apps.stands-vdc01.solution.mycompany # ссылка на хост приложения KMD
mdc.configmap.url.api=http://mdc-http.mdc-dev.apps.stands-vdc01.solution.mycompany # ссылка на хост приложения API
mdc.configmap.url.rspit=http://mdc-rspit.apps.stands-vdc01.solution.mycompany # ссылка на хост приложения Витрина данных
# Параметры S3
mdc.configmap.s3.append_lock_period_ms='20000' # Установка временной блокировки на загрузку файла, для устранения перезаписи файла в многопоточном режиме
mdc.configmap.s3.multipart_upload_threshold='52428800' # Пороговое значение размера в байтах для использования многопоточной загрузки загрузки.
mdc.configmap.s3.min_upload_part_size='107371325' # Минимальный порог для размера в байтах загружаемой детали.
mdc.configmap.s3.region=eu-central-1 # регион
mdc.configmap.s3.call_timeout_ms='50000' # время ожидания ответа
mdc.configmap.s3.end_point='https://s3-bh-barrier.subdomain.mycompany/' # адрес сервиса s3
mdc.configmap.s3.bucket_name=s3-bh-barrier # имя корзины
mdc.configmap.s3.external.end_point='https://s3-bh-barrier.subdomain.mycompany/' # адрес внешнего хранилища s3 для потребителей
mdc.configmap.s3.external.bucket_name=s3-bh-barrier # имя внешней корзины потребителя
mdc.configmap.s3.external.folder_name=dictionary # папка в корзине с данными для загрузки
# Прочие параметры приложений mdc
mdc.configmap.other.rspit_block_size="20000" # размер блока экспортируемых в данных в Витрину данных
mdc.configmap.other.server_type=MDC_SERVER # отображаемое имя сервера/стенда
mdc.configmap.other.blocked_domains=Products # список документов работа с которыми будет заблокирована
mdc.configmap.other.rspit_mwnsi_producer_code=jobs-rest # producer_code зарегистрированный в витрине данных
mdc.configmap.other.storage_type=S3 # тип хранилища при работе с файлам S3/DB
mdc.configmap.other.rspit_request_limit='1000' # Лимит кол-ва записей возвращаемых в результатах отправленных запросов к Витрине данных
mdc.configmap.upload_buffer_size='52428800' # размер буфера для чтения и записи файлов
mdc.configmap.max-http-header-size=${global.server.max-http-header-size} # Размер http-заголовков
# Параметры ротации secrets
mdc.configmap.secret_auto_update_enable='true' # Активация сервиса ротации. Если true, то приложение отслеживает и реинициализирует secrets автоматически
mdc.configmap.secret_rotate_window='5' # При обнаружении обновлений в secrets выжидает заданное время, перед началом реинициализации подключений
mdc.configmap.secret_read_retry_count='3' # Количество повторов считывания secrets в случае невозможности считать secret
mdc.configmap.secret_path='/usr/app/config' # Папка с secrets, путь до папки должен соответствовать пути, заданном в ConfgiMap nsix-cm-mdc-secman
mdc.configmap.secret_reload_retry_count='4' # Количество повторов реинициализации подключения с новым secrets в случае неудачного подключения.
mdc-ivs.conf
# Параметры репликации
mdc-ivs.deployment.spec.replicas=1 # количество pod модуля
# Ресурсы необходимые для работы модуля
mdc-ivs.deployment.spec.template.spec.containers.resources.limits.cpu=1
mdc-ivs.deployment.spec.template.spec.containers.resources.limits.memory=2Gi
mdc-ivs.deployment.spec.template.spec.containers.resources.requests.cpu=1
mdc-ivs.deployment.spec.template.spec.containers.resources.requests.memory=2Gi
# Ресурсы выделяемые для контейнера istio
mdc-ivs.deployment.metadata.annotations.sidecar.istio.io.proxyCPU=440m
mdc-ivs.deployment.metadata.annotations.sidecar.istio.io.proxyCPULimit=440m
mdc-ivs.deployment.metadata.annotations.sidecar.istio.io.proxyMemory=1400Mi
mdc-ivs.deployment.metadata.annotations.sidecar.istio.io.proxyMemoryLimit=1400Mi
mdc-ivs.deployment.metadata.annotations.sidecar.istio.io.inject='true' # подключить модуль к istio
#Параметры запуска приложения Java
mdc-ivs.java.opts='-XX:MaxRAMPercentage=75.0'
# Параметры Secret Management System (SecMan)
mdc-ivs.deployment.metadata.annotations.sidecar.secman.agent.inject='true' # добавить контейнер vault-agent
mdc-ivs.deployment.metadata.annotations.sidecar.secman.role=Role-ga-secman-nsix # имя роли
mdc-ivs.deployment.metadata.annotations.sidecar.secman.tenant='' # имя тенанта
mdc-ivs.deployment.metadata.annotations.sidecar.secman.path=/DEV/NSIX/BD/KV # путь к secrets
# Ресурсы выделяемые для контейнера vault-agent
mdc-ivs.deployment.metadata.annotations.sidecar.secman.proxyCPU=50m
mdc-ivs.deployment.metadata.annotations.sidecar.secman.proxyCPULimit=100m
mdc-ivs.deployment.metadata.annotations.sidecar.secman.proxyMemory=64Mi
mdc-ivs.deployment.metadata.annotations.sidecar.secman.proxyMemoryLimit=128Mi
# Параметры database engine secrets Secret Management System (SecMan)
mdc-ivs.deployment.metadata.annotations.sidecar.secman.db.main.enabled=false
mdc-ivs.deployment.metadata.annotations.sidecar.secman.db.main.template.path=/database/pg/static-creds/role-srv-1.pf.dev.mycompany-mdmp-mdc_cloud_appl # имя роли secman для Database Secrets Engine
mdc-jobs.conf
# Параметры репликации
mdc-jobs.deployment.spec.replicas=1
# Ресурсы необходимые для работы модуля
mdc-jobs.deployment.spec.template.spec.containers.resources.limits.cpu=2
mdc-jobs.deployment.spec.template.spec.containers.resources.limits.memory=4Gi
mdc-jobs.deployment.spec.template.spec.containers.resources.requests.cpu=2
mdc-jobs.deployment.spec.template.spec.containers.resources.requests.memory=4Gi
# Ресурсы выделяемые для контейнера istio
mdc-jobs.deployment.metadata.annotations.sidecar.istio.io.proxyCPU=440m
mdc-jobs.deployment.metadata.annotations.sidecar.istio.io.proxyCPULimit=440m
mdc-jobs.deployment.metadata.annotations.sidecar.istio.io.proxyMemory=1400Mi
mdc-jobs.deployment.metadata.annotations.sidecar.istio.io.proxyMemoryLimit=1400Mi
mdc-jobs.deployment.metadata.annotations.sidecar.istio.io.inject='true' # подключить модуль к istio
# Параметры модуля jobs
mdc-jobs.configmap.storage_folder=/app/storage # путь к папке для временного хранения файлов
mdc-jobs.configmap.excluded_dictionaries='' # список справочников которые будут исключены из общего перечня справочники используемых в регламентых заданиях
mdc-jobs.configmap.common_import_max_pool_size=16 # Максимальное количество потоков
mdc-jobs.configmap.common_import_keep_alive_sec=60 # Время простоя потока, после которого поток будет удален
mdc-jobs.configmap.common_import_core_poll_size=3 # Размер основного пула
mdc-jobs.configmap.common_import_queue_capacity=10 # Уровень очереди
mdc-jobs.configmap.monitoring_metric_cron=0 0 6 * * * # cron запуска логики подсчета
mdc-jobs.configmap.quartz_threadpool_threadcount='1' # Допустимое количество обработчиков quartz в одном pod. Значение параметра необходимо выставлять в зависимости от доступных ресурсов.
# Параметры запуска приложения Java
mdc-jobs.java.opts='-XX:MaxRAMPercentage=75.0'
# Параметры Secret Management System (SecMan)
mdc-jobs.deployment.metadata.annotations.sidecar.secman.agent.inject='true' # добавить контейнер vault-agent
mdc-jobs.deployment.metadata.annotations.sidecar.secman.role=Role-ga-secman-nsix # имя роли
mdc-jobs.deployment.metadata.annotations.sidecar.secman.tenant='' # имя тенанта
mdc-jobs.deployment.metadata.annotations.sidecar.secman.path=/DEV/NSIX/BD/KV # путь к secrets
# Ресурсы выделяемые для контейнера vault-agent
mdc-jobs.deployment.metadata.annotations.sidecar.secman.proxyCPU=50m
mdc-jobs.deployment.metadata.annotations.sidecar.secman.proxyCPULimit=100m
mdc-jobs.deployment.metadata.annotations.sidecar.secman.proxyMemory=64Mi
mdc-jobs.deployment.metadata.annotations.sidecar.secman.proxyMemoryLimit=128Mi
# Параметры database engine secrets Secret Management System (SecMan)
mdc-jobs.deployment.metadata.annotations.sidecar.secman.db.main.enabled=false
mdc-jobs.deployment.metadata.annotations.sidecar.secman.db.main.template.path=/database/pg/static-creds/role-srv-1.pf.dev.mycompany-mdmp-mdc_cloud_appl # имя роли secman для Database Secrets Engine
# Параметры для гарантированного удаления справочников (DDIS)
mdc-jobs.configmap.ddis_max_try_count=DDIS_MAX_TRY_COUNT # количество повторных попыток для выполнения запроса в DDIS в случае неуспешного ответа
mdc-jobs.configmap.ddis_interrupt_interval=DDIS_INTERRUPT_INTERVAL # временной интервал между проверками записей на отложенное удаление справочников в DDIS
mdc-jobs.configmap.ddis_sheduled_init_delay=DDIS_SHEDULED_INIT_DELAY # время после старта системы, начиная с которого будет выполнятся процесс отложенного удаления справочников в DDIS
mdc-kmd.conf
# Параметры репликации
mdc-kmd.deployment.spec.replicas=1
# Ресурсы необходимые для работы модуля
mdc-kmd.deployment.spec.template.spec.containers.resources.limits.cpu=1
mdc-kmd.deployment.spec.template.spec.containers.resources.limits.memory=2Gi
mdc-kmd.deployment.spec.template.spec.containers.resources.requests.cpu=1
mdc-kmd.deployment.spec.template.spec.containers.resources.requests.memory=2Gi
# Ресурсы выделяемые для контейнера istio
mdc-kmd.deployment.metadata.annotations.sidecar.istio.io.proxyCPU=440m
mdc-kmd.deployment.metadata.annotations.sidecar.istio.io.proxyCPULimit=440m
mdc-kmd.deployment.metadata.annotations.sidecar.istio.io.proxyMemory=1400Mi
mdc-kmd.deployment.metadata.annotations.sidecar.istio.io.proxyMemoryLimit=1400Mi
mdc-kmd.deployment.metadata.annotations.sidecar.istio.io.inject='true' # подключить модуль к istio
#Параметры запуска приложения Java
mdc-kmd.java.opts='-XX:MaxRAMPercentage=75.0'
# Параметры Secret Management System (SecMan)
mdc-kmd.deployment.metadata.annotations.sidecar.secman.agent.inject='true' # добавить контейнер vault-agent
mdc-kmd.deployment.metadata.annotations.sidecar.secman.role=Role-ga-secman-nsix # имя роли
mdc-kmd.deployment.metadata.annotations.sidecar.secman.tenant='' # имя тенанта
mdc-kmd.deployment.metadata.annotations.sidecar.secman.path=/DEV/NSIX/BD/KV # путь к secrets
# Ресурсы выделяемые для контейнера vault-agent
mdc-kmd.deployment.metadata.annotations.sidecar.secman.proxyCPU=50m
mdc-kmd.deployment.metadata.annotations.sidecar.secman.proxyCPULimit=100m
mdc-kmd.deployment.metadata.annotations.sidecar.secman.proxyMemory=64Mi
mdc-kmd.deployment.metadata.annotations.sidecar.secman.proxyMemoryLimit=128Mi
#Параметры database engine secrets Secret Management System (SecMan)
mdc-kmd.deployment.metadata.annotations.sidecar.secman.db.main.enabled=false
mdc-kmd.deployment.metadata.annotations.sidecar.secman.db.main.template.path=/database/pg/static-creds/role-srv-1.pf.dev.mycompany-mdmp-mdc_cloud_appl # имя роли secman для Database Secrets Engine
mdc-ui.conf
# Параметры модуля ui
mdc-ui.configmap.client_max_body_size=100m # максимальный размер тела входящих http запросов
# Параметры репликации
mdc-ui.deployment.spec.replicas=1
# Ресурсы необходимые для работы модуля
mdc-ui.deployment.spec.template.spec.containers.resources.limits.cpu=200m
mdc-ui.deployment.spec.template.spec.containers.resources.limits.memory=200Mi
mdc-ui.deployment.spec.template.spec.containers.resources.requests.cpu=200m
mdc-ui.deployment.spec.template.spec.containers.resources.requests.memory=200Mi
# Ресурсы выделяемые для контейнера istio
mdc-ui.deployment.metadata.annotations.sidecar.istio.io.proxyCPU=440m
mdc-ui.deployment.metadata.annotations.sidecar.istio.io.proxyCPULimit=440m
mdc-ui.deployment.metadata.annotations.sidecar.istio.io.proxyMemory=500Mi
mdc-ui.deployment.metadata.annotations.sidecar.istio.io.proxyMemoryLimit=500Mi
mdc-ui.deployment.metadata.annotations.sidecar.istio.io.inject='true' # подключить модуль к istio
mdc-api.conf
# Параметры репликации
mdc-api.deployment.spec.replicas=1
# Ресурсы необходимые для работы модуля
mdc-api.deployment.spec.template.spec.containers.resources.limits.cpu=2
mdc-api.deployment.spec.template.spec.containers.resources.limits.memory=4Gi
mdc-api.deployment.spec.template.spec.containers.resources.requests.cpu=2
mdc-api.deployment.spec.template.spec.containers.resources.requests.memory=4Gi
# Ресурсы выделяемые для контейнера istio
mdc-api.deployment.metadata.annotations.sidecar.istio.io.proxyCPU=440m
mdc-api.deployment.metadata.annotations.sidecar.istio.io.proxyCPULimit=440m
mdc-api.deployment.metadata.annotations.sidecar.istio.io.proxyMemory=1400Mi
mdc-api.deployment.metadata.annotations.sidecar.istio.io.proxyMemoryLimit=1400Mi
mdc-api.deployment.metadata.annotations.sidecar.istio.io.inject='true' # подключить модуль к istio
# Параметры сервиса аутентификации
mdc-api.configmap.spas.authentication=none
mdc-api.configmap.spas.url=https://10.255.6.188:8443/spas/rest
# Параметры аудита
mdc-api.configmap.audit.host=хост аудита
mdc-api.configmap.audit.enabled='false'
mdc-api.configmap.audit.security_change_audit_enabled='false'
# Параметры модуля
mdc-api.configmap.other.server_type=SERVER_NAME # отображаемое имя сервера/стенда
mdc-api.configmap.dictionary_delete_enabled='false' # включить/выключить эндпоинт удаления справочников
mdc-api.configmap.common_import_max_pool_size=16 # Максимальное количество потоков
mdc-api.configmap.common_import_keep_alive_sec=60 # Время простоя потока, после которого поток будет удален
mdc-api.configmap.common_import_core_poll_size=3 # Размер основного пула
mdc-api.configmap.common_import_queue_capacity=10 # Уровень очереди
mdc-api.configmap.ddis_disable_send_files='true' # отключить отправку файлов в DDIS
mdc-api.configmap.nsix_stage_service_name=publish-nsix # Имя сервиса этапа распространения для интеграции с DDIS
# Параметры запуска JAVA
mdc-api.java.opts='-XX:MaxRAMPercentage=75.0'
# Параметры Secret Management System (SecMan)
mdc-api.deployment.metadata.annotations.sidecar.secman.agent.inject='false' # добавить контейнер vault-agent
mdc-api.deployment.metadata.annotations.sidecar.secman.role=Role-ga-secman-nsix # имя роли
mdc-api.deployment.metadata.annotations.sidecar.secman.tenant='DEV' # имя тенанта
mdc-api.deployment.metadata.annotations.sidecar.secman.path=/DEV/NSIX/BD/KV # путь к secrets
# Ресурсы выделяемые для контейнера vault-agent
mdc-api.deployment.metadata.annotations.sidecar.secman.proxyCPU=50m
mdc-api.deployment.metadata.annotations.sidecar.secman.proxyCPULimit=100m
mdc-api.deployment.metadata.annotations.sidecar.secman.proxyMemory=64Mi
mdc-api.deployment.metadata.annotations.sidecar.secman.proxyMemoryLimit=128Mi
# Подключение Database Secrets Engine secrets Secret Management System (SecMan)
mdc-api.deployment.metadata.annotations.sidecar.secman.db.main.enabled=false
mdc-api.deployment.metadata.annotations.sidecar.secman.db.main.template.path=/database/pg/static-creds/role-srv-1.pf.dev.mycompany-mdmp-mdc_cloud_appl # имя роли secman для Database Secrets Engine
mdc.istio.all.conf
# Параметры Istio Docker и K8s/Openshift (опционально)
mdc.istio.proxy_image=ссылка на образ Istio в docker registry
mdc.istio.control_panel=название контрольной панели
mdc.istio.istiod_host=istiod-common-install # название сервера на контрольной панели
# Параметры Istio FQDN
mdc.openshift.appFQDN=mdc.mdc-dev.apps.stands-vdc01.solution.mycompany
mdc-http.openshift.appFQDN=mdc-http.mdc-dev.apps.stands-vdc01.solution.mycompany
# Параметры Istio fluent-bit
mdc.fluent-bit-forwarder-sidecar.istio.egress.common.host=logger-endpoint-http-ci00641491-idevgen-yamaha-logger-st.apps.stands-vdc01.solution.mycompany # ссылка на образ Istio
# Параметры ресурсов Istio Egress
mdc.istio.egress.deployment.spec.template.spec.containers.resources.limits.cpu=300m
mdc.istio.egress.deployment.spec.template.spec.containers.resources.limits.memory=500Mi
mdc.istio.egress.deployment.spec.template.spec.containers.resources.requests.cpu=300m
mdc.istio.egress.deployment.spec.template.spec.containers.resources.requests.memory=500Mi
# Параметры ресурсов Istio Ingress
mdc.istio.ingress.deployment.spec.template.spec.containers.resources.limits.cpu=300m
mdc.istio.ingress.deployment.spec.template.spec.containers.resources.limits.memory=500Mi
mdc.istio.ingress.deployment.spec.template.spec.containers.resources.requests.cpu=300m
mdc.istio.ingress.deployment.spec.template.spec.containers.resources.requests.memory=500Mi
mdc.istio.ingress.common.host.mdc_geo_hosts=nsi-dev-geo01.dev-apps.ocp-geo.stands-vdc01.solution.sbt
mdc.istio.ingress.route.haproxy.router.openshift.io.timeout=120s
# Параметры хостов приложений MDC в Istio
mdc.istio.egress.common.host.rspit_host=mdc-rspit.apps.stands-vdc01.solution.mycompany
mdc.istio.egress.common.host.ivs_host=mdc-http.mdc-dev.apps.stands-vdc01.solution.mycompany
mdc.istio.egress.common.host.api_host=mdc-http.mdc-dev.apps.stands-vdc01.solution.mycompany
mdc.istio.ingress.common.host.mdc_ui_host=${global.platform.ingress.route.http|mdc-http.${projectName}.${appsDomain}}
mdc.istio.ingress.common.host.mdc_ui_host_mtls=${global.platform.ingress.route.https|mdc-https.${projectName}.${appsDomain}}
# Параметры таймаутов Istio
mdc.istio.egress.common.http.retries.attempts=2
mdc.istio.egress.common.http.retries.timeout=2s
mdc.istio.egress.common.http.request.timeout=5s
# Параметры для logger kafka LOGA (fluent-bit)
mdc.fluent-bit-forwarder-sidecar.ose.istio.egress.kafka.bootservers=kafka-server-01.mydomain:<ip-адрес-01>:ХХХ:TCP:ХХХ:TCP;kafka-server-02.mydomain:<ip-адрес-02>:TCP:ХХХ:TCP # Список серверов LOGA для отправки данных logger в kafka в формате доменное_имя:ip_адрес:порт_сервера_порт_egress:протокол_соединения
# Параметры аудита Istio
mdc.istio.egress.common.audit.host=demo.audit2-client-proxy.apps.stands-vdc01.solution.mycompany
# Параметры сервиса авторизации Istio
mdc.istio.egress.common.spas.ip=хост
mdc.istio.egress.common.spas.port=порт
mdc.istio.ingress.common.sudir.cn=none
# Параметры БД Istio
mdc.istio.egress.common.db1.host=доменное_имя_хоста_1
mdc.istio.egress.common.db1.ip=ip.адрес.хоста.1
mdc.istio.egress.common.db1.port=6544
mdc.istio.egress.common.db2.host=доменное_имя_хоста_2
mdc.istio.egress.common.db2.ip=ip.адрес.хоста.2
mdc.istio.egress.common.db2.port=6544
# Параметры S3 Istio
mdc.istio.egress.common.s3.end_point=https://s3-bh-barrier.mycompany
mdc.istio.egress.common.s3.host=s3-bh-barrier.mycompany
mdc.istio.egress.common.s3.port=443
# Параметры TLS Istio
mdc.istio.ingress.common.tls.version.max=TLSV1_2
mdc.istio.ingress.common.tls.version.min=TLSV1_2
# Параметры One-Time Password (OTP) / OTT (OTTS) Istio
mdc.ott.sidecar.deployment.image={путь до образа}/ott-client-api@sha256:67406dc889169a9dd787c1c7f370d7f9dff426217ce65181ea35339e01bfd2c5
mdc.istio.egress.common.ott.enabled=false
mdc.istio.egress.se.ott.spec.hosts=["ott-host-01.solution.mycompany","ott-host-02.solution.mycompany"]
mdc.istio.ott.configmap.ott_service_hosts=["ott-host-01.solution.mycompany","ott-host-02.solution.mycompany"]
mdc.istio.ott.configmap.ott_service_url=ott-host-01.solution.mycompany:8443/ott-service/rest/token
mdc.istio.ott.configmap.ott_store_type=PEM
mdc.istio.ott.configmap.ott_service_cert_path=/mnt/secrets/ott/ott-service.crt.pem
mdc.istio.ott.configmap.ott_service_tls_cert_path=/mnt/secrets/ca/mycompany_root_ca.crt.pem
mdc.istio.ott.configmap.ott_client_cert_path=/mnt/secrets/ott/mdc-cloud.crt.pem
mdc.istio.ott.configmap.ott_client_key_path=/mnt/secrets/ott/mdc-cloud.key.pem
mdc.istio.ott.configmap.ott_certstore_path=/mnt/secrets/mdc-cloud.p12
mdc.istio.ott.configmap.ott_client_cert_alias='mdc-cloud'
mdc.istio.ott.configmap.ott_truststore_path=/mnt/secrets/ott_service_truststore.p12
mdc.istio.ott.configmap.ott_module_id=mdc-cloud
mdc.istio.ott.configmap.ott_http_port='8086'
mdc.istio.egress.se.ott.spec.ports.number=8080
# Ресурсы выделяемые для контейнера ott в ingress
mdc.istio.ingress.configmap.ott_anonymous_requests_enabled='true'
mdc.istio.ingress.deployment.spec.template.spec.containers.ott.resources.limits.cpu=300m
mdc.istio.ingress.deployment.spec.template.spec.containers.ott.resources.limits.memory=500Mi
mdc.istio.ingress.deployment.spec.template.spec.containers.ott.resources.requests.cpu=300m
mdc.istio.ingress.deployment.spec.template.spec.containers.ott.resources.requests.memory=500Mi
mdc.istio.ingress.deployment.spec.template.spec.containers.ott.readinessprobe.port=8086
mdc.istio.egress.configmap.ott_anonymous_requests_enabled='true'
# Ресурсы выделяемые для контейнера ott в egress
mdc.istio.egress.deployment.spec.template.spec.containers.ott.resources.limits.cpu=300m
mdc.istio.egress.deployment.spec.template.spec.containers.ott.resources.limits.memory=500Mi
mdc.istio.egress.deployment.spec.template.spec.containers.ott.resources.requests.cpu=300m
mdc.istio.egress.deployment.spec.template.spec.containers.ott.resources.requests.memory=500Mi
mdc.istio.egress.deployment.spec.template.spec.containers.ott.readinessprobe.port=8086
# Параметры kubernetes
mdc.istio.egress.common.kubernetes_service_ip=XXX # ip адрес сервиса kubernetes
# Параметры Secret Management System (SecMan)
mdc.istio.egress.se.secman.spec.hosts=secman-xxx.solution.yyy # хост сервиса
mdc.istio.egress.se.secman.spec.ports.https=443 # https порт
mdc.istio.egress.se.secman.spec.ports.http=80 # http порт
# Параметры Secret Management System (SecMan) для ingress
mdc.istio.ingress.deployment.metadata.annotations.sidecar.secman.agent.inject='true'
mdc.istio.ingress.deployment.metadata.annotations.sidecar.secman.role=Role-ga-secman-nsix
mdc.istio.ingress.deployment.metadata.annotations.sidecar.secman.tenant=
mdc.istio.ingress.deployment.metadata.sidecar.secman.path=/DEV/NSIX/BD/KV
# Ресурсы выделяемые для контейнера vault-agent в ingress
mdc.istio.ingress.deployment.metadata.sidecar.secman.proxyCPU=50m
mdc.istio.ingress.deployment.metadata.sidecar.secman.proxyCPULimit=100m
mdc.istio.ingress.deployment.metadata.sidecar.secman.proxyMemory=64Mi
mdc.istio.ingress.deployment.metadata.sidecar.secman.proxyMemoryLimit=128Mi
# Параметры Secret Management System (SecMan) для egress
mdc.istio.egress.deployment.metadata.annotations.sidecar.secman.agent.inject='true'
mdc.istio.egress.deployment.metadata.annotations.sidecar.secman.role=Role-ga-secman-nsix
mdc.istio.egress.deployment.metadata.annotations.sidecar.secman.tenant=
mdc.istio.egress.deployment.metadata.sidecar.secman.path=/DEV/NSIX/BD/KV
# Ресурсы выделяемые для контейнера vault-agent в egress
mdc.istio.egress.deployment.metadata.sidecar.secman.proxyCPU=50m
mdc.istio.egress.deployment.metadata.sidecar.secman.proxyCPULimit=100m
mdc.istio.egress.deployment.metadata.sidecar.secman.proxyMemory=64Mi
mdc.istio.egress.deployment.metadata.sidecar.secman.proxyMemoryLimit=128Mi
# Параметры подключения PKI Secrets Engine сертификатов для Egress
mdc.istio.egress.deployment.metadata.sidecar.secman.pki_engine.enabled=false
mdc.istio.egress.deployment.metadata.sidecar.secman.pki_engine.commonname=*.apps.mydomain
mdc.istio.egress.deployment.metadata.sidecar.secman.pki_engine.fetch.role=DEV_DZO/PKI/issue/role-ga-secman-nsix
mdc.istio.egress.deployment.metadata.sidecar.secman.pki_engine.format=pem
mdc.istio.egress.deployment.metadata.sidecar.secman.pki_engine.ttl=36000000
# Параметры подключения PKI Secrets Engine сертификатов для One-Time Password (OTP) / OTT (OTTS) в Egress
mdc.istio.egress.deployment.metadata.sidecar.secman.pki_engine.ott.enabled=false
mdc.istio.egress.deployment.metadata.sidecar.secman.pki_engine.ott.commonname=*.apps.mydomain
mdc.istio.egress.deployment.metadata.sidecar.secman.pki_engine.ott.client.role=DEV_DZO/PKI/issue/role-ga-secman-nsix
mdc.istio.egress.deployment.metadata.sidecar.secman.pki_engine.ott.service.role=DEV_DZO/PKI/issue/role-ga-secman-nsix
mdc.istio.egress.deployment.metadata.sidecar.secman.pki_engine.ott.format=pem
mdc.istio.egress.deployment.metadata.sidecar.secman.pki_engine.ott.ttl=36000000
# Параметры подключения PKI Secrets Engine сертификатов для Ingress
mdc.istio.ingress.deployment.metadata.sidecar.secman.pki_engine.enabled=false
mdc.istio.ingress.deployment.metadata.sidecar.secman.pki_engine.commonname=*.apps.mydomain
mdc.istio.ingress.deployment.metadata.sidecar.secman.pki_engine.fetch.role=DEV/PKI/issue/role-ga-secman-nsix
mdc.istio.ingress.deployment.metadata.sidecar.secman.pki_engine.format=pem
mdc.istio.ingress.deployment.metadata.sidecar.secman.pki_engine.ttl=36000000
# Параметры подключения PKI Secrets Engine сертификатов для One-Time Password (OTP) / OTT (OTTS) в Ingress
mdc.istio.ingress.deployment.metadata.sidecar.secman.pki_engine.ott.enabled=false
mdc.istio.ingress.deployment.metadata.sidecar.secman.pki_engine.ott.commonname=*.apps.mydomain
mdc.istio.ingress.deployment.metadata.sidecar.secman.pki_engine.ott.client.role=DEV/PKI/issue/role-ga-secman-nsix
mdc.istio.ingress.deployment.metadata.sidecar.secman.pki_engine.ott.service.role=DEV/PKI/issue/role-ga-secman-nsix
mdc.istio.ingress.deployment.metadata.sidecar.secman.pki_engine.ott.format=pem
mdc.istio.ingress.deployment.metadata.sidecar.secman.pki_engine.ott.ttl=36000000
mdc-api.istio.conf
# Параметры One-Time Password (OTP) / OTT (OTTS) Istio
mdc-api.istio.egress.configmap.ott.service_url=ott-host01.solution.mycompany:8443/ott-service/rest/token
mdc-api.istio.egress.configmap.ott.certstore_path=/mnt/secrets/mdc-api-cloud.p12
mdc-api.istio.egress.configmap.ott.client_cert_alias='mdc-api-cloud'
mdc-api.istio.egress.configmap.ott.truststore_path=/mnt/secrets/ott_service_truststore.p12
mdc-api.istio.egress.configmap.ott.module_id=mdc-api-cloud
mdc-api.istio.egress.configmap.ott.service_hosts=ott-host01.solution.mycompany:8444,ott-host02.solution.mycompany:8444
Для синхронизации списка в job DEPLOY запустите playbook MIGRATION_FP и затем после выполнения измените значения по умолчанию на необходимые.
Описание настроек подсистемы доступа#
Конфигурация подсистемы доступа#
Создание пользователей и присвоение им ролей#
Создание пользователей и присвоение им ролей выполняется в IAM Proxy (AUTH). Подробнее можно ознакомиться с эксплуатационной документацией IAM Proxy (AUTH) в составе продукта Platform V IAM SE (IAM).
Создание и обновление ролей#
Создание и обновление ролей и полномочий выполняется в Объединенном сервисе авторизации (AUTZ). Подробнее можно ознакомиться в документе Руководство оператора Объединенного сервиса авторизации (AUTZ) в составе продукта Platform V IAM SE (IAM).
Описание настроек среды контейнеризации#
Подключение к Istio, настройка сертификатов и создание secrets#
Данные действия выполняются индивидуально для каждой именованной области среды контейнеризации в пределах каждого стенда.
Данные шаги не обязательны, если в целевой проектной области среды контейнеризации не планируется использовать Istio.
При использовании нескольких пространств имен аналогичные настройки необходимо провести для каждого из них.
Создание и настройка secrets для образов и параметров приложений#
Для корректной работы приложений необходимо создать в меню Workloads — Secrets — secret для скачивания образа типа Image pull Secret и два secret с приложениями — secret-mdc-db и secret-mdc-spas.
Значение переменных следует редактировать не напрямую в yaml (здесь оно отображается в зашифрованном виде), а через меню Edit secret.
Secret для скачивания образов (в примере названа mdc-pull) должен иметь тип kubernetes.io/dockerconfigjson, в котором содержится параметр вида .dockerconfigjson и содержанием.
{"auths":{"https://ссылка_на_хранилище_образов":{"username":"имя_пользователя","password":"пароль","auth":"кодаутентификации","email":""}}}
Secret имеет вид:
kind: Secret
apiVersion: v1
metadata:
name: mdc-pull
data:
.dockerconfigjson: >-
зашифрованный_блок_json
type: kubernetes.io/dockerconfigjson
Имя этого secret может быть произвольным, состоящим из латинских букв, цифр и символа -. В дальнейшем будет задаваться при настройке стендозависимых параметров.
secret-mdc должен содержать переменные jdbc.mdc_postgres.user и jdbc.mdc_postgres.password, в которых необходимо задать имя пользователя и пароль схемы БД.
kind: Secret
apiVersion: v1
metadata:
name: secret-mdc-db
stringData:
jdbc.mdc_postgres.user: логин_пользователя_БД
jdbc.mdc_postgres.password: пароль_пользователя_БД
platform.spas.token: токен_спас
mdc.secret.s3.access_key: публичный_ключ_доступа_к_s3
mdc.secret.s3.secret_key: приватный_ключ_доступа_к_s3
mdc.secret.s3.external.access_key: публичный_ключ_доступа_к_s3_для_внешних_сервисов
mdc.secret.s3.external.secret_key: приватный_ключ_доступа_к_s3_для_внешних_сервисов
type: Opaque
Установка приложений#
Автоматическая установка#
Установка проводится в автоматическом режиме с помощью Deploy Tools.
При установке через Deploy Tools для k8s/Openshift выберите директорию конфигурации, SUBSYSTEM = MDC, версию дистрибутива и namespace. Далее выберите playbooks в зависимости от потребностей:
MIGRATION_FP_CONF - миграция параметров дистрибутива в репозиторий. Рекомендуется выполнять отдельным шагом и затем править дефолтные значения стендозависимых параметров на действительные
DB_UPDATE — обновление БД OPENSHIFT_DEPLOY;
OPENSHIFT_DEPLOY — установка приложений MDC без Istio;
OPENSHIFT_INGRESS_EGRESS_DEPLOY — установка приложений ingress и egress.
Перед выполнением установки следует уточнить и скорректировать значения параметров в common репозитории global.ott.ose_deploy ose.kind_route.deploy secman.secman_injector в зависимости от того, используется ли ОТТ, маршруты типа Route и Secret Management System (SecMan), а также если используется Secret Management System (SecMan), то параметры в репозитории, связанные с использованием PKI Secrets Engine для Ingress/Egress и Database Secrets Engine для приложений
Интеграция с платформенными зависимостями
Для исходящего трафика используется сервис Egress-istio. egress-svc-mdc — используется для сервисного трафика, предназначен для балансирования и терминации трафика на границе сети, для служб и сервисов аудита, логирования, мониторинга.
Шаблон установки для egress-svc-mdc — k8s/base/istio/deployments/egress/*.yaml. Каждый из этих шаблонов разворачивает egress-envoy и One-Time Password (OTP) / OTT (OTTS) сервис, подключенный как sidecar. Для активации авторизации на envoy с применением One-Time Password (OTP) / OTT (OTTS) используется настройка envoyfiltra:
kind: EnvoyFilter
apiVersion: networking.istio.io/v1alpha3
metadata:
name: egress-ef-mdc-audit-${distrib.release.version}
labels:
app: mdc-egress
type: resource
spec:
configPatches:
- applyTo: HTTP_FILTER
match:
context: GATEWAY
listener:
filterChain:
filter:
name: envoy.http_connection_manager
portNumber: 8091 # порт из gateway. при запросах на данный порт будет вызываться ott-sidecar для проставления токена
patch:
operation: INSERT_BEFORE
value:
name: envoy.ext_authz
config:
failure_mode_allow: false # запрещает трафик при недоступности сервиса авторизации
grpc_service:
google_grpc:
stat_prefix: ext_authz
target_uri: unix:/mnt/ott-uds-socket/ott.socket # используется для взаимодействия с ott-sidecar
timeout: 4s # на фактическую производительность влияние не оказывает, но необходимо для корректного запуска
with_request_body:
allow_partial_message: true
max_request_bytes: 65536
workloadSelector:
labels:
app: mdc-egress-${NAMESPACE}
istio: mdc-egress-${NAMESPACE}
egress-svc-mdc использует порт 5443 (mTLS + One-Time Password (OTP) / OTT (OTTS)) в качестве выходного шлюза. Все остальные порты используются для mapping портов.
kind: Service
apiVersion: v1
metadata:
name: egress-svc-mdc-${distrib.release.version}
labels:
app: mdc-egress
type: resource
spec:
ports:
- name: status-port
protocol: TCP
port: 15020
targetPort: 15020
- name: tcp-9001 # DB_1 main
protocol: TCP
port: 9001
targetPort: 9001
- name: tcp-9002 # DB_2 second
protocol: TCP
port: 9002
targetPort: 9002
- name: http-8089 # fluent-bit
protocol: TCP
port: 8089
targetPort: 8089
- name: http-8091 # Audit
protocol: TCP
port: 8091
targetPort: 8091
- name: http-8092 # DataMart
protocol: TCP
port: 8092
targetPort: 8092
- name: tcp-8093 # AUTH
protocol: TCP
port: 8093
targetPort: 8093
- name: http-8095 # ceph
protocol: TCP
port: 8095
targetPort: 8095
selector:
app: mdc-egress-${NAMESPACE}
istio: mdc-egress-${NAMESPACE}
type: ClusterIP
sessionAffinity: None
Компонент Журналирование (LOGA) продукта Platform V Monitor, взаимодействие mTLS + One-Time Password (OTP) / OTT (OTTS)
kind: ServiceEntry
apiVersion: networking.istio.io/v1alpha3
metadata:
name: egress-se-mdc-fluent-bit-${distrib.release.version}
labels:
app: mdc-egress
type: resource
spec:
hosts:
- ${mdc.fluent-bit-forwarder-sidecar.istio.egress.common.host}
ports:
- name: http-80
number: 80
protocol: HTTP
- name: https-443
number: 443
protocol: HTTPS
location: MESH_EXTERNAL
resolution: DNS
exportTo:
- .
kind: Gateway
apiVersion: networking.istio.io/v1alpha3
metadata:
name: egress-gw-mdc-fluent-bit-${distrib.release.version}
labels:
product: mdc
type: resource
spec:
servers:
- hosts:
- ${mdc.fluent-bit-forwarder-sidecar.istio.egress.common.host}
port:
name: http-8089
number: 8089
protocol: HTTP
selector:
app: mdc-egress-${NAMESPACE}
istio: mdc-egress-${NAMESPACE}
kind: VirtualService
apiVersion: networking.istio.io/v1alpha3
metadata:
name: egress-vs-mdc-fluent-bit-${distrib.release.version}
labels:
app: mdc-egress
type: resource
spec:
hosts:
- ${mdc.fluent-bit-forwarder-sidecar.istio.egress.common.host}
gateways:
- mesh
- egress-gw-mdc-fluent-bit-${distrib.release.version}
http:
- match:
- gateways:
- mesh
port: 80
rewrite:
authority: ${mdc.fluent-bit-forwarder-sidecar.istio.egress.common.host}
route:
- destination:
host: egress-svc-mdc-${distrib.release.version}
port:
number: 8089
retries:
attempts: ${mdc.istio.egress.common.http.retries.attempts}
perTryTimeout: ${mdc.istio.egress.common.http.retries.timeout}
retryOn: gateway-error,connect-failure,refused-stream
timeout: ${mdc.istio.egress.common.http.request.timeout}
- match:
- gateways:
- egress-gw-mdc-fluent-bit-${distrib.release.version}
port: 8089
route:
- destination:
host: ${mdc.fluent-bit-forwarder-sidecar.istio.egress.common.host}
port:
number: 443
exportTo:
- .
kind: EnvoyFilter
apiVersion: networking.istio.io/v1alpha3
metadata:
name: egress-ef-mdc-fluent-bit-${distrib.release.version}
labels:
app: mdc-egress
type: resource
spec:
configPatches:
- applyTo: HTTP_FILTER
match:
context: GATEWAY
listener:
filterChain:
filter:
name: envoy.http_connection_manager
portNumber: 8089 # порт из gateway. при запросах на данный порт будет вызываться ott-sidecar для проставления токена
patch:
operation: INSERT_BEFORE
value:
name: envoy.ext_authz
config:
failure_mode_allow: false # запрещает трафик при недоступности сервиса авторизации
grpc_service:
google_grpc:
stat_prefix: ext_authz
target_uri: unix:/mnt/ott-uds-socket/ott.socket # используется для взаимодействия с ott-sidecar
timeout: 2s # на фактическую производительность влияние не оказывает, но необходимо для корректного запуска
with_request_body:
allow_partial_message: true
max_request_bytes: 65536
workloadSelector:
labels:
app: mdc-egress-${NAMESPACE}
istio: mdc-egress-${NAMESPACE}
Компонент Аудит AUDT продукта Platform V Audit SE AUD, взаимодействие mTLS + One-Time Password (OTP) / OTT (OTTS)
kind: ServiceEntry
apiVersion: networking.istio.io/v1alpha3
metadata:
name: egress-se-mdc-audit-${distrib.release.version}
labels:
app: mdc-egress
type: resource
spec:
hosts:
- ${mdc.istio.egress.common.audit.host}
ports:
- name: https-443
number: 443
protocol: HTTPS
- name: http-80
number: 80
protocol: HTTP
location: MESH_EXTERNAL
resolution: DNS
exportTo:
- .
kind: Gateway
apiVersion: networking.istio.io/v1alpha3
metadata:
name: egress-gw-mdc-audit-${distrib.release.version}
labels:
product: mdc
type: resource
spec:
servers:
- hosts:
- ${mdc.istio.egress.common.audit.host}
port:
name: http-8091
number: 8091
protocol: HTTP
selector:
app: mdc-egress-${NAMESPACE}
istio: mdc-egress-${NAMESPACE}
kind: VirtualService
apiVersion: networking.istio.io/v1alpha3
metadata:
name: egress-vs-mdc-audit-${distrib.release.version}
labels:
app: mdc-egress
type: resource
spec:
hosts:
- ${mdc.istio.egress.common.audit.host}
gateways:
- mesh
- egress-gw-mdc-audit-${distrib.release.version}
http:
- match:
- gateways:
- mesh
port: 80
rewrite:
authority: ${mdc.istio.egress.common.audit.host}
route:
- destination:
host: egress-svc-mdc-${distrib.release.version}
port:
number: 8091
- match:
- gateways:
- egress-gw-mdc-audit-${distrib.release.version}
port: 8091
route:
- destination:
host: ${mdc.istio.egress.common.audit.host}
port:
number: 443
exportTo:
- .
kind: DestinationRule
apiVersion: networking.istio.io/v1alpha3
metadata:
name: egress-dr-mdc-audit-${distrib.release.version}
labels:
app: mdc-egress
type: resource
spec:
exportTo:
- .
host: ${mdc.istio.egress.common.audit.host}
trafficPolicy:
loadBalancer:
simple: ROUND_ROBIN
portLevelSettings:
- port:
number: 443
tls:
caCertificates: /etc/istio/egressgateway-ca-certs/CA.crt
clientCertificate: /etc/istio/egressgateway-certs/tls.crt
mode: MUTUAL
privateKey: /etc/istio/egressgateway-certs/tls.key
sni: ${mdc.istio.egress.common.audit.host}
Сервис витрины, взаимодействие mTLS.
kind: ServiceEntry
apiVersion: networking.istio.io/v1alpha3
metadata:
name: egress-se-mdc-rspit-${distrib.release.version}
labels:
app: mdc-egress
type: resource
spec:
hosts:
- ${mdc.istio.egress.common.host.rspit_host}
ports:
- name: http-80
number: 80
protocol: HTTP
- name: https-443
number: 443
protocol: HTTPS
location: MESH_EXTERNAL
resolution: DNS
exportTo:
- .
kind: Gateway
apiVersion: networking.istio.io/v1alpha3
metadata:
name: egress-gw-mdc-rspit-${distrib.release.version}
labels:
product: mdc
type: resource
spec:
servers:
- hosts:
- ${mdc.istio.egress.common.host.rspit_host}
port:
name: http-8092
number: 8092
protocol: HTTP
selector:
app: mdc-egress-${NAMESPACE}
istio: mdc-egress-${NAMESPACE}
kind: VirtualService
apiVersion: networking.istio.io/v1alpha3
metadata:
name: egress-vs-mdc-rspit-${distrib.release.version}
labels:
app: mdc-egress
type: resource
spec:
hosts:
- ${mdc.istio.egress.common.host.rspit_host}
gateways:
- mesh
- egress-gw-mdc-rspit-${distrib.release.version}
http:
- match:
- gateways:
- mesh
port: 80
rewrite:
authority: ${mdc.istio.egress.common.host.rspit_host}
route:
- destination:
host: egress-svc-mdc-${distrib.release.version}
port:
number: 8092
retries:
attempts: ${mdc.istio.egress.common.http.retries.attempts}
perTryTimeout: ${mdc.istio.egress.common.http.retries.timeout}
retryOn: gateway-error,connect-failure,refused-stream
timeout: ${mdc.istio.egress.common.http.request.timeout}
- match:
- gateways:
- egress-gw-mdc-rspit-${distrib.release.version}
port: 8092
route:
- destination:
host: ${mdc.istio.egress.common.host.rspit_host}
port:
number: 443
exportTo:
- .
kind: DestinationRule
apiVersion: networking.istio.io/v1alpha3
metadata:
name: egress-dr-mdc-rspit-${distrib.release.version}
labels:
app: mdc-egress
type: resource
spec:
exportTo:
- .
host: ${mdc.istio.egress.common.host.rspit_host}
trafficPolicy:
loadBalancer:
simple: ROUND_ROBIN
portLevelSettings:
- port:
number: 443
tls:
caCertificates: /etc/istio/egressgateway-ca-certs/CA.crt
clientCertificate: /etc/istio/egressgateway-certs/tls.crt
mode: MUTUAL
privateKey: /etc/istio/egressgateway-certs/tls.key
sni: ${mdc.istio.egress.common.host.rspit_host}
Настройка интеграции с компонентами IAM Proxy (AUTH) продукта Platform V IAM SE (IAM) и Объединенный мониторинг Unimon (MONA) продукта Platform V Monitor (OPM) осуществляется на стороне данных компонентов в соответствии с их эксплуатационной документацией (см. Руководство по установке указанных компонентов).
Обновление#
Перед обновлением компонента необходимо проверить, что образы с новой версией модуля были размещены в Docker-репозитории, и далее выполнить шаги:
В консоли среды контейнеризации открываем Workloads/ Deployments / имя модуля / yaml. Находим строку image: и меняем значение хеш-кода на то, что в конфигурационном релизе для нужного модуля. Сохраняем. Если рестарт не пошел автоматически, удаляем Replication Controller у конфигурации развертывания. Новый Replication Controller начнет старт модуля.
В общем случае могут быть изменены значения переменных. В этом случае необходимо скорректировать их список на основе шаблонов в конфигурационном релизе (Parameters) и заполнить значения в Workloads/ Config Maps / имя модуля / yaml, а также подставить в Deployments строки, где используются новые переменные, если они есть. Сделать перезапуск установки (см. раздел Автоматическая установка).
При обновлении компонента до новой версии удаление предыдущей версии не требуется.
Удаление#
Для удаления компонента необходимо удалить все ресурсы его компонентов:
ConfigMaps, Secrets, Deployments, Deployment Configs (только в OpenShift), Services, PODs, Routes (только в OpenShift);
схему базы данных.
Для удаления ресурса необходимо подключиться к Kubernetes (или опционально OpenShift) через терминал и выполнить команду:
kubectl -n <имя namespace> delete <тип компонента Kubernetes (или опционально Openshift)> <имя компонента Kubernetes (или опционально Openshift)>
Для подключения рекомендуется использовать Kubectl версии, соответствующей версии Kubernetes. Kubectl является составной частью Kubernetes, устанавливается на рабочей станции.
Для удаления схемы базы данных необходимо открыть клиент для работы с БД, подключиться к серверу БД и выполнить команду:
DROP SCHEMA <имя схемы> CASCADE;
Проверка работоспособности#
При установке с помощью DeployTools задание в Jenkins должно завершиться без ошибок. При наличии ошибки нужно смотреть лог и выявлять проблему.
Необходимо убедиться, что в консоли среды контейнеризации в разделе Workloads — Pods все Pods egress / ingress (если он используется) запущены (находятся в статусе Running) и не содержат ошибок.
Также убедитесь, что Pods модулей mdc-api, mdc-jobs, mdc-ivs, mdc-kmd, mdc-ui запущены (находятся в статусе Running) и не содержат ошибок, а Pods с таким же именем и названием deploy завершены.
Если Pod содержит ошибку вида CrashLoppBackOff или другую, горящую красным, нужно перейти в логи этого Pod и посмотреть причину ошибки.
Это может быть, например, некорректная ссылка на Docker-образ image, ошибка jdbc-соединения, некорректная модель БД, отсутствие параметра конфигурации, ошибка соединения с Объединенным сервисом авторизации (AUTZ) и т.д.
Если Pod нет вовсе, нужно убедиться, что создана конфигурация развертывания (Workloads — Deployments), и в его настройках нажать кнопку Start Rollout.
Затем перейти в раздел Pods и следить за появлением Pods имя-модуля-deploy и имя-модуля, при появлении ошибки перейти в лог в течение минуты (далее Pod самоудаляется) и, скопировав сообщение из лога, проанализировать ошибку.
Если Pods работают, нужно посмотреть логи pod соответствующего компонента на наличие сообщений об ошибках.
Успехом развертывания является то, что все сервисы запущены (поднялись все pod). В случае, если не хватает какой-либо смежной системы, pods начнут писать внутри себя логи, либо перезагружаться, указывая на ошибку. Если такого поведения в процессе не наблюдается, то установка выполнена успешно.
Успешным результатом проверки корректной конфигурации механизмов безопасности является успешный запуск приложения, без применения корректной конфигурации механизмов безопасности приложение не запустится.
Для того что бы удостовериться, что выполненные действия по установке произведены верно, необходимо зайти в UI и перейти на главную страницу компонента. Если главная страница и наименование логина пользователя на главной странице отображаются, то все действия произведены верно.
Откат#
Откат производится путем установки дистрибутива компонента предыдущей версии. Детальное описание приведено в разделе Установка.
Откат системного ПО#
Для отката системного ПО необходимо следующее:
обновить настройки файла конфигурации (раздел Настройка параметров конфигурации);
обновить ролевую модель из Объединенного сервиса авторизации (ОСА) (AUTZ);
выполнить установку предыдущей версии модулей (раздел Автоматическая установка).
Откат ролевой модели Объединенного сервиса авторизации (AUTZ)#
Для отката ролевой модели Объединенного сервиса авторизации AUTZ необходимо следующее:
в разделе «Модули» для модулей ivs-rest, kmd-rest и version-rest необходимо загрузить ролевую модель из файлов старой версии (процедура проводится аналогично установке новой ролевой модели);
в разделе «Пользователи» перейти в меню и удалить неиспользуемые более роли, а также, при необходимости, добавить старые роли, которые в откатываемой версии были удалены.
Откат БД#
Для отката системы к БД более ранней версии компонента необходимо восстановить БД из созданной ранее резервной копии. Создание резервной копии данных и восстановление данных из резервной копии выполняется штатными утилитами (средствами) администрирования БД, такими как pg_dump и pg_restore соответственно. Информация приведена в Руководстве по системному администрированию компонента NSIX.
Часто встречающиеся проблемы и пути их устранения#
На данный момент часто встречающиеся проблемы не выявлены.
Чек-лист валидации установки#
Чек лист валидации установки:
проверить в Deployments соответствие количества Pods, также значение метки version должно соответствовать версии системы;
статус ReplicationController соответствует статусу Complete;
статус Pods соответствует статусу Running;
в БД проверить таблицу databasechangelog на соответствие списка изменений схемы;
проверить корректность заполнения параметров безопасности, приведенных в разделе Настройка интеграции;
проверить корректность заполнения остальных параметров настройки интеграций, приведенных в разделе Настройка интеграции.