Одним из этапов подготовки инфраструктуры для работы с приложением ELMA365 является настройка проксирования запросов к базам данных. Для этого вы можете использовать инструмент DB‑Gateway.
Он обеспечивает доступ к базам данных Redis, RabbitMQ, PostgreSQL и MinIO через точку входа в Kubernetes‑кластере. Это упрощает процесс подключения к базам данных и работу с ними, а также оптимизирует количество инфраструктурных компонентов, необходимых для настройки проксирования.
Установка DB‑Gateway состоит из следующих этапов:
- Загрузить helm‑чарт и конфигурационный файл.
- Заполнить конфигурационный файл.
- Установить чарт DB‑Gateway с помощью Helm в Kubernetes‑кластер.
- Подключиться к базам данных.
Шаг 1. Загрузить helm-чарт и конфигурационный файл
Для установки через интернет получите конфигурационный файл values-dbgateway.yaml, выполнив команду:
helm repo add elma365 https://charts.elma365.tech
helm repo update
helm show values elma365/dbgateway > values-dbgateway.yaml
Получение конфигурационного файла для установки в закрытом контуре без доступа в интернет
- На компьютере с доступом в интернет загрузите архив актуальной версии (latest) чарта DB‑Gateway из репозитория elma365, выполнив команду:
helm repo add elma365 https://charts.elma365.tech
helm repo update
helm pull elma365/dbgateway
- Полученный архив чарта
dbgateway-X.Y.Z.tgz скопируйте на сервер, где будет производиться установка.
- На сервере распакуйте чарт
dbgateway-X.Y.Z.tgz и скопируйте конфигурационный файл по умолчанию values.yaml в values-dbgateway.yaml:
tar -xf dbgateway-X.Y.Z.tgz
cp dbgateway/values.yaml values-dbgateway.yaml
|
Шаг 2. Заполнить конфигурационный файл
Заполните конфигурационный файл values-dbgateway.yaml для установки DB‑Gateway:
- В параметре
ingress.hostname укажите домен (FQDN) или IP‑адрес, по которому доступно приложение ELMA365.
- В параметре
ingress.path укажите наименование бакета (в хранилище баз данных), в котором хранятся файлы приложения ELMA365.
Наименование бакета в базе данных должно соответствовать формату DBelma365.
Начало примера
Пример
- DBelma365.
- DBelma365-dev.
- DBelma365-prod.
конец примера
- Следующие изменения нужно внести в конфигурационный файл, если веб‑интерфейс приложения ELMA365 доступен по HTTPS:
- в параметре
ingress.hostname укажите домен (FQDN);
- в параметре
ingress.ingressClassName укажите имя класса ingress‑контроллера;
- включите поддержку TLS, установив значение
true в параметре ingress.tls;
- раскомментируйте параметры секции
ingress.extraTls;
- для параметра
ingress.extraTls.hosts укажите домен (FQDN), по которому доступно приложение ELMA365;
- для параметра
ingress.extraTls.secretName укажите наименование secret типа tls для домена, указанного в ingress.extraTls.hosts.
- Если обеспечивается отказоустойчивость, в параметре
replicaCount укажите необходимое количество реплик.
- В параметре
configuration указана конфигурация HAProxy, с которой этот инструмент запустится в Kubernetes‑кластере. В секции backend DB_main конфигурации HAProxy укажите список серверов баз данных, на которые будет перенаправляться пользовательский трафик.
Пример настройки HAProxy для проксирования подключения к хранилищу баз данных
В примере рассматриваются базы данных Redis, RabbittMQ, PostgreSQL и MinIO, расположенные вне Kubernetes‑кластера и развёрнутые согласно инструкции в разделе «Отказоустойчивая инфраструктура». Настроим для серверов с этими базами данных проксирование пользовательского трафика.
## Настройки haproxy для проксирования подключения к хранилищу баз данных
haproxy:
global:
security:
allowInsecureImages: true
## включение поддержки Gateway API
httpRoute:
enabled: false
parentRefs:
- name: main-gateway
namespace: istio-system
ingress:
enabled: true
## включение поддержки HAProxy Ingress для работы на платформе OpenShift
openshift: false
## домен (FQDN), по которому доступна система
hostname: elma365-server.your-domain
## наименование bucket'а (в хранилище S3) для приложение ELMA365
path: /s3elma365
ingressClassName: "nginx"
## внутренний health-check/probe URL, который MinIO генерирует для проверки доступности
extraPaths:
- path: /probe-bsign(.*)
pathType: ImplementationSpecific
backend:
service:
name: dbgateway-haproxy
port:
name: http
annotations:
nginx.ingress.kubernetes.io/proxy-body-size: '0'
# kubernetes.io/ingress.class: nginx
## включение https
tls: false
# extraTls:
# - hosts:
# - elma365-server.your-domain
# secretName: elma365-server.your-domain-tls
## количество реплик для обеспечения высокой доступности
replicaCount: 2
containerPorts:
- name: http
containerPort: 8080
- name: redis
containerPort: 6379
- name: sentinel
containerPort: 26379
- name: rabbitmq
containerPort: 5672
- name: rabbitmq-stats
containerPort: 15672
- name: postgres
containerPort: 5000
## конфигурация haproxy
configuration: |
global
log stdout format raw local0
maxconn 1024
defaults
log global
timeout client 60s
timeout connect 60s
timeout server 60s
### S3 MinIO ###
frontend fe_s3_main
bind :8080
default_backend be_s3_main
backend be_s3_main
balance leastconn
server s3_1 192.168.1.241:9000 check inter 2s
server s3_2 192.168.1.242:9000 check inter 2s
server s3_3 192.168.1.243:9000 check inter 2s
server s3_4 192.168.1.244:9000 check inter 2s
### S3 MinIO ###
### Redis ###
listen redis_master
option tcplog
option clitcpka
bind :6379
balance first
mode tcp
timeout queue 2s
timeout connect 2s
timeout check 1s
option srvtcpka
timeout server 24h
server redis-server1 192.168.1.237:6379 check inter 5s
server redis-server2 192.168.1.238:6379 check inter 5s
server redis-server3 192.168.1.239:6379 check inter 5s
### Redis ###
### RabbitMQ ###
listen rabbitmq
bind :5672
mode tcp
balance roundrobin
server rabbitmq-server1 192.168.1.234:5672 check inter 2s rise 2 fall 3
server rabbitmq-server2 192.168.1.235:5672 check inter 2s rise 2 fall 3
server rabbitmq-server3 192.168.1.236:5672 check inter 2s rise 2 fall 3
listen rabbitmq_management
bind :15672
balance source
server rabbitmq-server1 192.168.1.234:15672 check inter 2s
server rabbitmq-server2 192.168.1.235:15672 check inter 2s
server rabbitmq-server3 192.168.1.236:15672 check inter 2s
### RabbitMQ ###
### PostgreSQL ###
listen postgres_master
bind :5000
option tcplog
option httpchk OPTIONS /master
http-check expect status 200
default-server inter 3s fastinter 1s fall 3 rise 4 on-marked-down shutdown-sessions
server postgres-server1 192.168.1.251:5432 check port 8008
server postgres-server2 192.168.1.252:5432 check port 8008
server postgres-server3 192.168.1.253:5432 check port 8008
listen postgres_replicas
bind :5001
option tcplog
option httpchk OPTIONS /replica
balance roundrobin
http-check expect status 200
default-server inter 3s fastinter 1s fall 3 rise 2 on-marked-down shutdown-sessions
server postgres-server1 192.168.1.251:5432 check port 8008
server postgres-server2 192.168.1.252:5432 check port 8008
server postgres-server3 192.168.1.253:5432 check port 8008
### PostgreSQL ###
## политики контекста безопасности
podSecurityContext:
enabled: true
fsGroup: 1001
containerSecurityContext:
enabled: true
runAsUser: 1001
runAsNonRoot: true
## указание ресурсов
resources:
requests:
memory: "64Mi"
cpu: "50m"
limits:
memory: "512Mi"
cpu: "500m"
...
|
|
- Если вы устанавливаете чарт DB‑Gateway в закрытом контуре без доступа в интернет, заполните параметры подключения к приватному registry.
Пример заполнения параметров для подключения к приватному registry
- Задайте адрес в параметре
haproxy.image.registry.
- Задайте путь в параметре
haproxy.image.repository.
- Укажите наименование секрета с правами доступа к приватному registry (должен быть создан вручную и зашифрован в Base64) в параметре
haproxy.image.pullSecrets.
# Настройки haproxy для проксирования подключения к хранилищу баз данных
haproxy:
...
# Параметры подключения к приватному registry
image:
# адрес и путь для приватного registry
registry: registry.example.com
repository: /bitnami/haproxy
tag: 3.0.5-debian-12-r0
# секрет с правами доступа к приватному registry должен быть создан вручную и зашифрован в Base64
pullSecrets:
- myRegistryKeySecretName
|
Шаг 3. Установить чарт DB-Gateway с помощью Helm в Kubernetes-кластер
Установите чарт DB‑Gateway в namespace dbgateway.
Для установки через интернет выполните команду:
helm upgrade --install dbgateway elma365/dbgateway -f values-dbgateway.yaml -n dbgateway --create-namespace
Для установки без доступа в интернет выполните команду:
helm upgrade --install dbgateway ./dbgateway -f values-dbgateway.yaml -n dbgateway --create-namespace
Шаг 4. Подключиться к базам данных
В конфигурационном файле values-elma365.yaml заполните параметры, чтобы приложение ELMA365 подключалось к базам данных через настроенный инструмент DB‑Gateway:
- параметры для подключения к MinIO:
address — укажите elma365-server.your_domain;
bucket, region, access key ID, secret access key, upload method и enable SSL — укажите значения согласно параметрам хранилища базы данных, для которого настраивается проксирование;
- параметры для подключения к Redis:
elma365.db.redisUrl — 'redis://:SecretPassword@redis.dbgateway.svc.cluster.local:6379/0';
- параметры для подключения к RabbitMQ:
elma365.db.amqpUrl — 'amqp://elma365user:SecretPassword@rabbitmq.dbgateway.svc.cluster.local:5672/0';
elma365.db.amqpManagementUrl — 'http://rabbitmq-stats.dbgateway.svc.cluster.local:15672';
- параметры для подключения к PostgreSQL:
elma365.db.psqlUrl — 'postgres://elma365user:SecretPassword@postgres.dbgateway.svc.cluster.local:5000/elma365?sslmode=disable';
elma365.db.roPsqlUrl — 'postgresql://elma365user:SecretPassword@postgresqlro.dbgateway.svc.cluster.local:5001/elma365?sslmode=disable';
Подробнее о заполнении этих параметров читайте в статье «Изменение параметров ELMA365 Enterprise».