Установка в 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).
Порядок установки¶
-
Создайте namespace.
kubectl create namespace cryptex -
Создайте секрет для доступа к реестру образов и пропишите его в
imagePullSecrets.kubectl create secret docker-registry registrypullsecret \ --docker-server=<реестр> \ --docker-username=<логин> \ --docker-password=<пароль> \ -n cryptex -
Подготовьте файл переопределений (например,
values-prod.yaml): укажите теги образов,imagePullSecrets, включите персистентность, смените пароли, задайте параметры ingress. -
Установите чарт.
helm upgrade --install cryptex ./charts/cryptex \ -n cryptex \ -f values-prod.yaml -
Дождитесь завершения задания миграций и готовности подов.
kubectl get pods -n cryptex -
Если включён 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, а прямой доступ к сервису в обход этого периметра закрыть сетевыми средствами.