Перейти к содержанию

Dittany

Описание

Сервис Dittany отвечает за сравнение двух версий приложения.

Используемые топики

  • dittany.1.0.testUpdated.
  • apricot.1.0.applications.event.applicationCreated.
  • apricot.1.0.applications.event.applicationUpdated.

БД

  • PostgreSQL (схема: dittany).
  • Redis.

Внешние зависимости

  1. Ingress.
  2. Redis.
  3. S3 (MinIO).
  4. Kafka.
  5. PostgreSQL.
  6. Keycloak.
  7. 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)

Организация сетевого доступа

Необходимо настроить сетевую инфраструктуру таким образом, чтобы монолиту были доступны следующие ресурсы:

  1. Keycloak.
  2. Ingress.

Эти ресурсы должны быть доступны по протоколам и портам, соответствующим тем URL, которые были переданы в переменные окружения DITTANY_BASE_URL и STINGRAY_SERVICES_AUTH_URL.

Настройка Kafka

Шаги по настройке Kafka описаны в соответствующем разделе.

Настройка Redis

Шаги по настройке Redis описаны в соответствующем разделе.

Настройка S3

Шаги по настройке S3 описаны в соответствующем разделе.

Настройка БД PostgreSQL

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

  1. FQDN сервера.
  2. TCP порт для подключения.
  3. Название базы данных.
  4. Имя пользователя.
  5. Пароль.
  6. Имя пользователя для миграций.
  7. Пароль пользователя миграций.

Значения параметров 1, 2, 3, 4, 6 необходимо включить в файл values.yaml нашего Helm chart, параметры:

  1. global.postgresql.stgPostgresHost.
  2. global.postgresql.stgPostgresPort.
  3. global.postgresql.stgPostgresDb.
  4. global.postgresql.stgPostgresUser.
  5. global.postgresql.stgPostgresPass.
  6. global.postgresql.stgPostgresMigrateUser.
  7. 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.

К началу