Kubernetes — продуктовые сервисы¶
Phase 2 Wizard разворачивает 16 продуктовых сервисов AppSec.AIGate. Каждый
из них — Deployment + Service (ClusterIP), за исключением фоновых воркеров
admin-api-consumer и admin-api-retention-worker, которые работают без
Service. Внешний доступ — только через Ingress; внутри кластера
сервисы адресуются по Service DNS.
Установка выполняется через Wizard (фаза phase2:product,
параллельность настраивается флагом --parallel N).
Состав¶
Data Plane: api-gateway, request-normalizer, threat-detector, content-safety, pii-detector, translation-service, content-policy-service, pdp, tokenization-vault, event-exporter.
Control Plane: profiles-registry, admin-api, admin-api-consumer, admin-api-retention-worker, admin-ui.
Опционально: llm-gateway-adapter (guardrail-режим).
Перечень сервисов¶
| Сервис | Порт | Стек | Роль |
|---|---|---|---|
api-gateway |
8080 (+9090 metrics) | Go | Оркестратор — точка входа, решение allow/deny |
request-normalizer |
8081 | Go | Нормализация запроса (язык, токены, payload) |
pii-detector |
8082 | Python (spaCy + Natasha) | Детекция PII/DLP |
content-policy-service |
8089 | Go | Blocklist/allowlist, language rules |
event-exporter |
8090 | Go | Экспорт событий из Redis Streams в SIEM |
pdp |
8080 | Go | Policy Decision Point — опрашивает OPA |
profiles-registry |
8000 | Python (FastAPI, Alembic) | Профили защиты, синхронизация bundle в MinIO |
admin-api |
8001 | Python (FastAPI, Alembic) | Административный API |
admin-api-consumer |
— (без Service) |
Python (образ admin-api) | Consumer событий из Redis Streams |
admin-api-retention-worker |
— (без Service) |
Python (образ admin-api) | Periodic PII scrub, retention |
admin-ui |
8080 | React + Nginx | Дашборд администратора |
tokenization-vault |
— | Python | Шифрование/токенизация ПДн (мастер-ключ из секрета tokenization-vault-secrets) |
llm-gateway-adapter |
— | Python | Мост LiteLLM/Portkey → api-gateway (guardrail-режим) |
threat-detector |
8090 | Python (GPU) | ML-классификация угроз |
content-safety |
8088 | Python (GPU) | ML-классификация безопасности контента |
translation-service |
8087 | Python (GPU) | Перевод RU→EN для детекторов |
Обработка персональных данных
tokenization-vault, pii-detector и admin-api-retention-worker
обрабатывают персональные данные. При промышленной эксплуатации это
требует соблюдения 152-ФЗ (хранение, обезличивание, сроки retention).
Общие требования (контракт платформы)¶
Все сервисы соответствуют единому сервисному контракту:
- Пробы:
GET /healthz(liveness) иGET /readyz(readiness) — задайте вlivenessProbe/readinessProbe. См. Наблюдаемость. - Логи: JSON в stdout; управление через
LOG_LEVEL/LOG_FORMAT. - securityContext: запуск от non-root, минимальные capabilities, по возможности read-only rootfs.
- Метрики:
/metrics; включаетсяServiceMonitor(metrics.serviceMonitor.enabled). - Трассировка:
OTEL_ENABLED+OTEL_EXPORTER_OTLP_ENDPOINT. - ML-сервисы дополнительно:
startupProbe→GET /startupz(модель грузится долго — выставляется высокийfailureThreshold).
Соответствие контракту проверяется в Наблюдаемости.
GPU-сервисы¶
threat-detector, content-safety и translation-service несут ML-модели и
размещаются на узлах с ресурсом nvidia.com/gpu.
| Сервис | Порт | Модель | VRAM |
|---|---|---|---|
threat-detector |
8090 | Wildguard-Qwen3-4b-v5 | ~8 ГБ (fp16) |
content-safety |
8088 | Qwen3Guard-Stream-4B | ~8 ГБ (fp16) |
translation-service |
8087 | opus-mt-ru-en (CTranslate2) | ~0.5 ГБ |
Особенности развёртывания GPU-сервисов:
- Модель доставляется ORAS init-контейнером из Harbor (
aigate/models/) — без PVC, модель кладётся вemptyDir. updateStrategy: Recreate— приRollingUpdateдва пода одновременно заняли бы VRAM и привели к OOM.startupProbe.failureThresholdвысокий (порядка 10 минут) — загрузка модели длительная.- Без
cpu/memorylimits — задаётся толькоresources.limits["nvidia.com/gpu"]: 1. device_map={"": 0}— все слои модели на GPU 0 (неauto, чтобы исключить offload на CPU).- Размещение через
nodeSelector/tolerationsна GPU-узлы — см. требования к кластеру.
Порядок и зависимости¶
Сервисы зависят от инфраструктуры (PostgreSQL, Redis,
MinIO, OPA; Keycloak — при включённой аутентификации). Миграции БД выполняются
init-контейнерами (Alembic в profiles-registry и admin-api) и применяются до
старта зависящих сервисов; до готовности зависимостей readinessProbe возвращает
503.
Установка инфраструктуры и продуктовых сервисов в правильном порядке — ответственность Wizard (фазы Phase 1 → Phase 2).
Кластер без GPU¶
Если в кластере нет GPU-узлов, при установке указывается флаг --no-gpu —
Wizard пропустит три ML-сервиса (threat-detector, content-safety,
translation-service) целиком: CPU-варианта у них нет, поэтому детекция
угроз, Content Safety и перевод в такой установке недоступны. Без этого флага
pre-flight preflight:gpu завалит установку при отсутствии узлов с
nvidia.com/gpu. Подробнее — в разделе Установка.