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

Apricot

Описание

Сервис Apricot отвечает за менеджмент приложений, хранение информации о приложениях.

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

  • apricot.1.0.applications.event.applicationCreated.
  • apricot.1.0.applications.event.applicationUpdated.
  • minio.

БД

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

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

  1. Ingress.
  2. Redis.
  3. S3 (MinIO).
  4. Kafka.
  5. PostgreSQL.
  6. Keycloak.
  7. OAuth2.

Переменные сервиса

apricot-migrate init container

С таблицами переменных доступа и настроек логирования можно ознакомиться в разделах «Доступ к PostgreSQL», «Настройки логирования».

Настройки сервиса:

Имя переменной Описание Варианты значения Обязательно Пример значения Значение в values
ALEMBIC_
CONFIG
Файл для настройки миграций Путь до файла Да /app/alembic.ini .Values.
alembicConfig

apricot-rest container

С таблицами переменных доступа и настроек логирования можно ознакомиться в разделах «Доступ к S3», «Доступ к Redis», «Доступ к PostgreSQL», «Настройки логирования».

Настройки сервиса:

Имя переменной Описание Обязательно Пример значения Значение в values
STG_S3_
BUCKET
Содержит имя S3-бакета, который этот сервис будет использовать для создания ссылок для загрузки приложений пользователями Да - -

apricot-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_S3_
TOPIC
Содержит имя Kafka-топика, на который нужно подписаться этому сервису для получения событий создания/удаления файлов в бакетах с приложениями Да s3/bucket/event -

apricot-listen-queue container

С таблицами переменных доступа и настроек логирования можно ознакомиться в разделах «Доступ к S3», «Доступ к Redis», «Доступ к PostgreSQL», «Доступ к Kafka», «Настройки логирования».

Настройки сервиса:

Имя переменной Описание Варианты значения Обяз. Пример значения Значение в values
STG_S3_
ENDPOINT
_URL
Содержит URL S3-сервиса - Да - -
STG_
APPLICATION_
UPDATED_
TOPIC
Содержит имя Kafka-топика, в который будут отправляться сообщения при изменении экземпляра модели Application - Нет apricot/1/0/applications/event/application
Updated
-
STG_
APRICOT_
DECOMPILE_
QUEUE
Название очереди в редис для заданий декомпиляции/дизасемблирования - Нет apricot:tasks:
decompile
-
STG_WORK_
DIR
Папка доступная для записи, для временных файлов, по умолчанию tempfile.gettempdir() - Нет \tmp -
STG_NEED_
DECOMPILE
Нужно ли декомпилировать исходники 1 или 0 1, 0 Нет 1 -
STG_NEED_
DISASSEMBLE
Нужно ли дизасемблировать исходники 1 или 0 1, 0 Нет 0 -
JADX_CONFIG_
DIR
Custom config directory,
using system by default
- Да \tmp -
JADX_CACHE_
DIR
Custom cache directory,
using system by default
- Да tmp -
JADX_TMP_
DIR
Custom temp directory,
using system by default
- Да \tmp -

Схема интеграции сервиса Apricot

Шаг 1. Получение авторизационного токена. Бэкенд монолита, используя переданные ему client_id и client_secret, авторизуется в Keycloak и получает access_token.

Шаг 2. Отправка запроса в сервис Apricot. Запрос снабжается Authorization-заголовком, содержащим полученный access_token.

Шаг 3. Проверка входящего запроса на наличие валидного Authorization-заголовка.

Шаг 4.1. Запрос далее перенаправляется в целевой сервис (Apricot).

Шаг 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 (****)
  • APRICOT_BASE_URL (https://apricot.cluster.local)

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

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

  1. Keycloak.
  2. Ingress.

Эти ресурсы должны быть доступны по протоколам и портам, соответствующим тем URL, которые были переданы в переменные окружения APRICOT_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 (схема: apricot).
  • test - общая таблица с информацией о тестировании.

Настройка OAuth2-proxy

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

Примечание

Настройка OAuth2-proxy не входит непосредственно в установку сервиса Apricot. При этом правильная настройка OAuth2-proxy является необходимым условием для интеграции сервиса Apricot.

Настройка авторизации

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

Настройка Ingress

Для настройки Ingress на проксирование трафика к OAuth2-proxy и Apricot сервису необходимо внести следующие изменения в values.yaml:

apricot:
    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: apricot.cluster.local
              paths:
                - path: /
                  pathType: ImplementationSpecific
        tls:
            - secretName: XXX
              hosts:
                - apricot.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, в аннотации apricot auth-url указать Ingress oauth2-proxy host и /oauth2/auth.

К началу