Руководство по установке#
В руководстве приведены инструкции по установке Продукта.
Системные требования#
В данном разделе перечислены пре−реквизиты и требования к окружению для установки программного продукта, в том числе рекомендуемые настройки безопасности окружения. Также представлен перечень внешних продуктов, используемых для установки, настройки и контроля с указанием выполняемых ими функций.
Предусловия#
Системное программное обеспечение#
Ниже представлены категории системного программного обеспечения (далее — ПО), которые обязательны или опциональны для установки, настройки, контроля и функционирования компонента. В каждой категории перечислены все поддерживаемые продукты сторонних правообладателей. Отдельно обозначены варианты, которые рекомендует АО «СберТех» (маркировка «Рекомендовано» в столбце «Продукт, функциональная совместимость с которым подтверждена»). Клиенту необходимо выбрать один из продуктов в каждой категории, исходя из условий использования конечной ИС.
Категория ПО |
Обязательность установки |
Наименование ПО |
Версия |
Продукт, функциональная совместимость с которым подтверждена |
Назначение категории ПО |
|---|---|---|---|---|---|
Операционная система |
Да |
ОС Альт 8 СП |
10.0 и выше |
Рекомендовано |
ОС контейнеров для запуска модулей компонента |
Среда контейнеризации |
Да |
1.0 и выше |
Рекомендовано |
Платформа контейнеризации для запуска компонентов сервиса |
|
Среда контейнеризации |
Нет |
Red Hat OpenShift |
4.0 и выше |
Опционально |
Платформа контейнеризации для запуска компонентов сервиса |
Средство контейнеризации |
Да |
1.23 и выше |
Рекомендовано |
Инструмент для автоматизации работы с контейнерами |
|
Инструмент сборки, тестирования, развертывания контейнеризированных приложений |
Да |
2.263 и выше |
Рекомендовано |
Сервер автоматизации, используемый для внедрения непрерывной интеграции и непрерывной доставки (CI/CD) для проектов программного обеспечения |
|
Java-машина |
Да |
8 и выше |
Рекомендовано |
Окружение для работы модулей компонента |
|
Система управления базами данных (СУБД) |
Да |
42.2.5 |
Рекомендовано. Правообладателем АО «СберТех» также рекомендована СУБД, основанная на PostgreSQL, – Platform V Pangolin SE, см. раздел «Платформенные зависимости» |
ПО, взаимодействующее с конечными пользователями, приложениями и базой данных для сбора и анализа данных |
|
Сервер приложений |
Да |
WildFly |
15.0.1.Finalе и выше |
Рекомендовано |
СПО для тестирования, отладки и исполнения веб-приложений на основе Java |
Сервис ограничения входящих запросов |
Да |
Synapse Rate Limiter |
1.7 и выше |
Рекомендовано |
Сервис, позволяющий ограничивать доступ к приложениям на основе задаваемых лимитов |
Сервис централизованного хранения репозиториев исходного кода |
Да |
15.0 и выше |
Рекомендовано |
Хранение конфигураций при автоматизированной установке |
|
Система управления секретами |
Да |
1.11.0 и выше |
Рекомендовано |
Система управления аутентификационными данными сервисных аккаунтов или учетных записей |
|
Система управления секретами |
Нет |
Secret Management System |
1.7.0 и выше |
Опционально |
Система управления аутентификационными данными сервисных аккаунтов или учетных записей |
Система мониторинга (сбор и хранение метрик) |
Нет |
2.31 и выше |
Рекомендовано. Правообладателем АО «СберТех» также рекомендован Сервис для сбора прикладных и инфраструктурных метрик и отправки их в целевую систему хранения – Объединенный мониторинг Unimon Platform V Monitor, см. раздел «Платформенные зависимости» |
Система для сбора и хранения численных метрик |
|
Программа для обновления базы данных |
Да |
Liquibase |
4.5.0 и выше |
Рекомендовано |
Библиотека для отслеживания, управления и применения изменений схемы базы данных |
Сервис централизованного хранения репозиториев артефактов (хранилище артефактов) |
Да |
2.14 и выше |
Рекомендовано |
Интегрированная платформа для проксирования, хранения и управления зависимостями Java (Maven), образами, а также распространения ПО |
|
Подсистема для управления и оркестрации процессов ценообразования |
Да |
Цифровая Цена |
2.0 и выше |
Рекомендовано |
Подсистема для управления и оркестрации процессов ценообразования |
Примечание:
*
Да — категория ПО обязательна для функционирования сервиса (это означает, что сервис не может выполнять свои основные функции без установки данной категории ПО).
Нет — категория ПО необязательна для функционирования сервиса (это означает, что сервис может выполнять свои основные функции без установки данной категории ПО).
**
Рекомендовано — рекомендованный правообладателем АО «СберТех» продукт.
Опционально — альтернативный по отношению к рекомендованному правообладателем АО «СберТех» продукт.
Дополнительные условия#
При установке Продукта должны также соблюдаться следующие условия:
в проекте среды контейнеризации присутствует секрет для доступа к приватному хранилищу контейнеров (docker-regestry);
в проекте среды контейнеризации присутствует сервисный аккаунт (Service Account) и созданы роли для разворачивания в namespaces (project) приложения (типовые роли Deploy или Jenkins CD);
jenkins с заведенными секретами для доступа к Git, Хранилищу артефактов и Docker-хранилища;
имеется база данных продукта, а также пользователь и пароль к ней. Также необходим пользователь-владелец схемы, через него запускается обновление БД. Предполагается, что все действия по инициализации схемы данных пользователя были сделаны заранее;
имеется доступ на чтение к базе данных справочников (ЕКПиТ), а также пользователь и пароль к ней. Предполагается, что все действия по инициализации схемы данных пользователя были сделаны заранее, а таблицы в БД не являются пустыми;
установлен инструмент Ansible;
для продукта выделены области в Среде контейнеризации.
Платформенные зависимости#
Для настройки, контроля и функционирования Продукта реализована интеграция с программными продуктами, правообладателем которых является АО «СберТех»:
Наименование продукта |
Код |
Версия продукта |
Код и наименование компонента |
Обязательность установки (да/нет) |
Описание |
Аналог других производителей |
|---|---|---|---|---|---|---|
Platform V Backend |
#BD |
4.2.0 и выше |
OTTS OTTS One-Time Password (OTP) / OTT |
Опционально |
Сервис для аутентификации и авторизации межсервисных взаимодействий |
— |
Platform V Backend |
#BD |
4.2 и выше |
APLJ Прикладной журнал |
Опционально |
Сервис для обеспечения отказоустойчивости приложения на уровне базы данных |
— |
Platform V Audit SE SE |
AUD |
1.4 и выше |
AUDT Аудит |
Опционально |
Сервис для аудирования событий |
— |
Platform V Monitor |
OPM |
4.0.1 и выше |
MONA Объединенный мониторинг Unimon |
Опционально |
Сервис для сбора прикладных и инфраструктурных метрик и отправки их в целевую систему хранения |
— |
LOGA Журналирование |
Опционально |
Сервис для хранения лог-файлов |
— |
|||
Platform V DevOps Tools |
DOT |
1.2 и выше |
CDJE Deploy tools |
Опционально |
Сервис для автоматической установки и обновления технологических сервисов и бизнес приложений на существующих и вновь создаваемых стендах |
— |
Platform V Synapse Service Mesh |
SSM |
2.10 и выше |
JOUA Агент журналирования |
Опционально |
Сервис для сбора и хранения логов |
— |
INJR Инжектор конфигураций |
Опционально |
Сервис для исправления файлов конфигурации |
— |
|||
IGEG Граничный прокси |
Опционально |
Сервис для контроля и фильтрации трафика извне |
Istio |
|||
SVPX Сервисный прокси |
Опционально |
Сервис для маршрутизации и обеспечения безопасности трафика между приложениями |
— |
|||
Platform V Pangolin SE |
PSQ |
5.1.0 и выше |
PSQL Platform V Pangolin |
Рекомендовано |
Cистема управления базами данных, основанная на свободно распространяемой версии PostgreSQL |
PostgreSQL, Oracle |
Platform V Synapse Event Transfer Service |
EVD |
— |
EVTD Сервис передачи событий |
Опционально |
Сервис для передачи и обработки событий в режиме реального времени |
— |
Platform V Dictionaries |
SDT |
— |
— |
Опционально |
Сервис для управления справочными данными |
— |
Примечание:
***
Да — компонент или продукт необходим для функционирования сервиса (это означает, что сервис не может выполнять свои основные функции без установки данного компонента).
Нет — необязательный для функционирования сервиса компонент или продукт (это означает, что сервис может выполнять свои основные функции без установки данного компонента).
**** Рекомендуется установка программного продукта, правообладателем которого является АО «СберТех», при этом не исключена возможность (допускается правообладателем) использования аналога других производителей. Аналоги, в отношении которых продукт успешно прошел испытания и подтвердил свою работоспособность, указаны в разделе «Системное программное обеспечение».
Подробнее о настройках интеграций в следующих разделах:
Компонент One-Time Password (OTTS) продукта Platform V Backend OTT (#BD),
Компонент Журналирование (LOGA) продукта Platform V Monitor,
Настройка интеграций с прочими продуктами приведена в документации к ним.
Необходимо иметь доступ к базе данных справочников, а также логин и пароль к ней. Не рекомендуется использовать ЕКПиТ в промышленной среде.
Для доступа могут быть использованы следующие роли:
владелец схемы, у кого будут права на создание объектов в схеме (администратор);
прикладной пользователь, от имени которого будет работать сервер (права на запись и чтение).
Схема БД может пустой, таблицы создадутся при инсталляции.
Аппаратные требования#
Для установки Продукта со всеми его модулями требуется следующая конфигурация аппаратного обеспечения:
для пространства среды контейнеризации необходим проект с характеристиками 16 CPU и 32 GB memory.
Состав дистрибутива#
Дистрибутив представляет собой zip-файл опубликованный в хранилище. Дистрибутив содержит разделенный целевой дистрибутив Party-distrib.zip. Включает набор библиотек и зависимостей распространяющихся свободно.
Owned-distrib.zip – содержит основной код продукта. В party-distrib в папке Jenkins расположена job ReCreateFullDistrib.groovy. Ее необходимо развернуть, опубликовать в git.
На рисунке представлены необходимые параметры для сборки.
При первом запуске нажмите на кнопку Собрать. В результате будет создан интерфейс для job. Реализована возможность корректировки job под свое окружение. Для этого в разделе parametrs задайте типовые настройки окружения (ссылка на docker registry, имя секрета в jeknis для доступа в registry).
parameters {
// metadata
string(name: 'RELEASE_VERSION',description: 'version')
//docker
choice(name: 'DOCKER_REGISTRY_URL',description:'Host Regestry by upload and base docker image',
choices: [
'docker-xxx.registry-ci.xxxxx.mycompany.ru',
'docker-release.registry-ci.xxxxx.mycompany.ru',
'registry.domain.xxxx.ru',
' xxx.sw.sbc.space'
]
)
choice(name: 'BASE_IMAGE',
choices: [
'registry-ci.xxxxx.mycompany.ru/base/redhat.io/openjdk/openjdk-11-rhel8:1.0-8',
'registry.domain.xxxx.ru/base/redhat/openjdk/openjdk-11-rhel8:1.0-8',
'xxx.sw.sbc.space/xxx_dev/ci90000087_asgtmq_dev/alt-sp8/openjdk-11:v0.1'
],
description: 'Choose base image')
string(name: 'DOCKER_CREDENTIAL_ID', description: 'nexus credentials id by upload party and owner distrib', defaultValue: 'CAB-SA-DVO00330_pass')
choice(name: 'DOCKER_REGISTRY_PATH',
choices:[
"ci00859819/ci02633323",
"docker-release/pprb/ci00859819/ci00859822_pprb-currency-rates",
"pprb/ci00859819/ci00859822_pprb-currency-rates",
"pprb-dev/ci00859819/ci00859822_pprb-currency-rates_dev",
"pprb/ci00859819/ci00859822_pprb-currency-rates",
"xxx_dev/ci90000071_crtx_dev",
"xxx/ci90000071_crtx"
],
description: 'regestry path docker' )
//nexus
choice(name: 'NEXUS_URL',
choices:[
"HTTPs://mycompany-nexus.xxxxx.mycompany.ru/nexus/content/repositories/Nexus_PROD",
"HTTPs://xxx.sw.sbc.space/nexus-cd/repository/xxx_PROD",
"HTTPs://xxx.delta.xxxx.ru",
"HTTPs://sbrf-nexus.domain.mycompany.ru"
],
description: "" )
choice(name: 'NEXUS_REPO_ID',
choices:[
"Nexus_PROD",
"Nexus_PROD_OUT",
"xxx_PROD",
"SERVICE_PACKAGE_snapshot"
]
)
string(name: 'NEXUS_ARTIFACT_ID', description: 'ArtifactId ex: CI00859822_PPRB_ExchangeRates', defaultValue: 'CI02633323_PPRB_KV_CLOUD')
string(name: 'NEXUS_CREDENTIAL_ID',description: 'You Nexus Credentialid', defaultValue: 'CAB-SA-DVO00330_pass')
string(name: 'MAVEN_JENKINS_SETTINGS_XML', defaultValue: "95638388-5179-457e-b055-51a67aeda86d", description: "settings xml by upload distrib" )
choice(name: 'NEXUS_GROUP_ID',
choices:[
"Nexus_PROD",
"xxx_PROD.CI90000071_crtx.4g",
"---"
]
)
// distrib
string(name: 'FULL_DISTR_URL', description: 'Nexus url by full distrib')
booleanParam( defaultValue: true,description: 'NO_UPLOAD_NEXUS',name: 'NO_UPLOAD_NEXUS')
booleanParam( defaultValue: true, description:'Использовать для проверок в отсутствии дистрибутива party и owner', name: 'USE_EXTRACT')
booleanParam( defaultValue: true, description:'Использовать для проверок в отсутствии дистрибутива party и owner', name: 'NO_UPLOAD_EXTRACT_DISTR')
}
Задайте метку для Jenkins agent, существующего в вашем окружении.
Заведите в jenkins конфигурационный файл Settings.xml для maven.
В job передайте ссылки на текущий дистрибутив.
Выполните сборку.
Установка#
Существует два способа установки Продукта Platform V Exchange Rates:
Целевой (основной) способ с помощью компонента Deploy tools (CDJE) продукта Platform V DevOps Tools.
Опциональный вариант с помощью ручной установки.
Подготовка окружения#
Перед установкой Platform V Exchange Rates четвертого поколения проверьте, что ранее было установлено ПО Platform V Exchange Rates третьего поколения.
Установка с помощью компонента Deploy tools (CDJE) продукта Platform V DevOps Tools#
Текущий тип установки является основным вариантом установки.
Для подготовки к развертыванию и установки Продукта выполните следующие шаги:
Создание секрета в jenkins для доступа в среду контейнеризации.
Разворачивание job компонента Deploy tools (CDJE) продукта Platform V DevOps Tools.
Создание секрета в jenkins для доступа в среду контейнеризации#
Секрет для доступа к проекту среды контейнеризации представляет собой секрет с типом "Service Account Tokens".
Поле ID − имя секрета.
Description − описание назначения секрета.
Token − токен сервис аккаунта jenkins из среды контейнеризации.
Получение токена#
Получение токена выполняется при создании сервисного аккаунта
Для того чтобы создать сервисный аккаунт (в случае его отсутствия):
Выполните команду.
kubectl create serviceaccount jenkins
В результате получите ответ.
serviceaccount "jenkins" created
Получите список секретов привязанных к сервисному аккаунту.
kubectl get serviceaccounts jenkins -o yaml
В полученном ответе найдите имя секрета, который содержит токен формата: <имя сервисного аккаунта>-token-*.
Выполните команду.
kubectl get secret <имя сервисного аккаунта>-token-* -o yaml
Пример ответа на вышеуказанную команду.
apiVersion: v1
data:
ca.crt: (APISERVER'S CA BASE64 ENCODED)
------------
token: (BEARER TOKEN BASE64 ENCODED)
kind: Secret
metadata:
# ...
type: kubernetes.io/service-account-token
Значение поля токена необходимо декодировать из base64.
Разворачивание job компонента Deploy tools (CDJE) продукта Platform V DevOps Tools#
Пререквизиты для установки: Перед установкой убедитесь, что выполнены все следующие условия:
Наличие у пользователя, производящего установку возможности создания репозиториев в GitLab, Nexus Public и получения прав на чтение/запись, включая права на чтение/запись в ветке master.
Наличие технической учетной записи для работы с репозиториями.
Должны быть созданы следующие репозитории GitLab в проектной области:
Репозитории pipeline, например:
crtx pipeline — репозиторий с кодовой базой релизов pipeline (на каждый стенд свой репозиторий, например crtx_pipeline_ift / crtx_pipeline_lt);
crtx_common — репозиторий с глобальными (одинаковыми для всех компонентов в рамках одного стенда) переменными среды (на каждый стенд свой репозиторий, например crtx_common_ift / crtx_common_lt).
Репозитории с конфигурациями функциональных подсистем, например:
crtx_crtx (на каждый стенд свой репозиторий).
Должны быть прописаны доступы в репозитории по протоколам 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 развертывания дистрибутивов.
Далее перейдите к созданию секретов и последующих параметров касающихся сервиса.
Пример. Создание секрета входного шлюза
Секрет входного шлюза состоит из двух ресурсов типа secret. Создание ресурса выполняется с помощью утилиты командной строки − OC client с локальной машины.
Перед началом создания секретов получите следующие файлы:
приватный ключ;
серверный сертификат, подписанный удостоверяющим центром;
цепочка сертификатов.
Выпуск сертификата для создания секрета входного шлюза#
Выдача сертификатов осуществляется удостоверяющим центром.
Выполните следующие шаги:
Создайте конфигурационный файл запроса на сертификат request.cnf.
[ req ]
default_bits = 2048
distinguished_name = req_distinguished_name
req_extensions = req_ext
prompt = no
[ req_distinguished_name ]
countryName = RU
stateOrProvinceName = MOW
localityName = MOW
organizationName = SBRF
commonName = currency−rates.dev−apps.ocp−geo.domain.mycompany.ru
[ req_ext ]
subjectAltName = @alt_names
[alt_names]
DNS.1 = currency−rates−token.<your_domen>
DNS.2 = currency−rates−token.<your_domen>
DNS.3 = currency−rates−token.<your_domen>
DNS.4 = currency−rates.<your_domen>
DNS.5 = currency−rates.<your_domen>
DNS.6 = currency−rates.<your_domen>
DNS.7 = currency−rates−HTTPs.<your_domen>
где в commonName указывается один из полных адресов хостов сервиса, или произвольная строка, в DNS.1, DNS.2 и далее, указываются полные имена хостов сервиса. Все адреса приведены в качестве примера и для реальной инсталляции могут отличаться.
Адреса задаются в параметрах, перечень которых приведен ниже. В сертификате должны быть указаны следующие адреса:
$ appFQDN_HTTPs.$NAMESPACE_CDNS;
$ appFQDN_HTTPs_ott.$NAMESPACE_CDNS;
$ appFQDN_all_in_on_ott.$ NAMESPACE_CDNS;
$ appFQDN_all_in_on_HTTPs.$ NAMESPACE_CDNS;
$ appFQDN_HTTPs.$ NAMESPACE_CDNS_GEO;
$ appFQDN_HTTPs_ott.$ NAMESPACE_CDNS_GEO;
$ appFQDN_all_in_on_ott.$ NAMESPACE_CDNS_GEO;
$ appFQDN_all_in_on_HTTPs.$ NAMESPACE_CDNS_GEO;
$ appFQDN_HTTPs.$ NAMESPACE_CDNS_SMART_GEO;
$ appFQDN_HTTPs_ott.$ NAMESPACE_CDNS_SMART_GEO;
$ appFQDN_all_in_on_ott.$ NAMESPACE_CDNS_SMART_GEO;
$ appFQDN_all_in_on_HTTPs.$ NAMESPACE_CDNS_SMART_GEO.
Выше указан набор адресов одного кластера, существует возможность сделать общий сертификат на оба кластера:
request.csr.
openssl req −out request.csr −newkey rsa:2048 −nodes −keyout tls.key −config request.cnf
Подпишите сертификат в вашем УЦ.
Получите файл request.cer (подписанный сертификат в формате DER) и цепочку сертификатов, которым он подписан.
Преобразуйте полученный сертификат в формат PEM.
openssl x509 −inform DER −in request.cer −out tls.crt
Преобразуйте полученный корневой сертификат в формат PEM.
openssl x509 −inform DER −in "Test Root CA 2.cer" −out root.pem
Преобразуйте полученный промежуточный сертификат в формат PEM.
openssl x509 −inform DER −in "Test Issuing CA 2.cer" −out issuing.pem
Объедините корневой и промежуточный сертификат в один файл.
cat root.pem issuing.pem > ca.pem
Получите три файла:
tls.key − приватный ключ;
tls.crt − серверный сертификат;
ca.pem − доверенная цепочка.
Настройка среды и создание секретов#
Дальнейшие действия проводятся в проекте, где у пользователя есть права на создание секретов. Сами файлы секретов хранятся в common репозитории.
Необходимо задать параметры для секретов ingress/egress и настройки для бизнес-приложений. Для этого нужно редактировать файл ssl.conf, находящийся в репозитории common. Это можно сделать одним из следующих способов:
Через параметры модуля:
crtx.egress.root.cert.alias=root crtx.egress.truststore.file=ansible/files/ssl/egress-truststore.jks crtx.egress.truststore.pass.var.name=ssl.ose.istio.truststore.egress.password crtx.egress.keystore.file=ansible/files/ssl/egress-keystore.jks crtx.egress.keystore.pass.var.name=ssl.ose.istio.keyStore.egress.password crtx.egress.cert.alias=currency-rates-cloud crtx.egress.private.key.alias=currency-rates-cloud crtx.ingress.root.cert.alias=root crtx.ingress.truststore.file=ansible/files/ssl/ingress-truststore.jks crtx.ingress.truststore.pass.var.name=ssl.ose.istio.truststore.ingress.password crtx.ingress.keystore.file=ansible/files/ssl/ingress-keystore.jks crtx.ingress.keystore.pass.var.name=ssl.ose.istio.keyStore.ingress.password crtx.ingress.cert.alias=currency-rates-cloud crtx.ingress.private.key.alias=currency-rates-cloud crtx.ott.keystore.file=ansible/files/ssl/ott-keystore.p12 crtx.ott.truststore.file=ansible/files/ssl/ott-truststore.p12 crtx.application.journal.keystore.file=ansible/files/ssl/aj-keystore.jks crtx.application.journal.truststore.file=ansible/files/ssl/aj-truststore.jks crtx.mq.ark.keystore.file=ansible/files/ssl/mq-ark-keystore.jks crtx.mq.ark.truststore.file=ansible/files/ssl/mq-ark-truststore.jks crtx.mq.messenger.keystore.file=ansible/files/ssl/mq-messenger-keystore.jks crtx.mq.messenger.truststore.file=ansible/files/ssl/mq-messenger-truststore.jks2.Через общие параметры:
ssl.ose.istio.keyStore.ingress.CertAlias=currency-rates-cloud ssl.ose.istio.keyStore.ingress.KeyStoreFromFile=ansible/files/ssl/keystore-all.jks ssl.ose.istio.keyStore.egress.CertAlias=currency-rates-cloud ssl.ose.istio.keyStore.egress.KeyStoreFromFile=ansible/files/ssl/keystore-all.jks ssl.ose.istio.keyStore.RootCertAlias=rootДля доступа к keystore-all.jks и/или ansible/files/ssl/egress-truststore.jks, ansible/files/ssl/egress-keystore.jks, ansible/files/ssl/ingress-truststore.jks, ansible/files/ssl/ingress-keystore.jks нужно указать пароли в _passwords.conf:
ssl.ose.istio.keyStore.ingress.password=
ssl.ose.istio.keyStore.egress.password=
Для создания секретов в среде контейнеризации изучите файл distrib.yaml находящийся в дистрибутиве. Пример части файла с описанием секретов в файле distrib.yaml
# --------------------------------------------------
# Файл описывающий состав дистрибутива
# Secrets которые возьмутся из _passwords.conf (Common репозиторий)
secrets: [
# База данных CR MAIN
"DB_CURRATE_MAIN_LOGIN",
"DB_CURRATE_MAIN_PASSWORD",
# База данных СR SI
"DB_CURRATE_STANDIN_LOGIN",
"DB_CURRATE_STANDIN_PASSWORD",
#
"DB_EKPIT_MAIN_LOGIN",
"DB_EKPIT_MAIN_PASSWORD",
"DB_EKPIT_STANDIN_LOGIN",
"DB_EKPIT_STANDIN_PASSWORD",
#
"MESSENGER_KAFKA_SSL_KEY_STORE_PASSWORD",
"MESSENGER_KAFKA_SSL_TRUST_STORE_PASSWORD",
# пароль от закрытого ключа
"MESSENGER_KAFKA_SSL_PRIVATE_KEY_PASSWORD",
#
"OTT_CERTSTORE_PWD",
"OTT_TRUST_STORE_PWD",
# пароль от закрытого ключа
"OTT_CERTSTORE_PRIVATE_KEY_PWD",
#
"AJ_KEYSTORE_PASSWORD",
"AJ_TRUSTORE_PASSWORD",
# пароль от закрытого ключа
"AJ_KEY_PRIVATE_KEY_PASSWORD"
]
В случае использование компонента Deploy tools (CDJE) продукта Platform V DevOps Tools для установки, в репозитории common заполните файл _password.conf. Название параметров представлено в блоке secrets в файле distrib.yaml. Внимание! Помните, что название и количество параметров может изменяться от релиза к релизу.
Имя параметра секрета |
Значение |
|---|---|
DB_CURRATE_MAIN_LOGIN |
Логин (имя пользователя) под которым продукт будет обращаться к базе данных приложения |
DB_CURRATE_MAIN_PASSWORD |
Пароль пользователя, под которым продукт будет обращаться к базе данных приложения |
DB_CURRATE_STANDIN_LOGIN |
Логин (имя пользователя), под которым продукт будет обращаться к базе данных приложения stand-in (в случае отсутствия базы stand-in указать значение dummy) |
DB_CURRATE_STANDIN_PASSWORD |
Пароль пользователя, под которым продукт будет обращаться к базе данных приложения stand-in (в случае отсутствия базы stand-in указать значение dummy) |
DB_EKPIT_MAIN_LOGIN |
Логин (имя пользователя), под которым продукт будет обращаться к базе данных ekpit |
DB_EKPIT_MAIN_PASSWORD |
Пароль пользователя, под которым продукт будет обращаться к базе данных ekpit |
DB_EKPIT_STANDIN_LOGIN |
Логин (имя пользователя), под которым продукт будет обращаться к базе данных ekpit stand-in (в случае отсутствия базы stand-in указать значение dummy) |
DB_EKPIT_STANDIN_PASSWORD |
Пароль пользователя, под которым продукт будет обращаться к базе данных ekpit stand-in (в случае отсутствия базы stand-in указать значение dummy) |
MESSENGER_KAFKA_SSL_KEY_STORE_PASSWORD |
В состав дистрибутива входит сервис messanger. Для работы текущего сервиса применяется брокер сообщений компонента Kafka Sber Edition (KFKA) продукта Platform V Corax . В случае использования Kafka c включенным ACL и протоколом SASL вам необходимо создать секрет с именем secret-mq который будет содержать хранилище сертификатов JSK. Далее вам необходимо заполнить эти параметры передав пароли от хранилища Jks. SSL_KEY_STORE пароль от хранилища, т.д(в случае не использования сервиса указать значение dummy) |
MESSENGER_KAFKA_SSL_TRUST_STORE_PASSWORD |
В состав дистрибутива входит сервис messanger. Для работы текущего сервиса применяется брокер сообщений компонента Kafka Sber Edition (KFKA) продукта Platform V Corax. В случае использования Kafka c включенным ACL и протоколом SASL вам необходимо создать секрет с именем secret-mq который будет содержать хранилище сертификатов JSK. Далее вам необходимо заполнить эти параметры передав пароли от хранилища Jks. SSL_KEY_STORE пароль от хранилища, т.д (в случае не использования сервиса указать значение dummy) |
MESSENGER_KAFKA_SSL_PRIVATE_KEY_PASSWORD |
В состав дистрибутива входит сервис messanger. Для работы текущего сервиса применяется брокер сообщений компонента Kafka Sber Edition (KFKA) продукта Platform V Corax. В случае использования Kafka c включенным ACL и протоколом SASL вам необходимо создать секрет с именем secret-mq который будет содержать хранилище сертификатов JSK. Далее вам необходимо заполнить эти параметры передав пароли от хранилища Jks. SSL_KEY_STORE пароль от хранилища, т.д (в случае не использования сервиса указать значение dummy) |
OTT_CERTSTORE_PWD |
По аналогии с секретами от messanger текущие параметры несут в себе пароли от JKS для сервиса ott (в случае не использования сервиса указать значение dummy) |
OTT_TRUST_STORE_PWD |
По аналогии с секретами от messanger текущие параметры несут в себе пароли от JKS для сервиса ott (в случае не использования сервиса указать значение dummy) |
OTT_CERTSTORE_PRIVATE_KEY_PWD |
По аналогии с секретами от messanger текущие параметры несут в себе пароли от JKS для сервиса ott (в случае не использования сервиса указать значение dummy) |
AJ_KEYSTORE_PASSWORD |
По аналогии с секретами от messanger текущие параметры несут в себе пароли от JKS для сервиса ПЖ (APLJ) (в случае не использования сервиса указать значение dummy) |
AJ_TRUSTORE_PASSWORD |
По аналогии с секретами от messanger текущие параметры несут в себе пароли от JKS для сервиса ПЖ (APLJ) (в случае не использования сервиса указать значение dummy) |
AJ_KEY_PRIVATE_KEY_PASSWORD |
По аналогии с секретами от messanger текущие параметры несут в себе пароли от JKS для сервиса ПЖ (APLJ) (в случае не использования сервиса указать значение dummy) |
Далее зашифруйте файл _password.conf согласно инструкции компонента Deploy tools (CDJE) продукта Platform V DevOps Tools. Для простоты шифрования существует возможность воспользоваться скриптом шифрования на powerShell. Создайте файл с тем же именем, что и файл который должен быть зашифрован, добавьте к имени окончание “_d”. Далее скрипт найдет все файлы с окончанием “_d” и зашифрует создав файл без окончания “_d”.
В файл .gitignore добавьте *_d что бы нешифрованные файлы не попали в репозиторий.
$files = (Get-ChildItem *_d).FullName
$vault_cred_openshift_ops='<your pass encrypt>'
ForEach ($file in $files){
echo $file
openssl enc -aes-256-cbc -k $vault_cred_openshift_ops -in $file -out $file.TrimEnd('_d')
}
Далее создайте файлы в директории openshift_extra_secrets с именами описанными в блоке extra-secrets. Имя секрета должно совпадать с именем файла. secret-aj:
kind: Secret
apiVersion: v1
metadata:
name: secret-aj
type: Opaque
data:
keystore.jks: <base64 enc jks store >
truststore.jks: <base64 enc jks store >
secret-egress-ca-certs:
kind: Secret
apiVersion: v1
metadata:
name: secret-egress-ca-certs
type: Opaque
data:
ca.pem: <base 64 cert pem >
secret-egress-certs:
kind: Secret
apiVersion: v1
metadata:
name: secret-egress-certs
labels:
app: crtx
type: Opaque
data:
tls.crt: <base64 enc jks store >
tls.key: <base64 enc jks store >
secret-ingress-ca-certs:
kind: Secret
apiVersion: v1
metadata:
name: secret-ingress-ca-certs
type: Opaque
data:
ca.pem:<base 64 cert pem>
secret-ingress-certs:
kind: Secret
apiVersion: v1
metadata:
name: secret-ingress-certs
labels:
app: crtx
type: Opaque
data:
tls.crt: <base64 enc jks store >
tls.key: <base64 enc jks store >
secret-mq:
kind: Secret
apiVersion: v1
metadata:
name: secret-mq
labels:
app: crtx
type: Opaque
data:
keystore.jks: <base64 enc jks store >
truststore.jks: <base64 enc jks store >
secret-ott-certs:
kind: Secret
apiVersion: v1
metadata:
name: secret-ott-certs
type: Opaque
data:
keystore.jks: <base64 enc jks store >
truststore.jks: <base64 enc jks store >
Имя секрета |
Содержимое |
|---|---|
secret-ott-certs |
Секрет содержит jks хранилище keystote, truststore. Текущий секрет необходим для функционирование ott (может быть опционален) |
secret-mq |
Секрет содержит jks хранилище keystote, truststore. Текущий секрет необходим для функционирование сервиса messanger (может быть опционален) |
secret-ingress-certs |
Секрет содержит сертификат в формате pem необходим для реализации mTLS, монтируется в pod ingress istio/servicemesh |
secret-ingress-ca-certs |
Секрет содержит root сертификат центра сертификации в формате pem необходим для реализации mTLS, монтируеться в pod ingress istio/servicemesh |
secret-egress-certs |
Секрет содержит сертификат в формате pem необходим для реализации mTLS, монтируется в pod egress istio/servicemesh |
secret-egress-ca-certs |
Секрет содержит root сертификат центра сертификации в формате pem необходим для реализации mTLS, монтируеться в pod egress istio/servicemesh |
secret-aj |
Секрет содержит jks хранилище keystote, truststore. Текущий секрет необходим для функционирование ПЖ (APLJ) (может быть опционален) |
Администратор самостоятельно выбирает как реализовать kind secret для k8s, использовать data или datastring, и какой тип секрета ему применить. Важно сохранить имя секрета и ключ значения параметра. Тип хранилища может быть как jks, так и PKCS12.
Пример создание хранилище сертификата УЦ Процесс создания хранилища сертификата УЦ продемонстрирован на примере OTT.
Для того чтобы клиенты OTT при установке SLT(TLS) соединения доверяли SSL−сертификатам серверов OTT:
Включите в trust store сертификат УЦ, который выпустил SSL−сертификат серверов OTT.
Скачайте файл УЦ посредствами браузера, подключившись к серверу OTT (HTTPs://<ott−server>:8443/).
Для импорта полученного сертификата в trust store используйте команду:
shell
keytool −importcert −file ./root_ca.cer −keystore ./ott_truststore.p12 −alias "root_ca"
Настройка интеграций Продукта#
Secret Management System#
Secret Management System (рекомендован аналог HashiCorp Vault) позволяет хранить секреты, которые использует приложение. Секретами считаются:
пароль в БД,
используемые сертификаты и ключи к ним,
доверенные цепочки сертификатов,
хранилища и пароли к ним.
Включение Secret Management System#
Чтобы задать Secret Management System, как место хранения секретов, необходимо выполнить следующие действия:
Перейти в репозитории ctrx_ctrx в директорию /config/package/conf/, открыть конфигурационный файл в custom_property.conf.yml.
Проверить, что для параметра конфигурации SECMAN_ENABLED задано значение true, если нет, то указать это значение.
SECMAN_ENABLED: true;
Настройка параметров работы Secret Management System#
Параметры работы Secret Management System заданы по-умолчанию, но при необходимости их можно переопределить. Для этого нужно выполнить следующие действия:
Задать с помощью global-параметров следующие обязательные значения:
Параметр |
Описание |
Пример |
|---|---|---|
secman_host |
Адрес Secret Management System |
secman-xxx.solution.yyy |
secman_port |
Порт Secret Management System |
9092 |
secman_log_level |
Уровень логирования. По умолчанию info, но можно выбрать одно из следующих значений: trace, debug, info, warn, err |
debug |
secman_role |
Роль для доступа в SecMan |
role-ga-secman-crtx |
secman_secret_cr_path |
Директория, в которой хранятся секреты с паролями от БД, паролями к хранилищам сертификатов и ключей (ПЖ (APLJ), ОТТ, Kafka АРК, Kafka messenger) |
DEV/CRTX/BD/KV/app/secrets |
secman_secret_aj_path |
Директория, в которой расположен секрет c хранилищем сертификатов и ключи ПЖ (APLJ) и для хранилища доверенных сертификатов |
DEV/CRTX/BD/KV/aj/secret |
secman_secret_mk_path |
Директория, в которой расположен секрет c хранилищем сертификатов и ключами доступа к kafka Messenger и для хранилища доверенных сертификатов |
DEV/CRTX/BD/KV/mk/secrets |
secman_secret_arr_path |
Директория, в которой расположен секрет c хранилищем сертификатов и ключей для доступа к Kafka АРК и для хранилища доверенных сертификатов |
DEV/CRTX/BD/KV/arr/secrets |
secman_secret_ott_path |
Директория, в которой расположен секрет с хранилищем сертификатов и ключей для доступа к ОТТ и для хранилища доверенных сертификатов |
DEV/CRTX/BD/KV/ott/secrets |
secman_secret_ingress_path |
Директория, в которой расположен секрет с сертификатом, ключом и цепочкой доверия для ingress |
DEV/CRTX/BD/KV/ingress/secret |
secman_secret_egress_path |
Директория, в которой расположен секрет с сертификатом, ключом и цепочкой доверия для egress |
DEV/CRTX/BD/KV/egress/secret |
При необходимости параметры, заданные в global, можно переопределить в репозитории common в директорию conf/config/parameters/ и открыть для редактирования файл crtx-istio.all.conf и crtx-secman.all.conf.
Содержимое crtx-istio.all.conf для блока Secret Management System:
istio_ose_istio_egress_secman_timeout: 2s
istio_ose_istio_egress_destination_rule_secman_TFP_CONN_POLL_TCP_MAX_CONN: 400
istio_ose_istio_egress_destination_rule_secman_OUT_DETECTION_CONSECUTIVE_GATEWAY_ERRORS: 5
istio_ose_istio_egress_destination_rule_secman_OUT_DETECTION_INTERVAL: 1m
istio_ose_istio_egress_destination_rule_secman_OUT_DETECTION_BASE_EJECTION_TIME: 5m
istio_ose_istio_egress_destination_rule_secman_OUT_DETECTION_MAX_EJECTION_PERCENT: 100
Содержимое crtx-istio.all.conf для блока Secret Management System:
crtx_secman_ose_deployment_spec_template_metadata_labels_secman_injector: enabled
crtx_secman_ose_deployment_spec_metadata_annotations_vault_hashicorp_com_agent_inject: true
crtx_secman_ose_deployment_spec_metadata_annotations_vault_hashicorp_com_agent_init_first: false
crtx_secman_ose_deployment_spec_metadata_annotations_vault_hashicorp_com_agent_pre_populate: false
crtx_secman_ose_deployment_spec_metadata_annotations_vault_hashicorp_com_agent_inject_default_template: json
crtx_secman_ose_deployment_spec_metadata_annotations_vault_hashicorp_com_secret_volume_path_secret_cr_app_yaml: /app/secrets
crtx_secman_ose_deployment_spec_metadata_annotations_vault_hashicorp_com_agent_inject_secret_secret_cr_app_yaml: /app/secrets
crtx_secman_ose_deployment_spec_metadata_annotations_vault_hashicorp_com_secret_volume_path_aj_keystore_jks: /app/certs/aj
crtx_secman_ose_deployment_spec_metadata_annotations_vault_hashicorp_com_secret_volume_path_aj_truststore_jks: /app/certs/aj
crtx_secman_ose_deployment_spec_metadata_annotations_vault_hashicorp_com_secret_volume_path_mk_keystore_jks: /app/certs/messenger-kafka
crtx_secman_ose_deployment_spec_metadata_annotations_vault_hashicorp_com_secret_volume_path_mk_truststore_jks: /app/certs/messenger-kafka
crtx_secman_ose_deployment_spec_metadata_annotations_vault_hashicorp_com_secret_volume_path_arr_keystore_jks: /app/certs/ark-rates-receiver-kafka
crtx_secman_ose_deployment_spec_metadata_annotations_vault_hashicorp_com_secret_volume_path_arr_truststore_jks: /app/certs/ark-rates-receiver-kafka
crtx_secman_ose_deployment_spec_metadata_annotations_vault_hashicorp_com_secret_volume_path_ingress_chain_crt: /etc/istio/gateway-ca-certs
crtx_secman_ose_deployment_spec_metadata_annotations_vault_hashicorp_com_secret_volume_path_ingress_tls_crt: /etc/istio/gateway-certs
crtx_secman_ose_deployment_spec_metadata_annotations_vault_hashicorp_com_secret_volume_path_ingress_tls_key: /etc/istio/gateway-certs
crtx_secman_ose_deployment_spec_metadata_annotations_vault_hashicorp_com_secret_volume_path_ott_keystore_p12: /mnt/secrets
crtx_secman_ose_deployment_spec_metadata_annotations_vault_hashicorp_com_secret_volume_path_ott_truststore_p12: /mnt/secrets
crtx_secman_ose_deployment_spec_metadata_annotations_vault_hashicorp_com_secret_volume_path_egress_chain_crt: /etc/istio/gateway-ca-certs
crtx_secman_ose_deployment_spec_metadata_annotations_vault_hashicorp_com_secret_volume_path_egress_tls_crt: /etc/istio/gateway-certs
crtx_secman_ose_deployment_spec_metadata_annotations_vault_hashicorp_com_secret_volume_path_egress_tls_key: /etc/istio/gateway-certs
Проверить, что секреты содержат необходимые параметры.
secman_secret_cr_path:
{
"AJ_KEYSTORE_PASSWORD": "",
"AJ_TRUSTORE_PASSWORD": "",
"ARK_RATES_RECEIVER_KAFKA_SSL_KEY_STORE_PASSWORD": "",
"ARK_RATES_RECEIVER_KAFKA_SSL_PRIVATE_KEY_PASSWORD": "",
"ARK_RATES_RECEIVER_KAFKA_SSL_TRUST_STORE_PASSWORD": "",
"DB_CURRATE_MAIN_LOGIN": "currency_rates",
"DB_CURRATE_MAIN_PASSWORD": "",
"DB_CURRATE_STANDIN_LOGIN": "currency_rates",
"DB_CURRATE_STANDIN_PASSWORD": "",
"MESSENGER_KAFKA_SSL_KEY_STORE_PASSWORD": "",
"MESSENGER_KAFKA_SSL_PRIVATE_KEY_PASSWORD": "",
"MESSENGER_KAFKA_SSL_TRUST_STORE_PASSWORD": "",
"OTT_CERTSTORE_PRIVATE_KEY_PWD": "",
"OTT_CERTSTORE_PWD": "",
"OTT_TRUST_STORE_PWD": ""
}
Также среди этих секретов могут быть указаны логин и пароль до БД ЕКПиТ (опционально, если отключен НСИ Фасад):
"DB_EKPIT_MAIN_LOGIN": "",
"DB_EKPIT_MAIN_PASSWORD": "",
"DB_EKPIT_STANDIN_LOGIN": "",
"DB_EKPIT_STANDIN_PASSWORD": ""
secman_secret_aj_path Значения секретов задаются в кодировке Base64.
{
"keystore.jks": "",
"truststore.jks": ""
}
secman_secret_mk_path Значения секретов задаются в кодировке Base64.
{
"keystore.jks": "",
"truststore.jks": ""
}
secman_secret_arr_path Значения секретов задаются в кодировке Base64.
{
"keystore.jks": "",
"truststore.jks": ""
}
secman_secret_ingress_path Значения секретов задаются в кодировке Base64.
{
"chain.crt": "",
"tls.crt": "",
"tls.key": ""
}
secman_secret_egress_path Значения секретов задаются в кодировке Base64.
{
"chain.crt": "",
"tls.crt": "",
"tls.key": ""
}
secman_secret_ott_path Значения секретов задаются в кодировке Base64.
{
"keystore.jks": "",
"truststore.jks": ""
}
Настройка сервиса Synapse Rate Limiter#
Synapse Rate Limiter — облачный сервис, позволяющий ограничивать доступ к приложениям на основе задаваемых квот (лимитов). Квоты задаются для отдельных точек вызова приложения и могут быть различными для разных потребителей приложения. При превышении лимитов потребителю возвращается ошибка.
Включение Synapse Rate Limiter#
Чтобы включить взаимодействие с Synapse Rate Limiter, необходимо выполнить действия:
В репозитории с настройками Rate Limiter открыть конфигурационный файл в custom_property.conf.yml.
Проверить, что для параметра конфигурации DEPLOY_LIMITS задано значение true, если нет, то указать это значение.
DEPLOY_LIMITS: true;
Настройка параметров работы Synapse Rate Limiter#
Создание артефакта для подключения вручную#
В OpenShift (Kubernetes) том же namespace, где располагается GlobalRateLimit, необходимо создать в openshift конфигурационный файл RateLimiterCRD.yalm. Файл должен иметь следующую структуру:
name: rate-limit-config
namespace: tribe-pf-dev-crtx-vdc06-01
labels:
proj: synapse-rls
agent: srls
version: D-02.003.00-36
spec:
endpoints: # 6 endpoints — на каждый gateway (HTTPs, HTTPs-geo, HTTPs-geo-smart, ott, ott-geo, ott-geo-smart)
— endpoint: crtx-HTTPs-kb-tribe-pf-dev-crtx-vdc06-01.apps.stands-vdc01.solution.xxx:8443
name: crtx-HTTPs
shortname: crtxh
overall_limit: -1
by_header:
header: module_id
unit: second
value: -1
uri_prefixes:
— unit: second
uri_prefix: /<app_directory>.integration.api.cb.CentralBankRates
value: -1
— unit: second
uri_prefix: /<app_directory>.cloud.api.individual.ExchangeRatesForIndividuals
value: -1
— unit: second
uri_prefix: /<app_directory>.cloud.api.legal.ExchangeRatesForLegalEntities
value: -1
— unit: second
uri_prefix: /<app_directory>.cloud.api.financial.FinancialQuotes
value: -1
— unit: second
uri_prefix: /<app_directory>.cloud.api.interbank.InterbankRates
value: -1
— unit: second
uri_prefix: /<app_directory>.cloud.api.supplementary.ExchangeRatesSupplementary
value: -1
name: crtx-ott-geo
shortname: crtxog
overall_limit: -1
by_header:
header: module_id
unit: second
value: -1
uri_prefixes:
— unit: second
uri_prefix: /<app_directory>.integration.api.cb.CentralBankRates
value: -1
— unit: second
uri_prefix: /<app_directory>.cloud.api.individual.ExchangeRatesForIndividuals
value: -1
— unit: second
uri_prefix: /<app_directory>.cloud.api.legal.ExchangeRatesForLegalEntities
value: -1
— unit: second
uri_prefix: /<app_directory>.cloud.api.financial.FinancialQuotes
value: -1
— unit: second
uri_prefix: /<app_directory>.cloud.api.interbank.InterbankRates
value: -1
— unit: second
uri_prefix: /<app_directory>.cloud.api.supplementary.ExchangeRatesSupplementary
value: -1
— endpoint: crtx-kb-tribe-pf-dev-crtx-vdc06-01.geo-smart.apps.stands-vdc01.solution.xxx:5443
name: crtx-ott-geo-smart
shortname: crtxogs
overall_limit: -1
by_header:
header: module_id
unit: second
value: -1
uri_prefixes:
— unit: second
uri_prefix: /<app_directory>.integration.api.cb.CentralBankRates
value: -1
— unit: second
uri_prefix: /<app_directory>.cloud.api.individual.ExchangeRatesForIndividuals
value: -1
— unit: second
uri_prefix: /<app_directory>.cloud.api.legal.ExchangeRatesForLegalEntities
value: -1
— unit: second
uri_prefix: /<app_directory>.cloud.api.financial.FinancialQuotes
value: -1
— unit: second
uri_prefix: /<app_directory>.cloud.api.interbank.InterbankRates
value: -1
— unit: second
uri_prefix: /<app_directory>.cloud.api.supplementary.ExchangeRatesSupplementary
value: -1
rlnamespace: tribe-pf-dev-crtx-vdc06-01
rlserver: rate-limiter-headless-service.tribe-pf-dev-crtx-vdc06-01.svc.cluster.local
rlserverport: 8081
visibility: namespace
workloadSelector:
labels:
app: crtx-ingress
istio: tribe-pf-dev-crtx-vdc06-01-ingress
Параметры файла подробно описаны в разделе Описание параметров для интеграции.
Создание артефакта для интеграции с помощью DevOpsTools CDJE#
Чтобы конфигурационный файл RateLimiterCRD.yalm был сгенерирован автоматически, необходимо выполнить действия:
Перейти в репозиторий /config/package/conf/, открыть для редактирования файл custom-propery.conf.yml.
В поле enpoints необходимо добавить json следующего вида:
endpoints: [
{
"endpoint": "crtx-HTTPs-kb-tribe-pf-dev-crtx-vdc06-01.apps.stands-vdc01.solution.xxx:8443",
"name": "crtx-HTTPs",
"shortname": "crtxh",
"overall_limit": -1,
"by_header": {
"header": "subsystemCode",
"unit": "second",
"value": -1,
"uri_prefixes": [
{
"uri_prefix": "/<app_directory>.integration.api.cb.CentralBankRates",
"unit": "second",
"value": -1
},
{
"uri_prefix": "/<app_directory>.cloud.api.individual.ExchangeRatesForIndividuals",
"unit": "second",
"value": -1
},
{
"uri_prefix": "/<app_directory>.cloud.api.legal.ExchangeRatesForLegalEntities",
"unit": "second",
"value": -1
},
{
"uri_prefix": "/<app_directory>.cloud.api.financial.FinancialQuotes",
"unit": "second",
"value": -1
},
{
"uri_prefix": "/<app_directory>.cloud.api.interbank.InterbankRates",
"unit": "second",
"value": -1
},
{
"uri_prefix": "/<app_directory>.cloud.api.supplementary.ExchangeRatesSupplementary",
"unit": "second",
"value": -1
}
]
}
},
{
"endpoint": "crtx-kb-tribe-pf-dev-crtx-vdc06-01.geo-smart.apps.stands-vdc01.solution.xxx:5443",
"name": "crtx-ott-geo-smart",
"shortname": "crtxogs",
"overall_limit": -1,
"by_header": {
"header": "subsystemCode",
"unit": "second",
"value": -1,
"uri_prefixes": [
{
"uri_prefix": "/<app_directory>.integration.api.cb.CentralBankRates",
"unit": "second",
"value": -1
},
{
"uri_prefix": "/<app_directory>.cloud.api.individual.ExchangeRatesForIndividuals",
"unit": "second",
"value": -1
},
{
"uri_prefix": "/<app_directory>.cloud.api.legal.ExchangeRatesForLegalEntities",
"unit": "second",
"value": -1
},
{
"uri_prefix": "/<app_directory>.cloud.api.financial.FinancialQuotes",
"unit": "second",
"value": -1
},
{
"uri_prefix": "/<app_directory>.cloud.api.interbank.InterbankRates",
"unit": "second",
"value": -1
},
{
"uri_prefix": "/<app_directory>.cloud.api.supplementary.ExchangeRatesSupplementary",
"unit": "second",
"value": -1
}
]
}
}
]
Параметры файла подробно описаны в разделе Описание параметров для интеграции.
Описание параметров для интеграции#
Таблица с общими параметрами
Параметр |
Описание |
Пример |
|---|---|---|
workloadSelector |
Набор labels для определения нужных pod Ingress Gateway |
workloadSelector: |
rlserver |
Адрес RLS-сервера (для децентрализованной установки следует указать hadless server rls например: «rate-limiter-headless-service», для централизованной установки здесь следует указать сервис Egress Gateway вашего namespace, рекомендованный формат — <headless_service_name>. |
egress-gateway-headless.my-namespace.svc.cluster.local |
rlserverport |
Порт RLS-сервера, по умолчанию — 12001, если не задан (для децентрализованной установки — 8081, для централизованной установки — 12001) |
12001 |
rlnamespace |
namespace, в котором развернут централизованный оператор, данное поле необходимо указать для возможности развертывания нескольких экземпляров централизованного SRLS в рамках одного кластера Kubernetes или Red Hat OpenShift (опционально), если данное поле не задано, необходимо проверить наличие прав на артефакт EnvoyFilter в прикладном namespace |
rlservice-ns |
visibility |
Отвечает за область видимости CRD, на текущий момент поддерживается только одно значение — cluster |
cluster |
endpoints |
Перечень ресурсов |
— endpoint: … |
Таблица с параметрами для задания endpoint
Параметр |
Описание |
Пример |
|---|---|---|
shortname |
Уникальное имя endpoint, используемое в работе. |
some service1 |
endpoint |
Адрес в формате host:port, здесь host — DNS адрес, на который поступает входящий трафик (определяется в артефакте Route, используется в артефактах Gateway, VirtualService для манипуляции трафиком с помощью Service Mesh), port — порт, который слушает Ingress (задается в артефакте Gateway), например 8080 для HTTP трафика или 8443 для HTTPS трафика. |
test-server2-endpoint.apps.stands-vdc01.solution.xxx:8080 |
overall_limit |
Максимальное ограничение квоты для endpoint; 0 — блокировка всех запросов, отрицательное значение — нет ограничения; если значение больше 0, дополнительно вводится счетчик запросов на endpoint; в случае превышения запрос будет отклонен, даже если потребитель еще не исчерпал свою квоту. |
100 |
by_header |
Список настроек для функционала идентификации потребителя по HTTP-заголовку. Параметр не может использоваться одновременно с by_path. |
Список параметров см. таблицу |
Параметры блока by_header |
||
header |
Произвольный HTTP-заголовок (валидный для протокола HTTP) |
module_id |
unit |
Опциональное поле, по умолчанию second, единица измерения лимитов, используется при расчете overall_limit, для запросов со значениями заголовка header, неуказанными в блоке invokers, и для неидентифицированных потребителей |
second |
anon_value |
Опциональное поле, позволяет задать квоту для неидентифицированных потребителей, если не задано, используется значение поля value |
3 |
value |
Опциональное поле, по умолчанию 1, позволяет задать квоту для запросов со значениями заголовка header, неуказанными в блоке invokers, и для неидентифицированных потребителей |
7 |
soft |
Опциональный блок, если задан, создается метрика, показывающая приближение к лимиту. soft.value — значение квоты, после которой с шагом кратным soft.step будет инкрементирована метрика мониторинга превышения уровня soft квоты для конкретного потребителя вплоть до превышения основного лимита; |
value: 10 step: 1 |
invokers |
Опциональный блок, позволяет задать квоту для определенных потребителей независимо |
|
Параметры блока invokers |
||
header_value |
Значение заголовка, указанного в поле header |
synapse-dev-sandbox |
name |
Опциональное поле, позволяет указать метаданные для header_value |
client1 |
unit |
Опциональное поле, по умолчанию second, единица измерения лимитов для header_value |
second |
value |
Опциональное поле, по умолчанию 1, позволяет задать квоту для запросов со значением заголовка header, равным header_value |
5 |
soft |
опциональный блок, если задан, создается метрика, показывающая приближение к лимиту. soft.value — значение квоты, после которой с шагом кратным soft.step будет инкрементирована метрика мониторинга превышения уровня soft квоты для header_value вплоть до превышения основного лимита; |
value: 10 step: 1 |
by_path |
Список настроек для функционала идентификации потребителя по resourceName. Параметр не может использоваться одновременно с by_header. |
|
Параметры блока by_path |
||
mask |
Опциональное поле, по умолчанию rn/::*, маска для определения значимой части идентификатора потребителя |
'rn/::_' |
unit |
Опциональное поле, по умолчанию second, единица измерения лимитов, используется при расчете overall_limit и потребителей, неуказанных в блоке tenants |
second |
quotas |
Конфигурация квоты для потребителей, неуказанных в блоке tenants |
|
tenants |
Опциональный блок, позволяет задать квоту для определенных потребителей независимо |
|
Параметры блока quotas |
||
flat |
Опциональное поле, по умолчанию 1, позволяет задать квоту для запросов |
15 |
soft |
Опциональный блок, если задан, создается метрика, показывающая приближение к лимиту. soft.value — значение квоты, после которой с шагом кратным soft.step будет инкрементирована метрика мониторинга превышения уровня soft квоты для конкретного потребителя вплоть до превышения основного лимита. |
value: 10 step: 1 |
Параметры блока tenant |
||
name |
Опциональное поле, позволяет указать метаданные для resourceName |
server1.path |
quotas |
Конфигурация квоты для потребителя, указанного в resourceName |
value: 5 step: 1 |
resourceName |
Идентификатор потребителя, значение необходимо указать в формате account-id:project-id:resource-id без разделителя, например accProjRes, если используется маска, необходимо указать только значимую часть, например accProj |
account-2project-2 |
unit |
Опциональное поле, по умолчанию second, единица измерения лимитов |
second |
Настройка Системы объединенного мониторинга Unimon#
Чтобы настроить Систему объединенного мониторинга Unimon, необходимо выполнить следующие действия:
Задать настройки в манифестах в среде контейнеризации. Большинство обязательных labels метрики будут добавлены автоматически на этапе сбора Unimon-agent. Но в прикладное приложение необходимо самостоятельно добавить следующие labels:
app — имя приложения;
version — версия приложения; Эти параметры необходимо добавить в labels POD приложения.
Добавить в метрики unimonId/rn (необходимо при неавтономном режиме работы). Чтобы значения unimonId/rn появились во всех метриках пользователя, есть несколько вариантов.
UnimonId задать как label в pod'е прикладного сервиса.
UnimonId/rn задать как label в метрике.
rn задать в файле конфигурации unimon-sender (metric.label.rn). Варианты указаны в соответствии с приоритетностью применения значений. Если метка задана первым и последним вариантом и значения не равны, то в метрики будет добавлено значение, указанное в первом варианте. Если указан несуществующий unimonId/rn в метриках, выводится сообщение в лог (режим debug), что эти метрики не будут направлены в хранилище.
Если в метрике указан только rn и параметр работы Unimon указан как автономная работа, метрика будет отправлена в topic по умолчанию, указанный в unimon-sender.
Если в метрике указан только rn — задан параметр для неавтономной работы и отсутствует связь с сервером, то невозможно получить основной unimonId для rn. Маршрутизация в соответсвующий topic не выполнится, метрика не будет отправлена.
Пример Service.yaml
apiVersion: v1
kind: Service
metadata:
# Пример названия сервиса
name: unimon-sandbox-micrometer
annotations:
description: "Exposes Micrometer-Prometheus App by CLuster Ip"
# Аннотация для включения сбора метрик
prometheus.io.scrape: "true"
# Аннотация для указания HTTP endpoint с метриками приложения
# Путь указывается полностью, например если при тестирование
# вы переходите на endpoint HTTP://localhost:8081/actuator/prometheus
prometheus.io.path: "/actuator/prometheus"
# Аннотация для указания порта подключения к HTTP endpoint с метриками
# Внимание!!! порт может меняться на стороне потребителя, "8081" указан как пример
prometheus.io.port: "8081"
labels:
app: unimon-sandbox-micrometer
spec:
ports:
— name: HTTP
port: 8080
targetPort: 8080
— name: HTTP-actuator
port: 8081
targetPort: 8081
selector:
app: unimon-sandbox-micrometer
Более подробно с настройками и параметрами можно ознакомиться в документации по установке и развертыванию Системы объединенного мониторинга Unimon.
Компонент One-Time Password (OTTS) продукта Platform V Backend OTT (#BD)#
Чтобы настроить клиента OTT на использование полученного сертификата OTT Service, необходимо задать параметры:
Параметр |
Описание |
Пример |
|---|---|---|
ott.trust.store.path |
Путь к хранилищу, содержащему сертификат OTT Service |
/etc/pprb/ott/ott_truststore.p12 |
ott.trust.store.pwd |
Пароль от хранилища, содержащего сертификат OTT Service. При получении сертификата задавался в параметре <password> |
<здесь ваш пароль от хранилища ключей> |
ott.service.cert.alias |
Alias сертификата OTT Service в хранилище |
ott−service |
ott.certstore.type=PKCS12 |
Тип хранилища (PKCS12 или JKS) |
PKCS12 |
Для получения приватной части сертификата:
Администратор прикладного модуля: выполняет генерацию ключевой пары в p12−контейнере.
keytool −genkey −keyalg EC −sigalg SHA256withECDSA −keystore ${module_id}.p12 −storetype PKCS12 −keysize 256 −dname "CN=${module_id}" −alias ${module_id}
Рекомендуется использовать версию OpenJDK не ниже 1.8 2. Администратор прикладного модуля: формирует запрос на сертификат.
keytool −certreq −keyalg EC −sigalg SHA256withECDSA −keystore ${module_id}.p12 −storetype PKCS12 −alias ${module_id} > ${module_id}_cert_req.pem
В результате выполнения данной команды создастся файл CSR− ${module_id}_cert_req.pem, который необходимо передать Администратору OTT в заявке на генерацию сертификата для модуля. В заявке указать, что сертификат должен быть сгенерирован из приложенного запроса по данной инструкции.
Администратор OTT: выписывает сертификат.
./ejbcawsracli.sh certreq %{module_id} "CN=%{module_id}" NULL PlatformCA_EC PPRBModule %{module_id}_cert_req.pem PKCS10 PEM NONE
В результате выполнения данной команды будет создан файл с сертификатом− %{module_id}.pem, который необходимо передать Администратору прикладного модуля.
Администратор OTT: вместе с сертификатом модуля передает сертификат УЦ OTT PlatformCA_EC.pem. CN=PlatformCA_EC
CA certificate: Download as PEMАдминистратор прикладного модуля: импортирует сертификат УЦ OTT и сертификат модуля в keystore, созданный на 1 шаге (строго в указанном порядке).
keytool −import −keystore ${module_id}.p12 −storetype PKCS12 −file PlatformCA_EC.pem −alias PlatformCA_EC
keytool −import −keystore ${module_id}.p12 −storetype PKCS12 −file ${module_id}.pem −alias ${module_id}
После выполнения шагов должно быть два файла (необязательно с такими именами):
ott_service_truststore.p12 − публичная часть (truststore);
pricing−service.p12 − приватная часть (keystore).
Подготовка файла конфигурации стенда зависимых параметров#
Это текстовый файл в формате: имя_параметра: значение_параметра. Цифровые значения задаются в одинарных кавычках. Пример файла параметров Expand source
CR_NAMESPACE: ci00642380−idevgen2−dynamic−pricing−ift
При изменении строки подключения к БД (имена, ip адреса, порты), списка брокеров Kafka (имена, ip адреса, порты) необходимо изменение необязательных параметров по умолчанию в части маршрутизации трафика. Без этих изменений не произойдет соединение с хостом. Если количество хостов брокеров Kafka увеличиться потребуется новый релиз с поддержкой новой конфигурации. Если один из портов преобразования будет использоваться в строке подключения к БД и/или как порт подключения к брокеру Kafka, его значение придется переназначить на другой порт. При этом нужно учесть, что эти порты преобразования указаны в сервисе выходного шлюза. Нужно будет выбрать незанятый порт среди списка портов сервиса выходного шлюза.
В репозитории common можно добавить параметры представленные в таблице ниже. В файле /b1/installer/system/efs/config/parameters/openShift.conf
Имя параметра |
Описание |
Пример |
|---|---|---|
audit_host |
Адрес сервиса аудита |
srv-1.pf.dev.xxx |
global_docker_registry |
Имя вашего приватного хранилища докер контейнеров |
xxx.sw.sbc.space |
crtx_ark_rates_receiver_cloud_app_docker_part |
Пусть дистрибутива ark-receiver cloud app в nexus |
xxx_dev/ci90000071_crtx_dev/crtx-ark-rates-receiver-cloud-app |
crtx_cb_cloud_app_docker_part |
Имя тега докер контейнера в разрезе сервисов без указания доменной части приватного хранилища docker и версии |
xxx_dev/ci90000071_crtx_dev/crtx-cb-cloud-app |
crtx_financial_quotes_cloud_app_docker_part |
Имя тега докер контейнера в разрезе сервисов без указания доменной части приватного хранилища docker и версии |
xxx_dev/ci90000071_crtx_dev/crtx-financial-quotes-cloud-app |
crtx_individual_cloud_app_docker_part |
Имя тега докер контейнера в разрезе сервисов без указания доменной части приватного хранилища docker и версии |
xxx_dev/ci90000071_crtx_dev/crtx-individual-cloud-app |
crtx_interbank_rates_cloud_app_docker_part |
Имя тега докер контейнера в разрезе сервисов без указания доменной части приватного хранилища docker и версии |
xxx_dev/ci90000071_crtx_dev/crtx-interbank-rates-cloud-app |
crtx_legal_cloud_app_docker_part |
Имя тега докер контейнера в разрезе сервисов без указания доменной части приватного хранилища docker и версии. |
xxx_dev/ci90000071_crtx_dev/crtx-messenger-cloud-app |
crtx_messenger_cloud_app_docker_part |
Имя тега докер контейнера в разрезе сервисов без указания доменной части приватного хранилища docker и версии |
xxx_dev/ci90000071_crtx_dev/crtx-supplementary-cloud-app |
crtx_supplementary_cloud_app_docker_part |
Имя тега докер контейнера в разрезе сервисов без указания доменной части приватного хранилища docker и версии |
xxx_dev/ci90000071_crtx_dev/crtx-legal-cloud-app |
global_docker_secret |
Имя секрета для доступа к docker хранилищу |
default |
global_server_max_http_header_size |
Максимальный размер HTTP-заголовков в запросе |
32768 |
NAMESPACE_CDNS |
Доменные имена балансировшика на которых будут созданы url для текущей инсталляции |
apps.stands-vdc01.solution.xxx |
NAMESPACE_CDNS_GEO |
Доменные имена балансировшика на которых будут созданы url для текущей инсталляции |
geo.apps.stands-vdc01.solution.xxx |
NAMESPACE_CDNS_SMART_GEO |
Доменные имена балансировшика на которых будут созданы url для текущей инсталляции |
geo-smart.apps.stands-vdc01.solution.xxx |
mq_messenger_kafka_ip_(1 — n) |
ip адрес 1-n брокера Kafka РБФИ |
99.99.99.1 |
mq_ark_kafka_host_(1 — n) |
Адрес 1-n брокера Kafka АРК |
srv-1.pf.dev.xxx |
mq_ark_kafka_ip_(1 — n) |
ip адрес 1-го брокера Kafka АРК |
99.99.99.1 |
mq_ark_kafka_port_(1 — n) |
Номер порта 1-n брокера Kafka АРК |
9092 |
mq_ark_kafka_topic_messager |
Topic Kafka АРК с ответными квитанциями о статусе сохранения сообщений АРК |
RBFI.RATESRESPONSEEVENT.V1 |
mq_ark_kafka_ssl_endpoint_algorithm |
Алгоритм идентификации, используемый клиентами для проверки имени хоста Kafka АРК |
Пустое поле |
mq_ark_kafka_brokers |
Перечень адресов брокеров Kafka АРК |
99.99.99.1:9092,99.99.99.2:9092,99.99.99.3:9092,99.99.99.4:9092 |
mq_ark_kafka_security_protocol |
Используемый протокол безопасности Kafka АРК |
SSL |
mq_ark_kafka_topic_delivery_messager |
Topic Kafka АРК с сообщениями с курсами валют АРК |
XP.RATESREQUESTEVENT.V1 |
mq_ark_rates_receiver_new_rates_event_sending_enabled |
Выключатель отправки событий появления новых курсов АРК (для ark-receiver) |
true |
mq_ark_rates_receiver_listener_backoff_interval |
Период ожидания повторной обработки сообщения из topic (для ark-receiver) |
250 (положительное число) |
mq_ark_rates_receiver_listener_backoff_attempts |
Количество попыток повторной обработки сообщения из topic (для ark-receiver) |
3 (положительное число) |
mq_messenger_kafka_ssl_endpoint_algorithm |
Алгоритм идентификации, используемый клиентами для проверки имени хоста Kafka РБФИ |
пустое поле |
mq_messenger_kafka_host_(1 — n) |
Адрес 1-n брокера Kafka РБФИ |
srv-1.pf.dev.xxx |
mq_messenger_kafka_port_(1 — n) |
Номер порта 1-n брокера Kafka РБФИ |
9092 |
mq_messenger_kafka_security_protocol |
Используемый протокол безопасности Kafka РБФИ |
SSL |
mq_messenger_kafka_topic_messenger_listeners_backoff_attempts |
Количество попыток повторной обработки сообщения из topic (для messenger) |
3 (положительное число) |
mq_messenger_kafka_topic_ark_new_rates_event |
Topic для событий появления новых курсов АРК (для messenger) |
CRTX.CURRENCYRATEFORARKCREATEDEVENT.V1 |
mq_messenger_kafka_topic_legal_sbbol |
Topic для сообщений курсов ЮЛ для СББОЛ (для messenger) |
CRTX.CURRENCYRATESFORSBBOLRESENDEDEVENT.V1 |
mq_messenger_kafka_topic_messenger_listeners_backoff_interval |
Период ожидания повторной обработки сообщения из topic (для messenger) |
250 (положительное число) |
mq_messenger_kafka_topic_person_metal_distant |
Topic Kafka РБФИ с курсами металлов физических лиц |
CRTX.CURRENCYRATESPERSONMETALDISTANTCREATEDEVENT.V1 |
mq_messenger_kafka_topic_legal_distant |
Topic Kafka РБФИ с курсами валют и металлов юридических лиц |
CRTX.CURRENCYRATESFORSBBOLCREATEDEVENT.V1 |
mq_messenger_kafka_brokers |
Перечень адресов брокеров Kafka АРК |
srv-1.pf.dev.xxx:9092, srv-2.pf.dev.xxx:9092, srv-3.pf.dev.xxx:9092, srv-4.pf.dev.xxx:9092 |
mq_messenger_kafka_topic_person_distant |
Topic Kafka РБФИ с курсами валют физических лиц |
CRTX.CURRENCYRATESPERSONCURRENCYDISTANTCREATEDEVENT.V1 |
mq_internal_kafka_topic_new_rates_event |
Topic для событий появления новых курсов АРК (для ark-receiver) |
CRTX.CURRENCYRATEFORARKCREATEDEVENT.V1 |
mq_kafka_topic_person_distant |
Имя topic для для обмена сообщения |
CRTX.CURRENCYRATESFORSBBOLCREATEDEVENT.V1 |
mq_kafka_ssl_endpoint_algorithm |
Алгоритм взаимодействия с брокерами kafka |
PLAINTEXT или SASL |
mq_kafka_brokers |
Список брокеров в формате host:port |
Kafka_brocker1:9093,kafka_brocker2:9093 |
mq_kafka_topic_person_metal_distant |
Имя topic для для обмена сообщения |
CRTX.CURRENCYRATESPERSONMETALDISTANTCREATEDEVENT.V1 |
mq_kafka_topic_legal_distant |
Имя topic для для обмена сообщения |
CRTX.CURRENCYRATESFORSBBOLCREATEDEVENT.V1 |
ott_image |
Полная ссылка на образ ott |
registry…mycompany.ru/xxxxx/directory/ci00641491/ci01125613_ott/ott-client-api@sha256:dcbb541e856497a0d1587bbea79d2625f4d7ed2cb00a5dabb2c6fea0e8340046 |
ott_client_cert_alies |
Имя сертификата в хранилище, используемого при взаимодействии с сервисом OTT |
cert |
ott_service_url |
Url-адрес сервиса OTT |
str-vat-app2141.delta.xxxx.ru:8443 |
ott_module_id |
Идентификатор модуля при обращении к OTT |
Значение по умолчанию — currency-rates-cloud |
ott_servers_url |
Список хостов для ott в формате host:port |
'str-vat-app2141.delta.xxxx.ru:8443,str-vat-app2142.delta.xxxx.ru:8443' |
fluent_bit_image |
Полная ссылка на образ fluent_bit |
registry.delta.xxxx.ru/docker-release/ci00734898/ci00685811_synapse/fluent-bit@sha256:cafd572be2350573fd76a04f12a46b7d56f399289c88b46a3783c01302aa6473 |
fluent_bit_loggerHost |
Хост ELK |
ELK.logger.ru |
fluent_bit_loggerPort |
Порт ELK |
Если предполагается использовать для вывода трафика из k8s/openshift egress. То необходимо указать порт 80. В случае отказа от istio необходимо указать целевой порт ELK |
fluent_bit_standId |
Имя стенда |
Любая строка для идентификации логов пример dev/prom |
fluent_bit_zoneId |
Имя Зоны |
Пример CV |
image_istio_image |
Полная ссылка на образ ingress (envoy-proxy) istio/servicemesh |
registry.redhat.io/openshift-service-mesh/proxyv2-rhel8@sha256:320f5bd35c208e00005c01ce0e83c8f05276119f273e9f881da950fdfff59a13 |
Параметры базы данных
Имя параметра |
Описание |
Пример |
|---|---|---|
jdbc_db_currate_main_url |
Строка подключения к БД в формате jdbc |
jdbc:postgresql://10.2x.xx.xx:5432/crtxdev?currentSchema=currency_rates |
jdbc_dbcurrate_si_url |
Строка подключение к БД stand-in в формате jdbc |
jdbc:postgresql://10.2x.xx.xx:5432/crtxdev?currentSchema=currency_rates |
jdbc_db_currate_driver |
Тип используемого драйвера jdbc |
org.postgresql.Driver |
jdbs_db_curate_owner |
Указание владельца схемы БД приложения |
currency_rates |
jdbc_db_ekpit_main_url |
Строка подключение к БД ekpit в формате jdbc |
jdbc:postgresql://10.2x.xx.xx:6544/ekpitift01?currentSchema=ekpit |
jdbc_db_ekpit_si_url |
Строка подключение к БД ekpit stand-in в формате jdbc |
jdbc:postgresql://10.2x.xx.xx:6545/ekpitift01?currentSchema=ekit |
jdbc_db_ekpit_owner_schema |
Указание владельца схемы БД ekpit |
ekpit |
jdbc_db_ekpit_driver |
Тип используемого драйвера jdbc |
org.postgresql.Driver |
jdbc_db_crtx_main_url |
Cтрока подключения к основной БД приложения |
jdbc:postgresql://10.2x.xx.xx:6544/ekpitift01?currentSchema=ekpit |
jdbc_db_crtx_main_host |
Имя хоста БД приложения |
srv-1.pf.dev.xxx |
jdbc_db_crtx_main_ip |
ip-адрес хоста основной БД приложения |
99.99.99.1 |
jdbc_db_crtx_main_port |
Порт хоста основной БД приложения |
9092 |
jdbc_db_crtx_main_failover_host |
Имя резервного хоста БД |
srv-1.pf.dev.xxx1 |
jdbc_db_crtx_main_failover_ip |
ip-адрес резервного хоста БД |
99.99.99.2 |
jdbc_db_crtx_main_failover_port |
Порт хоста резервной БД приложения |
9091 |
jdbc_db_crtx_si_failover_host |
Имя резервного хоста БД stand-in |
srv-1.pf.dev.xxx2 |
jdbc_db_crtx_si_host |
Имя хоста stand-in БД приложения |
srv-1.pf.dev.xxx3 |
jdbc_db_crtx_si_port |
Порт хоста stand-in БД приложения |
9091 |
jdbc_db_crtx_si_failover_port |
Порт резервного хоста БД stand-in |
9091 |
jdbc_db_crtx_si_failover_ip |
ip-адрес резервного хоста БД stand-in |
99.99.99.3 |
jdbc_db_crtx_si_ip |
ip-адрес хоста БД stand-in |
99.99.99.4 |
jdbc_db_crtx_si_url |
Cтрока подключения к stand-in БД приложения |
jdbc:postgresql://10.2x.xx.xx:6544/ekpitift01?currentSchema=ыш |
jdbs_db_crtx_owner |
Имя схемы в базе данных, одинаковое для обоих контуров |
schema |
jdbc_db_crtx_driver |
Имя java-класса jdbc-драйвера БД |
jdbcClass |
Параметры интеграционных сервисов
Имя параметра |
Описание |
Пример |
|---|---|---|
audit_url_host |
url для отправки метрик аудита |
HTTP://audit....solution.xxx*/v1 |
audit_disable |
Параметр отключения Метрик аудита |
false |
nsi_facade_host |
url для подключения к nsi facade |
nsi.xxx.ru |
nsi_facade_port |
Порт для подключения к nsi facade |
Если предполагается использовать для вывода трафика из k8s/openshift egress. То необходимо указать порт 80. В случае отказа от istio необходимо указать целевой порт nsi |
nsi_facade_use |
Параметр отключает обращение к nsi facade и переключает приложение на использование базы ekpit |
true |
aj_kafka_brokers |
Список брокеров для ПЖ (APLJ) |
aj.sberbansk.ru:9092,aj.xxx.ru:9092 |
aj_client_stub |
Отключение прикладной репликации |
false |
aj_zone_id |
Зона репликации ПЖ (APLJ) |
CV |
Также необходимо настроить SI в ARM ПЖ:
Добавить зону "CV".
Указать типы данных: "CR, "EOD", ARK".
Уточнить плагин Kafka, используемый с этими данными: EXPORT_SI.
Для обеспечения безопасности передаваемых данных используется mTLS + OTT. Все входящие и исходящие межсервисные соединения проходят через ingress/egress proxy. Для входящих/исходящих взаимодействий используются mTLS.
Стендозависимые параметры ISTIO/Platform V Synapse Service Mesh
Имя параметра |
Описание |
Пример |
|---|---|---|
global.multiClusters.openshiftControlPlaneIstiodService |
Параметр берется из контекста описания среды в файле multiClusters.json в common репозитории. Содержит ссылку на control plane istio/servicemesh2 |
istiod-basic.ci01994970-idevgen-control-panel-synapse.svc:15012 |
NAMESPACE_CDNS |
Доменная часть url создаваемого route/ingress В промышленной среде это балансировщики |
apps.stands-vdc01.solution.xxx |
NAMESPACE_CDNS_GEO |
Доменная часть url создаваемого route/ingress В промышленной среде это балансировщики |
apps.stands-vdc01.solution.xxx |
NAMESPACE_CDNS_SMART_GEO |
Доменная часть url создаваемого route/ingress В промышленной среде это балансировщики |
apps.stands-vdc01.solution.xxx |
appFQDN_HTTPs |
Хостовая часть урл. |
currency-rates-kb , currency-rates-HTTPs-kb currency-rates , currency-rates-HTTPs |
appFQDN_HTTPs_ott |
Хостовая часть урл. |
currency-rates-kb , currency-rates-HTTPs-kb currency-rates , currency-rates-https |
appFQDN_all_in_on_ott |
Хостовая часть урл. |
currency-rates-kb , currency-rates-HTTPs-kb currency-rates , currency-rates-HTTPs |
appFQDN_all_in_on_HTTPs |
Хостовая часть урл. |
currency-rates-kb , currency-rates-HTTPs-kb currency-rates , currency-rates-HTTPs |
В результате развертывания ingress/router будут созданы 12 ingress. Такое количество связано с циклом жизни приложения.
Параметры «тонкой» настройки istio
Текущие параметры настраивают сущности Gateway,Virtual Service,Service Entry, Envoy Filter. Также, текущие параметры настраивают проксирование и выполняют роль firewall.
Пример: При указании параметров для подключения к базе данных приложения:
jdbc_db_currate_main_url= jdbc:postgresql://10.2x.xx.xx:5432/crtxdev?currentSchema=currency_rates
Текущий параметр отвечает за настройку сервиса. Далее настройте среду чтобы текущий трафик мог быть разрешен в сервисной сети. Для этого заполните параметры. Пример для базы данных
jdbc_db_currate_main_host = 10.2x.xx.xx
jdbc_db_currate_main_ip = 10.2x.xx.xx
jdbc_db_currate_main_port = 5432\
Эти параметры могут быть переопределены в файле сrtx.istio.all.conf.
…
#currate db egrees
# const mapping port
istio_ose_istio_egress_svc_spec_ports_db_currate_main_mapping_port=5555
istio_ose_istio_egress_svc_spec_ports_db_currate_main_failover_mapping_port=5556
istio_ose_istio_egress_svc_spec_ports_db_currate_si_mapping_port=5556
istio_ose_istio_egress_svc_spec_ports_db_currate_si_failover_mapping_port=5557
#host
istio_ose_istio_egress_db_currate_main_host=${jdbc_db_currate_main_host}
istio_ose_istio_egress_db_currate_main_failover_host=${jdbc_db_currate_main_failover_host}
istio_ose_istio_egress_db_currate_si_host=${jdbc_db_currate_si_host}
istio_ose_istio_egress_db_currate_si_failover_host=${jdbc_db_currate_si_failover_host}
# ip
istio_ose_istio_egress_db_currate_main_ip=${jdbc_db_currate_main_ip}
istio_ose_istio_egress_db_currate_main_failover_ip=${jdbc_db_currate_main_failover_ip}
istio_ose_istio_egress_db_currate_si_ip=${jdbc_db_currate_si_ip}
istio_ose_istio_egress_db_currate_si_failover_ip=${jdbc_db_currate_si_failover_ip}
# port
istio_ose_istio_egress_db_currate_main_port=${jdbc_db_currate_main_port}
istio_ose_istio_egress_db_currate_main_failover_port=${jdbc_db_currate_main_failover_port}
istio_ose_istio_egress_db_currate_si_port=${jdbc_db_currate_si_port}
istio_ose_istio_egress_db_currate_si_failover_port=${jdbc_db_currate_si_failover_port}
…
Пример конфигурации istio/servicemesh, который будет сформирован из дистрибутива:
apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
name: se-db-currency-main
spec:
addresses:
— {{istio_ose_istio_egress_db_currate_main_ip }}/32
endpoints:
— address: {{ istio_ose_istio_egress_db_currate_main_ip }}
exportTo:
— .
hosts:
— {{ istio_ose_istio_egress_db_currate_main_host }}
location: MESH_EXTERNAL
ports:
— name: tcp-{{ istio_ose_istio_egress_db_currate_main_port }}
number: {{ istio_ose_istio_egress_db_currate_main_port }}
protocol: TCP
resolution: STATIC
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: gw-cr-egress-db-currency-main
spec:
selector:
istio: crtx-egress
servers:
— hosts:
— {{ istio_ose_istio_egress_db_currate_main_host }}
port:
name: tcp-{{ istio_ose_istio_egress_db_currate_main_port }}
number: {{ istio_ose_istio_egress_db_currate_main_port }}
protocol: TCP
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: vs-cr-egress-db-currency-main
spec:
exportTo:
— .
gateways:
— gw-cr-egress-db-currency-main
— mesh
hosts:
— {{ istio_ose_istio_egress_svc_spec_ports_db_currate_main_host }}
tcp:
— match:
— gateways:
— mesh
port: {{ istio_ose_istio_egress_svc_spec_ports_db_currate_main_port }}
route:
— destination:
host: svc-cr-egress
port:
number: {{ istio_ose_istio_egress_svc_spec_ports_db_currate_main_mapping_port }}
weight: 100
— match:
— gateways:
— gw-cr-egress-db-currency-main
port: {{ istio_ose_istio_egress_svc_spec_ports_db_currate_main_mapping_port }}
route:
— destination:
host: {{ istio_ose_istio_egress_db_currate_main_host }}
port:
number: {{ istio_ose_istio_egress_db_currate_main_port }}
weight: 100
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRuleF
metadata:
labels:
external: database
name: dr-dp-egress-${DB_CURRENCY_MAIN_HOST}
spec:
exportTo:
— .
host: {{ istio_ose_istio_egress_db_currate_main_host }}
trafficPolicy:
loadBalancer:
simple: ROUND_ROBIN
portLevelSettings:
— port:
number: {{ istio_ose_istio_egress_db_currate_main_mapping_port }}
connectionPool:
tcp:
connectTimeout: {{ istio_ose_istio_egress_db_connectionPool_tcp_connectTimeout }}
maxConnections:{{ istio_ose_istio_egress_db_connectionPool_tcp_maxConnections }}
tcpKeepalive:
time: {{ istio_ose_istio_egress_db_connectionPool_tcpKeepalive_time }}
interval: {{ istio_ose_istio_egress_db_connectionPool_tcpKeepalive_interval }}
Параметры базы данных приложения
Имя параметра |
Описание |
Пример |
|---|---|---|
jdbc_db_currate_main_host |
В текущем параметре передается host name или ip адреc базы данных (если у базы нет FQDN) |
db.curren-rate.sberban.ru или 10.2x.xx.xx |
jdbc_db_currate_main_failover_host |
В текущем параметре передается host name или ip адрес базы данных (если у базы нет FQDN) |
db.curren-rate.sberban.ru или 10.2x.xx.xx |
jdbc_db_currate_si_host |
В текущем параметре передается host name или ip адреc базы данных (если у базы нет FQDN) |
db.curren-rate.sberban.ru или 10.2x.xx.xx |
jdbc_db_currate_si_failover_host |
В текущем параметре передается host name или ip адреc базы данных (если у базы нет FQDN) |
db.curren-rate.sberban.ru или 10.2x.xx.xx |
jdbc_db_currate_main_ip |
В текущих параметрах передается ip адреc базы данных приложения |
10.2x.xx.xx |
jdbc_db_currate_main_failover_ip |
В текущих параметрах передается ip адреc базы данных приложения |
10.2x.xx.xx |
jdbc_db_currate_si_ip |
В текущих параметрах передается ip адреc базы данных приложения |
10.2x.xx.xx |
jdbc_db_currate_si_failover_ip |
В текущих параметрах передается ip адреc базы данных приложения |
10.2x.xx.xx |
istio_ose_istio_egress_db_currate_main_port |
В текущих параметрах передается порт базы данных приложения |
5432 |
istio_ose_istio_egress_db_currate_main_failover_port |
В текущих параметрах передается порт базы данных приложения |
5432 |
istio_ose_istio_egress_db_currate_si_port |
В текущих параметрах передается порт базы данных приложения |
5432 |
istio_ose_istio_egress_db_currate_si_failover_port |
В текущих параметрах передается порт базы данных приложения |
5432 |
Параметры базы данных ekpit
Имя параметра |
Описание |
Пример |
|---|---|---|
jdbc_db_ekpit_main_host |
В текущем параметре передается host name или ip адреc базы данных ekpit (если у базы нет FQDN) |
db.ekpit.sberban.ru |
jdbc_db_ekpit_main_failover_host |
В текущем параметре передается host name или ip адреc базы данных ekpit (если у базы нет FQDN) |
db.ekpit.sberban.ru |
jdbc_db_ekpit_si_host |
В текущем параметре передается host name или ip адреc базы данных ekpit (если у базы нет FQDN) |
db.ekpit.sberban.ru |
jdbc_db_ekpit_si_failover_host |
В текущем параметре передается host name или ip адреc базы данных ekpit (если у базы нет FQDN) |
db.ekpit.sberban.ru |
jdbc_db_ekpit_main_failover_ip |
В текущих параметрах передается ip адреc базы данных ekpit |
10.2x.xx.xx |
jdbc_db_ekpit_si_ip |
В текущих параметрах передается ip адреc базы данных ekpit |
10.2x.xx.xx |
jdbc_db_ekpit_si_failover_ip |
В текущих параметрах передается ip адрес базы данных ekpit |
10.2x.xx.xx |
jdbc_db_ekpit_main_ip |
В текущих параметрах передается ip адреc базы данных ekpit |
10.2x.xx.xx |
jdbc_db_ekpit_main_port |
В текущих параметрах передается порт базы данных ekpit |
5432 |
jdbc_db_ekpit_main_failover_port |
В текущих параметрах передается порт базы данных ekpit |
5432 |
jdbc_db_ekpit_si_port |
В текущих параметрах передается порт базы данных ekpit |
5432 |
jdbc_db_ekpit_si_failover_port |
В текущих параметрах передается порт базы данных ekpit |
5432 |
Параметры ПЖ (APLJ)
Имя параметра |
Описание |
Пример |
|---|---|---|
aj_host_1 |
В текущем параметре передается Fqdn или ip адреc брокеров ПЖ (APLJ) (если у базы нет FQDN) |
aj-1.sberban.ru |
aj_host_2 |
В текущем параметре передается Fqdn или ip адреc брокеров ПЖ (APLJ) (если у базы нет FQDN) |
aj-1.sberban.ru |
aj_host_3 |
В текущем параметре передается Fqdn или ip адреc брокеров ПЖ (APLJ) (если у базы нет FQDN) |
aj-1.sberban.ru |
aj_host_4 |
В текущем параметре передается Fqdn или ip адреc брокеров ПЖ (APLJ) (если у базы нет FQDN) |
aj-1.sberban.ru |
aj_host_5 |
В текущем параметре передается Fqdn или ip адреc брокеров ПЖ (APLJ) (если у базы нет FQDN) |
aj-1.sberban.ru |
aj_host_6 |
В текущем параметре передается Fqdn или ip адреc брокеров ПЖ (APLJ) (если у базы нет FQDN) |
aj-1.sberban.ru |
aj_ip_1 |
В текущем параметре передается ip адреc брокеров ПЖ (APLJ) |
10.2x.xx.xx |
aj_ip_2 |
В текущем параметре передается ip адреc брокеров ПЖ (APLJ) |
10.2x.xx.xx |
aj_ip_3 |
В текущем параметре передается ip адреc брокеров ПЖ (APLJ) |
10.2x.xx.xx |
aj_ip_4 |
В текущем параметре передается ip адреc брокеров ПЖ (APLJ) |
10.2x.xx.xx |
aj_ip_5 |
В текущем параметре передается ip адреc брокеров ПЖ (APLJ) |
10.2x.xx.xx |
aj_ip_6 |
В текущем параметре передается ip адреc брокеров ПЖ (APLJ) |
10.2x.xx.xx |
aj_port_1 |
В текущих параметрах передается порт endpoint broker ПЖ (APLJ) |
9092 |
aj_port_2 |
В текущих параметрах передается порт endpoint broker ПЖ (APLJ) |
9092 |
aj_port_3 |
В текущих параметрах передается порт endpoint broker ПЖ (APLJ) |
9092 |
aj_port_4 |
В текущих параметрах передается порт endpoint broker ПЖ (APLJ) |
9092 |
aj_port_5 |
В текущих параметрах передается порт endpoint broker ПЖ (APLJ) |
9092 |
aj_port_6 |
В текущих параметрах передается порт endpoint broker ПЖ (APLJ) |
9092 |
Параметры messanger
Имя параметра |
Описание |
Пример |
|---|---|---|
messenger_host_1 |
В текущем параметре передается Fqdn или ip адреc(если у базы нет FQDN) брокеров kafka SE для сервиса messenger |
Kafka-1.xxx.ru |
messenger_host_2 |
В текущем параметре передается Fqdn или ip адреc(если у базы нет FQDN) брокеров kafka SE для сервиса messenger |
Kafka-1.xxx.ru |
messenger_host_3 |
В текущем параметре передается Fqdn или ip адреc(если у базы нет FQDN) брокеров kafka SE для сервиса messenger |
Kafka-1.xxx.ru |
messenger_host_4 |
В текущем параметре передается Fqdn или ip адреc(если у базы нет FQDN) брокеров kafka SE для сервиса messenger |
Kafka-1.xxx.ru |
messenger_ip_1 |
В текущем параметре передается ip адреc брокеров kafka SE для сервиса messenger |
10.2x.xx.xx |
messenger_ip_2 |
В текущем параметре передается ip адреc брокеров kafka SE для сервиса messenger |
10.2x.xx.xx |
messenger_ip_3 |
В текущем параметре передается ip адреc брокеров kafka SE для сервиса messenger |
10.2x.xx.xx |
messenger_ip_4 |
В текущем параметре передается ip адреc брокеров kafka SE для сервиса messenger |
10.2x.xx.xx |
messenger_port_1 |
В текущих параметрах передается порт endpoint брокеров kafka SE |
9092 |
messenger_port_2 |
В текущих параметрах передается порт endpoint брокеров kafka SE |
9092 |
messenger_port_3 |
В текущих параметрах передается порт endpoint брокеров kafka SE |
9092 |
messenger_port_4 |
В текущих параметрах передается порт endpoint брокеров kafka SE |
9092 |
После заполнения всех перечисленных параметров и подготовки ufc pipline можно приступать к установке.
В состав дистрибутива входят конфигурационные файлы с рекомендуемыми значениями не стендозависимых параметров для настройки продукта, их изменение может нарушить безопасность продукта.
Ручная установка#
Для ручной установки:
Скачайте дистрибутив на персональный компьютер.
Разархивируйте дистрибутив.
Подготовьте директорию.
Подготовьте yaml манифесты с секретами. Добавьте к именам секретов окончание .unver.
Создайте yaml манифест c именем secret-crtx.unver и поместите все параметры для _password.conf в него. Пример
kind: Secret
apiVersion: v1
metadata:
name: secret-crtx.unver
type: Opaque
data:
DB_CURRATE_MAIN_LOGIN: <base64 enc >
DB_CURRATE_MAIN_PASSWORD: <base64 enc >
# База данных СR SI
DB_CURRATE_STANDIN_LOGIN: <base64 enc >
DB_CURRATE_STANDIN_PASSWORD: <base64 enc >
#
DB_EKPIT_MAIN_LOGIN: <base64 enc >
DB_EKPIT_MAIN_PASSWORD: <base64 enc >
DB_EKPIT_STANDIN_LOGIN: <base64 enc >
DB_EKPIT_STANDIN_PASSWORD: <base64 enc >
#
MESSENGER_KAFKA_SSL_KEY_STORE_PASSWORD: <base64 enc >
MESSENGER_KAFKA_SSL_TRUST_STORE_PASSWORD: <base64 enc >
# пароль от закртытого ключа
MESSENGER_KAFKA_SSL_PRIVATE_KEY_PASSWORD: <base64 enc >
#
OTT_CERTSTORE_PWD: <base64 enc >
OTT_TRUST_STORE_PWD: <base64 enc >
# пароль от закртытого ключа
OTT_CERTSTORE_PRIVATE_KEY_PWD: <base64 enc >
#
AJ_KEYSTORE_PASSWORD: <base64 enc >
AJ_TRUSTORE_PASSWORD: <base64 enc >
# пароль от закртытого ключа
AJ_KEY_PRIVATE_KEY_PASSWORD: <base64 enc >
Установите все secret командой
kubectl apply -f <имя файла манифеста> -n <пространство имен для установки>
В результате будут созданы все секреты из блока extra-secrets в distib.yaml и secret-crtx.unver.
Шаблонизируйте в ручную yaml манифесты из дистрибутива.
Перейдите в директорию package/conf/k8s/base. В текущей директории расположены поддиректории отвечающие за каждый сервис. В директории istio расположены манифесты для настройки сервисной сети.
Для того чтобы шаблонизировать манифесты в каждой поддиректории воспользуйтесь ansible. Пример ansible для шаблонизации:
--
- hosts: 127.0.0.1_
connection: local
tasks:
— name: "template"
ansible.builtin.template:
src : package/conf/k8s/base/crtx-cb-cloud-app/dc.yaml
dest: ./<Директория для хранения итоговых манифестов>
Далее вызовите playbook и передайте параметры соответствующему сервису:
ansible-playbook ./pipline.yaml --extra-vars "@package/conf/config/parameters/crtx-cb-cloud-app.all.conf" --extra-vars @/package/conf/config/parameters/crtx-istio-sidecar.all.conf --extra-vars @/package/conf/custom_property.conf
В примере шаблонизируется сервис crtx-cb-cloud-app и ему передаются параметры с соответствующим именем, а также дополнительные параметры которые общие для всех файлов.
В дистрибутиве находится файл custom_property.conf.yml. В текущий файл можно добавить недостающие переменные, которые напрямую подтягиваются с репозитория common.
Результат работы ansible-playbook.
apiVersion: apps/v1
kind: Deployment
metadata:
name: crtx-cb-cloud-app
labels:
app: crtx-cb-cloud-app
spec:
progressDeadlineSeconds: 300
replicas: 1
revisionHistoryLimit: 1
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: "25%"
maxUnavailable: "25%"
selector:
matchLabels:
app: crtx-cb-cloud-app
template:
metadata:
labels:
app: crtx-cb-cloud-app
annotations:
sidecar.istio.io/inject: "True"
sidecar.istio.io/rewriteAppHTTPProbers: "True"
spec:
restartPolicy: Always
affinity:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
— weight: 100
podAffinityTerm:
labelSelector:
matchExpressions:
— key: app
operator: In
values:
— crtx-cb-cloud-app
topologyKey: kubernetes.io/hostname
containers:
# app cb
— resources:
limits:
cpu: "1"
memory: "2Gi"
requests:
cpu: "1"
memory: "2Gi"
securityContext:
readOnlyRootFilesystem: true
readinessProbe:
HTTPGet:
path: /actuator/health/readiness
port: 8081
scheme: HTTP
initialDelaySeconds: 160
timeoutSeconds: 2
periodSeconds: 10
successThreshold: 1
failureThreshold: 3
livenessProbe:
HTTPGet:
path: /actuator/health/liveness
port: 8081
scheme: HTTP
timeoutSeconds: 2
periodSeconds: 10
successThreshold: 1
failureThreshold: 6
startupProbe:
failureThreshold: 50
HTTPGet:
path: /actuator/health/liveness
port: 8081
scheme: HTTP
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 2
terminationMessagePath: /dev/termination-log
name: crtx-cb-cloud-app
env:
— name: PROJECT_NAME
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: metadata.namespace
— name: NODE_NAME
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: spec.nodeName
— name: POD_NAMESPACE
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: metadata.namespace
— name: POD_NAME
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: metadata.name
ports:
— containerPort: 8080
protocol: TCP
— containerPort: 8081
protocol: TCP
imagePullPolicy: Always
volumeMounts:
— { name: temp, mountPath: /tmp }
— { name: applogs, mountPath: /tmp/logs }
— { name: logback-config, readOnly: true, mountPath: /app/etc/logger }
— { name: aj-secrets, readOnly: true, mountPath: /app/certs/aj }
— { name: configmap-cr-app, readOnly: true, mountPath: /app/etc }
envFrom:
— configMapRef:
name: crtx-cm-cb-cloud-app
— secretRef:
name: secret-crtx.${distrib.release.version}
image: "test/test@###IMAGE###"
# logger
securityContext:
runAsNonRoot: true
imagePullSecrets:
— name: "default"
volumes:
— { name: temp, emptyDir: {} }
— { name: applogs, emptyDir: {} }
— name: logback-config
configMap:
name: crtx-cm-cb-cloud-app-logback
defaultMode: 256
— name: aj-secrets
secret:
secretName: secret-aj.${distrib.release.version}
defaultMode: 256
optional: true
— name: configmap-cr-app
configMap:
name: crtx-cm-cb-cloud-app
defaultMode: 256
dnsPolicy: ClusterFirst
Далее проверьте этот манифест и замените строки содержащие ${}. Так как efc pipline поддерживает различные механизмы шаблонизации, то могут быть переменные типа .${distrib.release.version} которые не были заменены.
Значение текущей переменной замените на unver, выполнив команду:
Kubectl apply -f <ваш обработанный. Манифест > -n <пространство имен в k8s>
Для успешного разворачивания любого сервиса разверните все манифесты в директории сервиса.
Для обеспечения безопасности передаваемых данных используется mTLS + OTT.
Настройка интеграций#
Приведенные ниже интеграции настраиваются вручную.
Прокси сервисы#
Все входящие и исходящие межсервисные соединения проходят через ingress/egress proxy. Для входящих/исходящих взаимодействий используются mTLS.
Для исходящего трафика используется два сервиса Egress-istio:
crtx-egress – используется для "полезного трафика" приложения. Выступает в качестве балансировщика нагрузки и выходного шлюза на границе сервисной сети;
crtx-egress-mon – используется для сервисного трафика, предназначен для балансирования и терминации трафика на границе сети, для служб и сервисов аудита, логирования, мониторинга.
Шаблон установки для crtx-egress-2-0 – istio/deployment/egress/*.yaml, Каждый из этих шаблонов разворачивает egress-envoy и OTT сервис, подключенный как sidecar. Для активации авторизации на envoy с применением OTT используется настройка envoyfiltra:
— apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
name: crtx-ef-mon
spec:
configPatches:
— applyTo: HTTP_FILTER
match:
context: GATEWAY
listener:
filterChain:
filter:
name: envoy.HTTP_connection_manager
portNumber: 5443
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
timeout: 1s
with_request_body:
allow_partial_message: false
max_request_bytes: 1048576
workloadSelector:
labels:
app: ${EGRESS_MON_GATEWAY_NAME}-${CR_NAMESPACE}
cr-egress-2-0-mon – использует два порта 8080 для HTTP-трафика и 5443 для mTLS + OTT в качестве выходного шлюза.
apiVersion: v1
kind: Service
metadata:
name: crtx-svc-egress-mon
labels:
app.kubernetes.io/component: istio-discovery
app.kubernetes.io/name: istio-discovery
app.kubernetes.io/part-of: istio
istio.io/rev: basic
release: istio
spec:
ports:
— {name: HTTP-8080, port: 8080, protocol: TCP, targetPort: 8080}
— {name: HTTPs-5443, port: 5443, protocol: TCP, targetPort: 5443}
selector:
istio: crtx-egress-mon
crtx-egress использует порт 5443 (mTLS + OTT) в качестве выходного шлюза. Все остальные порты используются для маппинга портов.
apiVersion: v1
kind: Service
metadata:
name: crtx-egress
labels:
app.kubernetes.io/component: istio-discovery
app.kubernetes.io/managed-by: maistra-istio-operator
app.kubernetes.io/name: istio-discovery
app.kubernetes.io/part-of: istio
istio.io/rev: basic
spec:
ports:
# ott+mTLS
— name: HTTPs-5443,
port: 5443
protocol: TCP
targetPort: 5443
# db curate mapping port
— name: tcp-{{ istio_ose_istio_egress_svc_spec_ports_db_currate_main_mapping_port }}
port: {{ istio_ose_istio_egress_svc_spec_ports_db_currate_main_mapping_port }}
protocol: TCP
targetPort: {{ istio_ose_istio_egress_svc_spec_ports_db_currate_main_mapping_port }}
# db curate failover mapping port
— name: tcp-{{ istio_ose_istio_egress_svc_spec_ports_db_currate_main_failover_mapping_port }}
port: {{ istio_ose_istio_egress_svc_spec_ports_db_currate_main_failover_mapping_port }}
protocol: TCP
targetPort: {{ istio_ose_istio_egress_svc_spec_ports_db_currate_main_failover_mapping_port }}
# db curate si mapping port
— name: tcp-{{ istio_ose_istio_egress_svc_spec_ports_db_currate_si_mapping_port }}
port: {{ istio_ose_istio_egress_svc_spec_ports_db_currate_si_mapping_port }}
protocol: TCP
targetPort: tcp-{{ istio_ose_istio_egress_svc_spec_ports_db_currate_si_mapping_port }}
# db curate si failover port
— name: tcp-{{ istio_ose_istio_egress_svc_spec_ports_db_currate_si_failover_mapping_port }}
port: {{ istio_ose_istio_egress_svc_spec_ports_db_currate_si_failover_mapping_port }}
protocol: TCP
targetPort: {{ istio_ose_istio_egress_svc_spec_ports_db_currate_si_failover_mapping_port }}
# db ekpit main mapping port
— name: tcp-{{ istio_ose_istio_egress_svc_spec_ports_db_ekpit_main_mapping_port }}
port: {{ istio_ose_istio_egress_svc_spec_ports_db_ekpit_main_mapping_port }}
protocol: TCP
targetPort: {{ istio_ose_istio_egress_svc_spec_ports_db_ekpit_main_mapping_port }}
# db ekpit main failover port
— name: tcp-{{ istio_ose_istio_egress_svc_spec_ports_db_ekpit_main_failover_mapping_port }}
port: {{ istio_ose_istio_egress_svc_spec_ports_db_ekpit_main_failover_mapping_port }}
protocol: TCP
targetPort: {{ istio_ose_istio_egress_svc_spec_ports_db_ekpit_main_failover_mapping_port }}
# db ekpit si mapping port
— name: tcp-{{ istio_ose_istio_egress_svc_spec_ports_db_ekpit_si_mapping_port }}
port: {{ istio_ose_istio_egress_svc_spec_ports_db_ekpit_si_mapping_port }}
protocol: TCP
targetPort: {{ istio_ose_istio_egress_svc_spec_ports_db_ekpit_si_mapping_port }}
# db ekpit si failover port
— name: tcp-{{ istio_ose_istio_egress_svc_spec_ports_db_ekpit_si_failover_mapping_port }}
port: {{ istio_ose_istio_egress_svc_spec_ports_db_ekpit_si_failover_mapping_port }}
protocol: TCP
targetPort: {{ istio_ose_istio_egress_svc_spec_ports_db_ekpit_si_failover_mapping_port }}
# aj mapping port 1
— name: tcp-{{ istio_ose_istio_egress_svc_spec_ports_aj_kafka_mapping_port_1 }}
port: {{ istio_ose_istio_egress_svc_spec_ports_aj_kafka_mapping_port_1 }}
protocol: TCP
targetPort: {{ istio_ose_istio_egress_svc_spec_ports_aj_kafka_mapping_port_1 }}
# aj mapping port 2
— name: tcp-{{ istio_ose_istio_egress_svc_spec_ports_aj_kafka_mapping_port_2 }}
port: {{ istio_ose_istio_egress_svc_spec_ports_aj_kafka_mapping_port_2 }}
protocol: TCP
targetPort: {{ istio_ose_istio_egress_svc_spec_ports_aj_kafka_mapping_port_2 }}
# aj mapping port 3
— name: tcp-{{ istio_ose_istio_egress_svc_spec_ports_aj_kafka_mapping_port_3 }}
port: {{ istio_ose_istio_egress_svc_spec_ports_aj_kafka_mapping_port_3 }}
protocol: TCP
targetPort: {{ istio_ose_istio_egress_svc_spec_ports_aj_kafka_mapping_port_3 }}
# aj mapping port 4
— name: tcp-{{ istio_ose_istio_egress_svc_spec_ports_aj_kafka_mapping_port_4 }}
port: {{ istio_ose_istio_egress_svc_spec_ports_aj_kafka_mapping_port_4 }}
protocol: TCP
targetPort: {{ istio_ose_istio_egress_svc_spec_ports_aj_kafka_mapping_port_4 }}
# aj mapping port 5
— name: tcp-{{ istio_ose_istio_egress_svc_spec_ports_aj_kafka_mapping_port_5 }}
port: {{ istio_ose_istio_egress_svc_spec_ports_aj_kafka_mapping_port_5 }}
protocol: TCP
targetPort: {{ istio_ose_istio_egress_svc_spec_ports_aj_kafka_mapping_port_5 }}
# aj mapping port 6
— name: tcp-{{ istio_ose_istio_egress_svc_spec_ports_aj_kafka_mapping_port_6 }}
port: {{ istio_ose_istio_egress_svc_spec_ports_aj_kafka_mapping_port_6 }}
protocol: TCP
targetPort: {{ istio_ose_istio_egress_svc_spec_ports_aj_kafka_mapping_port_6 }}
# messenger kafak port 1
— name: tcp-{{ istio_ose_istio_egress_svc_spec_ports_messenger_kafka_mapping_port_1 }}
port: {{ istio_ose_istio_egress_svc_spec_ports_messenger_kafka_mapping_port_1 }}
protocol: TCP
targetPort: {{ istio_ose_istio_egress_svc_spec_ports_messenger_kafka_mapping_port_1 }}
# messenger kafak port 2
— name: tcp-{{ istio_ose_istio_egress_svc_spec_ports_messenger_kafka_mapping_port_2 }}
port: {{ istio_ose_istio_egress_svc_spec_ports_messenger_kafka_mapping_port_2 }}
protocol: TCP
targetPort: {{ istio_ose_istio_egress_svc_spec_ports_messenger_kafka_mapping_port_2 }}
# messenger kafak port 3
— name: tcp-{{ istio_ose_istio_egress_svc_spec_ports_messenger_kafka_mapping_port_3 }}
port: {{ istio_ose_istio_egress_svc_spec_ports_messenger_kafka_mapping_port_3 }}
protocol: TCP
targetPort: {{ istio_ose_istio_egress_svc_spec_ports_messenger_kafka_mapping_port_3 }}
# messenger kafak port 4
— name: tcp-{{ istio_ose_istio_egress_svc_spec_ports_messenger_kafka_mapping_port_4 }}
port: {{ istio_ose_istio_egress_svc_spec_ports_messenger_kafka_mapping_port_4 }}
protocol: TCP
targetPort: {{ istio_ose_istio_egress_svc_spec_ports_messenger_kafka_mapping_port_4 }}
# nsi facade
— name: tcp-{{ istio_ose_istio_egress_nsi_mapping_port }}
port: {{ istio_ose_istio_egress_nsi_mapping_port }}
protocol: TCP
targetPort: {{ istio_ose_istio_egress_nsi_mapping_port }}
selector:
istio: crtx-egress
type: ClusterIP
НСИ ФАСАД (Platform V Dictionaries)#
НСИ ФАСАД – фабрика вызываемая продуктом Platform V Exchange Rates, (mTLS+OTT), является опциональной интеграцией.
Необходимый ресурс для продукта Platform V Exchange Rates.
Взаимодействие с Фабрикой осуществляется через mTLS+OTT.
- apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
labels:
external: integration-nsi-facade
name: crtx-se-nsi-facade-service
spec:
exportTo:
— .
hosts:
— ${ istio_ose_istio_egress_nsi_host }
location: MESH_EXTERNAL
ports:
— name: HTTP-80
number: 80
protocol: HTTP
— name: HTTPs-443
number: 443
protocol: TLS
resolution: DNS
— apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
labels:
external: integration-nsi-facade
name: crtx-gw-nsi-facade
spec:
selector:
istio: crtx-egress
servers:
— hosts:
— - {{ istio_ose_istio_egress_nsi_host }}
port:
name: HTTP-5443
number: 5443 # PORT EGRESS ДЛЯ mTLS+OTT
protocol: HTTP
— apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
labels:
external: integration-nsi-facade
name: crtx-vs-nsi-facade
spec:
exportTo:
— .
gateways:
— crtx-gw-nsi-facade
— mesh
hosts:
— {{ istio_ose_istio_egress_nsi_host }}
HTTP:
— match:
— gateways:
— mesh
port: 80
rewrite:
authority: {{ istio_ose_istio_egress_nsi_host }}
route:
— destination:
host: crtx-svc-egress
port:
number: 5443
weight: 100
retries:
attempts: 2
retryOn: gateway-error,connect-failure,refused-stream
— match:
— gateways:
— gw-cr-egress-nsi-facade
port: 5443
route:
— destination:
host: ${NSI_FACADE_HOST}
port:
number: 443
weight: 100
retries:
attempts: 2
retryOn: gateway-error,connect-failure,refused-stream
— apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
labels:
external: integration-nsi-facade
name: crtx-dr--nsi-facade
spec:
exportTo:
— .
host: {{ istio_ose_istio_egress_nsi_host }}
trafficPolicy:
loadBalancer:
simple: ROUND_ROBIN
portLevelSettings:
— port:
number: 443
tls:
caCertificates: /etc/istio/gateway-ca-certs/ca.pem
clientCertificate: /etc/istio/gateway-certs/tls.crt
mode: MUTUAL
privateKey: /etc/istio/gateway-certs/tls.key
sni: {{ istio_ose_istio_egress_nsi_host }}
Компонент Журналирование (LOGA) продукта Platform V Monitor#
Взаимодействие с компонентом происходит по протоколам mTLS + OTT.
Ниже описывается конфигурация, по которой происходит взаимодействие mTLS + OTT.
- apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
labels:
external: logger
name: crtx-se-logger-service
spec:
exportTo:
— .
hosts:
— ${LOGGER_HOST}
location: MESH_EXTERNAL
ports:
— name: HTTP-80
number: 80
protocol: HTTP
— name: HTTPs-443
number: 443
protocol: TLS
resolution: DNS
- apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
labels:
external: logger
name: crtx-gw-logger
spec:
selector:
istio: crtx-egress-mon
servers:
— hosts:
— ${LOGGER_HOST}
port:
name: HTTP-5443 # Порт на egress mTLS+OTT
number: 5443
protocol: HTTP
— apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
labels:
external: logger
name: crtx-vs-logger
spec:
exportTo:
— .
gateways:
— crtx-gw-logger
— mesh
hosts:
— {{ istio_ose_istio_egress_logger_host }}
HTTP:
— match:
— gateways:
— mesh
port: 80
rewrite:
authority: {{ istio_ose_istio_egress_logger_host }}
route:
— destination:
host: crtx-svc-egress-mon
port:
number: 5443
weight: 100
retries:
attempts: 2
retryOn: gateway-error,connect-failure,refused-stream
— match:
— gateways:
— gw-cr-egress-logger
port: 5443
route:
— destination:
host: ${LOGGER_HOST}
port:
number: 443
weight: 100
retries:
attempts: 2
retryOn: gateway-error,connect-failure,refused-stream
— apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
labels:
external: logger
name: dr-cr-egress-logger
spec:
exportTo:
— .
host: ${LOGGER_HOST}
trafficPolicy:
loadBalancer:
simple: ROUND_ROBIN
portLevelSettings:
— port:
number: 443
tls:
caCertificates: /etc/istio/gateway-ca-certs/ca.pem
clientCertificate: /etc/istio/gateway-certs/tls.crt
mode: MUTUAL
privateKey: /etc/istio/gateway-certs/tls.key
sni: ${LOGGER_HOST}
Компонент Аудит (AUDT) продукта Platform V Audit SE#
Взаимодействие с компонентом происходит по протоколам mTLS + OTT.
Ниже описывается конфигурация, по которой происходит взаимодействие mTLS + OTT.
Конфигурация, влияющая на реестр служб
- apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
labels:
external: integration-audit
name: se-cr-audit-service
spec:
exportTo:
— .
hosts:
— ${AUDIT_HOST}
location: MESH_EXTERNAL
ports:
— name: HTTP-80
number: 80
protocol: HTTP
— name: HTTPs-443
number: 443
protocol: TLS
resolution: DNS
Конфигурация, влияющая на пограничный балансировщик нагрузки
- apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
labels:
external: integration-audit
name: gw-cr-egress-audit
spec:
selector:
istio: ${EGRESS_MON_GATEWAY_ISTIO_LABEL}
servers:
— hosts:
— ${AUDIT_HOST}
port:
name: HTTP-5443
number: 5443
protocol: HTTP
Конфигурация, влияющая на маршрутизацию меток/содержимого, маршрутизацию sni
- apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
labels:
external: integration-audit
name: vs-cr-egress-audit
spec:
exportTo:
— .
gateways:
— gw-cr-egress-audit
— mesh
hosts:
— ${AUDIT_HOST}
HTTP:
— match:
— gateways:
— mesh
port: 80
rewrite:
authority: ${AUDIT_HOST}
route:
— destination:
host: svc-cr-egress-for-mon
port:
number: 5443
weight: 100
retries:
attempts: 2
perTryTimeout: 1s
retryOn: gateway-error,connect-failure,refused-stream
— match:
— gateways:
— gw-cr-egress-audit
port: 5443
route:
— destination:
host: ${AUDIT_HOST}
port:
number: 443
weight: 100
retries:
attempts: 2
perTryTimeout: 1s
retryOn: gateway-error,connect-failure,refused-stream
Конфигурация, влияющая на балансировку нагрузки
- apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
labels:
external: integration-audit
name: dr-cr-egress-audit
spec:
exportTo:
— .
host: ${AUDIT_HOST}
trafficPolicy:
loadBalancer:
simple: ROUND_ROBIN
portLevelSettings:
— port:
number: 443
tls:
caCertificates: /etc/istio/gateway-ca-certs/ca.pem
clientCertificate: /etc/istio/gateway-certs/tls.crt
mode: MUTUAL
privateKey: /etc/istio/gateway-certs/tls.key
sni: ${AUDIT_HOST}
Обновление#
Обновление осуществляется так же как первоначальная установка: запускается задача установки с параметром updateMode равным fullInstall. В процедуру установки включен процесс обновления базы данных с помощью утилиты liquibase. Стратегия обновления Продукта в среде контейнеризации — RollingUpdate.
Установку новой версии продукта необходимо осуществлять согласно описанным шагам в разделе Установка текущего документа. Дополнительных настроек не требуется.
Удаление#
Для удаления продукта необходимо удалить в Kubernetes (OpenShift) следующие объекты:
ConfigMap:
crtx-cm-cb-cloud-app-logback;
crtx-cm-cb-cloud-app.
Deployment.
DeploymentConfig.
ServiceEntry:
crtx-se-nsi-facade-service;
crtx-se-logger-service;
se-cr-audit-service;
se-db-currency-main.
VirtualService:
crtx-vs-nsi-facade;
crtx-vs-logger;
vs-cr-egress-audit;
vs-cr-egress-db-currency-main
EnvoyFilter.
DestinationRule:
crtx-dr–nsi-facade;
dr-cr-egress-logger;
dr-cr-egress-audit;
dr-dp-egress-${DB_CURRENCY_MAIN_HOST}
Gateway.
Service.
Route.
Policy.
Если название объекта заканчивается символом "*", это означает, что данных объектов несколько, и они имеют разное окончание наименования. Удалите все объекты. Для объектов типа , , задаваемых при установке, удалите типичные значения: istio-ingressgateway-
Таким образом, происходит удаление собранного пространства в платформе приложений-контейнеров. Происходит удаление и всех созданных ранее дашбордов и организаций.
Проверка работоспособности#
Для проверки корректности установки:
Задача установки завершилась со статусом SUCCESS (успешно).
Зайдите в web панель администратора среда контейнеризации Kubernetes или Red Hat OpenShift 4+ и убедитесь, что все pods обновлены и работоспособны (имеют статус ready у всех контейнеров, входящих в pod).
Пример экрана web панели администратора в разделе pods:

Признаки:все приложения находятся в статусе "Running";
нет pods в статусе "Error";
в колонке "Ready" все контейнеры работают: 2/2, 3/3 и т.д.;
в колонке "Created" должны появиться pods с текущей датой установки.
В основном, это касается pods приложения (cb−rates, individual−rates, legal−rates), т.к. именно он чаще всего меняется от дистрибутива к дистрибутиву. Ingress, egress, egress−for−mon, prometheus меняются реже и не всегда будут обновляться. Таким образом не обновившаяся дата создания будет нормальным признаком.
Точную проверку успешности обновления проведите через web−интерфейс:
для Deployments;
выберите нужны deployment;
перейдите в Replica Sets;

Активной должна быть та реплика, которая появилась позже. Активная, значит в колонке Status стоят не нули.для Deployment Configs;
выберите нужный Deployment Config;
перейдите Replication Controllers.

Активной должна быть та реплика, которая появилась позже. Активная, значит в колонке Status стоят не нули.
Запустите задачу по тестированию инсталляции.
Проверьте работоспособность интеграций. Для этого выполните следующие действия:
Для проверки того, что Продукт отвечает на запросы извне, запустите из Jenkins или командной строки приложение cloud-apps-tests, входящее в комплект поставки.
Для проверки передачи данных в другие приложения, проверьте на отсутствие критических ошибок логи сервисов:
Crtx-ark-rates receiver-cloud-app,
Crtx-messenger-cloud-app.
Проверка интеграции с Объединенным мониторингом (MONA) выполняется в самом компоненте MONA.
Корректность интеграции с компонентом Журналирование (LOGA) проверяется в логах специального контейнера Fluent-bit.
Откат#
Автоматической процедуры отката нет.
Для отката необходимо выполнить установку предыдущей стабильной версии в соответствии с инструкцией, пункт Установка текущего документа.
Часто встречающиеся проблемы и пути их устранения#
В данном разделе собраны наиболее частые проблемы и описаны пути их устранения.
Проблема |
Причина |
Способ устранения |
|---|---|---|
Ошибки при развертывании Продукта |
– |
Следует собрать логи и обратиться к технической поддержке. Это могут быть ошибки в конфигурации, параметрах, сетевой маршрутизации, настройки баз данных, неверные сертификаты доступа |
Чек-лист валидации установки#
После установки необходимо проверить результат выполнения следующих playbook:
Для проекта в среде контейнеризации создались объекты приложений на основании файлов конфигурации: DeploymentConfig, ConfigMap, Service, Route, Pod.
Для проекта в среде контейнеризации создались объекты istio: ingress/egress на основании файлов конфигурации: Deployment, VirtualService, ServiceEntry, DestinationRule, Gateway, ConfigMap.
В логах отсутствуют ошибки.
Соединение с БД выполнено успешно.
Интеграции работоспособны (см. раздел Проверка работоспособности п.3).
