Dittany
Описание
Сервис Dittany отвечает за сравнение двух версий приложения.
Используемые топики
dittany.1.0.testUpdated.apricot.1.0.applications.event.applicationCreated.apricot.1.0.applications.event.applicationUpdated.
БД
- PostgreSQL (схема: dittany).
- Redis.
Внешние зависимости
- Ingress.
- Redis.
- S3 (MinIO).
- Kafka.
- PostgreSQL.
- Keycloak.
- OAuth2.
Переменные сервиса
dittany-migrate init container
С таблицами переменных доступа и настроек логирования можно ознакомиться в разделах «Доступ к PostgreSQL», «Настройки логирования».
Настройки сервиса:
| Имя переменной | Описание | Примечание | Варианты значения | Обязательно | Пример значения | Значение в values |
|---|---|---|---|---|---|---|
ALEMBIC_CONFIG |
Файл для настройки миграций | - | Путь до файла | Да | /app/alembic.ini |
.Values.alembicConfig |
dittany-seed init container
С таблицами переменных доступа и настроек логирования можно ознакомиться в разделах «Доступ к S3», «Доступ к Redis», «Доступ к PostgreSQL», «Доступ к Kafka», «Настройки логирования».
dittany-listen container
С таблицами переменных доступа и настроек логирования можно ознакомиться в разделах «Доступ к S3», «Доступ к Redis», «Доступ к PostgreSQL», «Доступ к Kafka», «Настройки логирования».
Настройки сервиса:
| Имя переменной | Описание | Примечание | Варианты значения | Обязательно | Пример значения | Значение в values |
|---|---|---|---|---|---|---|
STG_S3_ENDPOINT_URL |
Содержит URL S3-сервиса | - | - | Да | - | - |
STG_DITTANY_TEST_UPDATED |
Содержит имя Kafka-топика, в который будут отправляться сообщения о создании/изменении теста Dittany (модель Test) | - | - | Нет | dittany/1/0/applications/event/applicationCreated |
- |
dittany-rest container
С таблицами переменных доступа и настроек логирования можно ознакомиться в разделах «Доступ к S3», «Доступ к Redis», «Доступ к PostgreSQL», «Доступ к Kafka», «Настройки логирования».
Настройки сервиса:
| Имя переменной | Описание | Примечание | Варианты значения | Обязательно | Пример значения | Значение в values |
|---|---|---|---|---|---|---|
STG_S3_BUCKET |
Содержит имя S3-бакета, который этот сервис будет использовать для создания ссылок для загрузки приложений пользователями | - | - | Да | - | - |
STG_DITTANY_TEST_UPDATED |
Содержит имя Kafka-топика, в который будут отправляться сообщения о создании/изменении теста Dittany (модель Test) | - | - | Нет | dittany.1.0.testUpdated |
- |
STG_APPLICATION_CREATED_TOPIC |
Содержит имя Kafka-топика, в который будут отправляться сообщения о создании приложения (модель Application) | - | - | Нет | apricot.1.0.applications.event.applicationCreated |
- |
STG_APPLICATION_UPDATED_TOPIC |
Содержит имя Kafka-топика, в который будут отправляться сообщения о изменении приложения (модель Application) | - | - | Нет | apricot.1.0.applications.event.applicationUpdated |
- |
STG_ROSE_ARTIFACT_TOPIC |
Содержит имя Kafka-топика, в который будут отправляться сообщения о создании артефактов (модель Artifact) | - | - | Нет | rose.1.0.artifact |
- |
STG_ROSE_ISSUE_TOPIC |
Содержит имя Kafka-топика, в который будут отправляться сообщения о создании issues (модель Issue) | - | - | Нет | rose.1.0.issue |
- |
dittany-async container
С таблицами переменных доступа и настроек логирования можно ознакомиться в разделах «Доступ к S3», «Доступ к Redis», «Доступ к PostgreSQL», «Доступ к Kafka», «Настройки логирования».
Настройки сервиса:
| Имя переменной | Описание | Примечание | Варианты значения | Обязательно | Пример значения | Значение в values |
|---|---|---|---|---|---|---|
STG_S3_ENDPOINT_URL |
Содержит URL S3-сервиса | - | - | Да | - | - |
STG_APPLICATION_CREATED_TOPIC |
Содержит имя Kafka-топика, в который будут отправляться сообщения о создании нового экземпляра модели Application | - | - | Нет | apricot/1/0/applications/event/applicationCreated |
- |
STG_APPLICATION_UPDATED_TOPIC |
Содержит имя Kafka-топика, в который будут отправляться сообщения при изменении экземпляра модели Application | - | - | Нет | apricot/1/0/applications/event/applicationUpdated |
- |
STG_DITTANY_TEST_UPDATED |
Содержит имя Kafka-топика, в который будут отправляться сообщения о создании/изменении теста Dittany (модель Test) | - | - | Нет | dittany/1/0/applications/event/applicationCreated |
- |
Схема интеграции сервиса Dittany

Шаг 1. Получение авторизационного токена. Бэкенд монолита, используя переданные ему client_id и client_secret, авторизуется в Keycloak и получает access_token.
Шаг 2. Отправка запроса в сервис Dittany. Запрос снабжается Authorization-заголовком, содержащим полученный access_token.
Шаг 3. Проверка входящего запроса на наличие валидного Authorization-заголовка.
Шаг 4.1. Запрос далее перенаправляется в целевой сервис (Dittany).
Шаг 4.2. В случае невалидного Authorization-заголовка (или его отсутствия), монолиту возвращается HTTP 401.
В монолите в файл settings/prod.env необходимо добавить следующие переменные:
STINGRAY_SERVICES_AUTH_URL(https://keycloak.cluster.local/realms/stingray/protocol/openid- connect/token)STINGRAY_SERVICES_CLIENT_ID(prod)STINGRAY_SERVICES_CLIENT_SECRET(****)DITTANY_BASE_URL(https://dittany.cluster.local)
Организация сетевого доступа
Необходимо настроить сетевую инфраструктуру таким образом, чтобы монолиту были доступны следующие ресурсы:
- Keycloak.
- Ingress.
Эти ресурсы должны быть доступны по протоколам и портам, соответствующим тем URL, которые были переданы в переменные окружения DITTANY_BASE_URL и STINGRAY_SERVICES_AUTH_URL.
Настройка Kafka
Шаги по настройке Kafka описаны в соответствующем разделе.
Настройка Redis
Шаги по настройке Redis описаны в соответствующем разделе.
Настройка S3
Шаги по настройке S3 описаны в соответствующем разделе.
Настройка БД PostgreSQL
Для настройки БД PostgreSQL необходимо предоставить доступ к PostgreSQL, развёрнутому в инфраструктуре и включающему следующие параметры:
- FQDN сервера.
- TCP порт для подключения.
- Название базы данных.
- Имя пользователя.
- Пароль.
- Имя пользователя для миграций.
- Пароль пользователя миграций.
Значения параметров 1, 2, 3, 4, 6 необходимо включить в файл values.yaml нашего Helm chart, параметры:
global.postgresql.stgPostgresHost.global.postgresql.stgPostgresPort.global.postgresql.stgPostgresDb.global.postgresql.stgPostgresUser.global.postgresql.stgPostgresPass.global.postgresql.stgPostgresMigrateUser.global.postgresql.stgPostgresMigratePassword.
Примечание
Значение параметров 5 и 7 необходимо включить в состав секретов.
При первом подключении происходит миграция базы данных из заданного пользователя, создается соответствующая схема и таблицы:
- PostgreSQL (схема: dittany).
- test - общая таблица с информацией о тестировании.
Настройка OAuth2-proxy
Шаги по настройке OAuth2-proxy описаны в соответствующем разделе.
Примечание
Настройка OAuth2-proxy не входит непосредственно в установку сервиса Dittany. При этом правильная настройка OAuth2-proxy является необходимым условием для интеграции сервиса Dittany.
Настройка авторизации
Шаги по настройке авторизации описаны в соответствующем разделе.
Настройка Ingress
Для настройки Ingress на проксирование трафика к OAuth2-proxy и Dittany сервису необходимо внести следующие изменения в values.yaml:
dittany:
ingress:
enabled: true
className: nginx-internal
annotations:
nginx.ingress.kubernetes.io/preserve-trailing-slash: "true"
nginx.ingress.kubernetes.io/auth-url: https://oauth2-proxy.cluster.local/oauth2/auth
nginx.ingress.kubernetes.io/auth-response-headers: x-authrequest-access-token
nginx.ingress.kubernetes.io/proxy-buffer-size: 16k
nginx.ingress.kubernetes.io/proxy-body-size: 500m
nginx.ingress.kubernetes.io/proxy-read-timeout: "600"
nginx.ingress.kubernetes.io/proxy-send-timeout: "600"
hosts:
- host: dittany.cluster.local
paths:
- path: /
pathType: ImplementationSpecific
tls:
- secretName: XXX
hosts:
- dittany.cluster.local
-------------------------------------------------------------------------------------------------
oauth2-proxy:
ingress:
enabled: true
className: nginx-internal
annotations:
nginx.ingress.kubernetes.io/proxy-buffer-size: 16k
hosts:
- host: oauth2-proxy.cluster.local
paths:
- path: /
pathType: ImplementationSpecific
tls:
- secretName: k8s-secret
hosts:
- oauth2-proxy.cluster.local
Необходимо указать актуальный ingress class, tls secrets для https, актуальные hosts, в аннотации dittany auth-url указать Ingress oauth2-proxy host и /oauth2/auth.