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

Ручная установка компонентов

Каждый компонент AppSec.GenAI v2 — отдельный Helm-чарт из Harbor OCI-реестра. Устанавливаются независимо в любом порядке (в пределах одной группы), через Helm, ArgoCD, FluxCD или Helmfile.


Порядок установки

Компоненты устанавливаются в 5 групп. Внутри группы — параллельно, группы строго последовательно.

graph TD
    subgraph G1["1 — Инфраструктура (параллельно)"]
        PG[postgres]
        RD[redis]
        NT[nats]
        MN[minio]
    end

    subgraph G2["2 — Auth"]
        KC[keycloak]
        GW[genai-gateway]
    end

    subgraph G3["3 — Ядро"]
        MM[model-mgmt]
        SP[scan-profile]
        AS[auth-service]
        LS[license-service]
        RS[results]
    end

    subgraph G4["4 — Атакующие"]
        JB[jailbreak]
        ASR[asr]
        CV[cv]
        OR[orchestrator]
    end

    subgraph G5["5 — Фронтенд"]
        UG[ui-gateway]
        UI[ui]
    end

    PG --> KC
    PG --> MM
    PG --> SP
    PG --> AS
    PG --> LS
    PG --> RS
    RD --> MM
    RD --> AS
    RD --> OR
    NT --> OR
    NT --> JB
    NT --> RS
    MN --> MM
    MN --> SP
    MN --> JB
    KC --> AS
    GW --> AS
    MM --> JB
    MM --> ASR
    MM --> CV
    MM --> OR
    SP --> JB
    SP --> ASR
    SP --> CV
    SP --> OR
    RS --> UG
    OR --> UG
    UG --> UI

Почему такой порядок:

Группа Зависимости
1 — Инфраструктура нет зависимостей, стартуют параллельно
2 — Auth & Gateway keycloak ждёт postgres; genai-gateway ждёт keycloak (OIDC)
3 — Ядро все сервисы ждут postgres/redis/nats/minio; auth-service ждёт keycloak
4 — Атакующие jailbreak/asr/cv ждут model-mgmt + scan-profile (включая seed)
5 — Фронтенд ui-gateway ждёт все API-сервисы

scan-profile seed

Устанавливайте группу 4 только после того как scan-profile pod перейдёт в Ready — seed-контейнер должен загрузить 27+ типов атак в БД. --wait в helm install это обеспечивает автоматически.


Чарты в Harbor

Базовый OCI-путь: oci://registry.appsec.global/appsecgenai-release/charts/<chart>

Версия чарта совпадает с версией продукта (например 2026.5.1).

Инфраструктурные чарты

Чарт Назначение Страница
postgres PostgreSQL — основная БД
redis Redis — кеш и очереди
nats NATS JetStream — шина событий
minio MinIO — S3-хранилище
keycloak Keycloak — SSO (только auth=true)
genai-gateway Envoy Gateway — ingress + OIDC

Продуктовые чарты

Чарт Сервис (K8s name) Порт Назначение Страница
model-mgmt model-mgmt 8000 Каталог AI/ML-моделей
scan-profile scan-profile 8000 Профили сканирования
auth-service auth-service 8000 JWT и сессии
license-service license-service 8000 Управление лицензиями
results results 8002 Результаты сканирований
jailbreak jailbreak-api 8000 Jailbreak-атаки на LLM
asr asr-api 8000 Атаки на ASR-модели
cv cv-api 8000 Атаки на CV-модели
orchestrator orchestrator 8000 Оркестратор сканирований
ui-gateway ui-gateway 3000 BFF / API Gateway
ui ui 8080 Angular SPA + Nginx

results — порт 8002

Сервис results слушает на порту 8002, не 8000. Учитывайте при настройке HTTPRoute и health-check.


Базовая команда helm install

helm upgrade --install <release-name> \
  oci://registry.appsec.global/appsecgenai-release/charts/<chart-name> \
  --version <VERSION> \
  -n genai --create-namespace \
  -f values-<chart-name>.yaml

Secret'ы, создаваемые инфра-чартами

Продуктовым сервисам нужны credentials от инфра-компонентов. При secrets.create: true (Wizard) чарты создают их автоматически. При ручной установке — создайте вручную до установки продуктовых сервисов:

Secret Ключи Кто создаёт Нужен для
postgres-auth POSTGRES_PASSWORD postgres-чарт все сервисы с БД
redis-auth REDIS_PASSWORD redis-чарт сервисы с Redis
minio-auth MINIO_ROOT_USER, MINIO_ROOT_PASSWORD minio-чарт сервисы с S3
keycloak-auth KEYCLOAK_ADMIN_PASSWORD, AUTH_SERVICE_CLIENT_SECRET, ENVOY_GATEWAY_CLIENT_SECRET keycloak-чарт auth-service, genai-gateway
harbor-cr .dockerconfigjson создаётся вручную все поды (imagePullSecret)
# imagePullSecret (обязателен первым)
kubectl create secret docker-registry harbor-cr -n genai \
  --docker-server=registry.appsec.global \
  --docker-username=<логин> --docker-password=<пароль>