Установка EVPT для облачных сред#

Порядок установки EVPT для облачных сред#

Порядок установки компонента EVPT зависит от способа развертывания компонента.

Способы развертывания компонента:

  • ручная установка с использованием Ansible;

  • автоматическая установка с использованием Jenkins.

Ручная установка с использованием Ansible#

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

  1. Заполнить файлы в директории inventories. Подробнее описано в разделе Подготовка окружения EVPT для облачных сред, подраздел «Настройка inventory для EVPT для облачных сред».

  2. Выполнить шифрование пароля. Подробнее описано в разделе Использование утилиты «ansible-vault» для шифрования паролей.

  3. Заполнить параметры в файле vars.yml. Пример заполнения файла vars.yml описан в разделе Подготовка окружения EVPT для облачных сред, подраздел «Пример заполненного файла vars.yml для EVPT для облачных сред».

  4. Выполнить ручную установку EVPT с использованием Ansible. Подробнее описано в подразделе «Ручная установка EVPT для облачных сред с использованием Ansible».

Автоматическая установка с использованием Jenkins#

Для выполнения автоматической установки с использованием Jenkins необходимо выполнить следующие действия:

  1. Заполнить файлы в директории inventories. Подробнее описано в разделе Подготовка окружения EVPT для облачных сред, подраздел «Настройка inventory для EVPT для облачных сред».

  2. Создать задания в Jenkins для автоматической установки EVPT. Подробнее описано в разделе Подготовка окружения EVPT для облачных сред, подраздел «Создание Jenkins Job для автоматической установки EVPT для облачных сред».

  3. Выполнить шифрование пароля. Подробнее описано в разделе Использование утилиты «ansible-vault» для шифрования паролей.

  4. Заполнить параметры в файле vars.yml. Пример заполненния файла vars.yml описан в разделе Подготовка окружения EVPT для облачных сред, подраздел «Пример заполненного файла vars.yml для EVPT для облачных сред».

  5. Выполнить автоматическую установку EVPT с использованием Jenkins. Подробнее описано в подразделе «Автоматическая установка EVPT для облачных сред с использованием Jenkins».

Дополнительные настройки и функции#

Дополнительно при установке (ручной/автоматической) могут быть использованы следующие настройки и функции:

  1. Настройка интеграции компонента EVPT с сервисными системами. Подробнее описано в подразделе «Настройка интеграции EVPT для облачных сред с сервисными системами».

  2. Настройка интеграции компонента EVPT с Istio. Подробнее описано в подразделе «Настройка интеграции EVPT с Istio».

  3. Подготовка базы данных для работы с хранением окон агрегации. Подробнее описано в подразделе «Подготовка базы данных для работы с хранением окон агрегации для EVPT для облачных сред».

Ручная установка EVPT для облачных сред с использованием Ansible#

  1. Разархивируйте дистрибутив скриптов развертывания. Перейдите в папку Ansible развернутого дистрибутива. Подробнее описано в разделе Подготовка окружения EVPT для облачных сред, подраздел «Получение скриптов развертывания Ansible для EVPT».

  2. Перед началом установки необходимо убедиться, что выполнена подготовка окружения. Подробнее описано в разделе Подготовка окружения EVPT для облачных сред.

  3. Подготовьте конфигурацию потока обработчика и конфигурацию трансформации. Подробнее описано в документации компонента EVPC в документе Руководство пользователя EVPC, в разделе «Создание новых конфигураций обработчиков».

  4. Заполните соответствующие inventory. Подробнее описано в разделе Подготовка окружения EVPT для облачных сред, подраздел «Настройка inventory для EVPT для облачных сред».

  5. В директории Ansible создайте директорию helm.

  6. Распакуйте дистрибутив ./EVPT-cfg-{version}-distrib.zip. Убедитесь, что появилась директория conf.

  7. В директорию Ansible/helm скопируйте содержимое директории conf/helm/application/scheduler.

  8. Перенесите библиотеку encryptor-cli-(version)-fatjar.jar из директории ./package/bh в корень директории Ansible.

  9. Запустите установку командой в терминале из папки Ansible:

ansible-playbook -i inventories/<ID>/inventory <PLAYBOOK>.yml --ask-vault-pass

, где:

  • ID — имя недавно созданного inventory;

  • playbook — необходимый playbook:

    • scheduler.yml — устанавливает EVPT в Openshift/Kubernetes.

  1. Проверьте работоспособность сервиса:

  • убедиться, что сборка завершена без ошибок;

  • убедиться, что в логах pod веб-интерфейса OS нет информации об ошибках.

Автоматическая установка EVPT для облачных сред с использованием Jenkins#

  1. Создайте файл с паролем, с помощью которого при автоматической установке будут расшифровываться пароли, зашифрованные через ansible-vault в параметрах (vars) выбранного inventory.

  2. Заполните inventory согласно инструкции в разделе Подготовка окружения EVPT для облачных сред, подраздел «Настройка inventory для EVPT для облачных сред».

  3. Убедитесь, что созданы необходимые Jenkins Job. Jenkins Job должны быть настроены согласно инструкции в разделе Подготовка окружения EVPT для облачных сред, подраздел «Создание Jenkins Job для автоматической установки EVPT для облачных сред» (например, было создано Jenkins Job scheduler).

  4. Заполните параметры созданной Jenkins Job. Параметры для установки в OS указаны в разделе Подготовка окружения EVPT для облачных сред, подраздел «Создание Jenkins Job для автоматической установки EVPT для облачных сред».

  5. Запустите Jenkins Job, дождитесь окончания выполнения работы со статусом SUCCESS.

  6. Проверьте работоспособность сервиса:

  • убедитесь, что установка завершена без ошибок;

  • убедитесь, что в логах pod нет информации об ошибках.

Успешным результатом работы Jenkins Job будет запущенный EVPT на hosts, указанных в inventory.

Настройка интеграции EVPT для облачных сред с сервисными системами#

Ниже описана процедура интеграции с рекомендованным АО «СберТех» продуктами:

  • Platform V Audit SE (компонент AUDT);

  • Platform V Monitor (компонент LOGA);

  • Platform V Synapse Event-domain management (компонент EDMN Synapse Event Monitoring system (Mayak)).

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

Элементы дистрибутива, содержащие файлы скриптов развертывания и управления, описаны в разделе Состав дистрибутива и информация о дистрибутиве EVPT.

Настройка интеграции со смежными сервисами происходит в процессе конфигурации параметров в файле vars.yml. Подробнее в разделе Подготовка окружения EVPT для облачных сред, подраздел «Пример заполненного файла vars.yml для EVPT для облачных сред».

1. Интеграция с компонентом AUDT продукта Platform V Audit SE#

Настройка интеграции компонента EVPT с компонентом AUDT продукта Platform V Audit SE производится в файле vars.yml, блок настроек:

  audit: # Блок настроек аудита
    audit.service.type: http # Логирование событий
    audit.service.url: http://example
    audit.service.url.event.path: "/v1/event"
    audit.service.url.metamodel.path: "/v1/metamodel"
    audit.service.ssl.enabled: "false"
    audit.service.ssl.verify.hostname: "false"
    audit.service.send.metamodel: "true"
    audit.service.metamodel.module: EVPT Stream Processor
    audit.service.metamodel.version: 1.0
    audit.service.redelivery.enabled: "true"
    audit.service.add.redelivery.headers: "true"
    audit.service.redelivery.buffers: "in-memory-buffer"
    audit.service.redelivery.in-memory-buffer.type: "queue"
    audit.service.redelivery.in-memory-buffer.max.size: "10k"
    audit.service.redelivery.in-memory-buffer.clear.logger.name: "memory"
    audit.service.request.timeout.ms: "30000"

2. Интеграция с компонентом LOGA продукта Platform V Monitor#

Настройка интеграции компонента EVPT с компонентом LOGA продукта Platform V Monitor производится в файле vars.yml, блок настроек:

  logback_kafka_appender: # Блок настроек журналирования
    enable: false # Включение механизма отправки логов в Kafka через logback
    topic: evpt_topic # Топик для отправки логов
    never_block: true # Блокировка работы приложения при недоступности Kafka (по умолчанию - блокируется, при true недоставленные сообщения в kafka отбрасываются)
    discarding_threshold: 20 # Процент свободного места в очереди отправки сообщений, при достижении которого будут удаляться сообщения уровня TRACE, DEBUG, INFO
    queue_size: 512 # Размер очереди для отправки в Кафку
    retries: 3 # Количество переиницилизации продюсера, если параметр не задан. Значение по умолчанию: 3
    interval: 1000 # Интервал между переиницилизациями. Значение по умолчанию: 1000 мс. Задается в мс.
    multiplier: 1 # Множитель интервала переинициализации, по умолчанию значение 1.
    producer_configs: # Настройка Kafka продюсера
      bootstrap.servers: kafka-host-1:9093,kafka-host-2:9093 # bootstrap подключения к Apache Kafka вида host:port,host2:port2
      security.protocol: SSL # Тип протокола подключения. Значение по умолчанию: SSL
      ssl.keystore.location: /opt/scheduler/ssl/scheduler.jks # путь до хранилища сертификатов, для подключения к Kafka
      ssl.keystore.password: _PLACEHOLDER_ # пароль от keystore
      ssl.truststore.location: /opt/scheduler/ssl/scheduler.jks # путь до truststore
      ssl.truststore.password: _PLACEHOLDER_ # пароль от truststore
      ssl.endpoint.identification.algorithm: "" # Обязательный параметр. Значение не изменять. Отключение проверки хостнейма в сертификате, обязательно для стендов Kafka

3. Получение значений параметров ansible из HashiCorp Vault#

Также возможно реализовать получение значений параметров ansible из HashiCorp Vault. Для этого при указании параметров в файле vars.yml вместо значений параметров используется специальный синтаксис. Например:

ansible_password: "{{ lookup('hashi_vault', 'url=*** namespace=*** auth_method=approle role_id=*** secret_id=*** secret=*** validate_certs=0') }}"

, где:

  • url – URL для подключения к HashiCorp Vault. Например: https://my.vault.address;

  • namespace – используемый namespace;

  • auth_method – метод аутентификации. Например: approle;

  • role_id – используемый role.id;

  • secret_id – используемый secret.id;

  • secret – путь: ключ для получаемого секрета. Например: kv1/company/secret_keys:jks_password;

  • validate_certs – проверка доверия сертификата HashiCorp Vault.

Параметры подключения и аутентификации запрашиваются у администраторов HashiCorp Vault.

В результате значение переменной ansible_password будет получено из HashiCorp Vault при запуске установки.

4. Интеграция с компонентом EDMN (Mayak) продукта Platform V Synapse Event-domain management#

Настройка интеграции компонента EVPT с компонентом EDMN (Mayak) продукта Platform V Synapse Event-domain management производится в файле конфигурации batch.conf. В блоке batch необходимо указать следующие настройки:

Параметр

Описание

Значение по умолчанию

metrics.jmx.enabled

Включение метрик

true

metrics.jmx.domain

Корневой пакет для метрик

ru.sbt.ss.batch

metrics.jmx.step

Интервал для агрегирующих функций

1m

metrics.prometheus.enabled

Включение метрик

false

metrics.prometheus.histogramFlavor

Тип формата гистограмм

Prometheus

metrics.prometheus.step

Интервал для агрегирующих функций

1m

Настройка интеграции EVPT с Istio#

Для работы EVPT, установленном в OpenShift, с Istio возможно указание параметров в конфигурационном файле vars.yml.

В аннотации развертывания (поле annotations файла vars.yml) необходимо добавить:

istio:
  annotations:
    sidecar.istio.io/inject: 'true'

Блок настроек файла vars.yml, относящихся к Istio, представлен в файле example_istio.

Получение сертификатов из Vault#

В блоке параметров для работы с Istio некоторые значения являются сертификатами, находящимися в egress/ingress контейнерах. Данные сертификаты могут быть получены из Vault.

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

Аннотация

Описание

Значение

vault.hashicorp.com/role

Используемая для аутентификации роль

Роль

vault.hashicorp.com/namespace

Используемое пространство имен, которое будет использоваться при запросе секретов из Vault

Namespace

vault.hashicorp.com/agent-inject

Включение инъекции Vault Agent Sidecar

true/false

vault.hashicorp.com/agent-init-first

Должны ли быть получены секреты до старта самого контейнера приложения

true/false

vault.hashicorp.com/agent-pre-populate

Включать ли контейнер init для предварительного заполнения тома общей памяти секретами перед запуском контейнеров

true/false

vault.hashicorp.com/preserve-secret-case

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

true/false

vault.hashicorp.com/agent-limits-cpu

Настраивает ограничения на использование CPU в контейнерах Vault Agent

По умолчанию 500m, пустая строка отключает ограничения

vault.hashicorp.com/agent-requests-cpu

Настраивает ограничения на запрос CPU в контейнерах Vault Agent

По умолчанию 250m, пустая строка отключает ограничения

vault.hashicorp.com/agent-limits-mem

Настраивает ограничения на использование памяти в контейнерах Vault Agent

По умолчанию 128Mi, пустая строка отключает ограничения

vault.hashicorp.com/agent-requests-mem

Настраивает ограничения на запрос памяти в контейнерах Vault Agent

По умолчанию 64Mi, пустая строка отключает ограничения

vault.hashicorp.com/agent-inject-secret-<имя_файла>

Секрет, полученный из хранилища, будет добавлен в контейнер с указанным именем файла. Если используется agent-inject-template, то для того, чтобы полученный секрет был записан в файл, необходимо указать данную аннотацию с любым значением (будет переписано шаблоном)

true/false (рекомендовано) или путь до KV хранилища, где находится секрет

vault.hashicorp.com/secret-volume-path-<имя_файла>

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

В какую директорию будет записан полученный секрет

vault.hashicorp.com/agent-inject-template-<имя_файла>

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

Шаблон для получения секрета

Пример аннотаций для выгрузки KV секрета:#

  annotations:
    vault.hashicorp.com/agent-inject-secret-test.yml: 'true'
    vault.hashicorp.com/secret-volume-path-test.yml: /vault/test
    vault.hashicorp.com/namespace: namespace
    vault.hashicorp.com/role: role
    vault.hashicorp.com/agent-inject: 'true'
    vault.hashicorp.com/agent-init-first: 'true'

После запуска в контейнере в директории /vault/test появится файл test.yml. В файле будут содержаться ключи и значения секрета PATH/TO/KV/test.

Предположим, что в секрете содержатся следующие значения: key1 -> value1 и key2 -> value2, тогда содержимое файла будет:

sh-4.4$ cat /vault/test/test.yml
key: value1
keystore: value2

Если необходимо получить конкретное значение:

  annotations:
    vault.hashicorp.com/agent-inject-secret-test.yml: 'true'
    vault.hashicorp.com/secret-volume-path-test.yml: /vault/test
    vault.hashicorp.com/agent-inject-template-test.yml: |
      {%- raw %}
      {{- with secret "PATH/TO/KV/test" -}}
      {{ index .Data "key1" }}
      {{- end }}
      {%- endraw %}
    vault.hashicorp.com/namespace: namespace
    vault.hashicorp.com/role: role
    vault.hashicorp.com/agent-inject: 'true'
    vault.hashicorp.com/agent-init-first: 'true'

После запуска в контейнере в директории /vault/test появится файл test.yml. В файле будет содержаться значения key1 секрета PATH/TO/KV/test:

sh-4.4$ cat /vault/test/test.yml
value1

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

  annotations:
    vault.hashicorp.com/agent-inject-secret-ca.cert: 'true'
    vault.hashicorp.com/secret-volume-path-ca.cert: /vault/test
    vault.hashicorp.com/agent-inject-template-ca.cert: >
      {{- with secret "PKI/issue/role" "common_name=test" -}}

      {{ .Data.issuing_ca }}

      {{- end }}
    vault.hashicorp.com/agent-inject-secret-server.key: 'true'
    vault.hashicorp.com/secret-volume-path-server.key: /vault/test
    vault.hashicorp.com/agent-inject-template-server.key: >
      {{- with secret "PKI/issue/role" "common_name=test" -}}

      {{ .Data.private_key }}

      {{- end }}
    vault.hashicorp.com/namespace: namespace
    vault.hashicorp.com/role: role
    vault.hashicorp.com/agent-inject: 'true'
    vault.hashicorp.com/agent-init-first: 'true'
    vault.hashicorp.com/agent-inject-secret-server.cert: 'true'
    vault.hashicorp.com/secret-volume-path-server.cert: /vault/test
    vault.hashicorp.com/agent-inject-template-server.cert: >
      {{- with secret "PKI/issue/role" "common_name=test" -}}

      {{ .Data.certificate }}

      {{- end }}

После запуска в контейнере в директории /vault/test появится три файла: server.cert, server.key, ca.cert.

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

  annotations:
    vault.hashicorp.com/agent-inject-secret-ca.cert: 'true'
    vault.hashicorp.com/secret-volume-path-ca.cert: /vault/test
    vault.hashicorp.com/agent-inject-template-ca.cert: >
      {{- with secret "PATH/TO/KV/cert" -}}

      {{ base64Decode (index .Data "ca.cert") }}

      {{- end }}
    vault.hashicorp.com/agent-inject-secret-server.key: 'true'
    vault.hashicorp.com/secret-volume-path-server.key: /vault/test
    vault.hashicorp.com/agent-inject-template-server.key: >
      {{- with secret "PATH/TO/KV/cert" -}}

      {{ base64Decode (index .Data "server.key") }}

      {{- end }}
    vault.hashicorp.com/namespace: namespace
    vault.hashicorp.com/role: role
    vault.hashicorp.com/agent-inject: 'true'
    vault.hashicorp.com/agent-init-first: 'true'
    vault.hashicorp.com/agent-inject-secret-server.cert: 'true'
    vault.hashicorp.com/secret-volume-path-server.cert: /vault/test
    vault.hashicorp.com/agent-inject-template-server.cert: >
      {{- with secret "PATH/TO/KV/cert" -}}

      {{ base64Decode (index .Data "server.cert") }}

      {{- end }}

После запуска в контейнере в директории /vault/test появится три файла: server.cert, server.key, ca.cert.

Настройка egress/ingress для работы с Vault#

Ниже приведены примеры шаблонов, которые необходимы для настройки работы контейнеров, использующих egress/ingress с Vault:

Service:

apiVersion: v1
kind: Service
metadata:
  name: egressgateway-svc
  labels:
    egress: {{.Values.istio.egress.projectName}}
spec:
  ports:
    - name: http-{{ .Values.istio.egress.egressPort }}
      port: {{ .Values.istio.egress.egressPort }}
      protocol: TCP
    - name: tls-8550
      protocol: TCP
      port: 8550
      targetPort: 8550
      {{- range .Values.istio.egress.services_ports }}
    - name: tcp-{{.}}
      protocol: TCP
      port: {{.}}
      targetPort: {{.}}
      {{- end }}
  selector:
    app: egressgateway-{{ .Values.istio.egress.projectName }}
    istio: egressgateway-{{ .Values.istio.egress.projectName }}

Gateway:

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: egress-secman-gw
  labels:
    egress: {{.Values.istio.egress.projectName}}
spec:
  selector:
    istio: egressgateway-{{ .Values.istio.egress.projectName }}
  servers:
    - hosts:
        - {{ .Values.istio.egress.secmanHost }}
      port:
        name: tls-8550
        number: 8550
        protocol: TLS
      tls:
        mode: PASSTHROUGH

VirtualService:

apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  namespace: {{ .Values.istio.egress.projectName }}
  name: egress-secman-vs
  labels:
    egress: {{.Values.istio.egress.projectName}}
spec:
  exportTo:
    - .
  gateways:
    - egress-secman-gw
    - mesh
  hosts:
    - {{ .Values.istio.egress.secmanHost }}
  tls:
    - match:
        - gateways:
            - mesh
          port: 443
          sniHosts:
            - {{ .Values.istio.egress.secmanHost }}
      route:
        - destination:
            host: egressgateway-svc.{{ .Values.istio.egress.projectName }}.svc.cluster.local
            port:
              number: 8550
    - match:
        - gateways:
            - egress-secman-gw
          port: 8550
          sniHosts:
            - {{ .Values.istio.egress.secmanHost }}
      route:
        - destination:
            host: {{ .Values.istio.egress.secmanHost }}
            port:
              number: 443

ServiceEntry:

apiVersion: networking.istio.io/v1beta1
kind: ServiceEntry
metadata:
  name: egress-secman-se
  namespace: {{ .Values.istio.egress.projectName }}
  labels:
    egress: {{.Values.istio.egress.projectName}}
spec:
  exportTo:
    - .
  hosts:
    - {{ .Values.istio.egress.secmanHost }}
  location: MESH_EXTERNAL
  ports:
    - name: tls-443
      number: 443
      protocol: TLS
  resolution: DNS

PeerAuthentication:

apiVersion: security.istio.io/v1beta1
kind: PeerAuthentication
metadata:
  name: egress-pa
  namespace: {{ .Values.istio.egress.projectName }}
  labels:
    egress: {{.Values.istio.egress.projectName}}
spec:
  portLevelMtls:
    '8550':
      mode: DISABLE
  selector:
    matchLabels:
      app: egressgateway-{{ .Values.istio.egress.projectName }}

DestinationRule:

apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
  name: egress-secman-dr
  namespace: {{ .Values.istio.egress.projectName }}
  labels:
      egress: {{ .Values.istio.egress.projectName }}
spec:
  exportTo:
    - .
  host: egressgateway-svc.{{ .Values.istio.egress.projectName }}.svc.cluster.local
  trafficPolicy:
    outlierDetection:
      consecutive5xxErrors: 7
      interval: 5m
      baseEjectionTime: 15m
      maxEjectionPercent: 10
    portLevelSettings:
      - port:
          number: 8550
        tls:
          mode: DISABLE

Здесь в параметрах блока outlierDetection задается настройка автоматического выключателя, которая отслеживает состояние каждого отдельного host в вышестоящей службе. Применимо как к службам HTTP и TCP:

  • для HTTP-сервисов hosts, которые постоянно возвращают ошибки 5xx для вызовов API, выбрасываются из пула на заранее определенный период времени;

  • для TCP-сервисов тайм-ауты соединения или сбои соединения с данным host считаются ошибкой при измерении последовательной метрики ошибок.

Подготовка базы данных для работы с хранением окон агрегации для EVPT для облачных сред#

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

  1. Предварительно необходимо заполнить параметры в конфигурационном файле vars.yml в блоке db. Ознакомиться с примером можно в разделе Подготовка окружения EVPT для облачных сред, подраздел «Пример заполненного файла vars.yml для EVPT для облачных сред».

  2. При ручной настройке базы данных необходимо:

  • разархивировать архив ./EVPT-dbinit-[version]-distrib.zip в папку files;

  • перенести библиотеку encryptor-cli-2.4.0-fatjar.jar из директории ./package/bh в корень директории Ansible.

Ручной способ с помощью Ansible#

Запустите настройку базы данных командой в терминале из папки Ansible:

ansible-playbook -i inventories/<ID>/inventory <PLAYBOOK>.yml --ask-vault-pass

где:

  • ID — имя недавно созданного inventory;

  • PLAYBOOK — playbook для настройки базы данных: db.yml.

При помощи Jenkins#

Для настройки базы данных с помощью Jenkins используйте задание Jenkins db_action с выбором playbook db.yml без указания тегов. Процесс создания задания Jenkins db_action приведен в разделе Подготовка окружения EVPT для облачных сред, подраздел «Создание Jenkins Job db_action».

Настраиваемые параметры:

  • job_config_renew — перенастройка задания Jenkins. Данный параметр используется, если был добавлен новый inventory. Меняет значения по умолчанию всех параметров. Сохраняет предыдущее состояние параметров inventories_repo, inventories_branch, inventories_path;

  • inventory — имя inventory для установки;

  • nexusUrl — полный путь до дистрибутива (можно указать несколько через запятую);

  • db_action — выбор действия, которое необходимо выполнить: update;

  • jenkins_slave — выбор jenkins slave;

  • jdk_tool — указание Jenkins Tool с нужной версией JDK, конкретное значение необходимо получить у администратора Jenkins;

  • ansible_branch — используется для работы с несколькими ветками скриптов развертывания. Работает только при значении Branch Specifier (blank for „any“) равным ${ansible_branch};

  • ansible_version — указание Jenkins Tool с необходимой версией Ansible. Конкретное значение необходимо получить у администратора Jenkins;

  • nexus_user_cred — ID credential типа username with password для выкачивания дистрибутива компонента из Nexus. Чтобы получить username и password для Nexus из SecMan, необходимо заполнить параметр secman_url в формате: JenkinsCredID |SecManPath:SecManKeys|SecManParams, где:

    • JenkinsСredID — Jenkins Vault App Role Credential ID c реквизитами для подключения к SecMan;

    • SecManPath — путь к секретам в SecMan;

    • SecManKeys — имена полей для username и password в SecMan (через запятую);

    • SecManParams — параметры для подключения к SecMan (через точку с запятой). Если данные параметры по умолчанию, то пропускаются вместе с «|». Примеры:

      • SecManAppRoleCred|/CI01994970_CI02618129_ES/A/DEV/APP/JEN/KV/nexus:username,password

      • SecManAppRoleCred|/CI01994970_CI02618129_ES/A/DEV/APP/JEN/KV/nexus:username,password|engineVersion:2

  • vault_cred — ID credential типа secret file со строкой для расшифровки паролей ansible vault (можно указывать несколько через запятую). Чтобы получить ansible vault password из SecMan, необходимо заполнить параметр secman_url в формате: JenkinsСredID|SecManPath:SecManKey|SecManParams, где:

    • JenkinsСredID — Jenkins Vault App Role Credential ID с реквизитами для подключения к SecMan;

    • SecManPath — путь к секрету в SecMan;

    • SecManKey — имя поля для ansible vault password в SecMan;

    • SecManParams — параметры для подключения к SecMan (через точку с запятой). Если данные параметры по умолчанию, то пропускаются вместе с «|» (в качестве пароля можно использовать не строку, а файл в base64 формате и секрет в SecMan с именем, оканчивающимся на «Base640», например: myVaultBase64). Примеры:

      • SecManAppRoleCred|/CI01994970_CI02618129_ES/A/DEV/APP/JEN/KV/vault:ansible_vault_password

      • SecManAppRoleCred|/CI01994970_CI02618129_ES/A/DEV/APP/JEN/KV/vault:ansible_vault_password|engineVersion:2

      • SecManAppRoleCred1|/CI01994970_CI02618129_ES/A/DEV/APP/JEN/KV/vault:ansible_vault_password1,SecManAppRoleCred2|/CI01994970_CI02618129_ES/A/DEV/APP/JEN/KV/vault:ansible_vault_password2

      • SecManAppRoleCred1|/CI01994970_CI02618129_ES/A/DEV/APP/JEN/KV/vault:ansible_vault_password1|engineVersion:2,SecManAppRoleCred2|/CI01994970_CI02618129_ES/A/DEV/APP/JEN/KV/vault:ansible_vault_password2|engineVersion:2

  • secman_url — URL для подключения к HashiCorp Vault;

  • ssl_verify — проверка, являются ли сертификаты HashiCorp Vault/Nexus доверенными;

  • second_hand_approve — подтверждение запуска другим администратором (контроль «второй рукой»). Двухэтапное подтверждение запуска, требующее действия другого администратора для запуска задания Jenkins Job. При активации этой опции одному администратору будет недоступна возможность запуска задания Jenkins Job без подтверждения со стороны другого администратора;

  • inventories_repo — репозиторий с inventory (ssh://);

  • inventories_branch — ветка репозитория;

  • inventories_path — путь до inventories от корня репозитория.

Конфигурирование EVPT для работы с Граничным прокси (IGEG)#

Конфигурирование EVPT#

Описание работы с транспортом Kafka#

Для работы компонента EVPT с компонентом Граничный прокси (IGEG) продукта Platform V Synapse Service Mesh необходимо в файле vars.yaml в блоке istio заполнить параметры в блоках annotations и kafka.

Пример заполнения блока annotations#

За выпуск сертификатов для подключения отвечает vault-agent по параметрам из аннотаций, которые указываются в блоке istio.egress.deployment.annotations файла vars.yml.

annotations:
  sidecar.istio.io/inject: 'true' # Включение интеграции с Сервисным прокси SVPX/ istio
Пример заполнения блока istio#

Компонент EVPT подключается к внутренним hosts Kafka без протокола TLS по PLAINTEXT, терминация трафика происходит на Граничном прокси (IGEG).

Для перечисления hosts брокеров кластера Kafka необходимо использовать блок istio.kafka.

  istio: # настройки манифестов Istio
    egress:
      deployment:
        create: true # создавать ли Deployment для istio egressgateway
        name: evpt-egressgateway
        resources:
          limits:
            cpu: 0.1
            memory: 128M
          requests:
            cpu: 0.1
            memory: 64M
        annotations: # Заполнить аннотации для выпуска сертификатов
          sidecar.istio.io/inject: 'true' # Включение интеграции с Сервисным прокси SVPX/ istio
          # Дополнительные аннотации для граничного прокси. Здесь можно описать импорт сертификатов из vault/secman
          vault.hashicorp.com/agent-inject-template-cert.pem: |
            {%- raw %}
            {{- with secret "A/DEV/SY/EVPT/KV/example-audit-cert" -}}
            {{ index .Data "cert" }}
            {{- end }}
            {%- endraw %}
          vault.hashicorp.com/agent-inject-secret-ca.pem: 'true'
          vault.hashicorp.com/secret-volume-path-ca.pem: /vault
          vault.hashicorp.com/namespace: TEST
          vault.hashicorp.com/role: test-role
          vault.hashicorp.com/agent-inject-secret-cert.pem: 'true'
          vault.hashicorp.com/secret-volume-path-key.pem: /vault
          vault.hashicorp.com/agent-inject: 'true'
          vault.hashicorp.com/secret-volume-path-cert.pem: /vault
          vault.hashicorp.com/agent-inject-secret-key.pem: 'true'
          vault.hashicorp.com/agent-init-first: 'true'
          vault.hashicorp.com/agent-limits-cpu: 200m
          vault.hashicorp.com/agent-requests-cpu: 200m
          vault.hashicorp.com/agent-inject-template-key.pem: |
            {%- raw %}
            {{- with secret "A/DEV/SY/EVPT/KV/example-audit-cert" -}}
            {{ index .Data "key" }}
            {{- end }}
            {%- endraw %}
          vault.hashicorp.com/agent-inject-template-ca.pem: |
            {%- raw %}
            {{- with secret "A/DEV/SY/EVPT/KV/example-audit-cert" -}}
            {{ index .Data "ca" }}
            {{- end }}
            {%- endraw %}
        labels:
          secman-injector: enabled # лейбл для активации интеграции с secman vault agent injector
        istioDiscoveryService: istiod # название discovery сервиса панели Istio к которой подключен ваш namespace
        istioControlPlane: control-plane-01 # название namespace контрольной панели Istio к которой подключен ваш namespace
        proxyImage: image # ссылка на образ граничного прокси (IGEG)
    egressService: # параметры сервиса Egress
      name: "egressgateway0-svc" # имя сервиса Egress
      create: true # создавать ли манифест сервиса
      internalPort: 9443 # внутренний порт Egress
      selector: # содержимое поля spec.selector в манифесте сервиса
        app: evpt-egressgateway
        istio: egressgateway
    gateway: # параметры манифеста Gateway для Istio Egress
      name: egressgateway0-gw # имя манифеста
      create: true # создавать ли манифест
      selector: # содержимое поля spec.selector в манифесте
        istio: egressgateway
      destinationRule:
        name: egressgateway0-dr
        create: true
          tls:
            mode: MUTUAL # DISABLE | SIMPLE | MUTUAL (own certs) | ISTIO_MUTUAL (control plane certs)
            caCertificates: /path/to/egress/certificates/ca-chain.cert.pem
            clientCertificate: /path/to/egress/certificates/tls.crt
            privateKey: /path/to/egress/certificates/tls.key
          outlierDetection:
            consecutive5xxErrors: 5
            interval: 5m
            baseEjectionTime: 5m
            maxEjectionPercent: 50
  # После задания параметров перенаправления для kafka, из прикладного приложения к bootstrap серверу нужно обращаться на хост следующего формата:
  # # {название_сервиса_egressgateway}.{имя_неймспейса}.svc.cluster.local:{gwPort_для_Kafka_указываемый_ниже}
    kafka: # параметры для направления kafka трафика через istio egressgateway. Можно указать список bootstrap серверов Kafka
   - hosts: bootstrap.server1.host:9093,bootstrap.server2.host:9093 # хост и порт bootstrap серверов Kafka. Если кластер, можно указать несколько. Разделитель ","
     gwPort: 10092 # порт сервиса egressgateway по которому будет доступна кафка изнутри неймспейса
     gwTls:
       mode: ISTIO_MUTUAL # Валидные значения: "PASSTHROUGH", "SIMPLE", "MUTUAL", "AUTO_PASSTHROUGH", "ISTIO_MUTUAL", "OPTIONAL_MUTUAL"
     destinationRule: # параметры для манифеста DestinationRule Istio для Kafka
       create: true # создавать ли манифест
       outlierDetection:
         consecutive5xxErrors: 5
         interval: 5m
         baseEjectionTime: 5m
         maxEjectionPercent: 50
       tls:
         mode: MUTUAL
         clientCertificate: /path/to/egress/certificates/ca-chain.cert.pem
         privateKey: /path/to/egress/certificates/tls.crt
         caCertificates: /path/to/egress/certificates/tls.key
     virtualService: # параметры для манифеста VirtualService для Kafka
       create: true # создавать ли манифест
    vault: # параметры для интеграции с HashiCorp Vault
      host: vault.host # хост сервиса HashiCorp Vault
      port: 8200 # порт сервиса HashiCorp Vault для обращения из pod'а
      externalPort: 8200 # порт сервиса HashiCorp Vault
      # Порты и протоколы ниже используются в манифестах VirtualService, Gateway, Gateway Service
      # Поддерживаемые gwSvc протоколы - "SCTP", "TCP", "UDP"
      gwPort: 9444 # порт на egressGateway
      gwProtocol: TLS # протокол на egressGateway
      gwSvcProtocol: TCP # протокол на service egressGateway
      gwTls:
        mode: ISTIO_MUTUAL # Валидные значения: "PASSTHROUGH", "SIMPLE", "MUTUAL", "AUTO_PASSTHROUGH", "ISTIO_MUTUAL", "OPTIONAL_MUTUAL"
      destinationRule: # параметры для манифеста DestinationRule Istio
        name: epf-vault-dr # имя манифеста
        create: false # создавать ли манифест
           tls: # параметры TLS в манифесте spec.trafficPolicy.portLevelSettings[0].tls
           mode: MUTUAL
           caCertificates: /path/to/egress/certificates/ca-chain.cert.pem
           clientCertificate: /path/to/egress/certificates/tls.crt
           privateKey: /path/to/egress/certificates/tls.key
           sni: vault.host
      virtualService: # параметры для манифеста VirtualService
        name: scheduler-vault-vs # имя манифеста
        protocol: http # протокол для создания virtual service. Валидные значения: http, tls, tcp
        create: true # создавать ли манифест VirtualService
    serviceEntry:
      - host: my_hostname
        port:
          name: tcp-kafka
          number: 9092
          protocol: TCP
        resolution: DNS
#        annotations: # расскомментировать если нужно чтобы serviceEntry осталась после helm uninstall
#          "helm.sh/resource-policy": keep
#      - host: my_hostname_2
#        addresses: { IP_ADDRESS }
#        port:
#          name: tcp-kafka
#          number: 9092
#          protocol: TCP
#        resolution: STATIC
#      - host: my_hostname_3
#        port:
#          name: tcp-kafka
#          number: 9092
#          protocol: TCP
#        resolution: NONE

Блок istio.serviceEntry предназначен для соединений отличных от Kafka.

При запуске создаются:

  • манифест Deployment «evpt-eggressgateway» с Istio proxy;

  • манифесты Istio для маршрутизации трафика от EVPT через Deployment «evpt-eggressgateway» в Kafka.

Описание работы с базой данных#

Для работы компонента EVPT с компонентом Граничный прокси (IGEG) продукта Platform V Synapse Service Mesh необходимо в файле vars.yaml в блоке istio заполнить параметры в блоках annotations и postgres.

Пример заполнения блока annotations#

За выпуск сертификатов для подключения отвечает vault-agent по параметрам из аннотаций, которые указываются в блоке istio.egress.deployment.annotations файла vars.yml.

annotations:
  sidecar.istio.io/inject: "true" # Включение интеграции с Сервисным прокси SVPX/ istio
Пример заполнения блока istio#

Компонент EVPT подключается к внутренним hosts базы данных без пртокола TLS по PLAINTEXT, терминация трафика происходит на Граничном прокси (IGEG).

Для перечисления hosts базы данных необходимо использовать блок istio.postgres.

  istio: # настройки манифестов Istio
    egress:
      deployment:
        create: true # создавать ли Deployment для istio egressgateway
        name: evpt-egressgateway
        resources:
          limits:
            cpu: 0.1
            memory: 128M
          requests:
            cpu: 0.1
            memory: 64M
        annotations: # Заполнить аннотации для выпуска сертификатов
          sidecar.istio.io/inject: 'true' # Включение интеграции с Сервисным прокси SVPX/ istio
          # Дополнительные аннотации для граничного прокси. Здесь можно описать импорт сертификатов из vault/secman
          vault.hashicorp.com/agent-inject-template-cert.pem: |
            {%- raw %}
            {{- with secret "A/DEV/SY/EVPT/KV/example-audit-cert" -}}
            {{ index .Data "cert" }}
            {{- end }}
            {%- endraw %}
          vault.hashicorp.com/agent-inject-secret-ca.pem: 'true'
          vault.hashicorp.com/secret-volume-path-ca.pem: /vault
          vault.hashicorp.com/namespace: TEST
          vault.hashicorp.com/role: test-role
          vault.hashicorp.com/agent-inject-secret-cert.pem: 'true'
          vault.hashicorp.com/secret-volume-path-key.pem: /vault
          vault.hashicorp.com/agent-inject: 'true'
          vault.hashicorp.com/secret-volume-path-cert.pem: /vault
          vault.hashicorp.com/agent-inject-secret-key.pem: 'true'
          vault.hashicorp.com/agent-init-first: 'true'
          vault.hashicorp.com/agent-limits-cpu: 200m
          vault.hashicorp.com/agent-requests-cpu: 200m
          vault.hashicorp.com/agent-inject-template-key.pem: |
            {%- raw %}
            {{- with secret "A/DEV/SY/EVPT/KV/example-audit-cert" -}}
            {{ index .Data "key" }}
            {{- end }}
            {%- endraw %}
          vault.hashicorp.com/agent-inject-template-ca.pem: |
            {%- raw %}
            {{- with secret "A/DEV/SY/EVPT/KV/example-audit-cert" -}}
            {{ index .Data "ca" }}
            {{- end }}
            {%- endraw %}
        labels:
          secman-injector: enabled # лейбл для активации интеграции с secman vault agent injector
        istioDiscoveryService: istiod # название discovery сервиса панели Istio к которой подключен ваш namespace
        istioControlPlane: control-plane-01 # название namespace контрольной панели Istio к которой подключен ваш namespace
        proxyImage: image # ссылка на образ граничного прокси (IGEG)
    egressService: # параметры сервиса Egress
      name: "egressgateway0-svc" # имя сервиса Egress
      create: true # создавать ли манифест сервиса
      internalPort: 9443 # внутренний порт Egress
      selector: # содержимое поля spec.selector в манифесте сервиса
        app: evpt-egressgateway
        istio: egressgateway
    gateway: # параметры манифеста Gateway для Istio Egress
      name: egressgateway0-gw # имя манифеста
      create: true # создавать ли манифест
      selector: # содержимое поля spec.selector в манифесте
        istio: egressgateway
      destinationRule:
        name: egressgateway0-dr
        create: true
          tls:
            mode: MUTUAL # DISABLE | SIMPLE | MUTUAL (own certs) | ISTIO_MUTUAL (control plane certs)
            caCertificates: /path/to/egress/certificates/ca-chain.cert.pem
            clientCertificate: /path/to/egress/certificates/tls.crt
            privateKey: /path/to/egress/certificates/tls.key
          outlierDetection:
            consecutive5xxErrors: 5
            interval: 5m
            baseEjectionTime: 5m
            maxEjectionPercent: 50
  # После задания параметров перенаправления для kafka, из прикладного приложения к bootstrap серверу нужно обращаться на хост следующего формата:
  # # {название_сервиса_egressgateway}.{имя_неймспейса}.svc.cluster.local:{gwPort_для_Kafka_указываемый_ниже}
    postgres: # настройки манифестов Istio для работы с базой данных
       host: postgres.host # хост сервиса Postgres; указывать валидный SAN из сертификата
       port: 5432 # порт сервиса Postgres для обращения из pod'а
       externalPort: 5432 # порт сервиса Postgres
       # Порты и протоколы ниже используются в манифестах VirtualService, Gateway, Gateway Service
       # Поддерживаемые gwSvc протоколы - "SCTP", "TCP", "UDP"
       gwPort: 9445 # порт на egressGateway
       gwProtocol: TCP # протокол на egressGateway
       gwSvcProtocol: TCP # протокол на service egressGateway
       gwTls:
         mode: ISTIO_MUTUAL # Валидные значения: "PASSTHROUGH", "SIMPLE", "MUTUAL", "AUTO_PASSTHROUGH", "ISTIO_MUTUAL", "OPTIONAL_MUTUAL"
      destinationRule:
        create: false # создавать ли манифест
        name: postgres-dr-1 # имя манифеста
        tls:
          mode: MUTUAL # DISABLE | SIMPLE | MUTUAL (own certs) | ISTIO_MUTUAL (control plane certs)
          caCertificates: /path/to/egress/certificates/ca-chain.cert.pem
          clientCertificate: /path/to/egress/certificates/tls.crt
          privateKey: /path/to/egress/certificates/tls.key
        outlierDetection:
          consecutive5xxErrors: 5
          interval: 5m
          baseEjectionTime: 5m
          maxEjectionPercent: 50
      virtualService: # параметры для манифеста VirtualService
        #      name: postgres-vs-1 # имя манифеста
        create: false # создавать ли манифест VirtualService
    vault: # параметры для интеграции с HashiCorp Vault
      host: vault.host # хост сервиса HashiCorp Vault
      port: 8200 # порт сервиса HashiCorp Vault для обращения из pod'а
      externalPort: 8200 # порт сервиса HashiCorp Vault
      # Порты и протоколы ниже используются в манифестах VirtualService, Gateway, Gateway Service
      # Поддерживаемые gwSvc протоколы - "SCTP", "TCP", "UDP"
      gwPort: 9444 # порт на egressGateway
      gwProtocol: TLS # протокол на egressGateway
      gwSvcProtocol: TCP # протокол на service egressGateway
      gwTls:
        mode: ISTIO_MUTUAL # Валидные значения: "PASSTHROUGH", "SIMPLE", "MUTUAL", "AUTO_PASSTHROUGH", "ISTIO_MUTUAL", "OPTIONAL_MUTUAL"
      destinationRule: # параметры для манифеста DestinationRule Istio
        name: epf-vault-dr # имя манифеста
        create: false # создавать ли манифест
           tls: # параметры TLS в манифесте spec.trafficPolicy.portLevelSettings[0].tls
           mode: MUTUAL
           caCertificates: /path/to/egress/certificates/ca-chain.cert.pem
           clientCertificate: /path/to/egress/certificates/tls.crt
           privateKey: /path/to/egress/certificates/tls.key
           sni: vault.host
      virtualService: # параметры для манифеста VirtualService
        name: scheduler-vault-vs # имя манифеста
        protocol: http # протокол для создания virtual service. Валидные значения: http, tls, tcp
        create: true # создавать ли манифест VirtualService
    serviceEntry:
      - host: my_hostname
        port:
          name: tcp-kafka
          number: 9092
          protocol: TCP
        resolution: DNS
#        annotations: # расскомментировать если нужно чтобы serviceEntry осталась после helm uninstall
#          "helm.sh/resource-policy": keep
#      - host: my_hostname_2
#        addresses: { IP_ADDRESS }
#        port:
#          name: tcp-kafka
#          number: 9092
#          protocol: TCP
#        resolution: STATIC
#      - host: my_hostname_3
#        port:
#          name: tcp-kafka
#          number: 9092
#          protocol: TCP
#        resolution: NONE

Блок istio.serviceEntry предназначен для соединений отличных от базы данных.

При запуске создаются:

  • манифест Deployment «evpt-eggressgateway» с Istio proxy;

  • манифесты Istio для маршрутизации трафика от EVPT через Deployment «evpt-eggressgateway» в базе данных.

Манифесты Istio после выполнения скриптов установки#

  1. Service — сервис для Deployment «evpt-eggressgateway»:

kind: Service
apiVersion: v1
metadata:
  name: egressgateway0-svc-test
  namespace: namespace
  labels:
    app: scheduler-evpt
    app.kubernetes.io/managed-by: Helm
    appVersion: version
    istio: egressgateway
    version: 3.0.0-14
spec:
  clusterIP:
  ipFamilies:
    - IPv4
  ports:
    - name: status-port
      protocol: TCP
      port: 15021
      targetPort: 15021
    - name: tcp-vault-9447
      protocol: TCP
      port: 9447
      targetPort: 9447
    - name: kafka-10092
      protocol: TCP
      port: 10092
      targetPort: 10092
  internalTrafficPolicy: Cluster
  clusterIPs:
  type: ClusterIP
  ipFamilyPolicy: SingleStack
  sessionAffinity: None
  selector:
    app: evpt-egressgateway
    istio: egressgateway
  1. ServiceEntry — запись для доступа к брокерам Kafka вне ServiceMesh:

apiVersion: networking.istio.io/v1beta1
kind: ServiceEntry
metadata:
  name: vm-syevseg-sy-broker1-9092-service-entry
  namespace: namespace
spec:
  endpoints:
    - address: broker1
      ports:
        kafka-9092: 9092
    - address: broker2
      ports:
        kafka-9092: 9092
  exportTo:
    - .
  hosts:
    - broker1
  location: MESH_EXTERNAL
  ports:
    - name: kafka-9092
      number: 9092
      protocol: kafka
  resolution: DNS
  1. VirtualService — правило для перенаправления трафика внутри mesh на «evpt-egressgateway» и из него в Kafka:

apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  resourceVersion: '345483853'
  name: eventprocessflowakka-evpt-js-kafka-vs-10092
  namespace: namespace
  labels:
    app: scheduler-evpt
    app.kubernetes.io/managed-by: Helm
    appVersion: version
    version: 3.0.0-14
spec:
  exportTo:
    - .
  gateways:
    - egressgateway0-gw-test
    - mesh
  hosts:
    - egressgateway0-svc-test.namespace.svc.cluster.local
  tcp:
    - match:
        - gateways:
            - mesh
          port: 10092
      route:
        - destination:
            host: egressgateway0-svc-test
            port:
              number: 10092
    - match:
        - gateways:
            - egressgateway0-gw-test
          port: 10092
      route:
        - destination:
            host: broker1
            port:
              number: 9092
  1. Gateway — указывает, какой порт открыть в прокси «evpt-egressgateway»:

apiVersion: networking.istio.io/v1beta1
kind: Gateway
metadata:
  name: egressgateway0-gw-test
  namespace: namespace
  labels:
    app: scheduler-evpt
    app.kubernetes.io/managed-by: Helm
    appVersion: version
    version: 3.0.0-14
spec:
  selector:
    app: evpt-egressgateway
    istio: egressgateway
  servers:
    - hosts:
        - secman.solution.sbt
      port:
        name: tls-vault-9447
        number: 9447
        protocol: TLS
      tls:
        mode: PASSTHROUGH
    - hosts:
        - egressgateway0-svc-test.namespace.svc.cluster.local
      port:
        name: kafka-10092
        number: 10092
        protocol: kafka
      tls:
        mode: ISTIO_MUTUAL
  1. DestinationRule — задает правило с какими сертификатами подключаться к кластеру Kafka (одно на каждый брокер Kafka):

apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
  name: eventprocessflowakka-evpt-js-kafka-dr-10092
  namespace: namespace
spec:
  exportTo:
    - .
  host: broker1
  trafficPolicy:
    tls:
      clientCertificate: <сертификат выпускаемый vault-agent>
      caCertificates: <сертификат УЦ от vault-agent>
      mode: MUTUAL
      privateKey: <приватный ключ выпускаемый vault-agent>
  workloadSelector:
    matchLabels:
      istio: egressgateway
apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
  name: eventprocessflowakka-evpt-js-kafka-dr-10092
  namespace: namespace
spec:
  exportTo:
    - .
  host: broker2
  trafficPolicy:
    tls:
      clientCertificate: <сертификат выпускаемый vault-agent>
      caCertificates: <сертификат УЦ от vault-agent>
      mode: MUTUAL
      privateKey: <приватный ключ выпускаемый vault-agent>
  workloadSelector:
    matchLabels:
      istio: egressgateway

Масштабирование количества pods для EVPT#

При необходимости масштабирования количества pods следует:

  • изменить параметр replicas в конфигурационном файле inventories/<наименование инвентори>/group_vars/all/vars.yml:

scheduler:
  replicas: 2 # количество pods в EVPT (2 по умолчанию)