Установка EVPT для облачных сред#
Порядок установки EVPT для облачных сред#
Порядок установки компонента EVPT зависит от способа развертывания компонента.
Способы развертывания компонента:
ручная установка с использованием Ansible;
автоматическая установка с использованием Jenkins.
Ручная установка с использованием Ansible#
Для выполнения ручной установки с использованием Ansible необходимо выполнить следующие действия:
Заполнить файлы в директории
inventories. Подробнее описано в разделе Подготовка окружения EVPT для облачных сред, подраздел «Настройка inventory для EVPT для облачных сред».Выполнить шифрование пароля. Подробнее описано в разделе Использование утилиты «ansible-vault» для шифрования паролей.
Заполнить параметры в файле vars.yml. Пример заполнения файла vars.yml описан в разделе Подготовка окружения EVPT для облачных сред, подраздел «Пример заполненного файла vars.yml для EVPT для облачных сред».
Выполнить ручную установку EVPT с использованием Ansible. Подробнее описано в подразделе «Ручная установка EVPT для облачных сред с использованием Ansible».
Автоматическая установка с использованием Jenkins#
Для выполнения автоматической установки с использованием Jenkins необходимо выполнить следующие действия:
Заполнить файлы в директории
inventories. Подробнее описано в разделе Подготовка окружения EVPT для облачных сред, подраздел «Настройка inventory для EVPT для облачных сред».Создать задания в Jenkins для автоматической установки EVPT. Подробнее описано в разделе Подготовка окружения EVPT для облачных сред, подраздел «Создание Jenkins Job для автоматической установки EVPT для облачных сред».
Выполнить шифрование пароля. Подробнее описано в разделе Использование утилиты «ansible-vault» для шифрования паролей.
Заполнить параметры в файле vars.yml. Пример заполненния файла vars.yml описан в разделе Подготовка окружения EVPT для облачных сред, подраздел «Пример заполненного файла vars.yml для EVPT для облачных сред».
Выполнить автоматическую установку EVPT с использованием Jenkins. Подробнее описано в подразделе «Автоматическая установка EVPT для облачных сред с использованием Jenkins».
Дополнительные настройки и функции#
Дополнительно при установке (ручной/автоматической) могут быть использованы следующие настройки и функции:
Настройка интеграции компонента EVPT с сервисными системами. Подробнее описано в подразделе «Настройка интеграции EVPT для облачных сред с сервисными системами».
Настройка интеграции компонента EVPT с Istio. Подробнее описано в подразделе «Настройка интеграции EVPT с Istio».
Подготовка базы данных для работы с хранением окон агрегации. Подробнее описано в подразделе «Подготовка базы данных для работы с хранением окон агрегации для EVPT для облачных сред».
Ручная установка EVPT для облачных сред с использованием Ansible#
Разархивируйте дистрибутив скриптов развертывания. Перейдите в папку
Ansibleразвернутого дистрибутива. Подробнее описано в разделе Подготовка окружения EVPT для облачных сред, подраздел «Получение скриптов развертывания Ansible для EVPT».Перед началом установки необходимо убедиться, что выполнена подготовка окружения. Подробнее описано в разделе Подготовка окружения EVPT для облачных сред.
Подготовьте конфигурацию потока обработчика и конфигурацию трансформации. Подробнее описано в документации компонента EVPC в документе Руководство пользователя EVPC, в разделе «Создание новых конфигураций обработчиков».
Заполните соответствующие inventory. Подробнее описано в разделе Подготовка окружения EVPT для облачных сред, подраздел «Настройка inventory для EVPT для облачных сред».
В директории Ansible создайте директорию
helm.Распакуйте дистрибутив ./EVPT-cfg-{version}-distrib.zip. Убедитесь, что появилась директория
conf.В директорию
Ansible/helmскопируйте содержимое директорииconf/helm/application/scheduler.Перенесите библиотеку
encryptor-cli-(version)-fatjar.jarиз директории./package/bhв корень директорииAnsible.Запустите установку командой в терминале из папки
Ansible:
ansible-playbook -i inventories/<ID>/inventory <PLAYBOOK>.yml --ask-vault-pass
, где:
ID— имя недавно созданного inventory;playbook— необходимый playbook:scheduler.yml — устанавливает EVPT в Openshift/Kubernetes.
Проверьте работоспособность сервиса:
убедиться, что сборка завершена без ошибок;
убедиться, что в логах pod веб-интерфейса OS нет информации об ошибках.
Автоматическая установка EVPT для облачных сред с использованием Jenkins#
Создайте файл с паролем, с помощью которого при автоматической установке будут расшифровываться пароли, зашифрованные через ansible-vault в параметрах (vars) выбранного inventory.
Заполните inventory согласно инструкции в разделе Подготовка окружения EVPT для облачных сред, подраздел «Настройка inventory для EVPT для облачных сред».
Убедитесь, что созданы необходимые Jenkins Job. Jenkins Job должны быть настроены согласно инструкции в разделе Подготовка окружения EVPT для облачных сред, подраздел «Создание Jenkins Job для автоматической установки EVPT для облачных сред» (например, было создано Jenkins Job scheduler).
Заполните параметры созданной Jenkins Job. Параметры для установки в OS указаны в разделе Подготовка окружения EVPT для облачных сред, подраздел «Создание Jenkins Job для автоматической установки EVPT для облачных сред».
Запустите Jenkins Job, дождитесь окончания выполнения работы со статусом SUCCESS.
Проверьте работоспособность сервиса:
убедитесь, что установка завершена без ошибок;
убедитесь, что в логах 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 |
|
vault.hashicorp.com/agent-init-first |
Должны ли быть получены секреты до старта самого контейнера приложения |
|
vault.hashicorp.com/agent-pre-populate |
Включать ли контейнер init для предварительного заполнения тома общей памяти секретами перед запуском контейнеров |
|
vault.hashicorp.com/preserve-secret-case |
Сохранять ли регистр секретных имен при создании секретных файлов |
|
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, то для того, чтобы полученный секрет был записан в файл, необходимо указать данную аннотацию с любым значением (будет переписано шаблоном) |
|
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 для облачных сред#
Предусловия#
Предварительно необходимо заполнить параметры в конфигурационном файле vars.yml в блоке
db. Ознакомиться с примером можно в разделе Подготовка окружения EVPT для облачных сред, подраздел «Пример заполненного файла vars.yml для EVPT для облачных сред».При ручной настройке базы данных необходимо:
разархивировать архив
./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 после выполнения скриптов установки#
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
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
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
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
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 по умолчанию)
перезапустить установку EVPT одним из методов, указанных в разделе Выбор способа установки.