Развёртывание в Kubernetes
Платформа поставляется четырьмя Helm-чартами. Внешних зависимостей у чартов нет: PostgreSQL, Redis и ClickHouse разворачиваются внутри чарта starguard-base как StatefulSet на официальных образах либо подключаются как внешние экземпляры.
| Чарт | Состав | Публикация |
|---|---|---|
|
Core, User State, Frontend, Analytics, Meta Saver (Vector), PostgreSQL, Redis, ClickHouse |
Ingress или Gateway API HTTPRoute |
|
vLLM, Gate (reverse), File Recognizer, User Portal (backend и frontend), Redis |
Ingress или Gateway API HTTPRoute |
|
Gate (forward) |
Service типа NodePort |
|
Scanner |
не публикуется (открытого порта нет) |
Каждый компонент включается и выключается независимо параметром <компонент>.enabled.
1. Предварительные требования
-
Kubernetes 1.26+ и настроенный доступ к кластеру (
kubectl). -
Helm 3.10+ — поддержка OCI-реестров обязательна.
-
Учётные данные для реестра
docker.starguard-ai.ru(выдаются поставщиком). -
Установленный в кластере NVIDIA
gpu-operator— для чартаstarguard-gate. -
Ingress-контроллер или реализация Gateway API — для публикации Base и Gate.
2. Получение чартов
Чарты публикуются в OCI-реестр docker.starguard-ai.ru/starguard — отдельный репозиторий Helm подключать не нужно. Полные ссылки на чарты приведены ниже.
| Чарт | Ссылка |
|---|---|
|
|
|
|
|
|
|
|
Версия чарта указывается ключом --version и должна соответствовать версии поставляемого релиза платформы. В примерах ниже используется версия 1.2.0:
oci://docker.starguard-ai.ru/starguard/starguard-gate:1.2.0
Реестр закрытый, поэтому перед установкой необходимо выполнить вход:
helm registry login docker.starguard-ai.ru -u <пользователь>
Состав и параметры чарта можно посмотреть, не устанавливая его:
helm show values oci://docker.starguard-ai.ru/starguard/starguard-gate --version 1.2.0
3. Доступ к образам контейнеров: imagePullSecret
Образы контейнеров хранятся в том же закрытом реестре, поэтому в каждом namespace, куда устанавливается чарт, нужно заранее создать Secret с учётными данными реестра и передать его чарту. Без этого поды остаются в состоянии ImagePullBackOff.
-
Создайте namespace и Secret — по одному Secret’у на каждый используемый namespace:
kubectl create namespace starguard kubectl create namespace starguard-gate for NS in starguard starguard-gate; do kubectl -n $NS create secret docker-registry starguard-registry \ --docker-server=docker.starguard-ai.ru \ --docker-username=<пользователь> \ --docker-password=<пароль> \ --docker-email=<email> done -
Передайте его чарту параметром
global.imagePullSecrets— списком объектов с полемname:--set global.imagePullSecrets[0].name=starguard-registryлибо в файле значений:
global: imagePullSecrets: - name: starguard-registry
Параметр global.imagePullSecrets поддерживают все четыре чарта и применяют ко всем своим подам. Учётные данные реестра образов и учётные данные для helm registry login — как правило, одни и те же.
|
Namespace’ы разные — Secret’ов тоже несколько. В типовой установке Base и Scanner живут в namespace |
|
Зеркалирование реестра. Если образы перекладываются во внутренний реестр организации, укажите его в |
4. Чарт starguard-base
Пример установки:
helm install starguard oci://docker.starguard-ai.ru/starguard/starguard-base \
--version 1.2.0 \
--namespace starguard --create-namespace \
--set global.imagePullSecrets[0].name=starguard-registry \
--set domain=starguard.example.com \
--set userState.host=ustate.starguard.example.com \
--set vector.host=meta.starguard.example.com \
--set auth.secretKey=$(openssl rand -hex 32) \
--set auth.initAdminPassword=$(openssl rand -base64 24) \
--set postgresql.auth.password=$(openssl rand -base64 24) \
--set redis.auth.password=$(openssl rand -base64 24) \
--set clickhouse.auth.password=$(openssl rand -base64 24)
Ключевые параметры приведены ниже.
| Параметр | Описание |
|---|---|
|
Внешнее имя интерфейса администратора и Core API ( |
|
Внешнее имя сервиса User State |
|
Внешнее имя приёмника событий Meta Saver |
|
Секретный ключ платформы (аналог |
|
Пароль учётной записи |
|
Имя заранее созданного Secret вместо создаваемого чартом |
|
Общий секрет с сервисом Scanner |
|
Параметры входа администраторов через корпоративный OIDC ( |
|
Включение сервиса аналитики и имя его базы в ClickHouse |
|
Встроенный PostgreSQL либо подключение к внешнему экземпляру |
|
Встроенный Redis либо внешний экземпляр |
|
Встроенный ClickHouse либо внешний экземпляр |
|
StorageClass для всех PVC и его переопределение по компонентам |
|
Способ публикации. Включать нужно ровно один |
Маршрутизация внешних имён приведена ниже.
| Имя и путь | Целевой сервис |
|---|---|
|
Frontend |
|
Core |
|
Analytics |
|
Meta Saver (Vector) |
|
User State |
При подключении внешних СУБД учётные данные можно передать заранее созданным Secret’ом (externalPostgresql.existingSecret и аналогичные). Ожидаемые ключи: POSTGRES_USER/POSTGRES_PASSWORD, REDIS_PASSWORD, CLICKHOUSE_USER/CLICKHOUSE_PASSWORD.
Инициализация схемы ClickHouse выполняется отдельным Job’ом после установки и обновления чарта.
5. Чарт starguard-gate
Пример установки:
helm install starguard-gate oci://docker.starguard-ai.ru/starguard/starguard-gate \
--version 1.2.0 \
--namespace starguard-gate --create-namespace \
--set global.imagePullSecrets[0].name=starguard-registry \
--set domain=gate.starguard.example.com \
--set auth.coreUrl=https://starguard.example.com \
--set auth.userStateUrl=https://ustate.starguard.example.com \
--set auth.coreToken=$GATE_UUID \
--set auth.coreApiKey=$CORE_API_KEY \
--set auth.portalSecretKey=$(openssl rand -hex 32) \
--set redis.auth.password=$(openssl rand -base64 24)
Ключевые параметры приведены ниже.
| Параметр | Описание |
|---|---|
|
Внешнее имя, на которое публикуются портал, его API, File Recognizer и Gate |
|
Внешне доступные адреса Core и User State контура Base |
|
UUID шлюза и API-токен из интерфейса Base |
|
Секретный ключ сессий портала |
|
Включение Guard LLM Inference и дополнительные аргументы запуска vLLM |
|
Адрес внешнего сервиса инференса; задаётся обязательно, если |
|
Количество запрашиваемых GPU по компонентам |
|
Встроенный Redis либо внешний экземпляр |
|
Способ публикации. Включать нужно ровно один |
Маршрутизация в пределах домена: / — портал, /api/ — серверная часть портала, /file_rec/ — File Recognizer, /gate/ — сам шлюз (префикс /gate отбрасывается при проксировании).
Чарт рассчитан на кластер с установленным NVIDIA gpu-operator.
6. Чарт starguard-gate-forward
Пример установки:
helm install gate-forward oci://docker.starguard-ai.ru/starguard/starguard-gate-forward \
--version 1.2.0 \
--namespace starguard-gate --create-namespace \
--set global.imagePullSecrets[0].name=starguard-registry \
--set auth.coreUrl=https://starguard.example.com \
--set auth.coreToken=$GATE_UUID \
--set auth.coreApiKey=$CORE_API_KEY \
--set service.nodePort=30080
Ключевые параметры приведены ниже.
| Параметр | Описание |
|---|---|
|
Подключение к Core: адрес, UUID шлюза, API-токен |
|
Порт, который слушает прокси внутри контейнера |
|
Параметры публикации. По умолчанию — NodePort; допустим LoadBalancer |
|
|
|
Адрес уже развёрнутого сервиса File Recognizer (чарт его не разворачивает) |
|
Каталог, в который записывается CA-сертификат перехвата |
|
Строгая проверка сертификата JWKS-эндпоинта |
|
Монтирование корпоративного корневого сертификата; путь к нему указывается переменной |
|
Публикация только через NodePort или LoadBalancer. HTTP-прокси работает туннелями |
7. Чарт starguard-scanner
Пример установки:
helm install starguard-scanner oci://docker.starguard-ai.ru/starguard/starguard-scanner \
--version 1.2.0 \
--namespace starguard --create-namespace \
--set global.imagePullSecrets[0].name=starguard-registry \
--set core.baseUrl=http://starguard-starguard-base-core:44000 \
--set core.serviceToken=$SCANNER_SERVICE_TOKEN \
--set metaSaver.url=http://starguard-starguard-base-vector:8686 \
--set judge.baseUrl=http://starguard-gate-vllm.starguard-gate.svc:8000/v1 \
--set judge.model=openai/gpt-oss-safeguard-20b
Ключевые параметры приведены ниже.
| Параметр | Описание |
|---|---|
|
Внутренний адрес сервиса Core |
|
Общий секрет с Core. Должен совпадать с |
|
Адрес приёмника Vector, куда записываются найденные уязвимости |
|
Локальная модель, играющая роли атакующего и судьи в security-сканах LLM. Задаётся только здесь и не переопределяется из карточки скана |
|
Количество одновременно выполняемых прогонов на один экземпляр |
|
Периодичность опроса Core на наличие запущенных сканов |
|
Обновление антивирусных баз при старте. В изолированном контуре установите |
|
Постоянный том для антивирусных баз. По умолчанию выключен — используются базы из образа |
|
Имя заранее созданного Secret с ключами |
Первые пять параметров (core.baseUrl, core.serviceToken, metaSaver.url, judge.baseUrl, judge.model) обязательны — без них чарт не устанавливается.
У сервиса нет HTTP-API и открытого порта, поэтому его состояние читается из журнала:
kubectl -n starguard logs -f deploy/starguard-scanner
При старте выводится строка scanner_tool_diagnostics с доступностью движков анализа. Недоступный движок не мешает запуску: соответствующие прогоны завершатся с ошибкой, видимой в карточке скана.