Установка#

Перед настройкой стенда#

Выделить необходимую квоту в Abyss (LGDB) для каждого проекта (тенанта). Квота на топики и задачи должны соответствовать количеству сервисов, которые будут подключены в BAMN. Информация по созданию и управлению квотами дана в документации компонента Abyss (LGDB) продукта Platform V Monitor (OPM).

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

Для установки сервиса Business activity monitoring (BAMN) вручную необходимо:

  1. Получить дистрибутив сервиса Business activity monitoring (BAMN);

  2. Выполнить или запросить настройку базы данных Platform V Pangolin SE (PSQ) для Business activity monitoring (BAMN). Для корректной установки необходимо обеспечить изолированное пространство имен (Database schema) без сторонних сущностей и таблиц;

  3. Во всех файлах с расширением yaml расположенных в директориях дистрибутива заполнить значения переменных в соответствии с актуальным окружением (Environment);

  4. Заполнить ConfigMaps в разделах дистрибутива /package/conf/k8s/base в соответствии с комментариями по заполнению параметров в файлах .conf из директории /package/conf/config/parameters.

  5. Создать секреты для Istio:

    • bamn-secret-ingressgateway-certs;

    • bamn-secret-egressgateway-certs;

    • bamn-secret-ott-certs (опционально). При ручной установке, секрет нужно будет создать вручную.

    kubectl create secret generic bamn-secret-ingressgateway-certs --from-file=server/serverCertificate.pem --from-file=server/privateKey.pem
    kubectl create secret generic bamn-secret-egressgateway-certs --from-file=client/clientCertificate.pem --from-file=client/privateKey.pem
    kubectl create secret generic bamn-secret-common-certs  --from-file=ansible/files/ssl/common.jks
    kubectl create secret generic bamn-secret-db-certs --from-file=db/caCertificates.pem  --from-file=db/clientCertificate.pem --from-file=db/privateKey.pem
    kubectl create secret generic bamn-secret-logger-kafka-certs --from-file=fluentbit/caCertificates.pem --from-file=fluentbit/clientCertificate.pem  --from-file=fluentbit/privateKey.pem
    kubectl create secret generic bamn-secret-ott-certs --from-file=ott/caCertificates.pem --from-file=ott/ottService.pem --from-file=ott/moduleCert.pem --from-file=ott/moduleKey.pem
    
  6. На основе шаблонов файлов из дистрибутива /package/conf/k8s/base/secrets завести секреты в целевом пространстве Kubernetes:

    • bamn-secret-common-certs;

    • bamn-secret-logger-kafka-certs;

    • bamn-secret-encrypted.

Комментарии по заполнению параметров есть в разделе «Подготовка секрета с паролями».

  1. Далее необходимо установить все заполненные файлы .yaml в платформе приложений-контейнеров с помощью команды: «kubectl apply -f .yaml». Необходимо начать с каталога Istio, затем остальные каталоги. Приоритет развертывания: kind: secrets, configmaps, services, deployment, далее приоритет не важен.

Автоматическая установка#

Подготовка стенда#

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

  1. Подготовка pipeline.

  2. Подготовка среды контейнеризации (Kubernetes или Red Hat OpenShift4+).

  3. Подготовка хранилища сертификатов.

  4. Подготовка секрета с паролями.

  5. Подготовка базы данных.

  6. Настройка общей конфигурации для всех сервисов в составе продукта.

  7. Настройка конфигурации Istio для подключаемых внешних сервисов.

  8. Настройка журналирования.

  9. Настройка мониторинга.

Подготовка pipeline#

Необходимо подготовить DevOps Tools для развертывания сервисов BAMN. Для раскатки используется стандартный Pipeline CD.
После добавления подсистемы в environment.json, subsystems.json сервис станет доступен для раскатки: см. раздел «Раскатка сервиса». Добавление дистрибутива в pipeline осуществляется по аналогии с примером в файле environment.json и subsystems.json в common репозитории. В subsystems.json необходимо установить параметр "strict": "false" в используемом subsystem или по умолчанию ("__default")
Данная инструкция не содержит подробную настройку pipeline, так как используемый pipeline сам по себе является отдельным продуктом.
Добавление кластеров kubernetes (openshift) осуществляется, по аналогии с примером в файле multiClusters.json. Для Kubernetes в multiClusters.json использовать параметр «overrides»: []. Для OpenShift использовать парамер «overrides»: [«openshift»].

Подготовка среды контейнеризации Kubernetes#

  1. Необходимо подготовить пространство (проект) в Kubernetes в соответствии с минимальными требованиями по квоте сервисов BAMN.

Установлены следующие требования по квоте:

limits.cpu: '14'
limits.memory: 16Gi
persistentvolumeclaims: '0'
requests.cpu: '14'
requests.memory: 16Gi

Параметры ресурсов определены в конфигурационных файлах соответствующих сервисов и sidecars ВAMN:

  • bam.administrator.conf;

  • bam.pull-processing.conf;

  • bam.selector.conf;

  • bam.istio.all.conf;

  • bam.fluent-bit-sidecar.all;

  • bam.ott-sidecar.all;

  • bam.secman-sidecar.all.

    Файлы расположены в папке config/parameters.

  1. Проект должен быть подключен к Platform V Synapse Service Mesh (SSM) (ISTIO).

  2. Прописан global.ufs.synapse.controlPlane.project=(проект kubernetes) в common репозитории.

Pods приложения (BAMN):

  • bamn-administrator-{ hash }

  • bamn-pull-processing-{ hash }

  • bamn-selector-{ hash }

Служебные pods:

  • igw-bamn-{ namespace }-{ hash }

  • begw-bamn-{ namespace }-{ hash }

Приведенные в разделах ниже параметры, конфигурации используются для работы сервиса BAMN в среде Kubernetes. Дополнительные настройки для развертывания в Kubernetes не требуются.

Подготовка хранилища сертификатов#

Для работы сервисов BAMN потребуются следующие сертификаты:

  1. Корневой сертификат (CA) центра сертификации. Имя в среде контейнеризации: bamn-cm-certificate-authority.
    Путь до сертификата внутри контейнера определяется переменной в configmap сервисов (bamn-cm-administrator, bamn-cm-pull-processing, bamn-cm-selector):

     bam.ssl.ca-certificates=/etc/ssl/certs/caCertificates.pem
    

    Сертификат должен находиться в common репозитории по пути, определяемому переменной конфигурационного файла bam.common.all.conf:

    # !!! Путь к корневому сертификату (root CA)
    bam.ose.secret.common.root.cert.location=ansible/files/ssl/root.crt
    

    Данный сертификат используется:

    • для установления mTLS через Platform V Synapse Service Mesh (SSM) (ISTIO);

    • для авторизации по HTTPS (TLS) в API Secret Management System (Secman).

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

  2. Сертификаты для подключения к Kafka компонента Abyss (LGDB) и Platform V Flow (BPM).
    Все подключаемые брокеры Kafka должны доверять одному центру сертификации.
    Имя секрета в среде контейнеризации: bamn-secret-common-certs

    Путь до сертификатов внутри контейнера с отключенной интеграцией Secret Management System (Secman), переменные в configmap сервисов:

  • bamn-cm-administrator, bamn-cm-pull-processing, bamn-cm-selector

    # Kafka Abyss
     bam.ssl.common.client-certificate=/vault/secrets/certs/db/clientCertificate.pem
     bam.ssl.common.private-key=/vault/secrets/certs/db/privateKey.pem
     bam.ssl.common.jks-keystore=/vault/secrets/certs/client/common.jks
     bam.ssl.common.jks-truststore=/vault/secrets/certs/client/common.jks
    
  • только bamn-cm-pull-processing

     # Kafka Platform V Flow
      bam.ssl.kafka.private-key=/vault/secrets/certs/client/privateKey.pem
      bam.ssl.kafka.client-certificate=/vault/secrets/certs/client/clientCertificate.pem
      bam.ssl.kafka.jks-keystore=/vault/secrets/certs/client/common.jks
      bam.ssl.kafka.jks-truststore=/vault/secrets/certs/client/common.jks
    

    Путь до сертификатов в сервисе Vault с включенной интеграцией Secret Management System (Secman), переменные в configmap сервисов. Указаны примеры в качестве значений, необходимо заменить на актуальные пути в Secman:

  • bamn-cm-administrator, bamn-cm-pull-processing, bamn-cm-selector

     # Kafka Abyss
     bam.ssl.common.client-certificate=$__vault{pki:DEV_EXAMPLE/PKI:role-ga-secman-bamn:bam-tribe-om-st-bam-01.apps.stands-vdc01.solution.example:certificate}
     bam.ssl.common.private-key=$__vault{pki:DEV_EXAMPLE/PKI:role-ga-secman-bamn:bam-tribe-om-st-bam-01.apps.stands-vdc01.solution.example:private_key}
     bam.ssl.common.private-key-password=$__vault{kv:DEV_EXAMPLE/A/DEV_EXAMPLE/OM/BAMN/KV:bamn-st-secret-encrypted:bam.common.sslpassword}
    
  • только bamn-cm-pull-processing

    # Kafka Platform V Flow
     bam.ssl.kafka.client-certificate=$__vault{pki:DEV_EXAMPLE/PKI:role-ga-secman-bamn:bam-tribe-om-st-bam-01.apps.stands-vdc01.solution.example:certificate}
     bam.ssl.kafka.private-key=$__vault{pki:DEV_EXAMPLE/PKI:role-ga-secman-bamn:bam-tribe-om-st-bam-01.apps.stands-vdc01.solution.example:private_key}
     bam.ssl.kafka.private-key-password=$__vault{kv:DEV_EXAMPLE/A/DEV_EXAMPLE/OM/BAMN/KV:bamn-st-secret-encrypted:bam.kafka.sslpassword}
    

    В режиме с отключенной интеграцией Secret Management System (Secman) для указанного секрета используются переменные конфигурационного файла bam.common.all.conf:

    # !!! Путь хранилищу сертификатов common.jks в common репозитории
    # на их основе будет создан секрет bamn-secret-common-certs
    bam.ose.configmap.common.keystore.location=ansible/files/ssl/st-abyss.keystore.jks
    

    Для режима включенной интеграцией Secret Management System (Secman) настройку стоит смотреть в разделе SecMan, секрет не будет создаваться в среде контейнеризации при автоматической установке.

  1. Сертификаты для подключения к БД PostgreSQL (Platform V Pangolin SE).
    Имя секрета в среде контейнеризации: bamn-secret-db-certs
    Путь до сертификатов внутри контейнера (переменные в configmap сервисов bamn-cm-administrator, bamn-cm-pull-processing, bamn-cm-selector):

     bam.ssl.database.client-certificate=/vault/secrets/certs/db/clientCertificate.pem
     bam.ssl.database.private-key=/vault/secrets/certs/db/privateKey.pem
     bam.ssl.database.jks-keystore=/vault/secrets/certs/client/common.jks
     bam.ssl.database.jks-truststore=/vault/secrets/certs/client/common.jks
    

    В режиме с отключенной интеграцией Secret Management System для указанного секрета используются переменные конфигурационного файла bam.common.all.conf:

    # !!! Пути к PEM сертификатам в common репозитории для БД postgresql на их основе будет создан секрет bamn-secret-db-certs
    # корневой (CA) сертификат в формате PEM
    bam.ose.secret.datasource.ssl.ca.location=ansible/files/ssl/postgresql_ca.crt
    # клиентский сертификат в формате PEM
    bam.ose.secret.datasource.ssl.cert.location=ansible/files/ssl/postgresql.crt
    # private key в формате PEM, должен содержать в себе клиентский сертификат (после private key)
    bam.ose.secret.datasource.ssl.key.location=ansible/files/ssl/postgresql.key
    

    Для режима включенной интеграцией Secret Management System (Secman) настройку стоит смотреть в разделе SecMan, секрет не будет создаваться в среде контейнеризации при автоматической установке.

  2. Сертификаты для подключения к Kafka компонента Журналирования (LOGA).
    Имя секрета в среде контейнеризации: bamn-secret-logger-kafka-certs
    Путь до сертификатов внутри контейнера (переменные в configmap bamn-cm-fluent-bit-sidecar):

    rdkafka.ssl.key.location /vault/secrets/certs/fluent/private-key.pem
    rdkafka.ssl.certificate.location /vault/secrets/certs/fluent/cert.pem
    rdkafka.ssl.ca.location /etc/ssl/certs/caCertificates.pem
    

    В фп-репозитории определяется переменными в файле pvm.service.fluent-bit.all.conf:

    # Пути к сертификатам в pod (!!! менять только в случае явных рекомендаций !!!)
    fluent-bit-sidecar.ose.configmap.kafka.key=/vault/secrets/certs/fluent/private-key.pem
    fluent-bit-sidecar.ose.configmap.kafka.cert=/vault/secrets/certs/fluent/cert.pem
    fluent-bit-sidecar.ose.configmap.kafka.cacert=/etc/ssl/certs/caCertificates.pem
    

    В режиме с отключенной интеграцией Secret Management System (Secman) для указанного секрета используются переменные конфигурационных файлов pvm.service.fluent-bit.all.conf:

    # !!! Пути к хранилищам сертификатов Kafka Logger в common репозитории
    # Используется при отсутствии интеграции с Secman
    fluent-bit-sidecar.ose.secret.kafka.keystore.location=ansible/files/ssl/st-abyss.keystore.jks
    
    # !!! Пароль к JKS (хранилищам сертификатов Kafka Logger)
    # данный пароль должен быть заполнен в _passwords.conf среды. Используется для расшифровки JKS указанного в fluent-bit-sidecar.ose.secret.kafka.keystore.location
    fluent-bit-sidecar.ose.secret.kafka.keystore.password=pvm.ssl.logger.store.password
    
    # !!! Alias клиентского сертификата (для JKS указанного в fluent-bit-sidecar.ose.secret.kafka.keystore.location)
    fluent-bit-sidecar.ose.secret.kafka.keystore.cert.alias=host
    
    # !!! Alias root сертификата (для JKS указанного в fluent-bit-sidecar.ose.secret.kafka.keystore.location)
    fluent-bit-sidecar.ose.secret.kafka.keystore.root.alias=root
    

    Для режима включенной интеграцией Secret Management System (Secman) настройку стоит смотреть в разделе SecMan, секрет не будет создаваться в среде контейнеризации при автоматической установке.

  3. Серверные сертификаты Istio Ingress (Platform V Synapse Service Mesh (SSM)).
    Имя секрета в среде контейнеризации: bamn-secret-ingressgateway-certs.
    Пути до сертификатов Istio внутри контейнера не параметризуются:

    serverCertificate: /vault/secrets/certs/server/serverCertificate.pem
    privateKey: /vault/secrets/certs/server/privateKey.pem
    

    Корневой сертификат см. п.1. Корневой сертификат (CA) центра сертификации: caCertificates: /etc/ssl/certs/caCertificates.pem, имя секрета в среде контейнеризации bamn-secret-ingressgateway-ca-certs

    В режиме с отключенной интеграцией Secret Management System (Secman) для указанного секрета используются переменные конфигурационного файла bam.istio.all.conf:

    # Alias mTLS сертификата ingress
    bam.ose.istio.secret.ingressCertAlias=${ssl.ose.istio.keyStore.ingress.CertAlias}
    # Alias приватного ключа ingress
    bam.ose.istio.secret.ingressPrivateKeyAlias=${ssl.ose.istio.keyStore.ingress.CertAlias}
    # Alias к JKS хранилищу сертификатов, который содержит сертификат и private key
    bam.ose.istio.secret.ingressKeyStoreFile=${ssl.ose.istio.keyStore.ingress.KeyStoreFromFile}
    # Пароль от JKS хранилища сертификатов
    bam.ose.istio.secret.ingressKeyStorePass=${ssl.ose.istio.keyStore.ingress.password}
    

    Детальное описание настройки см. в Приложение А. Сертификаты Istio. Режим отключенной интеграции Secret Management System (Secman).

    Для режима включенной интеграцией Secret Management System (Secman) настройку стоит смотреть в разделе SecMan, секрет не будет создаваться в среде контейнеризации при автоматической установке.

  4. Клиентские сертификаты Istio Egress (Platform V Synapse Service Mesh (SSM)) Имя секрета в среде контейнеризации: bamn-secret-egressgateway-certs Путь до сертификатов внутри контейнера:

    clientCertificate: /vault/secrets/certs/client/clientCertificate.pem
    privateKey: /vault/secrets/certs/client/privateKey.pem
    

    Корневой сертификат см. п.1. Корневой сертификат (CA) центра сертификации: caCertificates: /etc/ssl/certs/caCertificates.pem, имя секрета в среде контейнеризации bamn-secret-egressgateway-ca-certs

    В режиме с отключенной интеграцией Secret Management System (Secman) для указанного секрета используются переменные конфигурационного файла bam.istio.all.conf:

    # Alias mTLS сертификата egress
    bam.ose.istio.secret.egressCertAlias=${ssl.ose.istio.keyStore.egress.CertAlias}
    # Alias приватного ключа egress
    bam.ose.istio.secret.egressPrivateKeyAlias=${ssl.ose.istio.keyStore.egress.CertAlias}
    # Путь к JKS хранилищу сертификатов, который содержит сертификат и private key
    bam.ose.istio.secret.egressKeyStoreFile=${ssl.ose.istio.keyStore.egress.KeyStoreFromFile}
    # Пароль от JKS хранилища сертификатов
    bam.ose.istio.secret.egressKeyStorePass=${ssl.ose.istio.keyStore.egress.password}
    

    Детальное описание настройки см. в Приложение А. Сертификаты Istio. Режим отключенной интеграции Secret Management System (Secman).

    Для режима включенной интеграцией Secret Management System (Secman) настройку стоит смотреть в разделе SecMan, секрет не будет создаваться в среде контейнеризации при автоматической установке.

  5. Сертификаты OTT (One-Time-Token) (опционально) Имя секрета в среде контейнеризации: bamn-secret-ott-certs
    Путь до сертификатов внутри контейнера (переменные в configmap bamn-cm-ott-env-config):

    OTT_SERVICE_TLS_CRT: /vault/secrets/certs/ott/caCertificates.pem
    OTT_SERVICE_CRT: /vault/secrets/certs/ott/ottService.pem
    OTT_CLIENT_CRT: /vault/secrets/certs/ott/moduleCert.pem
    OTT_CLIENT_PRIVATE_KEY: /vault/secrets/certs/ott/moduleKey.pem
    

    В фп-репозитории определяются переменными в файле pvm.service.ott.all.conf:

    # Пути к сертификатам в pod (!!! менять только в случае явных рекомендаций !!!)
    ott-sidecar.ose.configmap.service.tls.crt=/etc/ssl/certs/caCertificates.pem
    ott-sidecar.ose.configmap.service.crt=/vault/secrets/certs/ott/ottService.pem
    ott-sidecar.ose.configmap.client.crt=/vault/secrets/certs/ott/moduleCert.pem
    ott-sidecar.ose.configmap.client.key=/vault/secrets/certs/ott/moduleKey.pem
    

    В режиме с отключенной интеграцией Secret Management System (Secman) для указанного секрета используются переменные конфигурационного файла pvm.service.ott.all.conf:

    # !!! Пути к хранилищам сертификатов OTT в common репозитории
    # на их основе будет создан секрет bamn-secret-ott-certs
    ott-sidecar.ose.secret.keystore.location=ansible/files/ssl/ott_keystore.jks
    ott-sidecar.ose.secret.truststore.location=ansible/files/ssl/ott_truststore.jks
    
    # !!! Пароли к JKS (хранилищам сертификатов OTT)
    # Указанные в переменных пароли должны быть заполнены в _passwords.conf среды. Используется для расшифровки JKS для ОТТ
    ott-sidecar.ose.secret.keystore.password=pvm.ott.certStore.password
    ott-sidecar.ose.secret.truststore.password=pvm.ott.trustStore.password
    
    # !!! Alias сервисного сертификата ОТТ (для JKS указанного в ott-sidecar.ose.secret.truststore.location)
    ott-sidecar.ose.configmap.ott_service_cert_alias=ott-service
    
    # !!! Alias root сертификата ОТТ (для JKS указанного в ott-sidecar.ose.secret.truststore.location)
    ott-sidecar.ose.configmap.ott_service_root_alias=root
    

    а так же переменная конфигурационного файла bam.ott-sidecar.all.conf:

    # !!! Alias клиентского сертификата ОТТ (для JKS указанного в ott-sidecar.ose.secret.keystore.location)
    ott-sidecar.ose.configmap.ott_client_cert_alias=bam
    

    Для режима включенной интеграцией Secret Management System (Secman) настройку стоит смотреть в разделе SecMan, секрет не будет создаваться в среде контейнеризации при автоматической установке.

SecMan. Управление секретами и сертификатами#

BAMN поддерживает интеграцию с Secret Management System (Secman). Secret Management System (Secman) - это менеджер паролей, который может хранить, извлекать, генерировать и синхронизировать пароли.

Для активации SecMan необходимо в bam.secman-sidecar.conf установить следующие настройки:

secman-sidecar.ose.configmap.vault.enabled=true

По умолчанию интеграция выключена. При отсутствии Secret Management System (Secman), данную настройку необходимо оставить выключенной.

Для корректной работы SecMan необходимы следующие условия:

  1. Настроен сервис SecMan, используемый для текущей инсталляции:

    • Получены доступы до KV-хранилища;

    • Получены доступы до PKI-хранилища;

    • Получены доступы на аутентификацию k8s;

    • Заведены секреты (таблицы ниже).

    Используются два разных типа секретов: сертификаты (PKI и KV) и KV-значения.

    Формат сертификатов - PEM. Ключи у сертификатов всегда должны быть:

    • issuing_ca - CA-сертификат (рекомендуется использовать сертификат, тот же, что и без интеграции с SecMan. Цепочка сертификатов всех доверенных источников);

    • certificate - клиентский сертификат;

    • private_key - приватный ключ (в случае подключения к Apache Kafka - ssl-библиотека требует цепочку в приватном ключе. Цепочка должна состоять из: приватного ключа, клиентского сертификата, рутового сертификата);

    • ttl - период обновления сертификата (если необходим период, отличный от общего для движка).

Используемые сертификаты:

Тип сертификата

Описание

FP-параметр конфигурации

Файл

Ingress-сертификаты

Используются для istio ingress

secman-sidecar.ose.configmap.vault.secrets.certs.server.istio.source

bam.secman-sidecar.all.conf

Egress-сертификаты

Используются для istio egress

secman-sidecar.ose.configmap.vault.secrets.certs.client.istio.source

bam.secman-sidecar.all.conf

OTT-сертификаты

Используются для OTT

secman-sidecar.ose.configmap.vault.secrets.certs.client.ott.source

bam.secman-sidecar.all.conf

Используемые KV-секреты (все ключи должны быть представлены в одном секрете, например, bamn-secret-encrypted):

FP-параметр конфигурации

Ключ

Описание

Файл

bam.ose.configmap.common.jasypt_key

jasypt_key

ключ шифрования jasypt (должен быть пустым если в KV храним не шифрованные jasypt пароли)

bam.common.all.conf

bam.ose.configmap.common.ssl.common.private-key-password

bam.common.sslpassword

пароль от ssl-сертификатов формата PEM для Abyss

bam.common.all.conf

bam.ose.configmap.common.ssl.database.private-key-password

bam.datasource.sslpassword

пароль от ssl-сертификатов формата PEM для БД

bam.common.all.conf

pull-processing.ose.configmap.ssl.kafka.private-key-password

bam.kafka.sslpassword

пароль от ssl-сертификатов формата PEM для Kafka Flow

bam.pull-processing.conf

bam.ose.configmap.common.abyss.user

abyss.user

логин для доступа к Abyss

bam.common.all.conf

bam.ose.configmap.common.abyss.password

abyss.password

пароль для доступа к Abyss

bam.common.all.conf

bam.ose.configmap.common.auth.pvm.user

auth.pvm.user

логин для доступа к сервису аутентификации/авторизации PVM

bam.common.all.conf

bam.ose.configmap.common.auth.pvm.password

auth.pvm.password

пароль для доступа к сервису аутентификации/авторизации PVM

bam.common.all.conf

bam.ose.configmap.common.datasource.username

spring.datasource.username

логин от БД BAMN

bam.common.all.conf

bam.ose.configmap.common.datasource.password

spring.datasource.password

пароль от БД BAMN

bam.common.all.conf

С правилами подготовки секретов с паролями можно ознакомиться в разделе Подготовка секрета с паролями.

  1. Для авторизации в Secret Management System (Secman) необходимо указать следующие настройки:

    • Пути до хранилища, используемую роль доступа и группу для namespace кластера OpenShift/Kubernetes в конфигурационном файле bam.secman-sidecar.all.conf:

    # !!! Название namespace с секретами
    secman-sidecar.ose.configmap.vault.config.auto_auth.method.namespace=DEV_EXAMPLE
    
    # !!! Роль доступа зависит от кластера OpenShift/Kubernetes и может иметь вид:
    # "auth/os/<DOMAIN>" для Openshift
    # "auth/k8s/<DOMAIN>" для K8S
    # <DOMAIN> - домен 2 уровня, тот что был указан в заявке на подключения Secman к namespaces кластера
    secman-sidecar.ose.configmap.vault.config.auto_auth.method.mount_path=auth/os/stands-vdc01.solution.example
    
    # !!! Группа безопасности secman (пример создания группы ITSD-2436)
    secman-sidecar.ose.configmap.vault.config.auto_auth.method.config.role=role-ga-secman-bamn
    # Параметры аутентификации secman и пути до хранилища
    secman-sidecar.ose.configmap.pvm.vault.authentication.type=kubernetes
    secman-sidecar.ose.configmap.pvm.vault.authentication.k8s.sa-token-file=/var/run/secrets/kubernetes.io/serviceaccount/token
    secman-sidecar.ose.configmap.pvm.vault.authentication.check-resource=DEV_EXAMPLE/A/DEV_EXAMPLE/OM/BAMN/KV/bamn.platform.secman.vault.secret
    secman-sidecar.ose.configmap.pvm.vault.authentication.k8s.path=os/stands-vdc01.solution.example
    secman-sidecar.ose.configmap.pvm.vault.pki.path=DEV_EXAMPLE/PKI
    secman-sidecar.ose.configmap.pvm.vault.certificates.ttl=6h
    
    • Параметры подключения к API Secman, конфигурационный файл bam.istio.all.conf, пример:

    ################# Secman settings
    # !!! Хостнейм API Secman
    bam.ose.istio.egress.common.vault.host=secman-example.solution.example
    # Входящий порт vault
    bam.ose.istio.egress.common.vault.inside.port=8201
    # !!! Используется ли протокол https в режиме passthrough
    bam.ose.istio.egress.common.vault.passthrough=true
    # !!! Порт API Secman
    bam.ose.istio.egress.common.vault.port=8443
    # Внутренний порт istio (параметр без необходимости не менять)
    bam.ose.istio.egress.common.vault.internal-port=7501
    # Внутренний http порт istio (параметр без необходимости не менять)
    bam.ose.istio.egress.common.vault.internal-http-port=7621
    # Ограничение на одновременные запросы
    bam.ose.istio.egress.dr.spec.trafficPolicy.connectionPool.http.http2MaxRequests.vault.host=100
    # кол-во ошибок на интервале анализа до того как хост будет исключен из пула соединений
    bam.ose.istio.egress.dr.spec.trafficPolicy.outlierDetection.consecutiveErrors.vault.host=20
    # интервал анализа
    bam.ose.istio.egress.dr.spec.trafficPolicy.outlierDetection.interval.vault.host=1m
    # минимальное время на которое исключается хост из пула соединений
    bam.ose.istio.egress.dr.spec.trafficPolicy.outlierDetection.baseEjectionTime.vault.host=5m
    ################# END Secman settings
    
    • URL подключения к API Secman в конфигурационном файле bam.secman-sidecar.all.conf при этом сформируется автоматически:

    # Secman API URL
    secman-sidecar.ose.configmap.vault.address=https://${bam.ose.istio.egress.common.vault.host}:${bam.ose.istio.egress.common.vault.port}
    
  2. Поддерживаемые движки (engine): KV (key-value), PKI (Public Key Infrastructure - инфраструктура открытых ключей).

    Для передачи паролей в приложение BAMN используются KV-значения, в конфигурационном файле bam.common.all.conf необходимо указать пути до ключей в секрете, например:

    # !!! Путь к хранилищу key-value с паролями формируется по шаблону $__vault{kv:<неймспейс>/<имя движка>:<имя секрета>:<имя ключа>}
    bam.ose.configmap.common.jasypt_key=$__vault{kv:DEV_EXAMPLE/A/DEV_EXAMPLE/OM/BAMN/KV:bamn-st-secret-encrypted:jasypt_key}
    bam.ose.configmap.common.ssl.common.private-key-password=$__vault{kv:DEV_EXAMPLE/A/DEV_EXAMPLE/OM/BAMN/KV:bamn-st-secret-encrypted:bam.common.sslpassword}
    bam.ose.configmap.common.ssl.database.private-key-password=$__vault{kv:DEV_EXAMPLE/A/DEV_EXAMPLE/OM/BAMN/KV:bamn-st-secret-encrypted:bam.datasource.sslpassword}
    pull-processing.ose.configmap.ssl.kafka.private-key-password=$__vault{kv:DEV_EXAMPLE/A/DEV_EXAMPLE/OM/BAMN/KV:bamn-st-secret-encrypted:bam.kafka.sslpassword}
    bam.ose.configmap.common.abyss.user=$__vault{kv:DEV_EXAMPLE/A/DEV_EXAMPLE/OM/BAMN/KV:bamn-st-secret-encrypted:abyss.user}
    bam.ose.configmap.common.abyss.password=$__vault{kv:DEV_EXAMPLE/A/DEV_EXAMPLE/OM/BAMN/KV:bamn-st-secret-encrypted:abyss.password}
    bam.ose.configmap.common.auth.pvm.user=$__vault{kv:DEV_EXAMPLE/A/DEV_EXAMPLE/OM/BAMN/KV:bamn-st-secret-encrypted:auth.pvm.user}
    bam.ose.configmap.common.auth.pvm.password=$__vault{kv:DEV_EXAMPLE/A/DEV_EXAMPLE/OM/BAMN/KV:bamn-st-secret-encrypted:auth.pvm.password}
    bam.ose.configmap.common.datasource.username=$__vault{kv:DEV_EXAMPLE/A/DEV_EXAMPLE/OM/BAMN/KV:bamn-st-secret-encrypted:spring.datasource.username}
    bam.ose.configmap.common.datasource.password=$__vault{kv:DEV_EXAMPLE/A/DEV_EXAMPLE/OM/BAMN/KV:bamn-st-secret-encrypted:spring.datasource.password}
    

    Для получения сертификатов из движка PKI (автовыпуск сертификатов), в конфигурационном файле bam.secman-sidecar.all.conf необходимо определить переменные:

    • Включение режима PKI для каждого типа сертификата:

      # !!! Istio, автоматическая генерация сертификатов из PKI engine vault
      secman-sidecar.ose.configmap.vault.secrets.certs.istio.source.pki=true
      # !!! OTT, автоматическая генерация клиентских сертификатов из PKI engine
      secman-sidecar.ose.configmap.vault.secrets.certs.client.ott.source.pki=true
      # !!! OTT автоматическая генерация сервисных сертификатов из PKI engine
      secman-sidecar.ose.configmap.vault.secrets.certs.server.ott.source.pki=true
      
    • Путь до движка получения секретов для каждого типа сертификата при генерации сертификатов из PKI, пример:

      # !!! Путь до движка получения клиентских сертификатов Istio (PKI/KV)
      secman-sidecar.ose.configmap.vault.secrets.certs.client.istio.source=DEV_EXAMPLE/PKI/issue/role-ga-secman-bamn
      # !!! Путь до движка получения серверных сертификатов Istio (PKI/KV)
      secman-sidecar.ose.configmap.vault.secrets.certs.server.istio.source=DEV_EXAMPLE/PKI/issue/role-ga-secman-bamn
      # !!! Путь до движка получения клиентских сертификатов OTT (PKI/KV)
      secman-sidecar.ose.configmap.vault.secrets.certs.client.ott.source=DEV_EXAMPLE/PKI/issue/role-ga-secman-bamn
      # !!! Путь до движка получения сервисных сертификатов OTT (PKI/KV)
      secman-sidecar.ose.configmap.vault.secrets.certs.server.ott.source=DEV_EXAMPLE/PKI/issue/role-ga-secman-bamn
      
    • Параметры выпуска сертификатов для каждого типа сертификата при генерации сертификатов из PKI:

      # Настройки генерации сертификатов для kafka
      secman-sidecar.ose.configmap.vault.secrets.certs.client.cn=bam-${openshiftProjectName}.${openshiftAppsDomain}
      
      # !!! Настройки генерации сертификатов для подключения к БД Postgres
      secman-sidecar.ose.configmap.vault.secrets.certs.db.cn=bam-${openshiftProjectName}.${openshiftAppsDomain}
      
      # Настройки генерации клиентских сертификатов istio egress, для vault режима (secman-sidecar.ose.configmap.vault.secrets.certs.istio.source.pki)
      secman-sidecar.ose.configmap.vault.secrets.certs.client.istio.cn=bam-${openshiftProjectName}.${openshiftAppsDomain}
      secman-sidecar.ose.configmap.vault.secrets.certs.client.istio.alt_names=bam-${openshiftProjectName}.${openshiftAppsDomain}
      secman-sidecar.ose.configmap.vault.secrets.certs.client.istio.ttl=120m
      
      # Настройки генерации серверных сертификатов istio ingress, для vault режима (secman-sidecar.ose.configmap.vault.secrets.certs.istio.source.pki)
      secman-sidecar.ose.configmap.vault.secrets.certs.server.istio.cn=bam-${openshiftProjectName}.${openshiftAppsDomain}
      secman-sidecar.ose.configmap.vault.secrets.certs.server.istio.alt_names=bam-${openshiftProjectName}.${openshiftAppsDomain}
      secman-sidecar.ose.configmap.vault.secrets.certs.server.istio.ttl=120m
      
      # !!! Настройки генерации клиентских сертификатов OTT, для vault режима (secman-sidecar.ose.configmap.vault.secrets.certs.client.ott.source.pki)
      secman-sidecar.ose.configmap.vault.secrets.certs.client.ott.cn=bam-${openshiftProjectName}.${openshiftAppsDomain}
      secman-sidecar.ose.configmap.vault.secrets.certs.client.ott.alt_names=bam-${openshiftProjectName}.${openshiftAppsDomain}
      secman-sidecar.ose.configmap.vault.secrets.certs.client.ott.ttl=120m
      
      # !!! Настройки генерации сервисных сертификатов OTT, для vault режима (secman-sidecar.ose.configmap.vault.secrets.certs.server.ott.source.pki)
      secman-sidecar.ose.configmap.vault.secrets.certs.server.ott.cn=bam-${openshiftProjectName}.${openshiftAppsDomain}
      secman-sidecar.ose.configmap.vault.secrets.certs.server.ott.alt_names=bam-${openshiftProjectName}.${openshiftAppsDomain}
      secman-sidecar.ose.configmap.vault.secrets.certs.server.ott.ttl=120m
      

    Для получения сертификатов из движка KV (key-value) в конфигурационном файле bam.secman-sidecar.all.conf необходимо определить переменные:

    • Выключить режим PKI

      # !!! Istio, автоматическая генерация сертификатов из PKI engine vault
      secman-sidecar.ose.configmap.vault.secrets.certs.istio.source.pki=false
      # !!! OTT, автоматическая генерация клиентских сертификатов из PKI engine
      secman-sidecar.ose.configmap.vault.secrets.certs.client.ott.source.pki=false
      # !!! OTT, автоматическая генерация сервисных сертификатов из PKI engine
      secman-sidecar.ose.configmap.vault.secrets.certs.server.ott.source.pki=false
      
    • Указать используемое KV для каждого типа сертификата:

      # !!! Путь до движка получения клиентских сертификатов Istio (PKI/KV)
      secman-sidecar.ose.configmap.vault.secrets.certs.client.istio.source=DEV/BAMN/OM/KV/bamn-secret-egressgateway-certs
      
      # !!! Путь до движка получения серверных сертификатов Istio (PKI/KV)
      secman-sidecar.ose.configmap.vault.secrets.certs.server.istio.source=DEV/BAMN/OM/KV/bamn-secret-ingressgateway-certs
      
      # !!! Путь до движка получения клиентских сертификатов OTT (PKI/KV)
      secman-sidecar.ose.configmap.vault.secrets.certs.client.ott.source=DEV/BAMN/OM/KV/ott-client-certs
      
      # !!! Путь до движка получения сервисных сертификатов OTT (PKI/KV)
      secman-sidecar.ose.configmap.vault.secrets.certs.server.ott.source=DEV/BAMN/OM/KV/ott-service-certs
      

    Важно: во всех KV хранилищах используемых для хранения сертификатов использовать следующие ключи (Key):

    • для корневого сертификата (CA): issuing_ca

    • для сертификата: certificate

    • для приватного ключа (private key): private_key

    • период обновления сертификата: ttl (если необходим период, отличный от общего для движка)
      В ином случае не будет корректной передачи сертификата в контейнер из KV хранилища (secrets)

    Также допустимы комбинации когда для одного из типов сертификатов включен KV (например ОТТ), а для остальных включен PKI.

    Для управления лимитами ресурсов контейнера secman (vault) предусмотрены переменные:

    # Настройки requests и limits для sidecar Vault Agent
    secman-sidecar.ose.deployment.spec.template.metadata.annotations.vault.hashicorp.com.agent-requests-cpu=50m
    secman-sidecar.ose.deployment.spec.template.metadata.annotations.vault.hashicorp.com.agent-requests-mem=64Mi
    secman-sidecar.ose.deployment.spec.template.metadata.annotations.vault.hashicorp.com.agent-limits-cpu=100m
    secman-sidecar.ose.deployment.spec.template.metadata.annotations.vault.hashicorp.com.agent-limits-mem=128Mi
    
  3. При переходе с версий (4.0, 4.1, релиз кандидатов 4.2, 5.0) на версию 5.1 с поддержкой Secman, необходимо проверить и актуализировать переменные:

    • bam.common.all.conf

      # При включённом SecMan:
      bam.ose.configmap.common.javaArguments=-Dlogging.config=/opt/logger/conf/logback.xml -XX:MaxRAMPercentage=50.0 -XshowSettings:vm
      # При выключенном SecMan:
      bam.ose.configmap.common.javaArguments=-Dlogging.config=/opt/logger/conf/logback.xml -XX:MaxRAMPercentage=50.0 -XshowSettings:vm -Dspring.config.additional-location=file:/vault/secrets/properties/application.properties
      
    • bam.administrator.conf

      administrator.ose.configmap.javaArguments=${bam.ose.configmap.common.javaArguments}
      
    • bam.pull-processing.conf

      # При включённом SecMan:
      pull-processing.ose.configmap.javaArguments=${bam.ose.configmap.common.javaArguments} -Dspring.config.additional-location=file:/etc/configs/pull-processing.properties
      # При выключенном SecMan:
      pull-processing.ose.configmap.javaArguments=${bam.ose.configmap.common.javaArguments} -Dspring.config.additional-location=file:/etc/configs/pull-processing.properties,file:/vault/secrets/properties/application.properties
      
    • bam.selector.conf

      selector.ose.configmap.javaArguments=${bam.ose.configmap.common.javaArguments}
      

Подготовка секрета с паролями#

В режиме с отключенной интеграцией Secret Management System (Secman):

  • В случае установки через pipeline cd переменные необходимо установить в зашифрованном конфигурационном файле _password.conf. Пароли запишутся автоматически в процессе установки в kubernetes. Создастся секрет bamn-secret-encrypted, в котором пароли будут зашифрованы библиотекой Jasypt, затем будут записаны в файл /vault/secrets/properties/application.properties на pod.

    Требуемые пароли:

  1. abyss.password # Пароль от Abyss

  2. auth.pvm.password # Пароль от сервиса авторизации (является частью компонента Abyss (LGDB) и отвечает за авторизацию), имя пользователя задается в общих конфигурациях bam.common.all.conf. Обращение к сервису авторизации так же авторизуется (basic аутентификация), поэтому на уровне BAMN в password.conf выставляются значения для параметров: bam.ose.configmap.common.auth.pvm.user, auth.pvm.password, bam.ose.configmap.common.auth.pvm.url

  3. spring.datasource.password # Пароль к БД, логин в параметре: spring.datasource.username

  4. bam.ssl.common.private-key-password, # Пароль к private key сертификата Abyss при использовании SSL соединения

  5. bam.ssl.common.jks-keystore-password, # Пароль от keystore-хранилища jks сертификата Abyss

  6. bam.ssl.common.jks-truststore-password, # Пароль от truststore-хранилища jks сертификата Abyss

  7. bam.ssl.database.private-key-password, # Пароль к private key сертификата БД при использовании SSL соединения

  8. bam.ssl.database.jks-keystore-password, # Пароль от keystore-хранилища jks сертификата БД

  9. bam.ssl.database.jks-truststore-password, # Пароль от truststore-хранилища jks сертификата БД

  10. bam.ssl.kafka.private-key-password, # Пароль к private key сертификата Kafka Flow при использовании SSL соединения

  11. bam.ssl.kafka.jks-keystore-password, # Пароль от keystore-хранилища jks сертификата Kafka Flow

  12. bam.ssl.kafka.jks-truststore-password # Пароль от truststore-хранилища jks сертификата Kafka Flow

В режиме с включенной интеграцией Secret Management System (Secman):

  • создать KV хранилище секретов, см. SecMan. Управление секретами и сертификатами.

  • помимо паролей нужно указать имена пользователей для возможности использования механизма hot reload. Подробнее о механизме hot reload указано в Руководство по безопасности.

    Требуемые ключи:

  1. auth.pvm.user # Логин для сервиса авторизации (является частью компонента Abyss (LGDB) и отвечает за авторизацию)

  2. auth.pvm.password # Пароль от сервиса авторизации

  3. spring.datasource.user # Логин для БД

  4. spring.datasource.password # Пароль к БД

  5. bam.common.sslpassword # Пароль к private key сертификатов Abyss при использовании SSL соединения

  6. bam.datasource.sslpassword # Пароль к private key сертификатов БД при использовании SSL соединения

  7. bam.kafka.sslpassword # Пароль к private key сертификатов Kafka Flow при использовании SSL соединения

  8. jasypt_key # Ключ шифрования паролей (должен быть пустым, если в KV храним не шифрованные jasypt пароли, и должен быть заполнен если пароли зашифрованы через jasypt)

  9. abyss.user # Логин для Abyss (должен быть пустым, если авторизация в Abyss по JWT-токену и должен быть заполнен, если авторизация в Abyss по логину/паролю)

  10. abyss.password # Пароль от Abyss (должен быть пустым, если авторизация в Abyss по JWT-токену и должен быть заполнен, если авторизация в Abyss по логину/паролю)

Подготовка базы данных#

Для BAMN требуется подготовленный экземпляр базы данных и пререквизиты: схема, два табличных пространства и пользователи. Для их создания нужно запустить команды из скрипта database.sql, подставив значения в переменные <<id_user_name>>, <<id_db_name>> и <<id_schema_name>> и указав пароли вместо 'you_password'.

Имя созданной схемы указывается в параметре BAM_POSTGRES_SCHEMA из common.conf.yml

Пользователи:

  • для DDL операций при раскатке liquibase, по умолчанию: bam_migrator, указывается в параметре BAM_POSTGRES_USER;

  • для работы приложения, по умолчанию: bam_user, в случае работы без secman, указывается в параметре spring.datasource.username;

  • для работы приложения (со сменой пароля через Secman), по умолчанию: bam_user_secman, в случае работы с secman, указывается в параметре spring.datasource.username.

Табличные пространства:

  • для хранения индексов, по умолчанию: bam_ts_idx, указывается в параметре BAM_POSTGRES_TS_IDX;

  • для хранения данных, по умолчанию: bam_ts_data, указывается в параметре BAM_POSTGRES_TS_DATA.

Требуется настроить параметры (common.conf.yml):

  1. Для liquibase добавить в common репозитории параметры с пользователем для создания таблиц:

  • BAM_POSTGRES_URL. Например: jdbc:postgresql://URL/bam_db;

  • BAM_POSTGRES_SCHEMA. Целевая схема, по умолчанию: bam;

  • BAM_POSTGRES_USER. Логин, по умолчанию: bam_migrator;

  • BAM_POSTGRES_PASS. Пароль от bam_migrator;

  • BAM_POSTGRES_TS_IDX. Табличное пространство индексов, по умолчанию: bam_ts_idx;

  • BAM_POSTGRES_TS_DATA Табличное пространство данных, по умолчанию: bam_ts_data.

  1. Параметры пользователя для работы сервисов (заполняются в conf файлах каждого сервиса) bam.administrator.conf, bam.pull-processing.conf, bam.selector.conf)

  • spring.datasource.url. Например: jdbc:postgresql://URL/bam_db;

  • spring.datasource.username. Логин, по умолчанию: bam_user, либо, при использовании secman, bam_user_secman;

  • spring.datasource.password. Пароль от bam_user, либо, при использовании secman, пароль от bam_user_secman, обязательно добавить этот параметр в password.conf чтобы этот параметр попал в секреты сервиса.

Настройка общей конфигурации всех сервисов в составе продукта (Administrator, Selector, Pull processing)#

Первый этап:

Заполнение custom_property.conf.yml. Содержит обязательные параметры настройки:

  • BAM_USE_SERVICE_TO_BALANCER

  • BAM_DB_CLUSTER

  • BAM_KAFKA_SERVERS

  • BAM_KAFKA_SOURCES

  • BAM_OTT_OSE_DEPLOY (перевести в false, если отсутствует ОТТ)

    Каждая настройка описана в самом custom_property.conf.yml (располагается вместе с параметрами конфигурационных файлов, папка: «pipeline») с примерами заполнения. Параметр BAM_USE_SERVICE_TO_по умолчанию не обязателен к заполнению если у каждого внешнего сервиса используется уникальное доменное имя. Параметр BAM_USE_SERVICE_TO, заполняется только в случаях, если внешние сервисы находятся за HTTP балансировщиком, который перенаправляет запросы на соответствующий сервис при обращении на порт/префикс пути адреса. При этом необходимо заполнить bam.istio.all.conf.

# Имя хоста балансера, за которым находятся HTTP сервисы (например: Platform V Monitor Abyss, Platform V Audit SE, аутентификация, авторизация)
bam.ose.istio.egress.common.balancer.hostname=

Второй этап:

  • Настроить bam.common.all.conf ("!!!" - отмечены критические настройки)

### Параметры Abyss
# Сервис Abyss (не менять!!! используется динамическое формирование из переменных конф. файла: bam.istio.all.conf)
bam.ose.configmap.common.abyss.apiUrl=http://${bam.ose.istio.egress.common.abyss.host}:${bam.ose.istio.egress.common.abyss.gateway-port}/${bam.ose.istio.egress.common.abyss.endpoint}


### Аутентификация
# !!! URL KeyCloak, чьи JWT токены считаются валидными. Валидация проходит по полю ISSUER в JWT токене
bam.ose.configmap.common.auth.issuer-uri=https://st-keycloak-01.opsmon.example:8443/auth/realms/PlatformAuth
# Хранилище ключей jwks (не менять!!! используется динамическое формирование из переменных конф. файла: bam.istio.all.conf)
bam.ose.configmap.common.auth.jwk-set-uri=http://${bam.ose.istio.egress.common.authentication.host}:${bam.ose.istio.egress.common.authentication.gateway-port}/${bam.ose.istio.egress.common.authentication.endpoint}

### Авторизация через PVM сервис авторизации
# Сервис авторизации (не менять!!! используется динамическое формирование из переменных конф. файла: bam.istio.all.conf)
bam.ose.configmap.common.auth.pvm.url=http://${bam.ose.istio.egress.common.authorization.host}:${bam.ose.istio.egress.common.authorization.gateway-port}/${bam.ose.istio.egress.common.authorization.endpoint}
# !!! Логин-пароль для доступа к авторизации
bam.ose.configmap.common.auth.pvm.user=user
# auth.pvm.password пароль задается в _passwords.conf
# Namespace и тип ресурса, соответствующие ролевой модели BAM
bam.ose.configmap.common.auth.pvm.namespace=PVM_BASIC_NAMESPACE
bam.ose.configmap.common.auth.pvm.resource-type=PROJECT
# Параметры ролевой модели для определения суперадмина
bam.ose.configmap.common.auth.pvm.super-admin.namespace=PVM_ADMINS
bam.ose.configmap.common.auth.pvm.super-admin.resource-type=ADMIN_PRIVILEGES
bam.ose.configmap.common.auth.pvm.super-admin.resource-name=ADMIN_PRIVILEGES_RESOURCE_ID
# Включен ли маппинг проектов (rn) на их ID в Abyss
bam.ose.configmap.common.auth.pvm.abyss.id.mapping=true
# Время жизни кеша ответа от сервиса авторизации в секундах
bam.ose.configmap.common.auth.pvm.cache-live-time-in-seconds=10

### Параметры базы данных
# !!! Заполнить значениями из словаря BAM_DB_CLUSTER в custom_property.conf.yml
# заполнять в формате host:gateway_port, например для: BAM_DB_CLUSTER: [{host: "psql-1.ca.345.ru", gateway_port: 8101, internal_egress_port: 7101, destination_port: 6543},{host: "psql-2.ca.345.ru", gateway_port: 8102, internal_egress_port: 7102, destination_port: 6545},{host: "psql-3.ca.345.ru", gateway_port: 8103, internal_egress_port: 7103, destination_port: 6543},{host: "psql-4.ca.345.ru", gateway_port: 8104, internal_egress_port: 7104, destination_port: 6543}]
# описано четыре хоста postgresql в разных регионах:
# BAM_DB_CLUSTER: [
# {host: "psql-1.ca.345.ru", gateway_port: 8101, internal_egress_port: 7101, destination_port: 6543},
# {host: "psql-2.ca.345.ru", gateway_port: 8102, internal_egress_port: 7102, destination_port: 6545},
# {host: "psql-3.ca.345.ru", gateway_port: 8103, internal_egress_port: 7103, destination_port: 6543},
# {host: "psql-4.ca.345.ru", gateway_port: 8104, internal_egress_port: 7104, destination_port: 6543}]
# И потому строка подключения будет содержать 4 хоста и каждому хосту соотвествует свой gateway_port (порт для маркировки трафика из pod на БД)
# bam.ose.configmap.common.datasource.db_hosts=psql-1.ca.345.ru:8101,psql-2.ca.345.ru:8102,psql-3.ca.345.ru:8103,psql-4.ca.345.ru:8104
bam.ose.configmap.common.datasource.db_hosts=
# !!! Имя БД
bam.ose.configmap.common.datasource.db_name=pvmadm
# Подключение к БД (!!! не менять, используется динамическое формирование из переменных bam.ose.configmap.common.datasource.db_hosts и bam.ose.configmap.common.datasource.db_name)
bam.ose.configmap.common.datasource.url=jdbc:postgresql://${bam.ose.configmap.common.datasource.db_hosts}/${bam.ose.configmap.common.datasource.db_name}?targetServerType=master&prepareThreshold=0
# !!! Админ пользователь БД
bam.ose.configmap.common.datasource.username=pvm_administrator
# !!! Пароль к БД. С включенным secman -- получение из него, с выключенным -- оставить пустым
bam.ose.configmap.common.datasource.password=$__vault{kv:DEV_EXAMPLE/A/DEV_EXAMPLE/OM/BAMN/KV:bamn-st-secret-encrypted:spring.datasource.password}
# !!! Схема БД
bam.ose.configmap.common.datasource.schema=bam
# Параметры подключения
bam.ose.configmap.common.datasource.hikari.maximumPoolSize=5
bam.ose.configmap.common.datasource.hikari.connectionTimeout=30000
bam.ose.configmap.common.datasource.hikari.idleTimeout=600000
# Включение клиентского пула соединений к БД
# параметр должен стоять в true, если подключение напрямую к БД (например, порт 5433) или через haproxy к pgbouncer (например, порт 5101)
# параметр должен стоять в false, если подключение к pgbouncer (например, порт 6544) 
bam.ose.configmap.common.datasource.client.pool.enabled=false

### Настройки для подключения к БД через SSL
# Настройки для подключения к БД через SSL на pod
bam.ose.configmap.common.datasource.ssl=true
# https://jdbc.postgresql.org/documentation/head/ssl-client.html
# disable, allow, prefer, require, verify-ca, verify-full
bam.ose.configmap.common.datasource.sslmode=verify-full

# !!! Пути к PEM сертификатам в common репозитории для БД postgresql на их основе будет создан секрет bamn-secret-db-certs
# корневой (CA) сертификат в формате PEM
bam.ose.secret.datasource.ssl.ca.location=ansible/files/ssl/postgresql_ca.crt
# клиентский сертификат в формате PEM
bam.ose.secret.datasource.ssl.cert.location=ansible/files/ssl/postgresql.crt
# private key в формате PEM, должен содержать в себе клиентский сертификат (после private key)
bam.ose.secret.datasource.ssl.key.location=ansible/files/ssl/postgresql.key

# Путь к корневому сертификату БД в pod (!!! менять только в случае явных рекомендаций !!!)
bam.ose.configmap.common.ssl.rootcert=/etc/ssl/certs/caCertificates.pem

### Аудит
# Сервис аудита (не менять!!! используется динамическое формирование из переменных конф. файла: bam.istio.all.conf)
bam.ose.configmap.common.audit.proxy.url=http://${bam.ose.istio.egress.common.audit.host}:${bam.ose.istio.egress.common.audit.gateway-port}/${bam.ose.istio.egress.common.audit.endpoint}
# Включение/выключение аудита, можно выключать только на DEV-стендах!
bam.ose.configmap.common.audit.enabled=true
bam.ose.configmap.common.audit.nodeId=${projectName}.${appsDomain}
bam.ose.configmap.common.audit.module=bamn

# !!! Путь хранилищу сертификатов common.jks в common репозитории
# на их основе будет создан секрет bamn-secret-common-certs
bam.ose.configmap.common.keystore.location=ansible/files/ssl/st-abyss.keystore.jks

bam.ose.configmap.common.ssl.trust-all=false

# !!! Путь к корневому сертификату (root CA) в common-репозитории
bam.ose.secret.common.root.cert.location=ansible/files/ssl/root.crt

# Имя Image pull Secret для получения образов из registry
bam.ose.deployment.common.spec.template.spec.imagePullSecrets.name=nexus-bam

# Настройка Security Context: ID пользователя в контейнере
# Все процессы во всех контейнерах pod'а будут выполнятся с указанным ID пользователя
bam.ose.deployment.common.spec.template.spec.securityContext.runAsUser=1001930000
# Настройка Security Context: Group ID овнера файлов в Volume.
# Определяет группу, в которой Kubernetes будет изменять разрешения для всех файлов в томах, когда тома монтируются в Pod
bam.ose.deployment.common.spec.template.spec.securityContext.fsGroup=${bam.ose.deployment.common.spec.template.spec.securityContext.runAsUser}

# Путь до каталога с образами компонента PV в репозитории заказчика
bam.ose.deployment.spec.template.spec.containers.image.registryPath=/sbt/ci90000085_bam

# Ссылка на registry url образов
bam.ose.registry.url={{ registry }}

Настройки SSL#

# подключение с использованием SSL контекста PVM
bam.ose.configmap.common.ssl.enabled=true

Для выключенного Secman:

Для сертификатов указываем пути монтирования сертификатов на pod, пароли оставляем пустыми.

Формат сертификатов может быть JKS или PEM.

# Настройки common SSL контекста (для подключения к Abyss и сервису авторизации)
# формат сертификатов (JKS или PEM), по умолчанию PEM
bam.ose.configmap.common.ssl.common.certificates-format=PEM
# если формат PEM, заполнить следующие переменные, остальные оставить пустыми:
bam.ose.configmap.common.ssl.common.client-certificate=/vault/secrets/certs/db/clientCertificate.pem
bam.ose.configmap.common.ssl.common.private-key=/vault/secrets/certs/db/privateKey.pem
bam.ose.configmap.common.ssl.common.private-key-password=
# если формат JKS, заполнить следующие переменные, остальные оставить пустыми:
bam.ose.configmap.common.ssl.common.jks-keystore=/vault/secrets/certs/client/common.jks
bam.ose.configmap.common.ssl.common.jks-keystore-password=
bam.ose.configmap.common.ssl.common.jks-truststore=/vault/secrets/certs/client/common.jks
bam.ose.configmap.common.ssl.common.jks-truststore-password=

# Настройки common SSL контекста (для подключения к БД)
# формат сертификатов (JKS или PEM), по умолчанию PEM
bam.ose.configmap.common.ssl.database.certificates-format=
# если формат PEM, заполнить следующие переменные, остальные оставить пустыми:
bam.ose.configmap.common.ssl.database.client-certificate=/vault/secrets/certs/db/clientCertificate.pem
bam.ose.configmap.common.ssl.database.private-key=/vault/secrets/certs/db/privateKey.pem
bam.ose.configmap.common.ssl.database.private-key-password=
# если формат JKS, заполнить следующие переменные, остальные оставить пустыми:
bam.ose.configmap.common.ssl.database.jks-keystore=/vault/secrets/certs/client/common.jks
bam.ose.configmap.common.ssl.database.jks-keystore-password=
bam.ose.configmap.common.ssl.database.jks-truststore=/vault/secrets/certs/client/common.jks
bam.ose.configmap.common.ssl.database.jks-truststore-password=

Для включенного Secman:

Указываем пути до сертификатов и паролей в хранилище (KV или PKI).

Формат сертификатов может быть только PEM.

Настройки common SSL контекста (для подключения к Abyss и сервису авторизации)
bam.ose.configmap.common.ssl.common.certificates-format=PEM
# Заполнить следующие переменные, вариант для PKI:
bam.ose.configmap.common.ssl.common.client-certificate=$__vault{pki:${secman-sidecar.ose.configmap.pvm.vault.pki.path}:${secman-sidecar.ose.configmap.vault.config.auto_auth.method.config.role}:${secman-sidecar.ose.configmap.vault.secrets.certs.client.cn}:certificate}
bam.ose.configmap.common.ssl.common.private-key=$__vault{pki:${secman-sidecar.ose.configmap.pvm.vault.pki.path}:${secman-sidecar.ose.configmap.vault.config.auto_auth.method.config.role}:${secman-sidecar.ose.configmap.vault.secrets.certs.client.cn}:private_key}
bam.ose.configmap.common.ssl.common.private-key-password=$__vault{kv:DEV_EXAMPLE/A/DEV_EXAMPLE/OM/BAMN/KV:bamn-st-secret-encrypted:bam.common.sslpassword}
# Заполнить следующие переменные, вариант для KV:
bam.ose.configmap.common.ssl.common.client-certificate=$__vault{kv:DEV_EXAMPLE/A/DEV_EXAMPLE/OM/BAMN/KV:bamn-secret-common-certs::certificate}
bam.ose.configmap.common.ssl.common.private-key=$__vault{kv:DEV_EXAMPLE/A/DEV_EXAMPLE/OM/BAMN/KV:bamn-secret-common-certs:private-key}
bam.ose.configmap.common.ssl.common.private-key-password=$__vault{kv:DEV_EXAMPLE/A/DEV_EXAMPLE/OM/BAMN/KV:bamn-st-secret-encrypted:bam.common.sslpassword}
# Эти переменные оставить пустыми:
bam.ose.configmap.common.ssl.common.jks-keystore=
bam.ose.configmap.common.ssl.common.jks-keystore-password=
bam.ose.configmap.common.ssl.common.jks-truststore=
bam.ose.configmap.common.ssl.common.jks-truststore-password=

# Настройки common SSL контекста (для подключения к БД)
bam.ose.configmap.common.ssl.database.certificates-format=PEM
# Заполнить следующие переменные, вариант для PKI:
bam.ose.configmap.common.ssl.database.client-certificate=$__vault{pki:${secman-sidecar.ose.configmap.pvm.vault.pki.path}:${secman-sidecar.ose.configmap.vault.config.auto_auth.method.config.role}:${secman-sidecar.ose.configmap.vault.secrets.certs.db.cn}:certificate}
bam.ose.configmap.common.ssl.database.private-key=$__vault{pki:${secman-sidecar.ose.configmap.pvm.vault.pki.path}:${secman-sidecar.ose.configmap.vault.config.auto_auth.method.config.role}:${secman-sidecar.ose.configmap.vault.secrets.certs.db.cn}:private_key}
bam.ose.configmap.common.ssl.database.private-key-password=$__vault{kv:DEV_EXAMPLE/A/DEV_EXAMPLE/OM/BAMN/KV:bamn-st-secret-encrypted:bam.datasource.sslpassword}
# Заполнить следующие переменные, вариант для KV:
bam.ose.configmap.common.ssl.database.client-certificate=$__vault{kv:DEV_EXAMPLE/A/DEV_EXAMPLE/OM/BAMN/KV:bamn-secret-db-certs::certificate}
bam.ose.configmap.common.ssl.database.private-key=$__vault{kv:DEV_EXAMPLE/A/DEV_EXAMPLE/OM/BAMN/KV:bamn-secret-db-certs:private-key}
bam.ose.configmap.common.ssl.database.private-key-password=$__vault{kv:DEV_EXAMPLE/A/DEV_EXAMPLE/OM/BAMN/KV:bamn-st-secret-encrypted:bam.datasource.sslpassword}
# Эти переменные оставить пустыми:
bam.ose.configmap.common.ssl.database.jks-keystore=
bam.ose.configmap.common.ssl.database.jks-keystore-password=
bam.ose.configmap.common.ssl.database.jks-truststore=
bam.ose.configmap.common.ssl.database.jks-truststore-password=
  • Настроить bam.istio.all.conf

Указываем используемый образ для Istio. Для Openshift использовать:

# !!! Путь до образа Istio Envoy ({{ registry }}{{ registry path }}ci90000162_syigeg/istio/proxyv2:istio-release-1.6.14-se-release-1.2.2)
bam.ose.istio.envoy-image=${bam.ose.registry.url}${global.envoy.image.registry.path}/proxyv2@sha256:f9c01f40cb0ea0cf88a94ff21c1246491fdf42b935b40db7f619c71b1fe76587

Для Kubernetes использовать:

### Параметры istio
# Путь до образа Istio Envoy
bam.ose.istio.envoy-image={{ registry }}{{ registry path }}ci90000051_synai_dev/istio_se_dev/proxyv2:1.12.1.2

Указать контроль панель Istio, наименование сервиса контроль панели и используемый порт

### Параметры istio
# !!! Istio Control plane
bam.ose.istio.control-plane-project=${global.ufs.synapse.controlPlane.project}

################# ConfigMap parameters

# Адрес подключения сервиса mTLS
bam.ose.istio.common.istio-basic.discoveryAddress=istiod-basic.${bam.ose.istio.control-plane-project}.svc:15012

Дальнейшие настройки Istio см. в разделе «Настройка конфигурации Istio для подключаемых внешних сервисов».

  • Настроить bam.administrator.conf

  • Настроить bam.pull-processing.conf

Для выключенного Secman:

Для сертификатов указываем пути монтирования сертификатов на pod, пароли оставляем пустыми.

Формат сертификатов может быть JKS или PEM.

# Настройки SSL контекста для подключения к Kafka
pull-processing.ose.configmap.ssl.kafka.certificates-format=
# если формат PEM, заполнить следующие переменные, остальные оставить пустыми:
pull-processing.ose.configmap.ssl.kafka.client-certificate=/vault/secrets/certs/client/clientCertificate.pem
pull-processing.ose.configmap.ssl.kafka.private-key=/vault/secrets/certs/client/privateKey.pem
pull-processing.ose.configmap.ssl.kafka.private-key-password=
# если формат JKS, заполнить следующие переменные, остальные оставить пустыми:
pull-processing.ose.configmap.ssl.kafka.jks-keystore=/etc/config/ssl/common.jks
pull-processing.ose.configmap.ssl.kafka.jks-keystore-password=
pull-processing.ose.configmap.ssl.kafka.jks-truststore=/etc/config/ssl/common.jks
pull-processing.ose.configmap.ssl.kafka.jks-truststore-password=

Для включенного Secman:

Указываем пути до сертификатов и паролей в хранилище (KV или PKI).

Формат сертификатов может быть только PEM.

# Настройки SSL контекста для подключения к Kafka
pull-processing.ose.configmap.ssl.kafka.certificates-format=PEM
# Заполнить следующие переменные, вариант для PKI:
pull-processing.ose.configmap.ssl.kafka.client-certificate=$__vault{pki:${secman-sidecar.ose.configmap.pvm.vault.pki.path}:${secman-sidecar.ose.configmap.vault.config.auto_auth.method.config.role}:${secman-sidecar.ose.configmap.vault.secrets.certs.client.cn}:certificate}
pull-processing.ose.configmap.ssl.kafka.private-key=$__vault{pki:${secman-sidecar.ose.configmap.pvm.vault.pki.path}:${secman-sidecar.ose.configmap.vault.config.auto_auth.method.config.role}:${secman-sidecar.ose.configmap.vault.secrets.certs.client.cn}:private_key}
pull-processing.ose.configmap.ssl.kafka.private-key-password=$__vault{kv:DEV_EXAMPLE/A/DEV_EXAMPLE/OM/BAMN/KV:bamn-st-secret-encrypted:bam.kafka.sslpassword}
# Заполнить следующие переменные, вариант для KV:
pull-processing.ose.configmap.ssl.kafka.client-certificate=$__vault{kv:DEV_EXAMPLE/A/DEV_EXAMPLE/OM/BAMN/KV:bamn-secret-common-certs::certificate}
pull-processing.ose.configmap.ssl.kafka.private-key=$__vault{kv:DEV_EXAMPLE/A/DEV_EXAMPLE/OM/BAMN/KV:bamn-secret-common-certs:private-key}
pull-processing.ose.configmap.ssl.kafka.private-key-password=$__vault{kv:DEV_EXAMPLE/A/DEV_EXAMPLE/OM/BAMN/KV:bamn-st-secret-encrypted:bam.kafka.sslpassword}
# Эти переменные оставить пустыми:
pull-processing.ose.configmap.ssl.kafka.jks-keystore=
pull-processing.ose.configmap.ssl.kafka.jks-keystore-password=
pull-processing.ose.configmap.ssl.kafka.jks-truststore=
pull-processing.ose.configmap.ssl.kafka.jks-truststore-password=
  • Настроить bam.selector.conf

  • Настроить bam.fluent-bit-sidecar.all.conf и pvm.service.fluent-bit.all.conf (настройка журналирования)

  • Настроить bam.openjdk-init-container.all.conf (запускаемый контейнер для подготовки конфигурации журналирования)

  • Настроить bam.ott-sidecar.all.conf и pvm.service.ott.all.conf (опционально, при наличии)

  • Настроить bam.secman-sidecar.all.conf (опционально, при наличии)

Все вышеперечисленные файлы расположены в config/parameters. Все конфигурации в дистрибутиве сопровождаются комментариями и содержат примеры. Все обязательные для настройки параметры выделены отметкой «!!!»

Настройка конфигурации Istio для подключаемых внешних сервисов#

Для взаимодействия с внешними сервисами, BAMN использует ingress/egress Istio.

Для настройки интеграции с другими сервисами внести следующие обязательные ingress/egress параметры в файл bam.istio.all.conf:

  • компонент Indicator (INDA):

################# Ingress parameters

# !!! Добавляет проверку Subject Alternative Name сертификатов клиентов.
# Нужно вписать два сертифката - от indicator и АС Советчик
# Параметры IFT: bam.ose.istio.ingress.gateway.spec.servers.tls.subjectAltNames=[вставить свои URL]
bam.ose.istio.ingress.gateway.spec.servers.tls.subjectAltNames=[]
  • компонент Abyss (LGDB)

# !!! Host abyss
bam.ose.istio.egress.common.abyss.host=вставить необходимый Host
# !!! Endpoint abyss: coordinator/api/gateway/v1
bam.ose.istio.egress.common.abyss.endpoint=coordinator/api/gateway/v1
# !!! Внешний порт istio для abyss
bam.ose.istio.egress.common.abyss.port=443
  • Platform V Audit SE (AUD)

# !!! Параметры istio для аудита.
bam.ose.istio.egress.common.audit.host=вставить необходимый Host
# !!! Endpoint audit
bam.ose.istio.egress.common.audit.endpoint=
# !!! Внешний порт istio для audit
bam.ose.istio.egress.common.audit.port=443
  • Сервис аутентификации (Platform V IAM SE (IAM))

# !!! Параметры istio для аутентификации
bam.ose.istio.egress.common.authentication.host=вставить необходимый Host

# !!! Endpoint аутентификации: auth/realms/PlatformAuth/protocol/openid-connect/certs
bam.ose.istio.egress.common.authentication.endpoint=auth/realms/PlatformAuth/protocol/openid-connect/certs
# !!! Внешний порт istio для аутентификации
bam.ose.istio.egress.common.authentication.port=443
  • Авторизация (сервис авторизации)

# !!! Параметры istio для сервиса авторизации
bam.ose.istio.egress.common.authorization.host=вставить необходимый Host
# !!! Endpoint авторизации: адрес endpoint
bam.ose.istio.egress.common.authorization.endpoint=v1
# !!! Внешний порт istio для авторизации
bam.ose.istio.egress.common.authorization.port=443
  • Kafka

# !!! Заполнить все IP брокеров kafka
bam.ose.istio.egress.se.spec.addresses.kafka=[IP адреса Kafka]
  • БД Platform V Pangolin SE (PSQ) или PostgreSQL в конфигурационном файле custom_property.conf.yml заполнить список серверов:

# !!! (обязательно для заполнения) Список серверов в кластере БД (postgresql), минимальное значение: один сервер
# Для каждого сервера в кластере БД описываем путь прохождения трафика:
# BAM_DB_CLUSTER: [{host: "psql-1.ca.345.ru", gateway_port: 8101, internal_egress_port: 7101, destination_port: 6543},{host: "psql-2.ca.345.ru", gateway_port: 8102, internal_egress_port: 7102, destination_port: 6545},{host: "psql-3.ca.345.ru", gateway_port: 8103, internal_egress_port: 7103, destination_port: 6543},{host: "psql-4.ca.345.ru", gateway_port: 8104, internal_egress_port: 7104, destination_port: 6543}]
# host - hostname сервера, gateway_port - порт для всех запросов из pod на сервер БД, internal_egress_port - внутренний порт на egress, destination_port - порт на сервере БД
# gateway_port и internal_egress_port должны быть уникальны и не пересекаться с уже используемыми портами на egress
BAM_DB_CLUSTER:

Настройка журналирования#

Установленные конфигурации для конфигурационных файлов: Administrator, Selector, Pull-processing - не требуют изменений или особой настройки. Настройка параметров журналирования осуществляется в конфигурационных файлах - bam.fluent-bit-sidecar.all.conf и pvm.service.fluent-bit.all.conf. Пример конфигурации ниже (!!! – отмечены обязательные для заполнения параметры):

pvm.service.fluent-bit.all.conf

# config file fluent-bit-sidecar

# !!! Путь до образа
pvm.fluent-bit-sidecar.image=${global.registry.url}${pvm.fluent-bit-sidecar.ose.deployment.spec.template.spec.containers.image.registryPath}/fluent-bit@sha256:324eb1add54dd06bee70c0dd20c47b8ad328ded4c266ca7538088ba9a39a4a1d
pvm.fluent-bit-sidecar.ose.deployment.spec.template.spec.containers.image.registryPath=/sbt/ci90000078_loga/loga

# Параметры fluent-controller
# Перечитывать конфигурацию fluent-bit
logger.fluentbit-sidecar.conf.reload.enabled=true
# Использовать механизм Secman Hotreload
logger.fluentbit-sidecar.vault.reload.enabled=true
# Аргументы запуска приложения через jvm переменную JAVA_OPTS
logger.fluentbit-sidecar.configmap.javaArguments=-XX:+UseContainerSupport -Xmx50m

# Secrets
#путь к клиентскому сертификату и приватному ключу (сюда будут сохраняться сертификат и ключ при интеграции с Secman)
logger.fluentbit-sidecar.certs.path=/vault/secrets/certs/fluent
#путь к корневому сертификату
logger.fluentbit-sidecar.root.path=/etc/ssl/certs/caCertificates.pem

# Параметры ресурсов для sidecar
fluent-bit-sidecar.ose.deployment.spec.template.spec.containers.fluent-bit-sidecar.resources.requests.cpu=200m
fluent-bit-sidecar.ose.deployment.spec.template.spec.containers.fluent-bit-sidecar.resources.requests.memory=200Mi
fluent-bit-sidecar.ose.deployment.spec.template.spec.containers.fluent-bit-sidecar.resources.limits.cpu=200m
fluent-bit-sidecar.ose.deployment.spec.template.spec.containers.fluent-bit-sidecar.resources.limits.memory=400Mi

#################  Configuration

# !!! Пути к хранилищам сертификатов Kafka Logger в common репозитории
# Используется при отсутствии интеграции с Secman
fluent-bit-sidecar.ose.secret.kafka.keystore.location=ansible/files/ssl/st-abyss.keystore.jks

# !!! Пароль к JKS (хранилищам сертификатов Kafka Logger)
# данный пароль должен быть заполнен в _passwords.conf среды. Используется для расшифровки JKS указанного в fluent-bit-sidecar.ose.secret.kafka.keystore.location
fluent-bit-sidecar.ose.secret.kafka.keystore.password=pvm.ssl.logger.store.password
# !!! Alias клиентского сертификата (для JKS указанного в fluent-bit-sidecar.ose.secret.kafka.keystore.location)
fluent-bit-sidecar.ose.secret.kafka.keystore.cert.alias=host
# !!! Alias root сертификата (для JKS указанного в fluent-bit-sidecar.ose.secret.kafka.keystore.location)
fluent-bit-sidecar.ose.secret.kafka.keystore.root.alias=root

fluent-bit-sidecar.ose.configmap.kafka.protocol=SSL
# размер буфера
fluent-bit-sidecar.ose.configmap.buffering.max.kbytes=5120

# Пути к сертификатам, используются в конфигурации fluentbit
fluent-bit-sidecar.ose.configmap.kafka.key=/vault/secrets/certs/fluent/private-key.pem
fluent-bit-sidecar.ose.configmap.kafka.cert=/vault/secrets/certs/fluent/cert.pem
fluent-bit-sidecar.ose.configmap.kafka.cacert=${logger.fluentbit-sidecar.root.path}

# Уровень логирования
fluent-bit-sidecar.ose.configmap.kafka.log.level=6

#################  Configuration end

bam.fluent-bit-sidecar.all.conf

#################  FluentBit Configuration

# !!! Параметры kafka журналирования
# fluent-bit-sidecar.ose.configmap.kafka.bootstrap.servers=kafka-7.ca.example.ru:9093,kafka-8.ca.example.ru:9093,kafka-7.ca.example.ru:9093
fluent-bit-sidecar.ose.configmap.kafka.bootstrap.servers=st-abyss-kafka-01.opsmon.example:9093,st-abyss-kafka-02.opsmon.example:9093,st-abyss-kafka-03.opsmon.example:9093

# !!! Топик kafka журналирования
fluent-bit-sidecar.ose.configmap.kafka.topic=uLogger.qwerty
fluent-bit-sidecar.ose.configmap.tenant.code=BAM

# Клиентский сертификат для pvm-common библиотеки в fluent-bit-sidecar, копируется в /vault/secrets/certs/fluent/cert.pem
# Указывать только в случае, если включена интеграция с Vault, иначе оставить пустой
fluent-bit-sidecar.ose.secret.cert.pem=$__vault{kv:DEV_EXAMPLE/A/DEV_EXAMPLE/OM/BAMN/KV:bamn-secret-logger-kafka-certs:certificate}

# Приватный ключ для pvm-common библиотеки в fluent-bit-sidecar, копируется в /vault/secrets/certs/fluent/private-key.pem
# Указывать только в случае, если включена интеграция с Vault, иначе оставить пустой
fluent-bit-sidecar.ose.secret.private-key.pem=$__vault{kv:DEV_EXAMPLE/A/DEV_EXAMPLE/OM/BAMN/KV:bamn-secret-logger-kafka-certs:private_key}

#################  Configuration end

Журналирование опционально выключить нельзя, Sidecar поднимается всегда.

Настройка мониторинга#

Необходимо в пространстве BAMN реализовать шаги, прописанные в инструкции по установке компонента Объединенный мониторинг Unimon (MONA) (в составе дистрибутива UNIMON). В рамках BAMN реализуется следующий сценарий мониторинга:

  1. BAMN выставляет метрики в формате Prometheus.

  2. Unimon-agent собирает метрики.

  3. Unimon-sender отправляет метрики в хранилище

Для передачи метрик в Объединенный мониторинг Unimon (MONA) на стороне BAMN в среде контейнеризации устанавливаются сервисы (для Administrator, Selector, Pull processing) с использованием библиотеки Micrometer. Метрики BAMN отображаются через http-endpoint actuator/prometheus, пример сервиса отображен ниже:

kind: Service
apiVersion:
metadata:
  name: bamn-svc-administrator-micrometer
  namespace: <>
  uid: <>
  resourceVersion:
  creationTimestamp: <>
  labels:
    app: bamn-administrator
    CHANNEL: unimon
    jenkinsDeployUser: <>
    standardReleaseVersion: <>
    SUBSYSTEM: <>
    distribVersion: <>
    deployDate: <>
    ENVIR: <>
    distribReleaseVersion: <>
    version: <>
    jenkinsDeployId: <>
  annotations:
    description: Exposes Micrometer-Prometheus Administrator
    prometheus.io.path: /actuator/prometheus
    prometheus.io.port: <>
    prometheus.io.scrape: 'true'

Раскатка сервиса#

После выполнения всех подготовительных шагов, выполнить раскатку сервиса: Необходимые playbook:

  • MIGRATION_FP_CONF

  • DB_UPDATE

  • OPENSHIFT_INGRESS_EGRESS_DEPLOY

  • OPENSHIFT_DEPLOY

  • DEBUG (опционально, для подробных логов при отладке)

Проверка раскатки и диагностика#

После и во время раскатки сервиса через job pipeline необходимо произвести проверку результата выполнения (см. Чек-лист валидации установки).

Должно быть развернуто 3 сервиса BAMN (Administrator, Pull processing, Selector).

Количество pods может меняться и задается в конфигурации сервисов параметром replicas.

После развертывания необходимо проверить наличие исключений в логах сервисов и sidecars, так как не все проблемы могут быть обнаружены через стандартный healthcheck kubernetes (liveness probe, Readiness probe).

Для проверки доступности сервисов через Istio выполнить запрос на базовый endpoint сервиса selector (адрес можно получить в разделе Networking > Routes в OSE или в манифесте kind:Ingress для k8s):

curl -sSvk https://<хост ingress>/selector/ --cert bam.cer --key bam.key

Необходимо иметь файлы сертификатов если Istio настроен в режиме mutual TLS.

Ожидаемый ответ – текстовое сообщение с приветствием пользователя.

В случае ошибок диагностировать по логам соответствующих сервисов.

Чек-лист по наличию файлов с ключами и сертификатами#

Необходимо проверить наличие нижеперечисленных файлов с сертификатами:

  1. Запущены сервисные pods Istio и наличие в них сертификатов mTLS:

ls -l /etc/ssl/certs/caCertificates.pem
ls -l /vault/secrets/certs/server/privateKey.pem
ls -l /vault/secrets/certs/server/serverCertificate.pem
ls -l /vault/secrets/certs/client/clientCertificate.pem
ls -l /vault/secrets/certs/client/privateKey.pem
  1. При выключенном SecMan: наличие в контейнерах сервисов BAMN (administrator, selector, pull-processing) файла с секретами:

sh-4.4$ ls -l /vault/secrets/properties/application.properties
-rw-r--r--. 1 1001930000 1001930000 519 Nov 30 08:20 /vault/secrets/properties/application.properties
  1. При выключенном SecMan: наличие в контейнерах сервисов (administrator, selector, pull-processing) файлов сертификатов:

ls -l /vault/secrets/certs/client/clientCertificate.pem
ls -l /vault/secrets/certs/client/privateKey.pem
ls -l /vault/secrets/certs/db/clientCertificate.pem
ls -l /vault/secrets/certs/db/privateKey.pem
ls -l /vault/secrets/certs/db/caCertificates.pem
  1. Запущен контейнер fluent-bit-sidecar в pods сервисов BAMN (Administrator, Pull Processing, Selector)

Конфигурация для георезервированной схемы подключения#

Необходимо развернуть дистрибутив на разных кластерах контейнеризированного средства оркестрации, при этом:

  • route сервиса: bam.ose.istio.ingress.common.bam-hostname.https.appFQDN=bam-${openshiftProjectName}.${openshiftAppsDomain}

  • сертификат должен быть выпущен для данного хоста.

Для георезервированного балансера необходимо указать URL для выполнения запросов healthcheck используемых компонентов:

  • Administrator - https://bam-${openshiftProjectName}.${openshiftAppsDomain}/control/administrator/actuator/health/

  • Selector - https://bam-${openshiftProjectName}.${openshiftAppsDomain}/control/selector/actuator/health/

  • Pull Processing - https://bam-${openshiftProjectName}.${openshiftAppsDomain}/control/pull-processing/actuator/health/

где, host - хосты, указанные в rout сервисов