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

Установка в Kubernetes

Состав поставки

Развёртывание в Kubernetes выполняется Helm-чартом cryptex (chart version 0.1.0, appVersion 1.0.0). Это зонтичный чарт, который помимо компонентов Cryptex подтягивает инфраструктурные подчарты:

Компонент Источник Версия
PostgreSQL bitnami 16.4.14
Redis bitnami 20.9.0
MinIO bitnami 15.0.4
cryptex-ui локальный подчарт 0.1.0

Из компонентов Cryptex чарт разворачивает:

  • backend — REST API (порт 8000);
  • worker — воркер парсинга и шифрования APK (порт 8001), самый ресурсоёмкий компонент;
  • migration — разовый прогон миграций базы данных перед запуском приложения;
  • cryptex-ui — веб-интерфейс.

Образы по умолчанию берутся из реестра Yandex Container Registry (cr.yandex/…/cryptex/release/{backend,worker,ui}). Реестр приватный, поэтому для загрузки образов потребуется секрет доступа.

Предварительные требования

  • Кластер Kubernetes и установленный Helm 3.
  • Доступ к реестру с образами Cryptex (секрет типа docker-registry).
  • Ingress-контроллер (например, nginx), если нужен внешний доступ к системе.
  • StorageClass для постоянных томов баз данных и хранилища артефактов.

Ключевые параметры values.yaml

Перед установкой подготовьте файл переопределений. Обратите внимание на следующие группы параметров.

  • Образы. backend.image, worker.image, migration.image, cryptex-ui.image — имя и тег образа. По умолчанию используется тег latest; для промышленной установки укажите конкретный тег версии.
  • Доступ к реестру. imagePullSecrets — секрет для загрузки образов из приватного реестра.
  • Персистентность. У PostgreSQL, Redis и MinIO постоянные тома в поставке выключены (persistence.enabled: false). В таком виде данные и загруженные артефакты теряются при перезапуске подов. Для промышленной среды персистентность нужно включить и задать StorageClass и размеры томов.
  • Пароли. В values.yaml заданы демонстрационные учётные данные PostgreSQL и MinIO. Перед установкой их необходимо заменить (блоки postgresql.auth, minio.auth, а также соответствующие значения в секции global).
  • Подключения. Секция global задаёт адреса и параметры PostgreSQL, Redis и S3/MinIO, которые получают backend и воркер.
  • Ingress. По умолчанию отключён (ingress.enabled: false). Для внешнего доступа включите его и задайте host и, при необходимости, TLS. В аннотациях уже предусмотрены увеличенный лимит размера тела запроса (proxy-body-size: 500m — под крупные APK) и сохранение завершающего слэша.
  • Ресурсы и масштабирование. Воркер по умолчанию запрашивает 1 CPU / 1 ГиБ и ограничен 3 CPU / 3 ГиБ. Для горизонтального масштабирования доступен HPA (autoscaling.enabled).

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

  1. Создайте namespace.

    kubectl create namespace cryptex
    
  2. Создайте секрет для доступа к реестру образов и пропишите его в imagePullSecrets.

    kubectl create secret docker-registry registrypullsecret \
      --docker-server=<реестр> \
      --docker-username=<логин> \
      --docker-password=<пароль> \
      -n cryptex
    
  3. Подготовьте файл переопределений (например, values-prod.yaml): укажите теги образов, imagePullSecrets, включите персистентность, смените пароли, задайте параметры ingress.

  4. Установите чарт.

    helm upgrade --install cryptex ./charts/cryptex \
      -n cryptex \
      -f values-prod.yaml
    
  5. Дождитесь завершения задания миграций и готовности подов.

    kubectl get pods -n cryptex
    
  6. Если включён ingress, проверьте доступность веб-интерфейса и API по заданному host.

Аутентификация в кластере

В Helm-чарте адрес Keycloak backend'у не передаётся — приложению он не нужен, оно лишь читает claim'ы из уже проверенного токена. Аутентификацию и проверку токена выполняет OAuth2 Proxy + Keycloak на уровне Ingress, а к backend запросы приходят уже с валидным подписанным Bearer-токеном, см. раздел Роли и интеграция с Keycloak.

Переменная DEV_MODE в ConfigMap backend'а не задаётся, поэтому берётся значение по умолчанию — false, то есть аутентификация в кластере включена. Если для отладки требуется временно отключить её, добавьте DEV_MODE: "true" в конфигурацию backend'а; в промышленной среде этого делать нельзя.

Что обязательно изменить для промышленной среды

  • Заменить теги образов latest на фиксированные версии.
  • Сменить демонстрационные пароли PostgreSQL и MinIO.
  • Включить персистентность PostgreSQL, Redis и MinIO, задать StorageClass и размеры.
  • Убедиться, что DEV_MODE равен false.
  • Публиковать API только через Ingress с OAuth2 Proxy + Keycloak, а прямой доступ к сервису в обход этого периметра закрыть сетевыми средствами.