Руководство по установке#

В руководстве приведены инструкции по установке Продукта.

Системные требования#

В данном разделе перечислены пре−реквизиты и требования к окружению для установки программного продукта, в том числе рекомендуемые настройки безопасности окружения. Также представлен перечень внешних продуктов, используемых для установки, настройки и контроля с указанием выполняемых ими функций.

Предусловия#

Системное программное обеспечение#

Ниже представлены категории системного программного обеспечения (далее — ПО), которые обязательны или опциональны для установки, настройки, контроля и функционирования компонента. В каждой категории перечислены все поддерживаемые продукты сторонних правообладателей. Отдельно обозначены варианты, которые рекомендует АО «СберТех» (маркировка «Рекомендовано» в столбце «Продукт, функциональная совместимость с которым подтверждена»). Клиенту необходимо выбрать один из продуктов в каждой категории, исходя из условий использования конечной ИС.

Категория ПО

Обязательность установки*

Наименование ПО

Версия

Продукт, функциональная совместимость с которым подтверждена **

Назначение категории ПО

Операционная система

Да

ОС Альт 8 СП

10.0 и выше

Рекомендовано

ОС контейнеров для запуска модулей компонента

Среда контейнеризации

Да

Kubernetes

1.0 и выше

Рекомендовано

Платформа контейнеризации для запуска компонентов сервиса

Среда контейнеризации

Нет

Red Hat OpenShift

4.0 и выше

Опционально

Платформа контейнеризации для запуска компонентов сервиса

Средство контейнеризации

Да

Docker CE

1.23 и выше

Рекомендовано

Инструмент для автоматизации работы с контейнерами

Инструмент сборки, тестирования, развертывания контейнеризированных приложений

Да

Jenkins

2.263 и выше

Рекомендовано

Сервер автоматизации, используемый для внедрения непрерывной интеграции и непрерывной доставки (CI/CD) для проектов программного обеспечения

Java-машина

Да

OpenJDK

8 и выше

Рекомендовано

Окружение для работы модулей компонента

Система управления базами данных (СУБД)

Да

PostgreSQL

42.2.5

Рекомендовано. Правообладателем АО «СберТех» также рекомендована СУБД, основанная на PostgreSQL, – Platform V Pangolin SE, см. раздел «Платформенные зависимости»

ПО, взаимодействующее с конечными пользователями, приложениями и базой данных для сбора и анализа данных

Сервер приложений

Да

WildFly

15.0.1.Finalе и выше

Рекомендовано

СПО для тестирования, отладки и исполнения веб-приложений на основе Java

Сервис ограничения входящих запросов

Да

Synapse Rate Limiter

1.7 и выше

Рекомендовано

Сервис, позволяющий ограничивать доступ к приложениям на основе задаваемых лимитов

Сервис централизованного хранения репозиториев исходного кода

Да

GitLab Community Edition

15.0 и выше

Рекомендовано

Хранение конфигураций при автоматизированной установке

Система управления секретами

Да

HashiCorp Vault

1.11.0 и выше

Рекомендовано

Система управления аутентификационными данными сервисных аккаунтов или учетных записей

Система управления секретами

Нет

Secret Management System

1.7.0 и выше

Опционально

Система управления аутентификационными данными сервисных аккаунтов или учетных записей

Система мониторинга (сбор и хранение метрик)

Нет

Prometheus

2.31 и выше

Рекомендовано. Правообладателем АО «СберТех» также рекомендован Сервис для сбора прикладных и инфраструктурных метрик и отправки их в целевую систему хранения – Объединенный мониторинг Unimon Platform V Monitor, см. раздел «Платформенные зависимости»

Система для сбора и хранения численных метрик

Программа для обновления базы данных

Да

Liquibase

4.5.0 и выше

Рекомендовано

Библиотека для отслеживания, управления и применения изменений схемы базы данных

Сервис централизованного хранения репозиториев артефактов (хранилище артефактов)

Да

Nexus-Public

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

Опционально

Сервис для управления справочными данными

Примечание:

***

  • Да — компонент или продукт необходим для функционирования сервиса (это означает, что сервис не может выполнять свои основные функции без установки данного компонента).

  • Нет — необязательный для функционирования сервиса компонент или продукт (это означает, что сервис может выполнять свои основные функции без установки данного компонента).

**** Рекомендуется установка программного продукта, правообладателем которого является АО «СберТех», при этом не исключена возможность (допускается правообладателем) использования аналога других производителей. Аналоги, в отношении которых продукт успешно прошел испытания и подтвердил свою работоспособность, указаны в разделе «Системное программное обеспечение».

Подробнее о настройках интеграций в следующих разделах:

Настройка интеграций с прочими продуктами приведена в документации к ним.

Необходимо иметь доступ к базе данных справочников, а также логин и пароль к ней. Не рекомендуется использовать ЕКПиТ в промышленной среде.

Для доступа могут быть использованы следующие роли:

  • владелец схемы, у кого будут права на создание объектов в схеме (администратор);

  • прикладной пользователь, от имени которого будет работать сервер (права на запись и чтение).

Схема БД может пустой, таблицы создадутся при инсталляции.

Аппаратные требования#

Для установки Продукта со всеми его модулями требуется следующая конфигурация аппаратного обеспечения:

  • для пространства среды контейнеризации необходим проект с характеристиками 16 CPU и 32 GB memory.

Состав дистрибутива#

Дистрибутив представляет собой zip-файл опубликованный в хранилище. Дистрибутив содержит разделенный целевой дистрибутив Party-distrib.zip. Включает набор библиотек и зависимостей распространяющихся свободно.

Owned-distrib.zip – содержит основной код продукта. В party-distrib в папке Jenkins расположена job ReCreateFullDistrib.groovy. Ее необходимо развернуть, опубликовать в git.

На рисунке представлены необходимые параметры для сборки.

  1. При первом запуске нажмите на кнопку Собрать. В результате будет создан интерфейс для 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')

    }

  1. Задайте метку для Jenkins agent, существующего в вашем окружении.

  2. Заведите в jenkins конфигурационный файл Settings.xml для maven.

  3. В job передайте ссылки на текущий дистрибутив.

  4. Выполните сборку.

Установка#

Существует два способа установки Продукта Platform V Exchange Rates:

  1. Целевой (основной) способ с помощью компонента Deploy tools (CDJE) продукта Platform V DevOps Tools.

  2. Опциональный вариант с помощью ручной установки.

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

Перед установкой Platform V Exchange Rates четвертого поколения проверьте, что ранее было установлено ПО Platform V Exchange Rates третьего поколения.

Установка с помощью компонента Deploy tools (CDJE) продукта Platform V DevOps Tools#

Текущий тип установки является основным вариантом установки.

Для подготовки к развертыванию и установки Продукта выполните следующие шаги:

  1. Создание секрета в jenkins для доступа в среду контейнеризации.

  2. Получение токена.

  3. Разворачивание job компонента Deploy tools (CDJE) продукта Platform V DevOps Tools.

  4. Подготовка инструментов развертывания.

  5. Выпуск сертификата для создания секрета входного шлюза.

  6. Настройка среды и создание секретов.

  7. Настройка интеграций Продукта.

  8. Подготовка файла конфигурации стенда зависимых параметров.

Создание секрета в jenkins для доступа в среду контейнеризации#

Секрет для доступа к проекту среды контейнеризации представляет собой секрет с типом "Service Account Tokens".

Поле ID − имя секрета.

Description − описание назначения секрета.

Token − токен сервис аккаунта jenkins из среды контейнеризации.

Получение токена#

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

Для того чтобы создать сервисный аккаунт (в случае его отсутствия):

  1. Выполните команду.

kubectl create serviceaccount jenkins

  1. В результате получите ответ.

serviceaccount "jenkins" created

  1. Получите список секретов привязанных к сервисному аккаунту.

kubectl get serviceaccounts jenkins -o yaml

  1. В полученном ответе найдите имя секрета, который содержит токен формата: <имя сервисного аккаунта>-token-*.

  2. Выполните команду.

kubectl get secret <имя сервисного аккаунта>-token-*  -o yaml

  1. Пример ответа на вышеуказанную команду.

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#

Пререквизиты для установки: Перед установкой убедитесь, что выполнены все следующие условия:

  1. Наличие у пользователя, производящего установку возможности создания репозиториев в GitLab, Nexus Public и получения прав на чтение/запись, включая права на чтение/запись в ветке master.

  2. Наличие технической учетной записи для работы с репозиториями.

  3. Должны быть созданы следующие репозитории GitLab в проектной области:

  • Репозитории pipeline, например:

    • crtx pipeline — репозиторий с кодовой базой релизов pipeline (на каждый стенд свой репозиторий, например crtx_pipeline_ift / crtx_pipeline_lt);

    • crtx_common — репозиторий с глобальными (одинаковыми для всех компонентов в рамках одного стенда) переменными среды (на каждый стенд свой репозиторий, например crtx_common_ift / crtx_common_lt).

  • Репозитории с конфигурациями функциональных подсистем, например:

    • crtx_crtx (на каждый стенд свой репозиторий).

  1. Должны быть прописаны доступы в репозитории по протоколам SSH + HTTP на чтение/запись во все ветки, в т.ч. в ветку master.

  2. В Nexus Public должны быть размещены дистрибутивы разворачиваемых функциональных подсистем, к данным репозиториям должен быть доступ с правами на чтение для технической учетной записи.

  3. В Nexus Public должны быть созданы следующие репозитории, в которые загружены дистрибутивы всех компонентов pipeline (Installer.Base, Installer.Migration, Installer.Common):

    • AS_EFS_Installer.Base — глобальные настройки и утилиты для pipeline;

      • AS_EFS_Installer.Migration* — дистрибутив утилиты миграции;

      • AS_EFS_Installer.Common* — базовый дистрибутив common — это глобальные параметры по умолчанию для pipeline. К перечисленным в данном пункте репозиториям должен быть доступ с правами на чтение для ТУЗ.

  1. В GitLab должны быть созданы репозитории, в которые загружены дистрибутивы всех компонентов pipeline.

Подготовка инструментов развертывания#

Предусмотрены следующие инструменты развертывания:

  • JOB Service** — job обновления (первичная загрузка кода JOB Deploy на полигон, обновление кода JOB Deploy при выпуске новых релизов JOB Deploy);

  • JOB Deploy** — job развертывания дистрибутивов.

Далее перейдите к созданию секретов и последующих параметров касающихся сервиса.

Пример. Создание секрета входного шлюза

Секрет входного шлюза состоит из двух ресурсов типа secret. Создание ресурса выполняется с помощью утилиты командной строки − OC client с локальной машины.

Перед началом создания секретов получите следующие файлы:

  • приватный ключ;

  • серверный сертификат, подписанный удостоверяющим центром;

  • цепочка сертификатов.

Выпуск сертификата для создания секрета входного шлюза#

Выдача сертификатов осуществляется удостоверяющим центром.

Выполните следующие шаги:

  1. Создайте конфигурационный файл запроса на сертификат 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

  1. Подпишите сертификат в вашем УЦ.

  2. Получите файл request.cer (подписанный сертификат в формате DER) и цепочку сертификатов, которым он подписан.

  3. Преобразуйте полученный сертификат в формат PEM.

   openssl x509 −inform DER −in request.cer −out tls.crt
  1. Преобразуйте полученный корневой сертификат в формат PEM.

   openssl x509 −inform DER −in "Test Root CA 2.cer" −out root.pem
  1. Преобразуйте полученный промежуточный сертификат в формат PEM.

   openssl x509 −inform DER −in "Test Issuing CA 2.cer" −out issuing.pem
  1. Объедините корневой и промежуточный сертификат в один файл.

   cat root.pem issuing.pem > ca.pem
  1. Получите три файла:

  • tls.key − приватный ключ;

  • tls.crt − серверный сертификат;

  • ca.pem − доверенная цепочка.

Настройка среды и создание секретов#

Дальнейшие действия проводятся в проекте, где у пользователя есть права на создание секретов. Сами файлы секретов хранятся в common репозитории.

  1. Необходимо задать параметры для секретов ingress/egress и настройки для бизнес-приложений. Для этого нужно редактировать файл ssl.conf, находящийся в репозитории common. Это можно сделать одним из следующих способов:

    1. Через параметры модуля:

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

    2.Через общие параметры:

    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
    
  2. Для доступа к 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=
  1. Для создания секретов в среде контейнеризации изучите файл 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"
]

  1. В случае использование компонента 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)

  1. Далее зашифруйте файл _password.conf согласно инструкции компонента Deploy tools (CDJE) продукта Platform V DevOps Tools. Для простоты шифрования существует возможность воспользоваться скриптом шифрования на powerShell. Создайте файл с тем же именем, что и файл который должен быть зашифрован, добавьте к имени окончание “_d”. Далее скрипт найдет все файлы с окончанием “_d” и зашифрует создав файл без окончания “_d”.

  2. В файл .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') 
}

  1. Далее создайте файлы в директории 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:

  1. Включите в trust store сертификат УЦ, который выпустил SSL−сертификат серверов OTT.

  2. Скачайте файл УЦ посредствами браузера, подключившись к серверу OTT (HTTPs://<ott−server>:8443/).

  3. Для импорта полученного сертификата в 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, как место хранения секретов, необходимо выполнить следующие действия:

  1. Перейти в репозитории ctrx_ctrx в директорию /config/package/conf/, открыть конфигурационный файл в custom_property.conf.yml.

  2. Проверить, что для параметра конфигурации SECMAN_ENABLED задано значение true, если нет, то указать это значение.

SECMAN_ENABLED: true;
Настройка параметров работы Secret Management System#

Параметры работы Secret Management System заданы по-умолчанию, но при необходимости их можно переопределить. Для этого нужно выполнить следующие действия:

  1. Задать с помощью 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

  1. При необходимости параметры, заданные в 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
  1. Проверить, что секреты содержат необходимые параметры.

  • 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, необходимо выполнить действия:

  1. В репозитории с настройками Rate Limiter открыть конфигурационный файл в custom_property.conf.yml.

  2. Проверить, что для параметра конфигурации 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 был сгенерирован автоматически, необходимо выполнить действия:

  1. Перейти в репозиторий /config/package/conf/, открыть для редактирования файл custom-propery.conf.yml.

  2. В поле 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:
labels:
app: ingress-my-namespace
istio: ingress-my-namespace

rlserver

Адрес RLS-сервера (для децентрализованной установки следует указать hadless server rls например: «rate-limiter-headless-service», для централизованной установки здесь следует указать сервис Egress Gateway вашего namespace, рекомендованный формат — <headless_service_name>..svc.cluster.local)

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

Таблица с параметрами для задания 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, необходимо выполнить следующие действия:

  1. Задать настройки в манифестах в среде контейнеризации. Большинство обязательных labels метрики будут добавлены автоматически на этапе сбора Unimon-agent. Но в прикладное приложение необходимо самостоятельно добавить следующие labels:

  • app — имя приложения;

  • version — версия приложения; Эти параметры необходимо добавить в labels POD приложения.

  1. Добавить в метрики 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

Для получения приватной части сертификата:

  1. Администратор прикладного модуля: выполняет генерацию ключевой пары в 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 в заявке на генерацию сертификата для модуля. В заявке указать, что сертификат должен быть сгенерирован из приложенного запроса по данной инструкции.

  1. Администратор OTT: выписывает сертификат.

   ./ejbcawsracli.sh certreq %{module_id} "CN=%{module_id}" NULL PlatformCA_EC PPRBModule %{module_id}_cert_req.pem PKCS10 PEM NONE

В результате выполнения данной команды будет создан файл с сертификатом− %{module_id}.pem, который необходимо передать Администратору прикладного модуля.

  1. Администратор OTT: вместе с сертификатом модуля передает сертификат УЦ OTT PlatformCA_EC.pem. CN=PlatformCA_EC
    CA certificate: Download as PEM

  2. Администратор прикладного модуля: импортирует сертификат УЦ 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}
  1. После выполнения шагов должно быть два файла (необязательно с такими именами):

    1. ott_service_truststore.p12 − публичная часть (truststore);

    2. 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 ПЖ:

  1. Добавить зону "CV".

  2. Указать типы данных: "CR, "EOD", ARK".

  3. Уточнить плагин 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 можно приступать к установке.

В состав дистрибутива входят конфигурационные файлы с рекомендуемыми значениями не стендозависимых параметров для настройки продукта, их изменение может нарушить безопасность продукта.

Ручная установка#

Для ручной установки:

  1. Скачайте дистрибутив на персональный компьютер.

  2. Разархивируйте дистрибутив.

  3. Подготовьте директорию.

  • Подготовьте 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 >

  1. Установите все secret командой

kubectl apply -f <имя файла манифеста> -n <пространство имен для установки>
  1. В результате будут созданы все секреты из блока extra-secrets в distib.yaml и secret-crtx.unver.

  2. Шаблонизируйте в ручную yaml манифесты из дистрибутива.

  3. Перейдите в директорию 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: ./<Директория для хранения итоговых манифестов>

  1. Далее вызовите 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
  1. В примере шаблонизируется сервис crtx-cb-cloud-app и ему передаются параметры с соответствующим именем, а также дополнительные параметры которые общие для всех файлов.

  2. В дистрибутиве находится файл custom_property.conf.yml. В текущий файл можно добавить недостающие переменные, которые напрямую подтягиваются с репозитория common.

  3. Результат работы 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

  1. Далее проверьте этот манифест и замените строки содержащие ${}. Так как efc pipline поддерживает различные механизмы шаблонизации, то могут быть переменные типа .${distrib.release.version} которые не были заменены.

  2. Значение текущей переменной замените на 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-, istio-egressgateway-.

Таким образом, происходит удаление собранного пространства в платформе приложений-контейнеров. Происходит удаление и всех созданных ранее дашбордов и организаций.

Проверка работоспособности#

Для проверки корректности установки:

  1. Задача установки завершилась со статусом SUCCESS (успешно).

  2. Зайдите в 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−интерфейс:

      1. для Deployments;

      2. выберите нужны deployment;

      3. перейдите в Replica Sets;

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

      4. для Deployment Configs;

      5. выберите нужный Deployment Config;

      6. перейдите Replication Controllers.

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

    1. Запустите задачу по тестированию инсталляции.

  3. Проверьте работоспособность интеграций. Для этого выполните следующие действия:

    1. Для проверки того, что Продукт отвечает на запросы извне, запустите из Jenkins или командной строки приложение cloud-apps-tests, входящее в комплект поставки.

    2. Для проверки передачи данных в другие приложения, проверьте на отсутствие критических ошибок логи сервисов:

      • Crtx-ark-rates receiver-cloud-app,

      • Crtx-messenger-cloud-app.

    3. Проверка интеграции с Объединенным мониторингом (MONA) выполняется в самом компоненте MONA.

    4. Корректность интеграции с компонентом Журналирование (LOGA) проверяется в логах специального контейнера Fluent-bit.

Откат#

Автоматической процедуры отката нет.

Для отката необходимо выполнить установку предыдущей стабильной версии в соответствии с инструкцией, пункт Установка текущего документа.

Часто встречающиеся проблемы и пути их устранения#

В данном разделе собраны наиболее частые проблемы и описаны пути их устранения.

Проблема

Причина

Способ устранения

Ошибки при развертывании Продукта

Следует собрать логи и обратиться к технической поддержке. Это могут быть ошибки в конфигурации, параметрах, сетевой маршрутизации, настройки баз данных, неверные сертификаты доступа

Чек-лист валидации установки#

После установки необходимо проверить результат выполнения следующих playbook:

  • Для проекта в среде контейнеризации создались объекты приложений на основании файлов конфигурации: DeploymentConfig, ConfigMap, Service, Route, Pod.

  • Для проекта в среде контейнеризации создались объекты istio: ingress/egress на основании файлов конфигурации: Deployment, VirtualService, ServiceEntry, DestinationRule, Gateway, ConfigMap.

  • В логах отсутствуют ошибки.

  • Соединение с БД выполнено успешно.

  • Интеграции работоспособны (см. раздел Проверка работоспособности п.3).