Конфигурирование EVPT для работы с Граничным прокси (IGEG)#
Описание работы с транспортом 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 трафика через istio egressgateway. Можно указать список bootstrap серверов кафки
- hosts: bootstrap.server1.host:9093,bootstrap.server2.host:9093 # хост и порт bootstrap серверов кафки. Если кластер, можно указать несколько. Разделитель ","
gwPort: 10092 # порт сервиса egressgateway по которому будет доступна кафка изнутри неймспейса
gwTls:
mode: ISTIO_MUTUAL # Валидные значения: "PASSTHROUGH", "SIMPLE", "MUTUAL", "AUTO_PASSTHROUGH", "ISTIO_MUTUAL", "OPTIONAL_MUTUAL"
destinationRule: # параметры для манифеста DestinationRule Istio для кафки
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 для кафки
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_для_кафки_указываемый_ниже}
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