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

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-сервисы дополнительно: startupProbeGET /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/memory limits — задаётся только 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. Подробнее — в разделе Установка.