Руководство по установке компонента Сервис управления справочными данными (NSIX) в составе продукта Platform V Dictionaries (SDT)#
В данном руководстве приведены инструкции по установке компонента Сервис управления справочными данными (NSIX) продукта Platform V Dictionaries (SDT).
Основные понятия#
В таблице приведены основные аббревиатуры и сокращения:
Аббревиатура, сокращение |
Определение |
|---|---|
БД |
База данных |
ИБ |
Информационная безопасность |
ИС |
Информационная система |
ОС |
Операционная система |
ПО |
Программное обеспечение |
ТУЗ |
Технологическая учетная запись |
ТЯ |
Технологическое ядро |
ФП |
Функциональная подсистема |
API |
Application Programming Interface. Интерфейс прикладного программирования |
Bouncer |
легкий менеджер соединений для PostgreSQL |
Jenkins |
Продукт, распространяемый под лицензией Apache 2.0. Программная система с открытым исходным кодом на Java, предназначенная для обеспечения процесса непрерывной интеграции программного обеспечения. Jenkins job по тексту обозначено как «задание» |
LiquiBase |
Независимая от базы данных библиотека с открытым исходным кодом, распространяемая под лицензией Apache 2.0, для отслеживания, управления и применения изменений схемы базы данных |
PSQL |
СУБД PostgreSQL (рекомендуется использование продукта Platform V Pangolin SE (PSQ)) |
В таблице приведены основные термины:
Термин |
Определение |
|---|---|
Платформа, Platform V |
Набор продуктов Platform V, правообладателем которых является АО «СберТех». Перечень таких продуктов обозначен в документации на конкретный продукт |
Продукт |
Platform V Dictionaries (SDT), предназначенный для хранения мастер-данных, управления ими, а также распространения их конечным потребителям |
NSIX |
Компонент Сервис управления справочными данными (NSIX) продукта Platform V Dictionaries (SDT) |
Среда контейнеризации |
Kubernetes (рекомендуется), поддержана опциональная совместимость с OpenShift 4+ |
Системные требования#
Настройки безопасности окружения и перечень платформенных (дополнительных внешних) продуктов, используемых для установки, настройки и контроля в конечной информационной системе (далее — ИС), выбираются при разработке конечной ИС, исходя из характера обрабатываемой в ней информации и иных требований информационной безопасности (далее — ИБ), предъявляемых к ней.
Системное программное обеспечение#
Ниже представлены категории системного программного обеспечения, которые обязательны для установки, настройки, контроля и функционирования компонента NSIX. В каждой категории перечислены все поддерживаемые продукты сторонних правообладателей. Отдельно обозначены варианты, которые рекомендует АО «СберТех» (маркровка «Рекомендовано» в столбце Комментарий). Клиенту необходимо выбрать один из продуктов в каждой категории, исходя из условий использования конечной ИС.
Операционная система#
Наименование |
Версия |
Применение |
|---|---|---|
ОС Альт 8 СП |
10.0 и выше |
Рекомендовано |
Red Hat Enterprise Linux |
3.10 и выше |
Опционально |
Среда контейнеризации#
Необходимое окружение для разворачивания компонента — Kubernetes или OpenShift (далее — среда контейнеризации).
Наименование |
Версия |
Комментарий |
|---|---|---|
1.0 и выше |
Рекомендовано |
|
Red Hat OpenShift |
4.2 и выше |
Опционально |
Инструмент контейнеризации#
Наименование |
Версия |
Комментарий |
|---|---|---|
Любая актуальная версия |
Рекомендовано |
Java-машина#
Наименование |
Версия |
Комментарий |
|---|---|---|
1.8 и выше |
Рекомендовано |
|
OracleJDK |
1.8 и выше |
Опционально |
Система управления базами данных (СУБД)#
Наименование |
Версия |
Комментарий |
|---|---|---|
42.2.5 и выше |
Рекомендовано |
АО «СберТех» также рекомендована СУБД, основанная на PostgreSQL, — Platform V Pangolin SE (PSQ), см. раздел «Платформенные зависимости».
Сервер приложений#
Наименование |
Версия |
Комментарий |
|---|---|---|
9.0.39 и выше |
Рекомендовано |
Браузер#
Наименование |
Версия |
Комментарий |
|---|---|---|
Яндекс |
любая актуальная версия |
Рекомендовано |
Internet Explorer |
11 и выше |
Рекомендовано |
Google Chrome |
любая актуальная версия |
Опционально |
Инструмент управления проектом#
Наименование |
Версия |
Комментарий |
|---|---|---|
3.0 и выше |
Рекомендовано |
Сервис централизованного хранения репозиториев артефактов (хранилище артефактов)#
Наименование |
Версия |
Комментарий |
|---|---|---|
2.5.1 и выше |
Рекомендовано |
|
Nexus Repository Manager PRO |
Любая актуальная версия |
Опционально |
Nexus Repository Manager OSS |
Любая актуальная версия |
Опционально |
Сервис централизованного хранения репозиториев исходного кода#
Наименование |
Версия |
Комментарий |
|---|---|---|
15.0 и выше |
Рекомендовано |
|
Bitbucket |
7.6 и выше |
Опционально |
Система мониторинга сборки#
Наименование |
Версия |
Комментарий |
|---|---|---|
2.31 и выше |
Рекомендовано |
Система для визуализации численных метрик (предоставленных, например, Prometheus):
Наименование |
Версия |
Комментарий |
|---|---|---|
2.5.0 и выше |
Рекомендовано |
Удостоверяющий центр#
Наименование |
Версия |
Комментарий |
|---|---|---|
6.10 и выше |
Рекомендовано |
Сервис интеграции и оркестрации микросервисов в облаке#
Наименование |
Версия |
Комментарий |
|---|---|---|
1.12 и выше |
Рекомендовано |
АО «СберТех» также рекомендован сервис интеграции и оркестрации микросервисов в облаке, снованный на Istio, – Platform V Synapse Service Mesh (SSM), см. раздел «Платформенные зависимости».
Платформенные зависимости#
Для настройки, контроля и функционирования Компонента NSIX реализована интеграция с программными продуктами, правообладателем которых является АО «СберТех»:
Наименование продукта |
Код |
Версия |
Код и наименование компонента |
Обязательность установки |
Описание |
|---|---|---|---|---|---|
Platform V Pangolin SE |
PSQ |
4.6.0. и выше |
PSQL Platform V Pangolin |
Обязательно |
Система управления базами данных |
Platform V Audit SE |
AUD |
1.1 или более поздняя совместимая версия |
AUDT Аудит |
Опционально |
Сервис для аудирования событий |
Platform V Synapse Service Mesh |
SSM |
2.1 |
IGEG Граничный прокси |
Опционально |
Сервис для обеспечения управляемого вызова интеграционных сервисов прикладной части |
Platform V Synapse Service Mesh |
SSM |
2.10 |
SVPX Сервисный прокси |
Опционально |
Сервис для предоставления базовых интеграционных операций прикладной части интеграционного сервиса |
Platform V Monitor |
OPM |
4.1 |
LOGA Журналирование |
Опционально |
Сервис для хранения лог-файлов |
Platform V Monitor |
OPM |
4.1 |
MONA Объединенный мониторинг Unimon |
Опционально |
Сервис для сбора прикладных и инфраструктурных метрик и отправки их в целевую систему хранения |
Platform V Backend |
#BD |
4.3 |
OTTS One-Time-Token |
Опционально |
Сервис для аутентификации и авторизации межсервисных взаимодействий |
Platform V IAM SE |
IAM |
1.3 |
AUTH IAM Proxy |
Опционально |
Сервис управления доступом и информационными ресурсами |
Platform V Backend |
#BD |
4.3 |
APLJ Прикладной журнал |
Опционально |
Сервис для обеспечения отказоустойчивости приложения на уровне базы данных |
Platform V IAM SE |
IAM |
1.3 |
AUTZ Объединённый сервис авторизации (ОСА) |
Опционально |
Сервис для авторизации |
Примечание:
Обязательно — компонент или продукт с данной функциональностью необходим для функционирования устанавливаемого компонента NSIX.
Опционально — компонент или продукт с данной функциональностью не является обязательным (необходимым) для функционирования устанавливаемого компонента NSIX; рекомендуется его установка, но допускается использование аналога других производителей.
Аппаратные требования#
Для установки компонента NSIX требуется следующая конфигурация аппаратного обеспечения:
Квота на проект: 16 CPU, 32 ГБ.
Количество pod на один элемент развертывания (deployment unit): 1.
Параметры для обеспечения работы каждого компонента описаны аппаратного обеспечения в таблице:
Компонент |
CPU limit |
Mem limit |
CPU request |
Mem request |
|---|---|---|---|---|
mdc-ivs |
1 |
2Gi |
1 |
2Gi |
mdc-jobs |
3 |
2Gi |
3 |
2Gi |
mdc-kmd |
1 |
2Gi |
1 |
2Gi |
mdc-api |
2 |
2Gi |
2 |
2Gi |
mdc-ui |
- |
- |
- |
- |
fluent-bit-sidecar |
50m |
32Mi |
50m |
32Mi |
ott-sidecar |
700m |
900Mi |
50m |
700Mi |
istio-proxy-sidecar |
300m |
500Mi |
50m |
500Mi |
Выбор способа установки#
Существует несколько способов установки компонента NSIX:
Целевой (основной) способ установки компонента NSIX с помощью компонента Deploy tools (CDJE) продукта Platform V DevOps Tools (DOT).
Опциональный способ установки компонента NSIX с помощью ручной установки компонента NSIX.
Опциональный способ установки компонента NSIX с помощью автоматизированной установки компонента NSIX с использованием компонента Install_EIP (PILP) продукта Platform V DevOps Tools (DOT).
Подготовка окружения#
Настройка системного ПО сервера приложений компонента NSIX#
Настройки из данного раздела выполняются системным администратором компонента NSIX. Действия осуществляются под учетной записью пользователя root, либо через sudo, если права позволяют редактирование текста системных файлов, владельцем которых является root.
Настройка сетевого взаимодействия#
На двух серверах БД компонента NSIX в файле /etc/hosts должна присутствовать информация об именах серверов приложений компонента NSIX и должен быть обеспечен сетевой доступ к данным серверам. Должен быть обеспечен сетевой доступ к БД серверу конфигуратора Платформы. IP адреса и порты серверов следует запросить у администраторов ТЯ Продукта.
Настройка при развертывании без кластерной конфигурации#
На сервере приложений компонента NSIX в файле /etc/hosts должна присутствовать следующая информация об именах серверов:
IP
\<Имя сервера приложений Компонента\>
\<Имя сервера приложений Компонента\>
IP
\<Имя сервера баз данных Компонента\>
Должен быть обеспечен сетевой доступ ко всем указанным выше серверам. В качестве примера имени сервера приложений компонента NSIX используется имя mdmpapp. В качестве примера имени сервера баз данных Продукта используется имя mdmpdb.
Настройка при развертывании в кластере#
На двух серверах приложений компонента NSIX в файле /etc/hosts должна присутствовать следующая информация об именах серверов:
IP
Кластерное имя сервера приложений Компонента Кластерное имя сервера приложений Компонента> (на первом сервере)IP
Кластерное имя сервера приложений Компонента Кластерное имя сервера приложений Компонента> (на втором сервере)IP Внутреннее кластерное имя сервера приложений Компонента;
IP Внутреннее кластерное имя сервера баз данных Компонента.
Должен быть обеспечен сетевой доступ ко всем указанным выше серверам.
Внутреннее кластерное имя сервера приложений компонента NSIX используется для организации прямого сетевого взаимодействия с сервером баз данных Продукта. На сервере баз данных для этих целей используется внутреннее кластерное имя сервера баз данных Продукта.
В качестве примера внутреннего кластерного имени сервера приложений Компонента используется имя mdmpapp.
В качестве примера внутреннего кластерного имени сервера баз данных компонента NSIX используется имя mdmpdb.
Требования к среде установки#
Для корректной работы функциональности компонента NSIX, необходимо проверить работают ли следующие модули Platform V:
mdc-ivs;
mdc-jobs;
mdc-kmd;
mdc-api;
mdc-ui.
Компонент NSIX использует модули ядра Platform V. До установки модуля сервисов прикладного ядра следует развернуть и настроить компоненты, указанные в разделе Платформенные зависимости настоящего документа. Для развертывания компонента NSIX должен быть установлен сервер приложений Kubernetes или Openshift (опционально).
Состав дистрибутива#
Состав дистрибутивного комплекта при первоначальной установке компонента NSIX:
\package\bh – исполняемые jar-файлы в среде JVM (mdc-api.jar, ivs-rest-cloud.jar) jobs-rest-cloud.jar, kmd-rest-cloud.jar;
\package\conf – конфигурационные файлы компонента NSIX;
\package\conf\config\parameters – файлы конфигурационных параметров общие для всех Pods оркестратора среды контейнеризации mdc.all.conf, а также в частности для каждого Pods (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) для инициализации объектов базы данных.
Установка#
Здесь и далее поддерживаемой системой приложений-контейнеров является Kubernetes (использование OpenShift – опционально), в инструкциях по настройке, в именах переменных и параметрах системы могут встречаться названия систем контейнеризации (оркестрации), которые одинаковы и применимы для обеих сред контейнеризации.
Установка с помощью компонента Deploy tools (CDJE) продукта Platform V DevOps Tools (DOT).#
Перед установкой компонента NSIX убедитесь, что выполнены все следующие условия:
Наличие у пользователя, производящего установку компонента NSIX возможности создания репозиториев в GitLab СЕ, Nexus Public и получения прав на чтение/запись, включая права на чтение/запись в ветке master.
Наличие технической учетной записи для работы с репозиториями.
Должны быть созданы следующие репозитории GitLab СЕ в проектной области:
Репозитории pipeline, например:
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
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 – кред из 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"
]
}
}
}
При использовании глобальных переменных, отредактируйте их под своё окружение и добавьте переменные для компонента NSIX.
В _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.openshiftEnvoyImage=mycompany/registry_redhat_io/openshift-service-mesh/proxyv2-rhel8@sha256:320f5bd35c208e00005c01ce0e83c8f05276119f273e9f881da950fdfff59a13
# Контрольная панель истио
global.multiClusters.openshiftControlPlane=имя_контрольной_панели_истио
В глобальные переменные, в ресурсы на данном этапе добавьте
NAMESPACE=tribe-pf-dev-nsix-vdc16-01
В ssl.conf задайте значения параметров, связанных с сертификатами Параметры ssl.ose.keyStore.mq.keyStoreFromFile и ssl.ose.keyStore.mq.CertAlias
#ssl.ose.keyStore.mq.keyStoreFromFile=ansible/files/ssl/ukoflssl.jks
#ssl.ose.keyStore.mq.CertAlias=${ssl.ose.istio.keyStore.egress.certAlias}
Далее задайте следующие параметры
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
Далее перейдите к созданию секретов и последующих параметров касающихся сервиса.
Пример. Создание секрета входного шлюза
Секрет входного шлюза состоит из двух ресурсов типа secret. Создание ресурса выполняется с помощью утилиты командной строки − OC client с локальной машины.
Перед началом создания секретов получите следующие файлы:
приватный ключ;
серверный сертификат, подписанный удостоверяющим центром;
цепочка сертификатов.
Выпуск сертификата для создания секрета входного шлюза
Выдача сертификатов осуществляется удостоверяющим центром.
Выполните следующие шаги:
Создайте конфигурационный файл запроса на сертификат 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
Импортируйте p.12 в .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
Добавьте OTT в 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
После внесения изменений в Common, которые должны привести к изменению UI, запустите job без выбора параметров.
Настройка ФП репозитория#
В ФП репозитории mdc должны содержаться все значения стендовых параметров приложения. Создайте в ФП репозитории mdc корневую папку с именем как в репозитории common. В ней создайте папку conf куда сохраните файл versions.conf, содержащий строку вида:
scriptsVersion=#1d7e44fdf33
Версии скриптов могут меняться. Также в новой папке conf создайте подпапку /config/parameters и в неё сохраните conf файлы, аналогичные тем что в дистрибутиве в папке parameters и задайте свои/нужные значения.
mdc.all.conf :
#Параметры Docker
mdc.deployment.dockerRegistry=mycompany/docker # адрес 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.user=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
#Параметры fluent-bit
mdc.fluent-bit-forwarder-sidecar.deployment.image=pprb/ci00641491/ci02469991_logger/fluent-bit:1.4.5 # сслылка на образ 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
#Параметры аудита
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=mdc-http.mdc-dev.apps.stands-vdc01.solution.mycompany # ссылка на хост приложения IVS
mdc.configmap.url.jobs=mdc-http.mdc-dev.apps.stands-vdc01.solution.mycompany # ссылка на хост приложения JOBS
mdc.configmap.url.kmd=mdc-http.mdc-dev.apps.stands-vdc01.solution.mycompany # ссылка на хост приложения KMD
mdc.configmap.url.api=mdc-http.mdc-dev.apps.stands-vdc01.solution.mycompany # ссылка на хост приложения API
mdc.configmap.url.rspit=mdc-rspit.apps.stands-vdc01.solution.mycompany # ссылка на хост приложения Распространение справочников, продуктов и тарифов
#Параметры S3
mdc.configmap.s3.external.end_point=https://s3.gos.mycompany
mdc.configmap.s3.external.bucket_name=DvpDev_Dict
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
mdc.configmap.other.storage_type=DB
mdc.configmap.other.rspit_request_limit='1000'
#Флуент-бит заглушки фильтра
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}
mdc-ivs.conf :
#Параметры модуля ivs
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
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'
mdc-jobs.conf:
#Параметры модуля jobs
mdc-jobs.deployment.spec.replicas=1
mdc-jobs.deployment.spec.template.spec.containers.resources.limits.cpu=3.75
mdc-jobs.deployment.spec.template.spec.containers.resources.limits.memory=2Gi
mdc-jobs.deployment.spec.template.spec.containers.resources.requests.cpu=3.75
mdc-jobs.deployment.spec.template.spec.containers.resources.requests.memory=2Gi
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'
mdc-jobs.configmap.storage_folder=/app/storage
mdc-jobs.configmap.cron.export_rspit_all='0 0 1 * * *'
mdc-jobs.configmap.cron.clear_rspit='0 0 4 * * *'
mdc-jobs.configmap.upload_buffer_size='52428800'
mdc-kmd.conf :
#Параметры модуля kmd
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
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'
mdc-ui.conf:
#Параметры модуля ui
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
mdc-ui.configmap.client_max_body_size=100m
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'
mdc-api.conf:
#Параметры модуля api
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=2Gi
mdc-api.deployment.spec.template.spec.containers.resources.requests.cpu=2
mdc-api.deployment.spec.template.spec.containers.resources.requests.memory=2Gi
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'
#Параметры модуля api - аудит
mdc-api.configmap.audit.host=хост аудита
mdc-api.configmap.audit.enabled='false'
mdc-api.configmap.audit.security_change_audit_enabled='false'
#Параметры модуля api - прочие
mdc-api.configmap.other.server_type=SERVER_NAME
mdc-api.configmap.dictionary_delete_enabled='false'
mdc.istio.all.conf :
#Параметры Istio Docker и K8s/Openshift (опционально)
mdc.istio.proxy_image=ссылка на образ истио в 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
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
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
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}}
#Параметры таймаутов 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
#Параметры аудита Istio
mdc.istio.egress.common.audit.host=demo.audit2-client-proxy.apps.stands-vdc01.solution.mycompany
#Параметры БД Istio
mdc.istio.egress.common.db1.ip=XXX
mdc.istio.egress.common.db1.port=5432
mdc.istio.egress.common.db2.ip=XXX
mdc.istio.egress.common.db2.port=5432
#Параметры S3 Istio
mdc.istio.egress.common.s3.end_point=https://nun-idz.mycompany.ru:443
mdc.istio.egress.common.s3.host=nun-idz.mycompany.ru
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
#Параметры ОТТ Istio
mdc.istio.egress.common.ott.image={путь до образа}/ott-client-api-v2:4.0.4
mdc.istio.egress.common.ott.enabled=false
mdc.istio.egress.se.ott.spec.hosts=["vm-st-wf-otts-1060.stands-vdc02.solution.mycompany","vm-st-wf-otts-1059.stands-vdc02.solution.mycompany"]
mdc.istio.egress.se.ott.spec.ports.number=8444
mdc.istio.egress.configmap.ott.service_hosts=vm-st-wf-otts-1060.stands-vdc02.solution.mycompany:8444,vm-st-wf-otts-1059.stands-vdc02.solution.mycompany:8444
mdc.istio.egress.configmap.ott.service_url=vm-st-wf-otts-1060.stands-vdc02.solution.mycompany:8443/ott-service/rest/token
mdc.istio.egress.configmap.ott.certstore_path=/mnt/secrets/mdc-cloud.p12
mdc.istio.egress.configmap.ott.client_cert_alias=mdc-cloud
mdc.istio.egress.configmap.ott.truststore_path=/mnt/secrets/ott_service_truststore.p12
mdc.istio.egress.configmap.ott.module_id=mdc-cloud
#Параметры kubernetes
mdc.istio.egress.common.kubernetes_service_ip=XXX
mdc-api.istio.conf
mdc-api.istio.egress.configmap.ott.service_url=vm-st-wf-otts-1060.stands-vdc02.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=vm-st-wf-otts-1060.stands-vdc02.solution.mycompany:8444,vm-st-wf-otts-1059.stands-vdc02.solution.mycompany:8444
Для синхронизации списка в job DEPLOY запустите плейбук MIGRATION_FP и затем после выполнения измените дефолтные значения на необходимые.
Порядок установки и первоначальной настройки при ручной установке#
В данном разделе описан ручной способ установки Компонента. Данный способ установки является опциональным.
Установка и настройка СУБД#
На сервере БД необходимо выполнить установку СУБД PSQL, а также PgBouncer.
В СУБД PSQL должен присутствовать пользователь c правами администратора (по умолчанию — postgres).
Также должен быть создан экземпляр базы данных (по умолчанию — mdmp).
Для БД PSQL от имени пользователя SSH с правами владельца директории БД (по умолчанию имя администратора — postgres) следует задать настройки СУБД в файле postgresql.conf, расположенного в корневой папке БД, например /pgdata/11/data, аналогично нижеприведенному файлу.
Вместо значения log_directory = '/pgerrorlogs/logs' может стоять папка с именем сервера, в параметрах port (по умолчанию — 5432), cluster_name (проставить значение вместо default_cluster) и параметрах с путями нужно выставить свои значения, если они отличаются от указанных в примере.
# Do not edit this file manually!
# It will be overwritten by Patroni!
include 'postgresql.base.conf'
autovacuum_work_mem = '1002MB' <------------------------------------- 1/48 RAM
checkpoint_completion_target = '0.9'
checkpoint_timeout = '1800'
client_min_messages = 'notice'
cluster_name = 'default_cluster'
cron.database_name = 'postgres'
datestyle = 'iso, mdy'
default_statistics_target = '100'
default_text_search_config = 'pg_catalog.english'
effective_cache_size = '18GB' <--------------------------------------- 3/4 от RAM
effective_io_concurrency = '2'
fsync = 'on'
full_page_writes = 'on'
hot_standby = 'on'
hot_standby_feedback = 'on'
installer.cluster_type = 'standalone-patroni-etcd-pgbouncer'
is_tde_on = 'off'
lc_messages = 'en_US.utf8'
lc_monetary = 'en_US.utf8'
lc_numeric = 'en_US.utf8'
lc_time = 'en_US.utf8'
listen_addresses = '0.0.0.0'
log_checkpoints = 'True'
log_connections = 'True'
log_destination = 'stderr'
log_directory = '/pgerrorlogs/logs'
log_disconnections = 'True'
log_file_mode = '420'
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
log_line_prefix = '%t [%p]: [%l-1] app=%a,user=%u,db=%d,client=%h '
log_lock_waits = 'on'
log_min_duration_statement = '5000'
log_min_error_statement = 'WARNING'
log_replication_commands = 'on'
log_rotation_age = '1440'
log_rotation_size = '100MB'
log_statement = 'mod'
log_temp_files = '0'
log_timezone = 'Europe/Moscow'
log_truncate_on_rotation = 'True'
logging_collector = 'True'
maintenance_work_mem = '1536MB' <------------------------------------- 1/24 RAM
max_connections = '300'
max_locks_per_transaction = '1024'
max_worker_processes = '4' <------------------------------------------ CPU
max_parallel_workers = '4' <------------------------------------------ CPU
max_parallel_maintenance_workers = '2' <------------------------------ 1/2 CPU
max_parallel_workers_per_gather = '2' <------------------------------ 1/2 CPU
max_prepared_transactions = '24'
max_replication_slots = '10'
max_standby_archive_delay = '30s'
max_standby_streaming_delay = '30s'
max_wal_senders = '10'
max_wal_size = '4GB'
min_wal_size = '1GB'
password_policies_enable = 'on'
password_policy.alpha_numeric = '3'
password_policy.check_syntax = 'on'
password_policy.deny_default = 'off'
password_policy.expire_warning = '7 days'
password_policy.failure_count_interval = '0'
password_policy.grace_login_limit = '0'
password_policy.grace_login_time_limit = '3 days'
password_policy.illegal_values = 'on'
password_policy.in_history = '4'
password_policy.lockout = 'on'
password_policy.lockout_duration = '24 hours'
password_policy.max_age = '40 days'
password_policy.max_failure = '6'
password_policy.max_inactivity = '0'
password_policy.max_rpt_chars = '0'
password_policy.min_age = '0'
password_policy.min_alpha_chars = '0'
password_policy.min_length = '16'
password_policy.min_lowercase = '0'
password_policy.min_special_chars = '1'
password_policy.min_uppercase = '1'
password_policy.password_strength_estimator_score = '3'
password_policy.policy_enable = 'on'
password_policy.reuse_time = '365 days'
password_policy.track_login = 'off'
password_policy.use_password_strength_estimator = 'on'
port = '5432'
psql_encrypt_password = 'on'
random_page_cost = '4.0'
search_path = '$user'
shared_buffers = '6GB' <---------------------------------------------- 1/4 RAM
shared_preload_libraries = 'auto_explain,pg_stat_statements,pgaudit,pg_cron,pg_pathman'
superuser_reserved_connections = '4'
synchronous_commit = 'on'
timezone = 'Europe/Moscow'
track_commit_timestamp = 'False'
unix_socket_directories = '/var/run/postgresql/'
wal_buffers = '16MB'
wal_keep_segments = '8'
wal_level = 'replica'
wal_log_hints = 'on'
wal_receiver_status_interval = '1s'
wal_sync_method = 'fsync'
work_mem = '16384kB'
hba_file = '/pgdata/11/data/pg_hba.conf'
ident_file = '/pgdata/11/data/pg_ident.conf'
Если используется patroni, редактировать значения следует не напрямую в postgresql.conf, а через конфигурационный файл patroni potgres.yml (название может отличаться), который как правило расположен в папке /etc/patroni. Значения в нем прописываются аналогично приведенным выше. После сохранения файла следует перезапустить сервис patroni.
Для изменения отдельных настроек patroni требуется последовательно выполнить ряд специальных команд.
При запуске каждой из них откроется консольный текстовый редактор vi, через который следует исправить значения. Для этого после ввода команды нужно нажать Insert для перехода в режим ввода, отредактировать значения имеющихся параметров в соответствии с patroni.yml, затем перейти в командный режим клавишей Esc и сохранить файл и выйти командой :wq. Для того, чтобы команды подействовали, сервис patroni должен быть запущен.
patronictl -c /etc/patroni/postgres.yml edit-config cluster_core
patronictl -c /etc/patroni/postgres.yml reload cluster_core
patronictl -c /etc/patroni/postgres.yml restart cluster_core
После третьей команды будут следовать вопросы, на которые нужно отвечать yes, при запросе версии PSQL, ниже которой применить изменения, следует ввести версию выше используемой в формате X.Y.Z.
Если используется pgbouncer, следует от имени пользователя с правами sudo изменить настройки pgbouncer.ini в директории /etc/pgbouncer/. В параметрах host, port, listen_port, logfile нужно выставить свои значения, также нужно поменять значения в параметрах с путями и в параметре admin_users если оно отличается (вместо pgbouncer может быть postgres или другое имя учетной записи администратора). В данном примере путь_к_файлу_логов обычно имеет вид /pgerrorlogs/имя_сервера/pgbouncer.log, порт БД по умолчанию имеет значение 5432 или 5433, порт Bouncer — 6544.
[databases]
* = host=имя_или_адрес_сервера port=порт_БД
[pgbouncer]
listen_port = порт_Bouncer
listen_addr = *
auth_type = md5
auth_file = /etc/pgbouncer/userlist.txt
auth_user = pgbouncer
auth_query = SELECT * FROM pgbouncer.get_auth($1);
logfile = путь_к_файлу_логов
pidfile = /var/run/pgbouncer/pgbouncer.pid
max_client_conn = 1500
pool_mode = transaction
default_pool_size = 280
min_pool_size = 0
max_db_connections = 280
max_user_connections = 280
ignore_startup_parameters = extra_float_digits
server_reset_query = DISCARD ALL
server_reset_query_always = 1
admin_users=pgbouncer
Также следует создать в /etc/pgbouncer/ файл userlist.txt от имени пользователя с правами sudo и добавить там логины и пароли всех пользователей, которые должны подключаться через Bouncer. Имена и пароли пользователей должны быть заключены в кавычки и разделяться пробелом, а их пары начинаться с новой строки.
"имя_пользователя1" "пароль_пользователя1"
"имя_пользователя2" "пароль_пользователя2"
...
Установка скриптов инициализации схемы данных#
Все команды в скриптах выполняются от имени владельца схемы с данными Компонента (например MDMP).
Для создания структуры схемы и наката патчей требуется liquibase версии не ниже 3.8. Для установки можно использовать liquibase, вложенный в папку lib/liquibase, распаковав ее.
Перед выполнением скриптов требуется в папке с liquibase настроить параметры БД в файле liquibase.properties.
Для схемы PSQL:
driver: org.postgresql.Driver
classpath: lib/postgresql-<версия_дравйвера>.jar
url: jdbc:postgresql://адрес сервера>:<номер порта>/<ssid базы>
username: <имя пользователя-владельца схемы>
defaultSchemaName: <название схемы>
password: <пароль>
В приложенном варианте liquibase используется драйвер postgresql-42.2.5.jar для PSQL в папке lib. В ином случае имя и расположение файла драйвера может отличаться.
Первичная инициализация и создание структуры схемы данных#
Для установки структуры схемы данных с нуля следует из дистрибутива в папке /package/db/ распаковать файл db-init.zip и в командной строке в каталоге c liquibase выполнить команду вида:
java -classpath "lib/*" liquibase.integration.commandline.Main --defaultsFile=liquibase.properties --contexts=metamodel,model --changeLogFile=<путь_к_файлу_ init-changelog.xml> --logFile=init-changelog.log --logLevel=INFO update
По умолчанию <путь_к_файлу_ init-changelog.xml> – это <папка распаковки>/db-init/init-changelog.xml.
Можно указать его название без пути, если содержимое папки db-init скопировать в папку с liquibase.
Затем по аналогии для установки патчей метаданных на пустую схему следует установить скрипты из файла changelog.xml.
java -classpath "lib/*" liquibase.integration.commandline.Main --defaultsFile=liquibase.properties --contexts=metamodel,model --changeLogFile=<путь_к_файлу_changelog.xml> --logFile=changelog.log --logLevel=INFO update
Файл патчей changelog.xml вместе с патчами находится в папке /package/db/db-patches дистрибутива.
Миграция данных#
Для заполнения схемы данными из другой БД требуется произвести их миграцию.
Миграция с другой БД PSQL провозится администраторами СУБД с помощью утилит pg_dump / pg_restore. Информации об их использовании приведена в руководстве по системному администрированию.
Установка патчей схемы данных#
Если установка патчей выполняется на схему с уже имеющимися данными (например после импорта полного дампа), то патчи создания структуры из папки db-init не устанавливаются, а для установки регулярных патчей следует выполнить команду с файлом changelog.xml без указания опции –contexts=model,metamodel:
java -classpath "lib/*" liquibase.integration.commandline.Main --defaultsFile=liquibase.properties --changeLogFile=<путь_к_файлу_changelog.xml> --logFile=changelog.log --logLevel=INFO update
Перед запуском необходимо проверить корректность указанных в файле .properties параметров базы данных и пользователя и при необходимости отредактировать этот файл, либо создать новый, изменив его имя в командах.
В процессе установки патчей выдаются права пользователю APPL-роли на объекты основной схемы.
Описание настроек подсистемы доступа#
Конфигурация подсистемы доступа#
Создание пользователей и присвоение им ролей#
Создание пользователей и присвоением им ролей выполняется в IAM Proxy (AUTH). Подробнее можно ознакомиться с эксплуатационной документацией IAM Proxy (AUTH) в составе продукта Platform V IAM SE (IAM).
Создание и обновление ролей#
Создание и обновление ролей и полномочий выполняется в Объединённом сервисе авторизации (AUTZ). Подробнее можно ознакомиться в документе Руководство оператора Объединённого сервиса авторизации (AUTZ) в составе продукта Platform V IAM SE (IAM).
Описание настроек среды контейнеризации#
Подключение к Istio, настройка сертификатов и создание секретов#
Данные действия выполняются индивидуально для каждой именованной области среды контейнеризации в пределах каждого стенда.
Данные шаги не обязательны, если в целевой проектной области среды контейнеризации не планируется использовать Istio.
При использовании нескольких пространств имен аналогичные настройки необходимо провести для каждого из них.
Создание и настройка секретов для образов и параметров приложений#
Для корректной работы приложений необходимо создать в меню Workloads — Secrets секрет для скачивания образа типа Image pull Secret и два секрета с приложениями — secret-mdc-db и secret-mdc-spas.
Значение переменных следует редактировать не напрямую в yaml (здесь оно отображается в зашифрованном виде), а через меню Edit secret.
Секрет для скачивания образов (в примере названа mdc-pull) должен иметь тип kubernetes.io/dockerconfigjson, в котором содержится параметр вида .dockerconfigjson и содержанием.
{"auths":{"https://ссылка_на_хранилище_образов":{"username":"имя_пользователя","password":"пароль","auth":"кодаутентификации","email":""}}}
Секрет имеет вид:
kind: Secret
apiVersion: v1
metadata:
name: mdc-pull
data:
.dockerconfigjson: >-
зашифрованный_блок_json
type: kubernetes.io/dockerconfigjson
Имя этого секрета может быть произвольным, состоящим из латинских букв, цифр и символа -. В дальнейшем будет задаваться при настройке стендозависимых параметров.
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: пароль_пользователя_БД
SPAS_SECRET_KEY: токен_SPAS
type: Opaque
Настройка джобы Install EIP для установки компонента NSIX#
Настройка параметров конфигурации#
Данный вид установки является опциональным.
Перед установкой компонента NSIX на сервер необходимо создать файлы конфигурации. Список параметров конфигурации может со временем изменяться.
При установке через Install EIP следует создать проектную область в гит-репозитории Jenkins Job. Файл со списком параметров (кроме секретов) по умолчанию должен называться os-properties.conf и иметь заполненные параметры, список которых с примерами значений приведен ниже. Список параметров и допустимые значения могут меняться по мере обновления релиза.
NAMESPACE=название_проектной_области
#Параметры Docker
mdc.deployment.dockerRegistry=mycompany/docker # адрес 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.user=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
#Параметры fluent-bit
mdc.fluent-bit-forwarder-sidecar.deployment.image=pprb/ci00641491/ci02469991_logger/fluent-bit:1.4.5 # сслылка на образ 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
#Параметры аудита
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=mdc-http.mdc-dev.apps.stands-vdc01.solution.mycompany # ссылка на хост приложения IVS
mdc.configmap.url.jobs=mdc-http.mdc-dev.apps.stands-vdc01.solution.mycompany # ссылка на хост приложения JOBS
mdc.configmap.url.kmd=mdc-http.mdc-dev.apps.stands-vdc01.solution.mycompany # ссылка на хост приложения KMD
mdc.configmap.url.api=mdc-http.mdc-dev.apps.stands-vdc01.solution.mycompany # ссылка на хост приложения API
mdc.configmap.url.rspit=mdc-rspit.apps.stands-vdc01.solution.mycompany # ссылка на хост приложения РСПиТ
#Параметры S3
mdc.configmap.s3.external.end_point=https://s3.gos.mycompany
mdc.configmap.s3.external.bucket_name=DvpDev_Dict
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
mdc.configmap.other.storage_type=DB
mdc.configmap.other.rspit_request_limit='1000'
#Флуент-бит заглушки фильтра
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}
#Параметры модуля ivs
mdc-ivs.deployment.spec.replicas=1 # количество подов модуля
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
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'
#Параметры модуля jobs
mdc-jobs.deployment.spec.replicas=1
mdc-jobs.deployment.spec.template.spec.containers.resources.limits.cpu=3.75
mdc-jobs.deployment.spec.template.spec.containers.resources.limits.memory=2Gi
mdc-jobs.deployment.spec.template.spec.containers.resources.requests.cpu=3.75
mdc-jobs.deployment.spec.template.spec.containers.resources.requests.memory=2Gi
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'
mdc-jobs.configmap.storage_folder=/app/storage
mdc-jobs.configmap.cron.export_rspit_all='0 0 1 * * *'
mdc-jobs.configmap.cron.clear_rspit='0 0 4 * * *'
mdc-jobs.configmap.upload_buffer_size='52428800'
#Параметры модуля kmd
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
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'
#Параметры модуля ui
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
mdc-ui.configmap.client_max_body_size=100m
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'
#Параметры модуля api
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=2Gi
mdc-api.deployment.spec.template.spec.containers.resources.requests.cpu=2
mdc-api.deployment.spec.template.spec.containers.resources.requests.memory=2Gi
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'
#Параметры модуля api - аудит
mdc-api.configmap.audit.host=хост аудита
mdc-api.configmap.audit.enabled='false'
mdc-api.configmap.audit.security_change_audit_enabled='false'
#Параметры модуля api - прочие
mdc-api.configmap.other.server_type=SERVER_NAME
mdc-api.configmap.dictionary_delete_enabled='false'
#Параметры Istio Docker и K8s/Openshift (опционально)
mdc.istio.proxy_image=ссылка на образ истио в 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
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
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
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}}
#Параметры таймаутов 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
#Параметры аудита Istio
mdc.istio.egress.common.audit.host=demo.audit2-client-proxy.apps.stands-vdc01.solution.mycompany
# Параметры SPAS Istio
mdc.istio.egress.common.spas.ip=10.255.6.188
mdc.istio.egress.common.spas.port=8443
mdc.istio.ingress.common.sudir.cn=none
#Параметры БД Istio
mdc.istio.egress.common.db1.ip=10.23.60.5
mdc.istio.egress.common.db1.port=5432
mdc.istio.egress.common.db2.ip=10.23.60.5
mdc.istio.egress.common.db2.port=5432
#Параметры S3 Istio
mdc.istio.egress.common.s3.end_point=https://nun-idz.mycompany.ru:443
mdc.istio.egress.common.s3.host=nun-idz.mycompany.ru
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
#Параметры ОТТ Istio
mdc.istio.egress.common.ott.image=sigma/pprb/ci00641491/ci01125613_ott/ott-client-api-v2:4.0.4
mdc.istio.egress.common.ott.enabled=false
mdc.istio.egress.se.ott.spec.hosts=["vm-st-wf-otts-1060.stands-vdc02.solution.vmycompany","vm-st-wf-otts-1059.stands-vdc02.solution.mycompany"]
mdc.istio.egress.se.ott.spec.ports.number=8444
mdc.istio.egress.configmap.ott.service_hosts=vm-st-wf-otts-1060.stands-vdc02.solution.mycompany:8444,vm-st-wf-otts-1059.stands-vdc02.solution.mycompany:8444
mdc.istio.egress.configmap.ott.service_url=vm-st-wf-otts-1060.stands-vdc02.solution.mycompany:8443/ott-service/rest/token
mdc.istio.egress.configmap.ott.certstore_path=/mnt/secrets/mdc-cloud.p12
mdc.istio.egress.configmap.ott.client_cert_alias=mdc-cloud
mdc.istio.egress.configmap.ott.truststore_path=/mnt/secrets/ott_service_truststore.p12
mdc.istio.egress.configmap.ott.module_id=mdc-cloud
#Параметры kubernetes
mdc.istio.egress.common.kubernetes_service_ip=172.30.0.1
mdc-api.istio.egress.configmap.ott.service_url=vm-st-wf-otts-1060.stands-vdc02.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=vm-st-wf-otts-1060.stands-vdc02.solution.mycompany:8444,vm-st-wf-otts-1059.stands-vdc02.solution.mycompany:8444
Если модуль API по требованиям безопасности ставится на отдельное пространство, для него необходимо создать свой файл параметров os-properties-api.conf с другим значением NAMESPACE и общих параметров связанных с namespace.
После настройки параметров конфигурации нужно задать файл деплоя os_namespaces.yml.
Для этого из пространства имен нужно в меню User Management — Service Accounts выбрать сервис-аккаунт Jenkins (или любой другой от имени которого будет идти деплой).
В настройках этого аккаунта внизу в меню Secrets открыть секрет Jenkins-token, справа вверху в меню этого секрета выбрать Actions/Edit secret.
Найти поле token и скопировать его значение Value, затем оно вставляется в параметр oc_token.
В файле os_namespaces.yml необходимо для каждого пространства имен указывать свой токен и свой файл настроек properties. Пространств имен может быть несколько.
Пример os_namespaces.yml (параметры применимы для среды контейнеризации Kubernetes или OpenShift (опционально)):
--- # (опциональный) нотификация что это YAML
projects: # (обязателный) струкутра
- name: "first" # (опциональный) имя секции
openShiftNamespace: "имя_namespace1" # (обязателный) В YAML-ах поставки можете использовать ${NAMESPACE} и тогда это значение применится при деплое.
openShiftURL: "api.имя_кластера1.домен_кластера1:6443" # (обязательный) В YAML-ах поставки можете использовать ${OPENSHIFT_CLUSTER} и тогда значение url1 без префикса "api." применится при деплое.
oc_token: "имя_токена_кластера_1" # (обязательный) id токена jenkins сервис-аккаунта вашего namespace (пространства имен), который завели в пространстве вашего задания Jenkins
deleteResources: true # (обязательный) Удалять ресурсы перед деплоем true/false. Если true, то сначала ищет файл delete.yaml(п.19) и удаляет только указанные ресурсы. Если файла нет, то удаляет все ресурсы из поставки + все ресурсы из конфигов подсистемы. Если содержимое поставки изменилось, то могут удалиться не все ресурсы.
validateDeploy: false # (опциональный) Проверять деплой ресурсов true/false.(по умолчанию true) Выполняется такая проверка: в DeploymentConfig и в Deployment считываются status.conditions и type:Available должен иметь статус status:True.
backupResources: false # (опциональный) Сохранять ресурсы перед деплоем true/false.(по умолчанию true) Если хотите получить это архив по почте, то см. п.19
os_props: "os_props1.conf" # (опциональный) Параметры подсистемы в конкретном namespace (пространстве имен). Если ваш os_props = os_props1.conf, то указывать не нужно. В общем случае результирующий файл будет равен os_props1.conf + os_props1.conf.
os_yaml_dirs: os_yaml_dirs.conf
rollback: # (опциональный) Данная секция содержит параметры отката. Если она не укзана то имеет такие дефолтные параметры (needToRollback: true healthCheckTimeout: 180 healthCheckDelay: 30)
- needToRollback: true
healthCheckTimeout: 900
healthCheckDelay: 30
- name: "second"
openShiftNamespace: имя_нейспейса2
openShiftURL: api.имя_кластера2.домен_кластера2:6443
oc_token: "имя_токена_кластера_12"
deleteResources: true
validateDeploy: false
backupResources: false
os_props: "os_props2.conf"
os_yaml_dirs: os_yaml_dirs.conf
rollback:
- needToRollback: true
healthCheckTimeout: 900
healthCheckDelay: 30
В файлах директорий при раздельной инсталляции API и прочих модулей необходимо указать следующие значения:
os_yaml_dirs.conf
/package/conf/k8s/base/configmaps
/package/conf/k8s/base/mdc-ivs/configmaps
/package/conf/k8s/base/mdc-jobs/configmaps
/package/conf/k8s/base/mdc-kmd/configmaps
/package/conf/k8s/base/mdc-ui/configmaps
/package/conf/k8s/base/mdc-ivs
/package/conf/k8s/base/mdc-jobs
/package/conf/k8s/base/mdc-kmd
/package/conf/k8s/base/mdc-ui
/package/conf/k8s/base/istio/config/egress/
/package/conf/k8s/base/istio/config/ingress/
/package/conf/k8s/base/istio/deployments/egress/
/package/conf/k8s/base/istio/deployments/ingress/
os_yaml_dirs_api.conf
/package/conf/k8s/base/configmaps
/package/conf/k8s/base/mdc-api/configmaps
/package/conf/k8s/base/mdc-api
/package/conf/k8s/base/istio/config/egress/
/package/conf/k8s/base/istio/config/ingress/
/package/conf/k8s/base/istio/deployments/egress/
/package/conf/k8s/base/istio/deployments/ingress/
Установка приложений#
Автоматическая установка#
Установка проводится в автоматическом режиме с помощью Deploy Tools или настроенного задания Install EIP в Jenkins, либо в полуручном режиме с помощью консольной утилиты ОС, либо вручную методом создания объектов и конфигурационных файлов с последующей подстановкой нужных значений параметров.
При установке через Install EIP нужно выбрать корректное название подсистемы, стенда и ссылку на конфигурационный дистрибутив.
При установке через Deploy Tools, для k8s/Openshift, выберите директорию конфигурации, SUBSYSTEM = MDC или MDC-SBT, версию дистрибутива и namespace. Далее выберите плейбуки в зависимости от потребностей:
DB_UPDATE – обновление БД OPENSHIFT_DEPLOY;
OPENSHIFT_DEPLOY – установка приложений MDC без истио;
OPENSHIFT_INGRESS_EGRESS_DEPLOY – установка приложений ingress и egress.
Интеграция с платформенными зависимостями
Для исходящего трафика используется сервис Egress-istio:
egress-svc-mdc – используется для сервисного трафика, предназначен для балансирования и терминации трафика на границе сети, для служб и сервисов аудита, логирования, мониторинга.
Шаблон установки для egress-svc-mdc – k8s/base/istio/deployments/egress/*.yaml, Каждый из этих шаблонов разворачивает egress-envoy и OTT сервис, подключенный как sidecar. Для активации авторизации на envoy с применением OTT используется настройка 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 + OTT) в качестве выходного шлюза. Все остальные порты используются для маппинга портов.
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 + OTT Взаимодействие MTLS + OTT
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, взаимодействие MTLS + OTT Взаимодействие MTLS + OTT
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. Взаимодействие 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 (IAM) продукта Platform V IAM SE (IAM) и Объединенный мониторинг Unimon (MONA) продукта Platform V Monitor (OPM) осуществляется на стороне данных компонентов в соответствии с их эксплуатационной документацией (см. Руководство по установке указанных компонентов).
Обновление#
Перед обновлением компонента NSIX необходимо проверить, что образы с новой версией модуля были размещены в Docker-репозитории и далее выполнить шаги:
В консоли среды контейнеризации открываем Workloads/ Deployments / имя модуля / yaml. Находим строку image: и меняем значение хеш-кода на то, что в конфигурационном релизе для нужного модуля. Сохраняем. Если рестарт не пошел автоматически, удаляем Replication Controller у деплоймент-конфига. Новый Replication Controller начнет старт модуля.
В общем случае могут быть изменены значения переменных. В этом случае необходимо скорректировать их список на основе темплейтов в конфигурационном релизе (Parameters) и заполнить значения в Workloads/ Config Maps / имя модуля / yaml, а также подставить в Deployments строки, где используются новые переменные если они есть. Сделать перезапуск установки (см. раздел Автоматическая установка).
При обновлении компонента NSIX до новой версии удаление предыдущей версии компонента NSIX не требуется.
Проверка работоспособности#
При установке с помощью DeployTools или джобы Install EIP задание в Jenkins должно завершиться без ошибок. При наличии ошибки нужно смотреть лог и выявлять проблему.
Необходимо убедиться, что в консоли среды контейнеризации в разделе Workloads — Pods все Pods egress / ingress (если он используется) запущены (находятся в статусе Running) и не содержат ошибок.
Также убедитесь, что Pods модулей mdc-api, mdc-jobs, mdc-ivs, mdc-kmd, mdc-ui запущены (находятся в статусе Running) и не содержат ошибок, а Pods с таким же именем и названием deploy завершены.
Если Pods содержит ошибку вида CrashLoppBackOff или другую горящую красным, нужно перейти в логи этого Pods и посмотреть причину ошибки.
Это может быть например некорректная ссылка на Docker-образ image:, ошибка jdbc-соединения, некорректная модель БД, отсутствие параметра конфигурации, ошибка соединения с Объединённым сервисом авторизации (AUTZ) и т.д.
Если Pods нет вовсе, нужно убедиться, что создан деплоймент конфиг (Workloads — Deployments) и в его настройках нажать кнопку Start Rollout.
Затем перейти в раздел Pods и следить за появлением Pods имя-модуля-deploy и имя-модуля, при появлении ошибки перейти в лог в течение минуты (далее Pods самоудаляется) и скопировав сообщение из лога проанализировать ошибку.
Если Pods работают нужно посмотреть логи pods соответствующего компонента на наличие сообщений об ошибках.
Успехом развертывания является то, что все сервисы запущены (поднялись все pod). В случае, если не хватает какой-либо смежной системы, pods начнут писать внутри себя логи, либо перезагружаться, указывая на ошибку. Если такого поведения в процессе не наблюдается, то установка выполнена успешно.
Успешным результатом проверки корректной конфигурации механизмов безопасности является успешный запуск приложения, без применения корректной конфигурации механизмов безопасности приложение не запустится.
Для того что бы удостовериться, что выполненные действия по установке произведены верно, необходимо зайти в UI и перейти на главную страницу компонента NSIX. Если главная страница и наименование логина пользователя на главной странице отображаются, то все действия произведены верно.
Откат#
Откат производится путем установки дистрибутива компонента NSIX предыдущей версии (см. раздел "Установка").
Откат системного ПО#
Для отката системного ПО необходимо следующее:
обновить настройки файла конфигурации (см. раздел Настройка параметров конфигурации);
обновить ролевую модель из Объединённого сервиса авторизации (AUTZ);
выполнить установку предыдущей версии модулей (см. раздел Автоматическая установка).
Откат ролевой модели Объединённого сервиса авторизации (AUTZ)#
Для отката ролевой модели Объединённого сервиса авторизации (AUTZ) необходимо следующее:
в разделе «Модули» для модулей ivs-rest, kmd-rest и version-rest необходимо загрузить ролевую модель из файлов старой версии (процедура проводится аналогично установке новой ролевой модели);
в разделе «Пользователи» перейти в меню и удалить неиспользуемые более роли, а также, при необходимости, добавить старые роли, которые в откатываемой версии были удалены.
Откат БД#
Для отката системы к БД более ранней версии компонента NSIX, необходимо восстановить БД из созданной ранее резервной копии. Создание резервной копий данных и восстановление данных из резервной копии выполняется штатными утилитами (средствами) администрирования БД, такими как pg_dump и pg_restore соответственно. Информация приведена в Руководстве по системному администрированию компонента NSIX.
Часто встречающиеся проблемы и пути их устранения#
В данном релизе проблемы не выявлены.
Чек лист валидации установки#
Чек лист валидации установки:
проверить в Deployments соответствие количества Pods, также значение метки version должно соответствовать версии системы;
статус ReplicationController соответствует статусу Complete;
статус Pods соответствует статусу Running;
в БД проверить таблицу databasechangelog на соответствие списка изменений схемы.