Настройка deploy pipeline#
Заполнение файла environment.json#
Добавить в репозиторий ci02606786_mailbridge_common_{стенд} в файл environment.json (находится в корне репозитория) следующий блок, указан стенд {стенд}. В файле должен быть указанный в примере блок с названием нужного стенда. По умолчанию там будет только блок "__default". Любые изменения в этом файле требуют автореконфигурации Job (запуск без указания параметров).
Под файлом описание только тех параметров, которые нужно изменить исходя из стенда
"{стенд}": {
"openshiftDeploySafeMode": "true",
"jdkAt": "JDK_1.8_121",
"mvnAt": "Maven 3.6.2",
"testsJob": "",
"testsJobMvn": "",
"addMarker": "true",
"efsReleaseBranch": "develop",
"jobLogCopy": "true",
"fpConfigUrlJobParam": "false",
"fpDistribUrlJobParam": "false",
"ansiColorDisable": "false",
"importSupTimeout": 600000,
"markerName": "dev",
"exta_ssh_params": "ANSIBLE_SSH_ARGS='-o ControlMaster=no -o StrictHostKeyChecking=no -o UserKnownHostsFile=/{стенд}/null'",
"playbooks_extra": {
"FP_CONF_CHECK": {
"id": 1
},
"JOB_LOG_COPY": {
"id": 2
},
"WAS_FPI_UTIL_CLEARING": {
"id": 3
},
"WAS_FPI_UTIL_JOB_CONF": {
"id": 4
},
"NGINX_CONF_RELOAD": {
"id": 5
},
"ANSI_COLOR_DISABLE": {
"id": 6
}
},
"credentials": {
"SshKeyCreds": "ssh_ci00159827",
"UserPassCreds": "tuz_ci00159827",
"openshiftOpsPasswordsCred": "vault_cred_openshift_ops",
"openssl_cipher": "aes-256-cbc"
},
"envNotification": "true",
"nexus_host": "хост_nexus",
"openshiftRegistry": "хост_docker_registry",
"registryPath": "путь_до_образов_сервиса",
"doNotCheckInventoryOnNull": "true",
"openShiftPrecheck": "off",
"openShiftPrecheckEnabled": "false",
"openShiftPrecheckFail": "false",
"forcePreCheck": "false",
"openShiftPostCheck": "false",
"openshiftMultiClusters": "true",
"openshiftMultiClustersNames": [],
"nexusMavenMetadataAuth": "false",
"useMavenForDownload": "false",
"scriptsCustom": {
"gitSshUrlFull": "ssh://git@хост_bitbucket:7999/ci00428440/ci00380023_efs_scripts.git",
"gitCreds": "ssh_ci00159827",
"gitRepoName": "ci00380023_efs_scripts"
},
"openShiftNewPasswords": "true",
"openshiftDeploySteps": {
"openShiftPostCheck": "false",
"postCheckConfigs": "false",
"deployProtocol": "true",
"archiveConfigs": "true",
"deployConfigMaps": "true",
"deployApps": "true",
"deployJKS": "true",
"deployHPA": "false",
"deployServices": "true",
"deployRoutes": "true",
"deploySecrets": "true"
},
"playbooks_fpi": {
"OPENSHIFT_DEPLOY": {
"id": 1
},
"OPENSHIFT_UPDATE_REPLICAS": {
"id": 2
},
"OPENSHIFT_INGRESS_EGRESS_DEPLOY": {
"id": 3
},
"OPENSHIFT_UPDATE_ISTIO_REPLICAS": {
"id": 4
},
"OPENSHIFT_EXTRACT_DUMP": {
"id": 5
},
"MIGRATION_FP_CONF": {
"id": 6
}
}
}
Описание параметров:
Параметр |
Описание |
|---|---|
credentials.SshKeyCreds |
ID credential из плагина Jenkins credentials, в котором находится приватная часть SSH ключа ТУЗ DevOps для BitBucket |
credentials.UserPassCreds |
ID credential из плагина Jenkins credentials, в котором располагается логин и пароль ТУЗ DevOps |
credentials.openshiftOpsPasswordsCred |
ID credential из плагина Jenkins credentials, в котором располагается пароль для расшифровки _passwords.conf |
scriptsCustom.gitCreds |
ID credential из плагина Jenkins credentials, в котором находится приватная часть SSH ключа ТУЗ DevOps для BitBucket |
scriptsGitUrl |
(*) Опционально. url на репозиторий, где размещаются технические скрипты job установки/удаления |
(*) Необходим для исправной работы job удаления дистрибутива в случае, если суффикс у репозитория отличается от "dev" или "mmv". Если не будет указан - job Jenkins будет завершаться с ошибками загрузки скриптов pipeline из репозитория, так как будет искать их по адресу по умолчанию. Данный параметр может быть также добавлен в Jenkins env: см. раздел Автоматизированное удаление сервиса с использованием Deploy Tools п. Настройка Jenkins задачи
Заполнение файла _global.resources.conf#
Во избежание ошибок установки, необходимо поправить некоторые незаполненные параметры в файле ci02606786_mailbridge_common_{стенд}\installer\system\efs\config\parameters_global.resources.conf Заполнить параметры произвольными значениями, например:
# адрес балансировщика без протокола и порта
# mm
global.default.nlb_mm.host=dummy
# ii
global.default.nlb_ii.host=dummy
# bh
global.default.nlb_bh.host=dummy
global.import.service.dcgn.url=dummy
Заполнение файла multiClusters.json#
Добавить в репозиторий ci02606786_mailbridge_common_{стенд} в файл multiClusters.json (находится в корне репозитория) следующее содержимое, одну запись на каждый кластер. Изменение названий кластеров в этом файле требуют автореконфигурации Job (запуск без указания параметров). Изменение значений параметров автореконфигурации не требует.
{
"datacenters": {
"{придумать_название_кластера_для_Jenkins}": {
"openshiftCluster": "https://api.openshift.com:6443",
"openshiftSATokenCred": "ST_OpenShiftToken_tribe-sy-mail-{стенд}-03",
"openshiftProjectName": "os-project-name",
"openshiftControlPlane": "control-plane-name",
"openshiftControlPlaneIstiodService": "istiod-service-name",
"openshiftWebConsole": "https://console-openshift.com/k8s/cluster/projects/tribe-sy-mail-{стенд}-03",
"openshiftNewRoute": "dummy",
"openshiftAppsDomain": "dummy",
"openshiftRoutersFQDN": [
{"name": "adapter", "host": "mailbridge-adapter-geo.openshift.com"},
{"name": "front", "host": "mailbridge-front-geo.openshift.com"}
],
"overrides": [],
"encoding": "en_US.UTF-8"
}
}
}
Описание параметров:
Параметр |
Описание |
Обязательность |
|---|---|---|
openshiftCluster |
Url для подключения к среде оркестрации (формат: https://hostname:port) |
да |
openshiftControlPlane |
Название проекта в среде оркестрации, в котором установлена контрольная панель Service Mesh |
да |
openshiftControlPlaneIstiodService |
Адрес istiod (контрольной панели) сервиса Service Mesh |
да |
openshiftNewRoute |
Любое значение, не применяется |
нет |
openshiftProjectName |
Название проекта в среде оркестрации |
да |
openshiftRoutersFQDN |
Входные endpoint для клиента (Route), формат json (пример выше) |
да |
openshiftSATokenCred |
ID cred'а в Jenkins Credentials, который содержит токен для аутентификации в среде оркестрации |
да |
openshiftWebConsole |
URL консоли среды оркестрации |
нет |
openshiftAppsDomain |
Любое значение, не применяется |
нет |
overrides |
Признак, отражающий среду оркестрации для установки, возможные значения: [] для DropApp, ["openshift"] для OpenShift |
да |
encoding |
Кодировка для корректного отображения русских символов в логах среды оркестрации (если свойство не задано, то используется кодировка en_US.UTF-8), одно из возможных значений c.utf8 |
нет |
Точками входа в развернутое приложение будут являться DNS, указанные в параметре openshiftRoutersFQDN
Заполнение файла subsystems.json#
Любые изменения в этом файле требуют автореконфигурации Job (запуск без указания параметров). Добавить в репозиторий ci02606786_mailbridge_common_{стенд} в файл subsystems.json (лежит в корне) следующий блок. Описание других АС можно удалить. Должно остаться только __default и mailbridge.
"MAILBRIDGE": {
"nexus_repo": "sbt_PROD",
"groupId": "sbt_PROD.CI90000141_mail",
"artifactId": "MAIL",
"versionFilter": "SP-",
"classifier": "distrib",
"packaging": "zip",
"fpType": "fp",
"fpi_name": "mail",
"fpi_name_ose": "mail",
"guid": "111",
"deployType": "parallel"
}
Описание параметров:
Параметр |
Описание |
|---|---|
fpType |
Тип, всегда fp |
fpi_name |
Код, всегда mail |
fpi_name_ose |
Префикс поиска набора стендозависимых параметров в именах файлов в репозитории, всегда mail |
nexus_repo |
Название репозитория в NEXUS |
groupId |
Группа в NEXUS |
artifactId |
Артефакт в NEXUS, всегда MAIL |
classifier |
Суффикс дистрибутива в NEXUS |
packaging |
Тип архива с дистрибутивом в NEXUS |
versionFilter |
Фильтр версии для показа в параметрах сборки Jenkins |
guid |
ГУИД, не обязателен |
deployType |
тип deploy (manual/parallel). Предпочтительнее параллельный deploy, так как он быстрее. |
Значения параметров "groupId", "artifactId" зависят от реального расположения устанавливаемого дистрибутива в NEXUS.
Данные параметры можно посмотреть в
Заполнение файла openShift.conf#
Состав ключей и значений стендозависимых параметров, содержащихся в дистрибутиве в файлах mail.stand.all.conf и mail.stand.istio.all.conf нужно переопределить в ci02606786_mailbridge_common_{стенд} репозитории. Для этого необходимо добавить все параметры из файлов mail.stand.all.conf и mail.stand.istio.all.conf (можно найти в ci02606786_mailbridge_mail_{стенд} после запуска playbook MIGRATION_FP_CONF) в файл installer/system/efs/config/parameters/openShift.conf. В примере указаны значения для ДЕВ стенда, для других стендов значения другие. Количество параметров может быть другим по мере доработок, указано для примера. Актуальную версию параметров можно взять из дистрибутива, который планируется к установке.
В дистрибутиве значения всех параметров уже определены. Часть из них является обязательными для переоределения (см. ниже).
Миграция параметров#
При установке обновления необходимо запустить сначала playbook MIGRATION_FP_CONF. В результате выполнения в репозитории ci02606786_mailbridge_mail_{стенд} в папке log появятся лог файлы mail.stand.all.conf и mail.stand.istio.all.conf, в которых будут рассчитаны новые параметры (WARNING_NEW_KEY), требующие добавления в openShift.conf и настройки. Комментарии к новым параметрам можно найти в репозитории ci02606786_mailbridge_mail_{стенд} в папке config/parameters в файлах mail.stand.all.conf и mail.stand.istio.all.conf.
Обязательные параметры для переопределения#
Параметры из файла mail.stand.istio.all.conf#
########################
# ОБЩИЕ ПАРАМЕТРЫ ISTIO
########################
# Флаг включения аутентификации в контрольной панели Service Mesh по ротируемому токену
# config.mail.ose.istio.isThirdPartyJwtMode=false
# Флаг включения использования Synapse Service Mesh
# config.mail.ose.istio.isSynapseIstioEnabled=false
# Версия SDS конфигурации для Envoy Filter.
# - если значение не указано и isSynapseIstioEnabled=true, то значение V3
# - если значение не указано и isSynapseIstioEnabled=false, то значение V2
# - если значение указано, то используется именно оно без учета значения isSynapseIstioEnabled
# config.mail.ose.istio.egress.commontlscontext.sdsconfig.version=
#######################
# INGRESS
#######################
# Fingerprint сертификата клиента для проверки прав для отправки запросов
# Формат: ["hashSha256_1", "hashSha256_2", ...]
#Пример: 8114E24DF4BBE76A8D3D2F3C29699E252F7FB5C0565D4378DBF6127FA88BFFF2
config.mail.ose.istio.ingress.gateway.verifyCertificateHash.certSha256=[\
"4EC7F24500E98C7B5DE7E787826FC22397B13816536C4FEA60C4FC09335E9899",\
"182B0259E6CE70714426BF3675DA36ED51919CEC407B01A0C8AF70481A789D23"\
]
# DN (distinguished name) сертификата клиента для проверки прав для отправки запросов
# Формат: ["DN_1", "DN_2", ...]
# Пример: CN=shcheglov,OU=00CA,O=Sberbank of Russia,C=RU
config.mail.ose.istio.ingress.gateway.verifyCertificate.dn.list=[\
"CN=ivanoff,OU=00CA,O=Sberbank of Russia,C=RU",\
"CN=petroff,OU=00CA,O=Sberbank of Russia,C=RU"\
]
#######################
# EGRESS
#######################
# Vault
config.mail.vault.namespace=имя_пространства
config.mail.vault.role.name=role-ga-secman-mail
# alias в jks, по которому будет производиться поиск ключа для дешифрования файла
config.mail.vault.secret.crypt.item.jks=mailbridge
config.mail.vault.secret.path.passwords=имя_пространства/A/DEV/MAIL/AE/KV/OS/secret-mail
config.mail.vault.secret.path.crypt=имя_пространства/A/DEV/MAIL/AE/KV/OS/crypt-key-secret
config.mail.vault.secret.path.egress=имя_пространства/A/DEV/MAIL/AE/KV/OS/mail-secret-egress-gateway-certs
config.mail.vault.secret.path.ingress=имя_пространства/A/DEV/MAIL/AE/KV/OS/mail-secret-ingress-gateway-certs
config.mail.vault.secret.path.kafkagw=имя_пространства/A/DEV/MAIL/AE/KV/OS/mail-secret-kafka-gateway
config.mail.vault.secret.path.ibmmqgw=имя_пространства/A/DEV/MAIL/AE/KV/OS/mail-secret-go-mq-gateway
Параметры из файла mail.stand.all.conf#
########################################################################################################################
# MAILBRIDGE
########################################################################################################################
# name - имя записи, используется в названиях манифестов, а также для именования файлов сертификатов
# !!! ВАЖНО !!! Лимит по количеству символов поля name = 20 символов
# virtualIp - виртуальный ip для маршрутизации трафика по сетке истио
# egressPort - порт егресс
# externalPort - внешний (реальный) порт
# isTlsOnEgress - признак терминации трафика в TLS на egress (true/false), если false, то трафик терминируется на сервисе
# egressConnectTimeout - время ожидания TCP-соединения. Формат: 1h/1m/1s/1ms. Долно быть >= 1ms. По умолчанию - 10s.
# meshProtocol - протокол маршрутизации по сетке istio, допустимые значения: tls, http, http2, tcp
# externalProtocol - протокол для взаимодействия с внешним хостом (используется в ServiceEntry, допустимые значения: tls, http, http2, tcp
# host - хост, принимает значения:
# - exchange-ews-dev - для записей exchange DEV EWS
# - exchange-smtp-dev - для записей exchange DEV SMTP
# - exchange-imap-dev - для записей exchange DEV IMAP
# - exchange-ews-ift - для записей exchange IFT EWS
# - exchange-smtp-ift - для записей exchange IFT SMTP
# - exchange-imap-ift - для записей exchange IFT IMAP
# - exchange-ews-psi - для записей exchange PSI EWS
# - exchange-smtp-psi - для записей exchange PSI SMTP
# - exchange-imap-psi - для записей exchange PSI IMAP
# - exchange-ews-prom - для записей exchange PROM EWS
# - exchange-smtp-prom - для записей exchange PROM SMTP
# - exchange-imap-prom - для записей exchange PROM IMAP
# - ldap - для записи ldap (может быть только одна запись)
# - mqgw - для записи ibmmq (может быть только одна запись)
# - ceph - для записи ceph (может быть только одна запись)
# - pgsql-pgbouncer - для записей postgresql pgbouncer (может быть больше одной записи для разных хостов кластера)
# - pgsql-liquibase - для записей postgresql liquibase (может быть больше одной записи для разных хостов кластера)
# - kafkagw - для записи kafka (может быть только одна запись)
# - secman-adapter - для записей secman (может быть только одна запись)
# POSTGRESQL:
# - virtualIp в рамках одного хоста на разные порты должен быть одинаковым (на разные хосты должен быть разный)
# - запись с портом pgbouncer помечается host=pgsql-pgbouncer
# - запись с портом liquibase помечается host=pgsql-liquibase
# - количество хостов может быть больше 1 для кластерной СУБД, для этого включить config.mail.ose.mail_db.postgresql.isCluster=true
# СТАТИЧЕСКИЕ IP адреса
# - В поле host добавить запись обязательно с суффиксом '.int'
# - В поле virtualIp добавить реальный внешний ip-адрес
# - В рамках одного IP адреса host должны быть одинаковыми, НО разными для разных внешних IP
# EXCHANGE
# Для хостов exhange дополнительно указываются:
# domains - список почтовых доменов, поддерживаемых указанном хостом
# type - протокол exchange ews, imap, smtp)
# url - урл для отравки писем по протоколу EWS
config.mail.hosts=[\
{ "name": "exchange-ews-dev", "host": "ews.example.ru", "virtualIp": "10.10.10.10", "egressPort": 2500, "externalPort": 443, "isTlsOnEgress": "true", "meshProtocol": "tcp", "externalProtocol": "tcp", "domains": ["@example.ru", "@ex.ru"], "type": "ews", "url": "http://mock-mail.example.ru:443/ews/exchange.asmx" },\
{ "name": "exchange-smtp-dev", "host": "smtp.example.ru", "virtualIp": "10.10.10.13", "egressPort": 2503, "externalPort": 26, "isTlsOnEgress": "false", "egressConnectTimeout": "30s", "meshProtocol": "tcp", "externalProtocol": "tcp", "domains": ["@example.ru", "@ex.ru"], "type": "smtp" },\
{ "name": "exchange-imap-dev", "host": "imap.example.ru", "virtualIp": "10.10.10.15", "egressPort": 2505, "externalPort": 993, "isTlsOnEgress": "true", "meshProtocol": "tcp", "externalProtocol": "tcp", "domains": ["@example.ru", "@ex.ru"], "type": "imap" },\
{ "name": "ldap", "host": "ldap.example.ru", "virtualIp": "10.10.10.16", "egressPort": 2636, "externalPort": 636, "isTlsOnEgress": "true", "meshProtocol": "tcp", "externalProtocol": "tcp" },\
{ "name": "mqgw", "host": "mqgw.example.ru", "virtualIp": "10.10.10.17", "egressPort": 11414, "externalPort": 1414, "isTlsOnEgress": "false", "meshProtocol": "tcp", "externalProtocol": "tcp" },\
{ "name": "ceph", "host": "ceph.example.ru", "virtualIp": "10.10.10.18", "egressPort": 2700, "externalPort": 8000, "isTlsOnEgress": "true", "meshProtocol": "tcp", "externalProtocol": "tcp" },\
{ "name": "pgsql-pgbouncer", "host": "pgsql.example.ru", "virtualIp": "10.10.10.20", "egressPort": 26544, "externalPort": 6544, "isTlsOnEgress": "false", "meshProtocol": "tcp", "externalProtocol": "tcp" },\
{ "name": "pgsql-liquibase", "host": "pgsql.example.ru", "virtualIp": "10.10.10.20", "egressPort": 25432, "externalPort": 5432, "isTlsOnEgress": "false", "meshProtocol": "tcp", "externalProtocol": "tcp" },\
{ "name": "secman-adapter", "host": "secman.example.ru", "virtualIp": "10.10.10.21", "egressPort": 2801, "externalPort": 8443, "isTlsOnEgress": "false", "meshProtocol": "tcp", "externalProtocol": "tcp" },\
{ "name": "kafkagw", "host": "kgw.example.ru", "virtualIp": "10.10.10.23", "egressPort": 19093, "externalPort": 9093, "isTlsOnEgress": "false", "meshProtocol": "tcp", "externalProtocol": "tcp" },\
{ "name": "mq-server-tfs", "host": "mqtfs.example.ru", "virtualIp": "10.10.10.22", "egressPort": 21414, "externalPort": 1414, "isTlsOnEgress": "false", "meshProtocol": "tcp", "externalProtocol": "tcp" },\
{ "name": "okei", "host": "okei.example.ru", "virtualIp": "10.10.10.24", "egressPort": 2900, "externalPort": 443, "isTlsOnEgress": "true", "meshProtocol": "http2", "externalProtocol": "tls" }\
]
#######################
# БИЗНЕС СЕРВИСЫ
#######################
# mail_db
# Схема в СУБД PostgreSQL
config.mail.ose.mail_db.postgresql.schema=emc_cfg
# БД в СУБД PostgreSQL
config.mail.ose.mail_db.postgresql.database=emcdb
# Роль в СУБД PostgreSQL, которая является владельцем объектов в заданной схеме, от которой доступны операции DDL в СУБД
config.mail.ose.mail_db.postgresql.owner=as_admin
# Роль в СУБД PostgreSQL, от которой доступны операции DML в СУБД
config.mail.ose.mail_db.postgresql.runner=as_TUZ
# Признак является ли СУБД posstgreSQL сервер кластером
config.mail.ose.mail_db.postgresql.isCluster=false
# mail_back
# ldap база
config.mail.ose.mail_back.ldap.base=cn=accounts,dc=solution,dc=*
# поле по которому берется логин пользователя в ldap
config.mail.ose.mail_back.ldap.accountNameKey=uid
# поле по которому берется имя пользователя в ldap
config.mail.ose.mail_back.ldap.displayNameKey=displayName
# ключ для фильтрации поиска в ldap
config.mail.ose.mail_back.ldap.searchFilterPattern="uid={0}"
# Список предполагаемых администраторов системы, CASE_SENSITIVE!!!
config.mail.ose.mail_back.sysadmins.systemAdminsInitList=[\
"ldapLogin1", "ldapLogin2", "ldapLogin3"\
]
# По умолчанию false. Если true - при старте сервиса попытается добавить людей, которые есть в списке systemAdminsInitList,
# Но отсутствуют в системной команде.
# С учетом условий выше, если системная команда пуста по какой то причине - флаг будет проигнорирован и добавятся все из списка
config.mail.ose.mail_back.sysadmins.needCompleteSystemAdmins=false
# mail_monitor
# Cron выражение для запуска задачи по расписанию для проверки заблокированных почтовых ящиков и их разблокировки, по умолчанию выключено ('-')
config.mail.ose.mail_monitor.scheduled.mailbox.unlock.cron=крон_выражение
# mail_go_mq_gateway
# SSL параметры
config.mail.ose.mail_go_mq_gateway.mq.ssl.sslCertAlias=ae
config.mail.ose.mail_go_mq_gateway.mq.ssl.sslCipherSuite=TLS_RSA_WITH_AES_256_CBC_SHA256
# Общие параметры
config.mail.ose.mail_go_mq_gateway.mq.connections.host=vm-test-sy-docker-142.vdc11.sy.dev.*
config.mail.ose.mail_go_mq_gateway.mq.connections.port=1414
config.mail.ose.mail_go_mq_gateway.mq.connections.queueManager=M99_EMC_LOC
config.mail.ose.mail_go_mq_gateway.mq.connections.channel=DEV.APP.SVRCONN
config.mail.ose.mail_go_mq_gateway.mq.connections.sslPeerName="CN=commonname,OU=00CA,O=Sberbank of Russia,C=RU"
# ТФС Gateway использует парамеры от mail_go_mq_gateway и перезаписывет нижеописанные:
config.mail.ose.mail_go_mq_gateway_tfs.mq.connections.host=vm-test-sy-docker-124.vdc11.sy.dev.*
config.mail.ose.mail_go_mq_gateway_tfs.mq.connections.port=1414
config.mail.ose.mail_go_mq_gateway_tfs.mq.connections.queueManager=M99_EMC_LOC
config.mail.ose.mail_go_mq_gateway_tfs.mq.connections.channel=DEV.APP.SVRCONN
# mail_kafka_gateway
# Формат:
# - group - группа инстансов кафка-gateway, все инстансы смотрят на одну группу кафка серверов
# - hostsPorts - массив хостов и портов серверов кафка
# - restTimeoutMs - таймаут REST запроса. Если не указать - по умолчанию подставится 60000 мс
# - restConnectionsPull - пулл коннектов для REST запроса. Если не указать - по умолчанию подставится 100
# - idempotence - включить идемпотентную запись в топик (true/false, по умолчанию - false)
# - topics - массив названий топиков, limiterEnabled - включен ли ratelimiter для топика, limitTpm - максимум TPS в минуту (0 - если поставили limiterEnabled=false)
# - пример: [\
# { "group": "group1", "restTimeoutMs": 60000, "restConnectionsPull": 100, "hostsPorts": ["host:port"], "topics": [{"topic": "topic1", "limiterEnabled": "true", "limitTpm": 10}, {"topic": "topic2", "limiterEnabled": "true", "limitTpm": 10}] },\
# { "group": "group2", "hostsPorts": ["host:port"], "topics": [{"topic": "topic1", "limiterEnabled": "true", "limitTpm": 15}, {"topic": "topic2", "limiterEnabled": "true", "limitTpm": 15}] }\
# ]
config.mail.ose.mail_kafka_gateway.kafka.bootstrapServers=[\
{ "group": "group1", "restTimeoutMs": 60000, "restConnectionsPull": 100, "hostsPorts": ["vm-test-sy-kafka-138.vdc11.sy.dev.*:9093"], "topics": [{"topic": "topic1", "limiterEnabled": "true", "limitTpm": 15, "groupId": "CI02606786_MailBridge"}, {"topic": "topic2", "limiterEnabled": "true", "limitTpm": 15, "groupId": "CI02606786_MailBridge"}] },\
{ "group": "group2", "restTimeoutMs": 60000, "restConnectionsPull": 100, "hostsPorts": ["vm-test-sy-kafka-138.vdc11.sy.dev.*:9093"], "topics": [{"topic": "topic1", "limiterEnabled": "true", "limitTpm": 15, "groupId": "CI02606786_MailBridge"}, {"topic": "topic2", "limiterEnabled": "true", "limitTpm": 15, "groupId": "CI02606786_MailBridge"}] }\
]
# Адаптеры IBM MQ
# Формат - adapterName1:queueIn1:queueOut1:address1/address2/...;adapterName2:queueIn2:queueOut2:address3/address4/...
# - adapterName1 - алиас адаптера IBMMQ
# - queueIn1 - Очередь для запросов на отправку
# - queueOut1 - Очередь для ответных сообщений
# - address1/address2 - Список адресов, входящих в 'белый список', разрешенные адреса для адаптера
# - queueAppealRs - Очередь для ответа на обращение клиента (получение писем)
# - operUID - Признак, по которому mail-go-mq-gateway-tfs определит адрес адаптера, при получении сообщения от ТФС
# - ecmUser,tfsDir,scenarioId - параметры в БД Шлюза обмена E-Mail
# - tfsQueueIn - Очередь для сообщений в сторону ТФС (Команда перекладки файла в ЕСМ)
# - tfsQueueOut - Очередь для ответных сообщений от ТФС (Результат перекладки файла в ЕСМ)
config.mail.ose.ibm_mq_adapters=[\
{ "name": "cod", "queueIn": "EMC.COD.IN", "queueOut": "EMC.COD.OUT", "addresses": ["sa-*-ae-test01@sbertech.ru", "sa-*-ae-test02@sbertech.ru", "sa-*-ae-test03@sbertech.ru"], "tpsLimit": "1" },\
{ "name": "crm-corp", "queueIn": "EMC.CRM.CORP.IN", "queueOut": "EMC.CRM.CORP.OUT", "addresses": ["sa-*-ae-test01@sbertech.ru", "sa-*-ae-test02@sbertech.ru", "sa-*-ae-test03@sbertech.ru"], "tpsLimit": "1", "queueAppealRs": "EMC.CRM.CORP.APPEAL.RS", "operUID": "CRM_CORP_D2L_APPEAL", "ecmUser": "ecmUser", "tfsDir": "tfsDir", "tfsDirCustom": "sa-*-ae-test01@sbertech.ru:dir0001", "scenarioId": "scenarioId", "scenarioIdCustom": "sa-*-ae-test01@sbertech.ru:001", "tfsQueueIn": "TFS.IN", "tfsQueueOut": "TFS.OUT" },\
{ "name": "crm-retail", "queueIn": "EMC.CRMRET.IN", "queueOut": "EMC.CRMRET.OUT", "addresses": ["sa-*-ae-test01@sbertech.ru", "sa-*-ae-test02@sbertech.ru", "sa-*-ae-test03@sbertech.ru"], "tpsLimit": "1", "queueAppealRs": "EMC.CRM.RET.APPEAL.RS", "operUID": "CRM_RET_D2L_APPEAL", "tfsQueueIn": "TFS.IN", "tfsQueueOut": "TFS.OUT", "destinationName": "tfs_pr_lan", "scenarioId": "PLTFCORE-3800", "ecmUser": "p8admin" },\
]
#SecMan адаптер
config.mail.ose.mail_secman_adapter.secman.url=https://secman-*.solution.*:8443/v1
config.mail.ose.mail_secman_adapter.secman.props.namespace=имя_пространства
config.mail.ose.mail_secman_adapter.secman.props.engine-name=A/DEV/MAIL/AE/KV
config.mail.ose.mail_secman_adapter.secman.props.secret-name=dummysecret
# Маппинг ящика и префикса s3 ключа для вложений, сохраняемых в ceph (при получении писем)
# Пример:
# { "test1@sber.ru": "cephKeyPrefix1/", "test2@sber.ru": "cephKeyPrefix2/"}
# или многострочный вариант (после последней записи нет запятой, т.к. заканчивается перечисление):
# {\
# "test1@sber.ru": "cephKeyPrefix1/",\
# "test2@sber.ru": "cephKeyPrefix2/"\
# }
config.mail.ose.mail_files.configmap.s3.write.prefix={\
"test1@sber.ru": "cephKeyPrefix1/",\
"test2@sber.ru": "cephKeyPrefix2/"\
}
# Список опрашиваемых ящиков (чтение писем/обращений клиентов), для которых необходимо включить шифрование
# (после последней записи нет запятой, т.к. заканчивается перечисление):
# {\
# "Адрес_почтового_ящика_1": {"read": {"encrypt": "true"}},\
# "Адрес_почтового_ящика_2": {"read": {"encrypt": "false"}}\
# }
config.mail.ose.mail_files.configmap.attachments.encryption.overwrite={\
"Адрес_почтового_ящика_2": {"read": {"encrypt": "false"}}\
}
#mail_core
# Отправлять ли сообщение при неуспешной проверке ЭП
config.mail.ose.mail_core.signature.sendMessageIfSignatureCheckFailed=true
# Есть ли потребность в конвертировании подписи в base64
config.mail.ose.mail_core.signature.isNeedBase64EncodeSignAndHash=false
# заголовок X-SYSTEM
config.mail.ose.mail_core.signature.okeiProperties.system=ADAPTEXCH
# заголовок X-CHANNEL
config.mail.ose.mail_core.signature.okeiProperties.channel=ADAPTEXCH01
# Параметры СryptoNet
config.mail.ose.mail_core.signature.cryptoNet.kus=SBTJ
config.mail.ose.mail_core.signature.cryptoNet.codeNet=001
# url до АС ОКей
использовать url
#######################
# РЕСУРСЫ
#######################
# mail_kafka_gateway
# Формат:
# - group - группа инстансов кафка-gateway, все инстансы смотрят на одну группу кафка серверов
# - value - значение параметра
config.mail.ose.mail_kafka_gateway.deployment.resources.limits.cpu=[ {"group": "group1", "value": "400m"}, {"group": "group2", "value": "400m"} ]
config.mail.ose.mail_kafka_gateway.deployment.resources.limits.memory=[ {"group": "group1", "value": "800Mi"}, {"group": "group2", "value": "800Mi"}]
config.mail.ose.mail_kafka_gateway.deployment.resources.requests.cpu=[ {"group": "group1", "value": "300m"}, {"group": "group2", "value": "300m"} ]
config.mail.ose.mail_kafka_gateway.deployment.resources.requests.memory=[ {"group": "group1", "value": "600Mi"}, {"group": "group2", "value": "600Mi"} ]
config.mail.ose.mail_kafka_gateway.istio.resources.proxyCPU=[ {"group": "group1", "value": "200m"}, {"group": "group2", "value": "200m"} ]
config.mail.ose.mail_kafka_gateway.istio.resources.proxyCPULimit=[ {"group": "group1", "value": "200m"}, {"group": "group2", "value": "200m"} ]
config.mail.ose.mail_kafka_gateway.istio.resources.proxyMemory=[ {"group": "group1", "value": "512Mi"}, {"group": "group2", "value": "512Mi"} ]
config.mail.ose.mail_kafka_gateway.istio.resources.proxyMemoryLimit=[ {"group": "group1", "value": "512Mi"}, {"group": "group2", "value": "512Mi"} ]
#######################
# КОЛИЧЕСТВО РЕПЛИК ПОДОВ
#######################
# mail_kafka_gateway
# Формат:
# - group - группа инстансов кафка-gateway, все инстансы смотрят на одну группу кафка серверов
# - value - значение параметра
config.mail.ose.mail_kafka_gateway.deployment.replicas=[ {"group": "group1", "value": 1}, {"group": "group2", "value": 1} ]
#######################
# Заглушки при отправке
#######################
# включен ли мок EWS
config.mail.ose.mail_core.env.mockEws.enabled=true
# включен ли мок SMTP
config.mail.ose.mail_core.env.mockSmtp.enabled=true
# минимальное время задержки мока в мс (общий параметр для EWS и SMTP)
config.mail.ose.mail_core.env.mock.delayMin=100
# максимальное время задержки мока в мс (общий параметр для EWS и SMTP)
config.mail.ose.mail_core.env.mock.delayMax=500
############################
# CACHE TTL (DNS кешироание)
############################
# Допустимые значения:
# -1 - кеш не очищается, "cache forever" (значение по умолчанию)
# 0 - кеш не работает, "never cache"
# >= 1 - количество секунд, после которого кеш очищается
# если оставить значение пустым, то JVM будет применять значение по умолчанию (-1)
# время жизни кеша, содержащие DNS серверы в JVM для mail_core
config.mail.ose.mail_core.env.cache.ttl=60
# время жизни кеша, содержащие DNS серверы в JVM для mail_receive_letters_reader
config.mail.ose.mail_receive_letters_reader.env.cache.ttl=60
Параметры подключения к Active Directory#
С целью аутентификации пользователей для дальнейшей авторизации в консоли управления Адаптера Exchange используется система для обеспечения централизованной идентификации LDAP. Настройки подключения к LDAP указываются в конфигурационном файле микросервиса mail-back.
Ниже приведен пример части конфигурации микросервиса mail-back для взаимодействия с LDAP:
spring:
ldap:
username: 'LDAP_USERNAME'
password: 'LDAP_PASSWORD'
base: 'DC=sigma,DC=sbrf,DC=ru'
urls: 'ldap://ldap_host:ldap_port'
ignorePartialResultException: true
Поддержка Synapse Service Mesh#
Перед первой установкой версии программного компонента 3.11 и выше необходимо выполнить следующие действия (дальнейшие установки не требуют этих действий):
Сконвертировать приватные ключи для подключения к БД as_admin.pk8 и as_tuz.pk8 в формат PEM (as_admin.key и as_tuz.key)
openssl pkcs8 -in as_tuz.pk8 -inform DER -nocrypt -out as_tuz.key
Закодировать приватные ключи в base64
base64 -i as_admin.key -o as_admin.key.b64
Добавить в Platform V CryptoService приватные ключи в формате PEM с ключами as_admin.key и as_tuz.key
Добавить в Platform V CryptoService приватный ключ для подключения к smtp (можно взять из записи в exchange-imap-*.key) с ключом exchange-smtp-.key
Добавить в Platform V CryptoService сертификат для подключения к smtp (можно взять из записи exchange-imap-.pem) с ключом exchange-smtp-.pem
В openShift.conf common репозитория добавить/изменить параметры в config.mail.hosts
Для терминации трафика MS EXCHANGE SMTP на istio egress exchange-smtp-*
"isTlsOnEgress": "true"
"externalProtocol": "tcp"
"tlsParamsUpgrade": "false"
Для терминации трафика POSTGRESQL на istio egress pgsql-pgbouncer pgsql-liquibase
"isTlsOnEgress": "true"
"externalProtocol": "postgres"
"tlsParamsUpgrade": "false"
для остальных записей
"tlsParamsUpgrade": "false"
Добавить для необходимых проектов в multiClusters.json в common репозиторий поля для включения поддержки Synapse Service Mesh
# Флаг включения аутентификации в контрольной панели service mesh по ротируемому токену
"isThirdPartyJwtMode": "true"
# Флаг включения использования Synapse Service Mesh
"isSynapseIstioEnabled": "true"
Подключить/переключить проект в среде оркестрации к контрольной панели Synapse Service Mesh v. 1.17 или выше
Произвести установку программного компонента
Примечание Если не требуется включать терминацию трафика MS EXCHANGE SMTP и POSTGRESQL, то п. 1-6 можно игнорировать.