Compare commits
66 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0b510fb9b2 | ||
| c55bec5b5d | |||
|
|
15392f3373 | ||
|
|
3317bbf5cd | ||
|
|
e1ca5d7706 | ||
|
|
8447ab76bb | ||
|
|
2dbc0b9266 | ||
|
|
2993c12487 | ||
|
|
028abbe4d2 | ||
|
|
ae70f63fa3 | ||
|
|
bc7f8c4950 | ||
|
|
16c1c03b9e | ||
|
|
3cd5600f23 | ||
|
|
ecd758d944 | ||
|
|
12f3281deb | ||
|
|
19fe0a66c2 | ||
|
|
30d58ba9af | ||
|
|
abc4d756db | ||
|
|
af6135f2b0 | ||
|
|
9da34bb9cc | ||
|
|
8d9e1d3d9e | ||
|
|
db0b8988f1 | ||
|
|
218d233eb7 | ||
|
|
f88cf04434 | ||
|
|
d5884d3a3b | ||
|
|
d46ba48d22 | ||
|
|
638da92688 | ||
|
|
64412e1b94 | ||
|
|
4abcd33cd5 | ||
|
|
27e36cfa7c | ||
|
|
c7c244e95d | ||
|
|
3a5b3b07e6 | ||
|
|
172e889f00 | ||
|
|
e491466a37 | ||
|
|
6b107c872a | ||
|
|
9e4a27f898 | ||
|
|
da36ac822f | ||
|
|
4cd9a8b4d5 | ||
|
|
c4e6c079f7 | ||
|
|
6e94f826c3 | ||
|
|
3bb9514f1e | ||
|
|
16477cc6fd | ||
|
|
1e1280d74e | ||
|
|
a8a4f5e50d | ||
|
|
27327f2c9c | ||
|
|
a9ec189e91 | ||
|
|
9c892604fb | ||
|
|
0703f6a7ea | ||
|
|
c5ca007f03 | ||
|
|
a076995f3a | ||
|
|
0c04c357dc | ||
|
|
ebe1bbfd08 | ||
|
|
311abec040 | ||
|
|
3d80c69ed1 | ||
|
|
fb765a9cf9 | ||
|
|
8a0eee6538 | ||
|
|
f8a16fe423 | ||
|
|
48ec94afc9 | ||
|
|
30f669ed14 | ||
|
|
f55f25479a | ||
|
|
55c9f573c3 | ||
|
|
0dbe5dd0ac | ||
|
|
b84811a5b2 | ||
|
|
3b1878ca59 | ||
|
|
9c5dd7c860 | ||
|
|
bf5b04ace7 |
675
IAC-CATALOG.md
Normal file
675
IAC-CATALOG.md
Normal file
@ -0,0 +1,675 @@
|
||||
# Каталог IaC-компонентов и репозиториев
|
||||
|
||||
Карта ответственности: **какой репозиторий за что отвечает** в инфраструктуре `gitlab.sarex.io`
|
||||
и **из чего состоит** этот репозиторий (`infra/iac`).
|
||||
|
||||
- Источники: GitLab-группа `infra` (209 проектов, включая подгруппы) + содержимое `infra/iac`.
|
||||
- Дата среза: **2026-08-05**.
|
||||
- Все ссылки — на `https://gitlab.sarex.io`.
|
||||
|
||||
Пометки достоверности:
|
||||
|
||||
| Знак | Значение |
|
||||
|---|---|
|
||||
| ✅ | структура/назначение проверены — репозиторий открыт и прочитан |
|
||||
| ◻️ | назначение выведено из имени, описания в GitLab и веток; **требует подтверждения** |
|
||||
|
||||
---
|
||||
|
||||
## 1. Слои IaC и где они живут
|
||||
|
||||
```
|
||||
┌─ Железо / VM ─────────────────────────────────────────────────────────────┐
|
||||
│ ansible-playbooks, ansible-patroni-cluster, ansible-minio-cluster, │
|
||||
│ tools/ansible-vm-preparing, astra-linux, hardware, intervpc-vpn-tunnel │
|
||||
├─ Кластер Kubernetes ──────────────────────────────────────────────────────┤
|
||||
│ kubespray, k8s-provision │
|
||||
├─ Облачные и k8s-ресурсы (namespace/БД/S3/секреты/топики) ─────────────────┤
|
||||
│ terraform, terraform-contour, terraform-contour-mirror, │
|
||||
│ sarex-terraform-provider │
|
||||
├─ GitOps: состояние кластеров ─────────────────────────────────────────────┤
|
||||
│ ★ iac (Flux v2, этот репозиторий) iac-gpn (ArgoCD) poc/iac (архив) │
|
||||
├─ Поставка отдельных компонентов через GitLab CI (ветка = контур) ─────────┤
|
||||
│ vault, redis, kafka, postgresql, istio-config, keycloak, … (~60 репо) │
|
||||
├─ Библиотеки чартов ───────────────────────────────────────────────────────┤
|
||||
│ universal-helm-chart, common-charts, chart-museum │
|
||||
├─ Эксплуатация, аудит, наблюдаемость ──────────────────────────────────────┤
|
||||
│ k8s-changelog, cluster-maintenance, k8s-hustler, harvester, backups/* │
|
||||
└───────────────────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
**Главный водораздел.** В инфраструктуре сосуществуют **две модели доставки**:
|
||||
|
||||
1. **GitOps (Flux)** — `infra/iac`. Один репозиторий, множество кластеров, состояние декларируется
|
||||
в `clusters/<кластер>/`, Flux сам подтягивает изменения.
|
||||
2. **Push-деплой (GitLab CI)** — по репозиторию на компонент, чарт лежит в `.helm/`,
|
||||
**ветка = контур/окружение** (`stage`, `preprod`, `contour`, `infra`, `brusnika-prod`, …).
|
||||
Проверено на [vault](https://gitlab.sarex.io/infra/vault),
|
||||
[redis](https://gitlab.sarex.io/infra/redis),
|
||||
[istio-config](https://gitlab.sarex.io/infra/istio-config),
|
||||
[kube-prometheus-stack](https://gitlab.sarex.io/infra/kube-prometheus-stack),
|
||||
[gitlab-runner](https://gitlab.sarex.io/infra/gitlab-runner). ✅
|
||||
|
||||
Для ряда компонентов (Vault, Redis, Kafka, PostgreSQL, Istio, Keycloak, Zitadel, OpenObserve,
|
||||
Superset, Trino, GoAlert, GlitchTip, argo-*, otel-*) **существуют оба источника**.
|
||||
См. раздел [6. Перекрытия](#6-перекрытия-и-как-выбирать-источник-истины).
|
||||
|
||||
---
|
||||
|
||||
## 2. Ядро IaC — репозитории верхнего уровня
|
||||
|
||||
| Репозиторий | Зона ответственности | Ключевое содержимое |
|
||||
|---|---|---|
|
||||
| ★ [infra/iac](https://gitlab.sarex.io/infra/iac) ✅ | **Основной GitOps-монорепозиторий (Flux v2).** Декларативное состояние 9 кластеров: инфраструктурные компоненты + прикладные сервисы | `clusters/`, `infrastructure/` (36), `apps/` (37), `inventory.yaml`, `docs/apps/` |
|
||||
| [infra/terraform](https://gitlab.sarex.io/infra/terraform) ✅ | **Ресурсы Yandex Cloud и Kubernetes**: namespaces, PostgreSQL БД/пользователи, S3-бакеты, Valkey/Redis-пользователи, Kafka-топики, RabbitMQ, k8s-секреты. Единый источник правды — `infrastructure.yaml`, секреты через SOPS | `live/prod` (Terragrunt), `modules/`: `k8s-namespace`, `k8s-secret`, `k8s-secrets`, `kafka-topics-yc`, `rabbitmq`, `yc-database`, `yc-s3`, `yc-valkey-user` |
|
||||
| [infra/terraform-contour](https://gitlab.sarex.io/infra/terraform-contour) ✅ | Тот же подход **для изолированного контура**: namespaces и секреты из Vault | `live/{namespace,vault-secrets}`, `modules/{k8s-namespace,vault-platform-secrets}` |
|
||||
| [infra/terraform-contour-mirror](https://gitlab.sarex.io/infra/terraform-contour-mirror) ✅ | **Зеркало `infra/terraform` для контура** (ветка `contour`, единственная). Тот же README и структура + `Dockerfile` для запуска в закрытом периметре | `live/`, `modules/`, `scripts/`, `Dockerfile` |
|
||||
| [infra/sarex-terraform-provider](https://gitlab.sarex.io/infra/sarex-terraform-provider) ✅ | **Внутренние Terraform-провайдеры**, генерируемые из OpenAPI-спек продуктовых API (например `workspaces-api`). В публичный реестр не публикуются — ставятся через dev overrides | `providers/`, `internal/`, `examples/`, `Makefile` |
|
||||
| [infra/iac-gpn](https://gitlab.sarex.io/infra/iac-gpn) ✅ | **GitOps-контур ГПН на ArgoCD** (не Flux): `root.yaml` + app-of-apps, конфигмапы бэкендов, образ `terraform-contour-stronghold` | `argocd/{root.yaml,apps}`, `infrastructure/*-configmaps`, `images/` |
|
||||
| [infra/poc/iac](https://gitlab.sarex.io/infra/poc/iac) ✅ | **Предшественник/PoC** текущего Flux-репозитория. Последняя активность 2026-02-16 — считать архивом | `clusters/`, `apps/`, `infra/`, `GUIDE.md` |
|
||||
|
||||
---
|
||||
|
||||
## 3. Провижининг: от железа до кластера
|
||||
|
||||
| Репозиторий | Отвечает за |
|
||||
|---|---|
|
||||
| [infra/kubespray](https://gitlab.sarex.io/infra/kubespray) ✅ | Форк upstream Kubespray — **развёртывание самих кластеров Kubernetes** на VM |
|
||||
| [infra/k8s-provision](https://gitlab.sarex.io/infra/k8s-provision) ✅ | **Первичная обвязка свежего кластера**: `namespaces`, `cert_manager`, `istio` (+`ISTIO.md`), `ingress`, `dashboard`, `prometheus`, `postgres`/`ya_postgres`, `rabbitmq`, `pvc`, `gitlab`, `teamcity`, `migration` |
|
||||
| [infra/ansible-playbooks](https://gitlab.sarex.io/infra/ansible-playbooks) ✅ | Зонтичный Ansible-репозиторий: каталоги `minio/`, `patroni/` |
|
||||
| [infra/ansible-patroni-cluster](https://gitlab.sarex.io/infra/ansible-patroni-cluster) ✅ | **PostgreSQL HA на VM через Patroni** (`site.yml`, `roles/`, `inventory/`, `test.yml`) |
|
||||
| [infra/ansible-minio-cluster](https://gitlab.sarex.io/infra/ansible-minio-cluster) ✅ | **MinIO-кластер на VM** + сценарии проверок `fault-tolerance-test.yml`, `heal-test.yml` |
|
||||
| [infra/tools/ansible-vm-preparing](https://gitlab.sarex.io/infra/tools/ansible-vm-preparing) ✅ | Подготовка VM перед Ansible/Kubespray (Python-обвязка, `uv`). README — шаблонный, назначение по коду |
|
||||
| [infra/hardware](https://gitlab.sarex.io/infra/hardware) ◻️ | Учёт/конфигурация физического оборудования |
|
||||
| [infra/astra-linux](https://gitlab.sarex.io/infra/astra-linux) ◻️ | Сборка/настройка образов Astra Linux для импортозамещённых контуров |
|
||||
| [infra/intervpc-vpn-tunnel](https://gitlab.sarex.io/infra/intervpc-vpn-tunnel) ◻️ | VPN-туннель между VPC |
|
||||
| [infra/cluster-maintenance](https://gitlab.sarex.io/infra/cluster-maintenance) ◻️ | Регламентные операции обслуживания кластеров |
|
||||
|
||||
---
|
||||
|
||||
## 4. Компонентные репозитории (`.helm/` + GitLab CI, ветка = контур)
|
||||
|
||||
Формат ниже: **компонент → репозиторий**. Столбец «в `iac`» показывает, есть ли одноимённый
|
||||
компонент в этом монорепозитории (`infrastructure/<имя>`).
|
||||
|
||||
### 4.1 Сеть, Ingress, Service Mesh
|
||||
|
||||
| Компонент | Репозиторий | в `iac` |
|
||||
|---|---|---|
|
||||
| Istio (base/pilot/gateway) | [infra/istio](https://gitlab.sarex.io/infra/istio) `infra` | ✔ `istio-base`, `istio-pilot`, `istio-gateway` |
|
||||
| Istio: Gateway/VirtualService/AuthPolicy/EnvoyFilter | [infra/istio-config](https://gitlab.sarex.io/infra/istio-config) ✅ ветки `stage`,`preprod`,`contour`,`infra`,`master` | ✔ `istio-config` |
|
||||
| Istio для контура НН | [infra/istio-nn](https://gitlab.sarex.io/infra/istio-nn) ◻️ | — |
|
||||
| cert-manager | [infra/cert-manager](https://gitlab.sarex.io/infra/cert-manager) ◻️ | ✔ `cert-manager` |
|
||||
| nginx (ingress для Django) | [infra/ingress-nginx-django](https://gitlab.sarex.io/infra/ingress-nginx-django) ◻️ | — |
|
||||
| nginx с Kerberos / hardened nginx | [infra/nginx-krb](https://gitlab.sarex.io/infra/nginx-krb), [infra/secure-nginx](https://gitlab.sarex.io/infra/secure-nginx) ◻️ | — |
|
||||
|
||||
### 4.2 Identity, доступ, безопасность
|
||||
|
||||
| Компонент | Репозиторий | в `iac` |
|
||||
|---|---|---|
|
||||
| Keycloak | [infra/keycloak](https://gitlab.sarex.io/infra/keycloak) ◻️ | ✔ `keycloak` |
|
||||
| Zitadel | [infra/zitadel](https://gitlab.sarex.io/infra/zitadel) ◻️ | ✔ `zitadel` |
|
||||
| Zitadel auth proxy | [infra/zitadel-auth-proxy](https://gitlab.sarex.io/infra/zitadel-auth-proxy) ◻️ | — |
|
||||
| OpenLDAP | [infra/openldap](https://gitlab.sarex.io/infra/openldap) `contour` ◻️ | ✔ `openldap` |
|
||||
| HashiCorp Vault | [infra/vault](https://gitlab.sarex.io/infra/vault) ✅ `contour` | ✔ `vault`, `vault-unseal` |
|
||||
| SpiceDB (авторизация) | [infra/spicedb](https://gitlab.sarex.io/infra/spicedb) ◻️ | — |
|
||||
| OAuth2-фасад / gatekeeper | [infra/oauth2-facade](https://gitlab.sarex.io/infra/oauth2-facade), [infra/gogatekeeper](https://gitlab.sarex.io/infra/gogatekeeper) ◻️ | — |
|
||||
| Фильтрация JWKS | [infra/jwks-key-filter](https://gitlab.sarex.io/infra/jwks-key-filter) ◻️ | — |
|
||||
| Django ↔ Keycloak (библиотека) | [infra/django-keycloak](https://gitlab.sarex.io/infra/django-keycloak) ✅ | — |
|
||||
| Сканирование секретов / образов | [infra/gitleaks](https://gitlab.sarex.io/infra/gitleaks), [infra/clair](https://gitlab.sarex.io/infra/clair), [infra/sec/report](https://gitlab.sarex.io/infra/sec/report) ◻️ | — |
|
||||
|
||||
### 4.3 Данные и хранилища
|
||||
|
||||
| Компонент | Репозиторий | в `iac` |
|
||||
|---|---|---|
|
||||
| PostgreSQL | [infra/postgresql](https://gitlab.sarex.io/infra/postgresql) ветки `contour`,`contour-13`,`preprod`,`stronghold` ✅ | ✔ `postgresql` |
|
||||
| PostgreSQL 16 (контур WB) | [infra/wb/postgresql16](https://gitlab.sarex.io/infra/wb/postgresql16) ◻️ | — |
|
||||
| pg_partman / TimescaleDB / CockroachDB | [infra/postgres-pgpartman](https://gitlab.sarex.io/infra/postgres-pgpartman), [infra/timescaledb](https://gitlab.sarex.io/infra/timescaledb), [infra/cockroachdb](https://gitlab.sarex.io/infra/cockroachdb) ◻️ | — |
|
||||
| Redis | [infra/redis](https://gitlab.sarex.io/infra/redis) ✅ `contour` | ✔ `redis` |
|
||||
| MinIO (в k8s) | [infra/minio-standalone](https://gitlab.sarex.io/infra/minio-standalone) `contour` ◻️ | ✔ `minio` |
|
||||
| ClickHouse (+оператор) | [infra/clickhouse](https://gitlab.sarex.io/infra/clickhouse), [infra/clickhouse-operator](https://gitlab.sarex.io/infra/clickhouse-operator) ◻️ | — |
|
||||
| OpenSearch (+оператор) | [infra/opensearch](https://gitlab.sarex.io/infra/opensearch), [infra/opensearch-operator](https://gitlab.sarex.io/infra/opensearch-operator) ◻️ | — |
|
||||
| S3-прокси | — (только в `iac`) | ✔ `s3-proxy` |
|
||||
|
||||
### 4.4 Брокеры и обмен сообщениями
|
||||
|
||||
| Компонент | Репозиторий | в `iac` |
|
||||
|---|---|---|
|
||||
| Kafka | [infra/kafka](https://gitlab.sarex.io/infra/kafka) ветки `stage`,`preprod`,`brusnika-*` ✅ | ✔ `kafka` |
|
||||
| Kafka standalone (контур НН) | [infra/kafka-nn](https://gitlab.sarex.io/infra/kafka-nn) ◻️ | — |
|
||||
| Strimzi/Kafka-оператор | [infra/kafka-operator](https://gitlab.sarex.io/infra/kafka-operator) ◻️ | — |
|
||||
| Kafka exporter | [infra/kafka-exporter](https://gitlab.sarex.io/infra/kafka-exporter) ◻️ | ✔ `kafka-exporter` |
|
||||
| Маршрутизация между Kafka-кластерами | [infra/kafka-router](https://gitlab.sarex.io/infra/kafka-router) ✅ | — |
|
||||
| Kafka → Vector мост | [infra/kafka-vector-bridge](https://gitlab.sarex.io/infra/kafka-vector-bridge) ◻️ | — |
|
||||
| RabbitMQ (+оператор, контур НН) | [infra/rabbitmq](https://gitlab.sarex.io/infra/rabbitmq), [infra/rabbitmq-cluster-operator](https://gitlab.sarex.io/infra/rabbitmq-cluster-operator), [infra/rabbitmq-nn](https://gitlab.sarex.io/infra/rabbitmq-nn) ◻️ | ✔ `rabbitmq` |
|
||||
|
||||
### 4.5 Наблюдаемость
|
||||
|
||||
| Компонент | Репозиторий | в `iac` |
|
||||
|---|---|---|
|
||||
| kube-prometheus-stack | [infra/kube-prometheus-stack](https://gitlab.sarex.io/infra/kube-prometheus-stack) ✅ `infra` | ✔ `prometheus-stack` |
|
||||
| prometheus-stack (описан как «A complete monitoring stack for Kubernetes») | [infra/prometheus-stack](https://gitlab.sarex.io/infra/prometheus-stack) `stage` | ✔ `prometheus-stack` |
|
||||
| Алерты и дашборды для Prometheus/Grafana | [infra/prometheus-stsack-resources](https://gitlab.sarex.io/infra/prometheus-stsack-resources) *(опечатка в имени — так в GitLab)* | — |
|
||||
| VictoriaMetrics stack / cluster | [infra/vm-stack](https://gitlab.sarex.io/infra/vm-stack), [infra/vm-cluster](https://gitlab.sarex.io/infra/vm-cluster) ◻️ | ✔ `vmstack` |
|
||||
| Экспортеры: node / postgres / blackbox | [infra/node-exporter](https://gitlab.sarex.io/infra/node-exporter), [infra/postgres-exporter](https://gitlab.sarex.io/infra/postgres-exporter), [infra/blackbox-exporter](https://gitlab.sarex.io/infra/blackbox-exporter) ◻️ | ✔ `postgres-exporter` |
|
||||
| OpenObserve | [infra/openobserve](https://gitlab.sarex.io/infra/openobserve) ветка `contour/cps` ✅ | ✔ `openobserve` |
|
||||
| Loki / SigNoz | [infra/loki](https://gitlab.sarex.io/infra/loki), [infra/signoz](https://gitlab.sarex.io/infra/signoz) ◻️ | — |
|
||||
| Sentry / GlitchTip | [infra/sentry](https://gitlab.sarex.io/infra/sentry), [infra/glitchtip](https://gitlab.sarex.io/infra/glitchtip) `contour/cps` ◻️ | ✔ `glitchtip` |
|
||||
| GoAlert (+ исходники, + Telegram-релей) | [infra/goalert](https://gitlab.sarex.io/infra/goalert), [infra/goalert-source](https://gitlab.sarex.io/infra/goalert-source), [infra/goalert-telegram-relay](https://gitlab.sarex.io/infra/goalert-telegram-relay) ◻️ | ✔ `goalert` |
|
||||
| OpenTelemetry collector / operator | [infra/opentelemetry-collector](https://gitlab.sarex.io/infra/opentelemetry-collector), [infra/opentelemetry-operator](https://gitlab.sarex.io/infra/opentelemetry-operator) ◻️ | ✔ `opentelemetry-collector`, `opentelemetry-operator` |
|
||||
| eBPF-экспортер OTel | [infra/otel-ebpf-exporter](https://gitlab.sarex.io/infra/otel-ebpf-exporter) ◻️ | — |
|
||||
| Конвейер телеметрии: OTel → Kafka → ClickHouse | [infra/otel-kafka-processor](https://gitlab.sarex.io/infra/otel-kafka-processor), [infra/otel-kafka-clickhouse-worker](https://gitlab.sarex.io/infra/otel-kafka-clickhouse-worker) ◻️ | — |
|
||||
| SDK-обвязки инструментирования | [infra/otel/django-otel-tools](https://gitlab.sarex.io/infra/otel/django-otel-tools), [infra/otel/fastapi-otel-tools](https://gitlab.sarex.io/infra/otel/fastapi-otel-tools), [infra/golang-fiber-otel-tools](https://gitlab.sarex.io/infra/golang-fiber-otel-tools), [infra/golang-net-http-otel-tools](https://gitlab.sarex.io/infra/golang-net-http-otel-tools), [infra/django-instrumented](https://gitlab.sarex.io/infra/django-instrumented), [infra/djano-autoinstrumentation](https://gitlab.sarex.io/infra/djano-autoinstrumentation) ◻️ | — |
|
||||
| PMM, Trickster, отчёты по Prometheus | [infra/pmm](https://gitlab.sarex.io/infra/pmm), [infra/trickster](https://gitlab.sarex.io/infra/trickster), [infra/prometheus-report](https://gitlab.sarex.io/infra/prometheus-report) ◻️ | — |
|
||||
| SIEM-шиппер (+UI) | [infra/siem-shiper](https://gitlab.sarex.io/infra/siem-shiper), [infra/siem-shiper-frontend](https://gitlab.sarex.io/infra/siem-shiper-frontend) ◻️ | — |
|
||||
|
||||
### 4.6 Платформа, аналитика, BPM
|
||||
|
||||
| Компонент | Репозиторий | в `iac` |
|
||||
|---|---|---|
|
||||
| Kubernetes Dashboard | [infra/dashboard](https://gitlab.sarex.io/infra/dashboard) ◻️ | ✔ `dashboard` |
|
||||
| local-path-provisioner | [infra/local-path-provisioner-nn](https://gitlab.sarex.io/infra/local-path-provisioner-nn) ◻️ | ✔ `local-path-provisioner` |
|
||||
| Camunda (+ модели процессов) | [infra/camunda](https://gitlab.sarex.io/infra/camunda) `camunda-prod`, [infra/camunda-processes](https://gitlab.sarex.io/infra/camunda-processes) ◻️ | ✔ `camunda` |
|
||||
| Argo Workflows / Argo Events | [infra/argo-workflows](https://gitlab.sarex.io/infra/argo-workflows), [infra/argo-events](https://gitlab.sarex.io/infra/argo-events) ◻️ | ✔ `argo-workflows`, `argo-events` |
|
||||
| Superset / Trino | [infra/superset](https://gitlab.sarex.io/infra/superset), [infra/trino](https://gitlab.sarex.io/infra/trino) ◻️ | ✔ `superset`, `trino` |
|
||||
| Jupyter, BI-эксперименты, ETL, ГИС | [infra/jupyter-notebook](https://gitlab.sarex.io/infra/jupyter-notebook), [infra/bi-test](https://gitlab.sarex.io/infra/bi-test), [infra/etl](https://gitlab.sarex.io/infra/etl), [infra/sarex-gis](https://gitlab.sarex.io/infra/sarex-gis) ◻️ | — |
|
||||
| Mailer | [infra/mailer](https://gitlab.sarex.io/infra/mailer) ◻️ | — |
|
||||
|
||||
### 4.7 CI/CD и Git-инфраструктура
|
||||
|
||||
| Компонент | Репозиторий |
|
||||
|---|---|
|
||||
| GitLab Runner | [infra/gitlab-runner](https://gitlab.sarex.io/infra/gitlab-runner) ✅ (`.helm` + CI) |
|
||||
| Gitea (Git-зеркала для изолированных контуров) | [infra/gitea](https://gitlab.sarex.io/infra/gitea) ◻️ — см. §5, Flux в закрытых контурах читает `iac` именно из Gitea |
|
||||
| ChartMuseum (реестр Helm-чартов) | [infra/chart-museum](https://gitlab.sarex.io/infra/chart-museum) ◻️ |
|
||||
| Базовые Docker-образы | [infra/base-images](https://gitlab.sarex.io/infra/base-images) ◻️ |
|
||||
| Миграция и утилиты GitLab | [infra/gitlab-migrator](https://gitlab.sarex.io/infra/gitlab-migrator), [infra/gitlab-tools](https://gitlab.sarex.io/infra/gitlab-tools) ◻️ |
|
||||
|
||||
### 4.8 Библиотеки чартов
|
||||
|
||||
| Репозиторий | Отвечает за |
|
||||
|---|---|
|
||||
| [infra/universal-helm-chart](https://gitlab.sarex.io/infra/universal-helm-chart) ✅ | Универсальный чарт (`.helm/`), на который ссылаются HelmRelease в `iac` (`openobserve`, `glitchtip` — `chart: universal-chart`) |
|
||||
| [infra/common-charts](https://gitlab.sarex.io/infra/common-charts) ✅ | Общие чарты, сейчас — `universal-static-site` |
|
||||
| [infra/helm-values-extractor](https://gitlab.sarex.io/infra/helm-values-extractor) ◻️ | Извлечение `values` из работающих релизов (ветка `draft-script`) |
|
||||
| [infra/poc/itworksonmyhelm](https://gitlab.sarex.io/infra/poc/itworksonmyhelm), [infra/wb/helm-of-business](https://gitlab.sarex.io/infra/wb/helm-of-business) ◻️ | Эксперименты/контурные наборы чартов |
|
||||
|
||||
---
|
||||
|
||||
## 5. Что внутри `infra/iac`
|
||||
|
||||
### 5.1 Кластеры и откуда Flux их читает
|
||||
|
||||
Точка входа Flux — `clusters/<кластер>/`. Источник (`gotk-sync.yaml`) различается: кластеры в
|
||||
периметре Yandex Cloud смотрят прямо в GitLab, изолированные контуры — в **зеркало Gitea**.
|
||||
|
||||
| Кластер | Git-источник Flux | Состав |
|
||||
|---|---|---|
|
||||
| `yc-infra-prod` | `gitlab.sarex.io/infra/iac` | argo-workflows, argo-events, postgresql, pg-sanitizer, vault, vault-unseal, yc-pg-dumper |
|
||||
| `yc-k8s-test` | `gitlab.sarex.io/infra/iac` | `bootstrap-jobs`, состав задаётся в `kustomization.yaml` кластера |
|
||||
| `yc-k8s-test-02` | `gitlab.sarex.io/infra/iac` | istio (base/pilot/gateway/config), dashboard, local-path-provisioner, minio, rabbitmq, kafka, redis, camunda, postgresql, zitadel, keycloak, vault |
|
||||
| `yc-cps-prod` | `gitea.cloud.cps.sarex.lonsdaleites.ru/sarex/iac` | vault, istio, gitea-istio |
|
||||
| `yc-ecp` | `gitea.invest.cps.sarex.lonsdaleites.ru/sarex/iac` | cert-manager, istio-config, dashboard, vault; apps: measurements, django, s3-proxy, s3-proxy-bim |
|
||||
| `brusnika-prod` | `gitea.prod.brusnika.sarex.lonsdaleites.ru/sarex/iac` | istio, vault, zitadel, minio, openobserve, vmstack, otel operator/collector, goalert, экспортеры, failed-pod-cleanup |
|
||||
| `brusnika-stage` | `gitea.stage.brusnika.sarex.lonsdaleites.ru/sarex/iac` | то же без minio |
|
||||
| `wb` | `gitea-srx.wb.ru/sarex/iac` | istio-config, openobserve, vmstack, otel, goalert, экспортеры, superset, trino |
|
||||
| `d8-ugmk-prod` | `10.222.255.165:3000/infra/iac` (Gitea) | только `istio-ingress` |
|
||||
| `contour` | — (шаблон: `apps.yaml`, `infrastructure.yaml`, `helm-repositories.yaml`) | эталонная точка входа из README |
|
||||
|
||||
### 5.2 `infrastructure/` — 36 компонентов
|
||||
|
||||
`argo-events` · `argo-workflows` · `camunda` · `cert-manager` · `dashboard` · `example-infra` ·
|
||||
`failed-pod-cleanup` · `glitchtip` · `goalert` · `istio-base` · `istio-config` · `istio-gateway` ·
|
||||
`istio-pilot` · `kafka` · `kafka-exporter` · `keycloak` · `local-path-provisioner` · `minio` ·
|
||||
`openldap` · `openobserve` · `opentelemetry-collector` · `opentelemetry-operator` · `pg-sanitizer` ·
|
||||
`postgres-exporter` · `postgresql` · `prometheus-stack` · `rabbitmq` · `redis` · `s3-proxy` ·
|
||||
`superset` · `trino` · `vault` · `vault-unseal` · `vmstack` · `yc-pg-dumper` · `zitadel`
|
||||
|
||||
Структура компонента: `base/` (namespace + HelmRelease/манифесты) + `patches/` + `kustomization.yaml`.
|
||||
|
||||
### 5.3 `apps/` — 37 прикладных сервисов
|
||||
|
||||
> ⚠️ `apps/` — **только манифесты деплоя**. Исходный код сервисов живёт в других группах GitLab
|
||||
> (`platform`, `pdm`, `proc`, `planning`, `aero`, `generic`) — полная карта в **[§5.3.8](#538-где-лежит-код-приложений)**.
|
||||
> Образы приезжают из одного реестра: `cr.yandex/crp3ccidau046kdj8g9q/<сервис>:<тег>`.
|
||||
|
||||
#### 5.3.1 Единый шаблон приложения
|
||||
|
||||
```
|
||||
apps/<app>/
|
||||
├── base/ # общий для всех кластеров слой
|
||||
│ ├── namespace.yaml # namespace = имя приложения
|
||||
│ ├── <компонент>.yaml # HelmRelease на universal-chart (по одному на процесс)
|
||||
│ └── kustomization.yaml
|
||||
├── <кластер>/ # оверлей: brusnika-prod | brusnika-stage | d8-ugmk-prod |
|
||||
│ └── kustomization.yaml # yc-ecp | yc-k8s-test | dsinv
|
||||
├── .env.example # ─┐
|
||||
├── CONFIGURATION.md # │ «паспорт сервиса» — документация рядом с деплоем
|
||||
├── ENDPOINTS.md # │
|
||||
└── openapi.yaml # ─┘
|
||||
```
|
||||
|
||||
Каждый процесс сервиса — отдельный `HelmRelease` на **общем чарте**:
|
||||
|
||||
```yaml
|
||||
chart: universal-chart # версия 0.1.9 (у 6 приложений осталась 0.1.7)
|
||||
sourceRef: HelmRepository/yc-oci-charts # OCI-реестр cr.yandex, ns flux-system
|
||||
values:
|
||||
global: { env: _default } # ключ окружения
|
||||
services:
|
||||
backend:
|
||||
image: { name: { _default: cr.yandex/…/bim-api:contour_f9f2a39-dirty } }
|
||||
deployment: { replicaCount: {_default: 1}, port: {_default: 8000}, probes: … }
|
||||
service: { name: {_default: backend-svc}, port: {_default: 80} }
|
||||
imagePullSecrets: { name: { _default: regcred } }
|
||||
envs: [ … ]
|
||||
podAnnotations: { _default: { vault.hashicorp.com/*: … } }
|
||||
```
|
||||
|
||||
Особенности, общие почти для всех приложений:
|
||||
|
||||
- **все значения обёрнуты в `_default`** — механизм пер-окруженческих переопределений
|
||||
`universal-chart` (`global.env` выбирает ключ);
|
||||
- **секреты не хранятся в git** — их подставляет **Vault Agent Injector** через
|
||||
`podAnnotations` (§5.3.5);
|
||||
- `traffic.sidecar.istio.io/excludeOutboundPorts: "8200"` — обращение к Vault мимо sidecar Istio;
|
||||
- поля `commitSha`/`gitlabUri`/`gitlabJobUrl`/`owner` в базовом слое пустые — заполняются CI.
|
||||
|
||||
**Исключения:** `resources` и `subscriptions` описаны голыми `Deployment`+`Service`+`ServiceAccount`
|
||||
без `HelmRelease`; у `ams-sync` и `control-interface` в `base/` нет `Namespace`.
|
||||
|
||||
#### 5.3.2 Состав приложений
|
||||
|
||||
Обозначения кластеров: **B** `brusnika-prod` · **S** `brusnika-stage` · **U** `d8-ugmk-prod` ·
|
||||
**E** `yc-ecp` · **T** `yc-k8s-test`. Код в скобках — **оверлей есть, но кластер его не подключает**.
|
||||
|
||||
| Приложение | ns | Компоненты (HelmRelease) | Образы `…/crp3ccidau046kdj8g9q/` | Кластеры |
|
||||
|---|---|---|---|---|
|
||||
| `ams-sync` | — | `ams-sync` | `ams-sync` | S |
|
||||
| `attachments` | `attachments` | `attachments` | `att9` | (B) S U T |
|
||||
| `auth-flow` | `auth-flow` | `frontend` | `auth-flow-frontend` | (B) S U T |
|
||||
| `bim` | `bim` | `backend` | `bim-api` | B S U T |
|
||||
| `cde` | `cde` | **13**: `cde` + `cde-splitpdf`, `cde-flowscallback`, `cde-worker-{alert,copy,copyv2,create-versions,create-versionsv2,markings,markingsv2,sign,signv2,update-bundles}` | `cde`, `orchestrator`, 11 × `*-worker` | (B) (S) U T |
|
||||
| `checklists` | `checklists` | `checklists` | `checklists-backend` | B S U T |
|
||||
| `comparisons` | `comparisons` | `backend`, `frontend` + 2 ConfigMap | `comparisons_backend_prod`, `comparisons-frontend` | (B) (S) U T |
|
||||
| `contracts` | `contracts` | `contracts` | `contracts` | B S U T |
|
||||
| `control-interface` | — | `frontend` | `srx-admin` | B S U T |
|
||||
| `cross-section` | `cross-section` | `cross-section-static` | `cross-section-app` | (B) (S) U T |
|
||||
| `django` | `django` | `backend`, `celery`, `frontend`, `srx-admin-frontend`, `s3-proxy` + Deployment/Service `redis` + ConfigMap `django`/`nginx`/`uwsgi`/`zitadel` | `backend`, `sarex-frontend-dev`, `srx-admin`, `s3-proxy`, `redis` | B S U **E** T |
|
||||
| `document-link` | `document-link` | `frontend` | `document-link-frontend` | B S U (T) |
|
||||
| `documentations` | `documentations` | `documentations-api`, `-filestream`, `-hasher`, `-pdf-markings-amqp`, `pdm-api`, `frontend` + Deployment `redis` | `documentations`, `documentations-api-files`, `hasher`, `pdf-markings-amqp`, `pdmv2`, `documentation-frontend-app`, `redis` | B S U T |
|
||||
| `drawings` | `drawings` | `backend` | `drawings-api` | B S U T |
|
||||
| `eav` | `eav` | `backend` + ConfigMap | `eav` | B S U T |
|
||||
| `faas` | `faas` | `export-reviews` | `export-reviews` | (B) (S) U T |
|
||||
| `flows` | `flows` | `backend`, `celery`, `frontend` | `flows-backend`, `flows-backend_worker`, `flows-frontend` | B S U T |
|
||||
| `iam` | `iam` | `iam-backend` + ConfigMap | `iams` | (B) S U (T) |
|
||||
| `inspections` | `inspections` | `backend` | `sarex-inspections`, `notification:email` | B (S) U T |
|
||||
| `issues` | `issues` | `backend`, `celery`, `frontend` + Deployment/Service `redis` + ConfigMap | `issues`, `contour_issues-frontend`, `redis` | B S U T |
|
||||
| `mapper` | `mapper` | `backend` | `mapper` | B S U T |
|
||||
| `measurements` | `measurements` | `measurements` | `measurements` | B S U **E** T |
|
||||
| `message-hub` | `message-hub` | `message-hub` | `message-hub` | B S U T |
|
||||
| `notes` | `notes` | `backend`, `frontend` + ConfigMap | `notes-backend`, `notes-frontend` | B S U T |
|
||||
| `pm` | `pm` | `backend`, `celery`, `frontend`, `resources-static` + ConfigMap | `pm-backend`, `pm-frontend`, `resources-frontend` | B S U T |
|
||||
| `prescriptions` | `prescriptions` | `frontend` | `prescriptions-frontend` | (B) (S) U T |
|
||||
| `processing` | `processing` | `workflows-api`, `engine`, `engine-low`, `frontend` + Role/RoleBinding | `workflows-api_prod`, `workflows-engine`, `workflows-endigne_prod`, `workflows-frontend` | B S U T |
|
||||
| `projects` | `projects` | `frontend` | `project-frontend-app` | (B) S U T |
|
||||
| `remarks` | `remarks` | `frontend` | `remarks-frontend` | B S U T |
|
||||
| `resources` | `resources` | — *(Deployment + Service + SA + 2 ConfigMap)* | `sarex-resources` | B S T |
|
||||
| `reviews` | `reviews` | `frontend` | `reviews-frontend` | B S U T |
|
||||
| `rfi` | `rfi` | `backend`, `celery`, `frontend` | `rfi-backend`, `rfi-frontend` | B S U T |
|
||||
| `stamp-verification` | `stamp-verification` | `frontend` | `stamp-verification-frontend` | U T |
|
||||
| `subscriptions` | `subscriptions` | — *(Deployment + Service + SA)* | `subscriptions` | B S U T |
|
||||
| `system-log` | `system-log` | `api`, `worker` | `system-log_prod`, `system-log-worker_prod` | B S U T |
|
||||
| `transmittal` | `transmittal` | `backend`, `frontend`, `worker` | `transmittal-api`, `transmittal-frontend` | B S U T |
|
||||
| `workspaces` | `workspaces` | `backend`, `frontend` | `workspaces`, `workspaces-v2-frontend` | B S U T |
|
||||
|
||||
**Как читать состав.** Типовой backend-сервис = `backend` (API) + `celery`/`worker` (асинхронные
|
||||
задачи) + `frontend` (статика). Девять приложений — **чисто фронтендовые**: `auth-flow`,
|
||||
`control-interface`, `cross-section`, `document-link`, `prescriptions`, `projects`, `remarks`,
|
||||
`reviews`, `stamp-verification`. Самое крупное — `cde` (13 релизов: оркестратор + 11 воркеров
|
||||
по типам операций над документами).
|
||||
|
||||
#### 5.3.3 Где приложения реально разворачиваются
|
||||
|
||||
| Кластер | Приложений подключено | Комментарий |
|
||||
|---|---|---|
|
||||
| `d8-ugmk-prod` | **35** | самый полный контур |
|
||||
| `yc-k8s-test` | **34** | тестовый, близок к полному |
|
||||
| `brusnika-stage` | **30** | |
|
||||
| `brusnika-prod` | **26** | |
|
||||
| `yc-ecp` | **2** | только `django` и `measurements` |
|
||||
| `wb`, `yc-cps-prod`, `yc-infra-prod`, `yc-k8s-test-02`, `contour` | **0** | приложений из `apps/` не деплоят: эти кластеры несут только `infrastructure/` |
|
||||
|
||||
**Мёртвые и неподключённые оверлеи** — каталог существует, но ни один
|
||||
`clusters/*/kustomization.yaml` на него не ссылается, то есть Flux его не применяет:
|
||||
|
||||
| Кластер | Неподключённые оверлеи |
|
||||
|---|---|
|
||||
| `brusnika-prod` | `attachments`, `auth-flow`, `cde`, `comparisons`, `cross-section`, `faas`, `iam`, `prescriptions`, `projects` |
|
||||
| `brusnika-stage` | `cde`, `comparisons`, `cross-section`, `faas`, `inspections`, `prescriptions` |
|
||||
| `yc-k8s-test` | `document-link`, `iam` |
|
||||
|
||||
Отдельно **`dsinv/`** — оверлей у **25 приложений**, но **кластера `clusters/dsinv/` не существует**
|
||||
и никто на него не ссылается. Судя по содержимому (готовые `Deployment` с `SERVICE_URL=https://srx.wb.ru`)
|
||||
и по каталогу `snapshots/dsinv/`, это **материализованный снимок живого контура WB**, а не рабочий
|
||||
оверлей. Использовать как справочник «что реально крутится», не как источник деплоя.
|
||||
|
||||
#### 5.3.4 Две несовместимые конвенции оверлеев ⚠️
|
||||
|
||||
| Кластер | Как устроен оверлей | Приложений |
|
||||
|---|---|---|
|
||||
| `d8-ugmk-prod`, `yc-k8s-test`, `dsinv` | ✅ **наследует `base`**: `resources: [../base]` + `patches:` | 35 / 36 / 25 |
|
||||
| `brusnika-prod`, `brusnika-stage`, `yc-ecp` | ⚠️ **самостоятельный**: `base` не подключается, `HelmRelease` скопирован целиком | 35 / 36 / 2 |
|
||||
|
||||
Последствие — **тихий дрейф**. Пример: `apps/bim/base/backend.yaml` использует
|
||||
`universal-chart` **0.1.9**, а его полная копия `apps/bim/brusnika-prod/backend.yaml` — **0.1.7**.
|
||||
Правка в `base/` до контуров Брусники не доедет, и никакой ошибки при этом не возникнет.
|
||||
|
||||
Это же объясняет разнобой версий чарта: 0.1.7 остался у `ams-sync`, `auth-flow`,
|
||||
`control-interface`, `cross-section`, `remarks`, `reviews`.
|
||||
|
||||
#### 5.3.5 Секреты: Vault Agent Injector
|
||||
|
||||
Пароли БД в git не лежат. Под получает их файлом от sidecar-инжектора Vault:
|
||||
|
||||
```yaml
|
||||
vault.hashicorp.com/agent-inject: "true"
|
||||
vault.hashicorp.com/agent-init-first: "true"
|
||||
vault.hashicorp.com/agent-pre-populate-only: "true" # только init-контейнер, без постоянного sidecar
|
||||
vault.hashicorp.com/auth-path: auth/kubernetes
|
||||
vault.hashicorp.com/role: bim # роль = имя приложения
|
||||
vault.hashicorp.com/agent-inject-secret-bim-postgresql: secrets/data/apps/bim/postgres
|
||||
vault.hashicorp.com/agent-inject-template-bim-postgresql: |- # → env-файл
|
||||
POSTGRES_ADDRESS={{ index .Data.data "host" }} …
|
||||
```
|
||||
|
||||
Дальше контейнер стартует как `sh -ec 'set -a; . /vault/secrets/<name>; set +a; exec ./httpserver'`.
|
||||
|
||||
**Соглашение о путях:** `secrets/data/apps/<приложение>/postgres`; нестандартные —
|
||||
`documentations/hasher/{rabbitmq,s3}`, `documentations/marks-s3`.
|
||||
Соответствующие ServiceAccount называются `<app>-vault`.
|
||||
|
||||
Vault используют **26 приложений**. Больше всего инъекций — у `cde` (13), `documentations` (5),
|
||||
`django` и `processing` (по 3). **Не используют** ровно те, у кого нет БД: девять фронтендов
|
||||
(§5.3.2) плюс `ams-sync` и `faas`.
|
||||
|
||||
> Сами БД, пользователи и бакеты, на которые ссылаются эти пути, создаются не здесь,
|
||||
> а в [infra/terraform](https://gitlab.sarex.io/infra/terraform) (`infrastructure.yaml`).
|
||||
|
||||
#### 5.3.6 Документация рядом с манифестами
|
||||
|
||||
Нетипичная и полезная особенность: в каталоге приложения лежит его «паспорт».
|
||||
|
||||
| Файл | Что внутри | Покрытие |
|
||||
|---|---|---|
|
||||
| `CONFIGURATION.md` | все переменные окружения, как они разбираются в коде, и **откуда берутся при каждом способе запуска** (локально / docker-compose / Helm в репозитории приложения / IaC+Vault / GitLab CI); команды и точки входа процессов | 32 / 37 |
|
||||
| `ENDPOINTS.md` | **исходящие** HTTP-вызовы сервиса: библиотека клиента, таймауты, ретраи, проброс JWT, базовые хосты по окружениям, таблица методов и путей | 28 / 37 |
|
||||
| `openapi.yaml` | **входящие** эндпоинты — спецификация того, что сервис предоставляет (от 9 КБ у `mapper` до 101 КБ у `issues`) | 25 / 37 |
|
||||
| `.env.example` | образец переменных с комментариями | 32 / 37 |
|
||||
|
||||
Многокомпонентные приложения используют префиксы вместо одного файла: у `documentations` —
|
||||
`api.*`, `api-v2.*`, `pdm.*`, `frontend.*`, `dps-message-hub.*`; у `processing` —
|
||||
`workflows-api.*`, `workflows-engine.*`, `workflows-frontend.*`; у `workspaces` —
|
||||
`ENDPOINTS-workspaces-frontend.md` и `ENDPOINTS-workspace-v2-frontend.md`.
|
||||
|
||||
**Пробелы в документации:**
|
||||
|
||||
- нет `CONFIGURATION.md`: `control-interface`, `cross-section`, `faas`, `remarks`, `reviews`;
|
||||
- нет `ENDPOINTS.md`: `attachments`, `checklists`, `drawings`, `eav`, `faas`, `measurements`,
|
||||
`resources`, `subscriptions`, `system-log`;
|
||||
- нет диаграммы в `docs/apps/`: `ams-sync`, `auth-flow`, `iam` *(остальные 34 покрыты)*.
|
||||
|
||||
Дополняющий слой — [`docs/apps/`](./docs/apps/README.md): по mermaid-диаграмме на сервис
|
||||
с его зависимостями, сгруппированные по доменам — Платформа/Core, Управление проектом,
|
||||
Документы/CDE, Контроль качества, Полевые данные.
|
||||
|
||||
#### 5.3.7 Внешние маршруты
|
||||
|
||||
Правила Istio живут не в `apps/`, а в `infrastructure/istio-config/<кластер>` и в патчах кластеров.
|
||||
Пример готовой карты маршрутов (`yc-ecp`):
|
||||
|
||||
| Путь | Сервис назначения |
|
||||
|---|---|
|
||||
| `/api`, `/admin/` | `backend-service.django` |
|
||||
| `/media/` | `s3-service.django` |
|
||||
| `/s3/` | `s3-bim-service.django` |
|
||||
| `/eav/api/`, `/eav/admin/` | `eav-service.eav` |
|
||||
| `/bim-gazpromcps/{api,files}/` | `bim-api-gazpromcps-service.bim` |
|
||||
| `/bim2-gazpromcps/api/` | `bim-backend-v2-service.bim` |
|
||||
| `/workflows/api/` | `workflows-backend-service.processing` |
|
||||
| `/projects/static/` | `projects-frontend-static-service.projects` |
|
||||
|
||||
В контурах Брусники и WB прикладной трафик уходит одним правилом на
|
||||
`nginx-service.global-ingress` — пути до конкретных сервисов раскрываются уже там, **вне этого
|
||||
репозитория**. Через Istio там опубликованы только платформенные UI (Gitea, GoAlert, OpenObserve,
|
||||
Superset, Kubernetes Dashboard, Camunda, Jupyter).
|
||||
|
||||
#### 5.3.8 Где лежит код приложений
|
||||
|
||||
Исходники продуктовых сервисов — **вне группы `infra`**: 14 групп верхнего уровня, ~393 проекта.
|
||||
Ориентир по владению:
|
||||
|
||||
| Группа | Домен | Что оттуда деплоится из `apps/` |
|
||||
|---|---|---|
|
||||
| [`platform`](https://gitlab.sarex.io/groups/platform) (95) | платформенное ядро, BIM, workflows, tracking | `bim`, `iam`, `mapper`, `contracts`, `eav`, `system-log`, `processing`, `control-interface`, `resources`, `ams-sync`, `auth-flow`, `cde` |
|
||||
| [`pdm`](https://gitlab.sarex.io/groups/pdm) (41) | документооборот, CDE, PDF | `documentations`, `attachments`, `transmittal`, `workspaces`, `document-link`, `stamp-verification`, `subscriptions`, `comparisons` |
|
||||
| [`proc`](https://gitlab.sarex.io/groups/proc) (24) | процессы и контроль качества | `inspections`, `issues`, `rfi`, `reviews`, `checklists`, `flows`, `remarks`, `prescriptions`, `faas` |
|
||||
| [`planning`](https://gitlab.sarex.io/groups/planning) (10) | планирование | `pm`, `projects`, `message-hub` |
|
||||
| [`aero`](https://gitlab.sarex.io/groups/aero) (50) | гео, полевые данные, обработка съёмки | `measurements`, `drawings`, `notes`, `cross-section` |
|
||||
| [`generic`](https://gitlab.sarex.io/groups/generic) (56) | сквозное: монолит, CI-шаблоны, утилиты | `django` |
|
||||
| [`algorithms`](https://gitlab.sarex.io/groups/algorithms) (82), [`render`](https://gitlab.sarex.io/groups/render) (16) | вычислительные библиотеки, конвертеры, рендер | напрямую не деплоятся — используются джобами и воркерами |
|
||||
| `ai`, `marketing`, `hackathon`, `product`, `algorithms1`, `planning1` | прочее / архив | — |
|
||||
|
||||
**Карта «приложение → репозитории с кодом».** Ключ сопоставления — имя образа
|
||||
`cr.yandex/crp3ccidau046kdj8g9q/<name>` и заголовок `CONFIGURATION.md` / `ENDPOINTS.md`.
|
||||
|
||||
| `apps/` | Компонент (образ) | Репозиторий с кодом |
|
||||
|---|---|---|
|
||||
| `ams-sync` | `ams-sync` | [platform/ams-sync](https://gitlab.sarex.io/platform/ams-sync) ✅ *(смежный: [platform/ams](https://gitlab.sarex.io/platform/ams))* |
|
||||
| `attachments` | `att9` / `attachments` | [pdm/attachments](https://gitlab.sarex.io/pdm/attachments) ✅ |
|
||||
| `auth-flow` | `auth-flow-frontend` | [platform/auth-flow-frontend](https://gitlab.sarex.io/platform/auth-flow-frontend) ✅ |
|
||||
| `bim` | `bim-backend-v2` | [platform/bim-backend-v2](https://gitlab.sarex.io/platform/bim-backend-v2) ✅ |
|
||||
| | `bim-api` (legacy) | [platform/bim](https://gitlab.sarex.io/platform/bim) ◻️ — репозитория с именем `bim-api` нет, привязка по смыслу |
|
||||
| `cde` | `cde`, `orchestrator`, 11 × `*-worker` | [platform/cde-orchestration-demo](https://gitlab.sarex.io/platform/cde-orchestration-demo) ✅ |
|
||||
| | смежные | [pdm/cde-api](https://gitlab.sarex.io/pdm/cde-api), [generic/cde-v2-write-service](https://gitlab.sarex.io/generic/cde-v2-write-service), [generic/level-cde-migration](https://gitlab.sarex.io/generic/level-cde-migration) |
|
||||
| `checklists` | `checklists-backend` | [proc/checklists-backend](https://gitlab.sarex.io/proc/checklists-backend) ✅ |
|
||||
| `comparisons` | `comparisons-backend` | [pdm/comparisons-backend](https://gitlab.sarex.io/pdm/comparisons-backend) ✅, v2 → [pdm/comparisons-api-v2](https://gitlab.sarex.io/pdm/comparisons-api-v2) |
|
||||
| | `comparisons-frontend` | [platform/comparisons-frontend](https://gitlab.sarex.io/platform/comparisons-frontend) ✅ |
|
||||
| | движок сравнения | [platform/comparator](https://gitlab.sarex.io/platform/comparator), [algorithms/comparator-algorithms](https://gitlab.sarex.io/algorithms/comparator-algorithms), [render/comparator-bins](https://gitlab.sarex.io/render/comparator-bins), [algorithms/diff-pdf-algorithm](https://gitlab.sarex.io/algorithms/diff-pdf-algorithm) |
|
||||
| `contracts` | `contracts` | [platform/contracts](https://gitlab.sarex.io/platform/contracts) ✅ + [platform/contracts-frontend](https://gitlab.sarex.io/platform/contracts-frontend) ✅ |
|
||||
| `control-interface` | `srx-admin` | [platform/srx-admin](https://gitlab.sarex.io/platform/srx-admin) ✅ |
|
||||
| `cross-section` | `cross-section-app` | [aero/cross-section](https://gitlab.sarex.io/aero/cross-section) ✅ *(джоба: [aero/cross-secttions-to-dwg-job](https://gitlab.sarex.io/aero/cross-secttions-to-dwg-job))* |
|
||||
| `django` | `backend` | [generic/sarex-backend](https://gitlab.sarex.io/generic/sarex-backend) ✅ |
|
||||
| | `sarex-frontend-dev` | [generic/sarex-frontend](https://gitlab.sarex.io/generic/sarex-frontend) ✅ |
|
||||
| | `s3-proxy` | [generic/s3-proxy](https://gitlab.sarex.io/generic/s3-proxy) ✅ |
|
||||
| | `srx-admin` | [platform/srx-admin](https://gitlab.sarex.io/platform/srx-admin) ✅ |
|
||||
| `document-link` | `document-link-frontend` | [pdm/document-link-frontend](https://gitlab.sarex.io/pdm/document-link-frontend) ✅ |
|
||||
| `documentations` | `documentations` | [pdm/documentation-api](https://gitlab.sarex.io/pdm/documentation-api) ✅ |
|
||||
| | `documentations-api-files` (v2) | [pdm/documentation-api-v2](https://gitlab.sarex.io/pdm/documentation-api-v2) ✅ |
|
||||
| | `hasher` | [pdm/documentation-hasher](https://gitlab.sarex.io/pdm/documentation-hasher) ✅ |
|
||||
| | `pdf-markings-amqp` | [pdm/pdf-markings](https://gitlab.sarex.io/pdm/pdf-markings) ✅ |
|
||||
| | `pdmv2` | [pdm/pdm](https://gitlab.sarex.io/pdm/pdm) ✅ |
|
||||
| | `documentation-frontend-app` | [pdm/documentation-frontend](https://gitlab.sarex.io/pdm/documentation-frontend) ✅ |
|
||||
| | `dps-message-hub` | [pdm/dps_message_hub](https://gitlab.sarex.io/pdm/dps_message_hub) ✅ |
|
||||
| `drawings` | `drawings-api` | [aero/drawings-api](https://gitlab.sarex.io/aero/drawings-api) ✅ |
|
||||
| `eav` | `eav` | [platform/eav_python](https://gitlab.sarex.io/platform/eav_python) ✅ *(gRPC-ветка: [platform/eav](https://gitlab.sarex.io/platform/eav))* |
|
||||
| `faas` | `export-reviews` | [proc/export-reviews](https://gitlab.sarex.io/proc/export-reviews) ✅ *(в GitLab называется `flows-export`)* |
|
||||
| `flows` | `flows-backend`, `flows-backend_worker` | [proc/flows-backend](https://gitlab.sarex.io/proc/flows-backend) ✅ |
|
||||
| | `flows-frontend` | [proc/flows-frontend](https://gitlab.sarex.io/proc/flows-frontend) ✅ |
|
||||
| `iam` | `iams` | [platform/iams-v2](https://gitlab.sarex.io/platform/iams-v2) ✅ *(смежный: [platform/srx-rebac](https://gitlab.sarex.io/platform/srx-rebac))* |
|
||||
| `inspections` | `sarex-inspections` | [proc/inspections-backend](https://gitlab.sarex.io/proc/inspections-backend) ✅ — подтверждено аннотацией `gitlab-uri` |
|
||||
| | фронтенд | [proc/inspections-frontend](https://gitlab.sarex.io/proc/inspections-frontend) ✅ |
|
||||
| | `notification:email` | [generic/jobs/email-notification-task](https://gitlab.sarex.io/generic/jobs/email-notification-task) ✅ |
|
||||
| `issues` | `issues` | [proc/issues-backend](https://gitlab.sarex.io/proc/issues-backend) ✅ |
|
||||
| | `contour_issues-frontend` | [proc/issues-frontend](https://gitlab.sarex.io/proc/issues-frontend) ✅ |
|
||||
| | `crop-issue-pin-area` | [proc/crop-issue-pin-area-task](https://gitlab.sarex.io/proc/crop-issue-pin-area-task) ✅ |
|
||||
| | `docx-to-pdf`, `rendering-template` | [pdm/docx-to-pdf](https://gitlab.sarex.io/pdm/docx-to-pdf), [pdm/rendering-template](https://gitlab.sarex.io/pdm/rendering-template) ✅ |
|
||||
| | `webhook-caller` | [platform/webhook-caller](https://gitlab.sarex.io/platform/webhook-caller) ✅ |
|
||||
| `mapper` | `mapper` | [platform/mapper](https://gitlab.sarex.io/platform/mapper) ✅ |
|
||||
| `measurements` | `measurements` | [aero/measurements](https://gitlab.sarex.io/aero/measurements) ✅ |
|
||||
| `message-hub` | `message-hub` | [planning/message-hub](https://gitlab.sarex.io/planning/message-hub) ✅ |
|
||||
| `notes` | `notes-backend` / `notes-frontend` | [aero/notes-backend](https://gitlab.sarex.io/aero/notes-backend), [aero/notes-frontend](https://gitlab.sarex.io/aero/notes-frontend) ✅ |
|
||||
| `pm` | `pm-backend` / `pm-frontend` | [planning/pm-backend](https://gitlab.sarex.io/planning/pm-backend), [planning/pm-frontend](https://gitlab.sarex.io/planning/pm-frontend) ✅ |
|
||||
| | `resources-frontend` | [planning/resources-frontend](https://gitlab.sarex.io/planning/resources-frontend) ✅ |
|
||||
| `prescriptions` | `prescriptions-frontend` | [proc/prescriptions-frontend](https://gitlab.sarex.io/proc/prescriptions-frontend) ✅ |
|
||||
| `processing` | `workflows-api` | [platform/workflows-api](https://gitlab.sarex.io/platform/workflows-api) ✅ |
|
||||
| | `workflows-engine`, `kubernetes-engine` | [platform/workflows-engine](https://gitlab.sarex.io/platform/workflows-engine) ✅ |
|
||||
| | `workflows-frontend` | [platform/workflows-frontend](https://gitlab.sarex.io/platform/workflows-frontend) ✅ |
|
||||
| | смежные | [platform/workflows-backend](https://gitlab.sarex.io/platform/workflows-backend), [generic/workflows-tools](https://gitlab.sarex.io/generic/workflows-tools), [generic/processing/job_template](https://gitlab.sarex.io/generic/processing/job_template) |
|
||||
| `projects` | `project-frontend-app` / `projects-frontend` | [planning/projects-frontend](https://gitlab.sarex.io/planning/projects-frontend) ✅ *(API: [planning/projects-backend](https://gitlab.sarex.io/planning/projects-backend))* |
|
||||
| `remarks` | `remarks-frontend` | [proc/remarks-frontend](https://gitlab.sarex.io/proc/remarks-frontend) ✅ |
|
||||
| | `remarks-api`, `export-remarks` | ⚠️ [proc/remarks-api](https://gitlab.sarex.io/proc/remarks-api), [proc/export-remarks](https://gitlab.sarex.io/proc/export-remarks) — **помечены `_archived_`** в GitLab, но образы ещё встречаются в манифестах |
|
||||
| `resources` | `sarex-resources` | [platform/sarex-resources](https://gitlab.sarex.io/platform/sarex-resources) ✅ *(старая копия: [generic/sarex-resources1](https://gitlab.sarex.io/generic/sarex-resources1))* |
|
||||
| `reviews` | `reviews-frontend` | [proc/reviews-frontend](https://gitlab.sarex.io/proc/reviews-frontend) ✅ |
|
||||
| `rfi` | `rfi-backend` / `rfi-frontend` | [proc/rfi-backend](https://gitlab.sarex.io/proc/rfi-backend), [proc/rfi-frontend](https://gitlab.sarex.io/proc/rfi-frontend) ✅ |
|
||||
| `stamp-verification` | `stamp-verification-frontend` | [pdm/stamp-verification-frontend](https://gitlab.sarex.io/pdm/stamp-verification-frontend) ✅ |
|
||||
| `subscriptions` | `subscriptions` / `sarex-subscriptions` | [pdm/sarex-subscriptions](https://gitlab.sarex.io/pdm/sarex-subscriptions) ✅ |
|
||||
| `system-log` | `system-log` / `system-log-worker` | [platform/system-log](https://gitlab.sarex.io/platform/system-log), [platform/system-log-worker](https://gitlab.sarex.io/platform/system-log-worker) ✅ |
|
||||
| `transmittal` | `transmittal-api` / `transmittal-frontend` | [pdm/transmittal-api](https://gitlab.sarex.io/pdm/transmittal-api), [pdm/transmittal-frontend](https://gitlab.sarex.io/pdm/transmittal-frontend) ✅ |
|
||||
| `workspaces` | `workspaces` | [pdm/workspaces-api](https://gitlab.sarex.io/pdm/workspaces-api) ✅ |
|
||||
| | `workspaces-frontend-static` | [platform/workspaces-frontend](https://gitlab.sarex.io/platform/workspaces-frontend) ✅ |
|
||||
| | `workspaces-v2-frontend` | [platform/workspace-v2-frontend](https://gitlab.sarex.io/platform/workspace-v2-frontend) ✅ |
|
||||
|
||||
**Как искать самому, если компонента нет в таблице.** Порядок надёжности:
|
||||
|
||||
1. Взять имя образа из `apps/<app>/base/*.yaml` — `cr.yandex/crp3ccidau046kdj8g9q/**<name>**:tag`.
|
||||
В большинстве случаев `<name>` = `path` репозитория.
|
||||
2. Открыть `apps/<app>/CONFIGURATION.md` — в первой строке стоит **настоящее имя проекта**
|
||||
(например `apps/eav` → «Конфигурация проекта eav-python» → `platform/eav_python`).
|
||||
3. Искать по GitLab: `scope: projects`, термин ≥ 3 символов, матч идёт по `path_with_namespace` —
|
||||
поэтому запрос по имени группы (`proc`, `pdm`, `planning`) выдаёт всю группу целиком.
|
||||
4. Если сервис уже работает в кластере — у его `Deployment` есть аннотации
|
||||
`gitlab-uri` и `gitlab-job`, проставляемые CI, с прямой ссылкой на репозиторий и джобу сборки.
|
||||
|
||||
⚠️ Имя образа **не всегда** совпадает с репозиторием: `att9` → `pdm/attachments`,
|
||||
`iams` → `platform/iams-v2`, `pdmv2` → `pdm/pdm`, `export-reviews` → `proc/export-reviews`
|
||||
(в GitLab отображается как `flows-export`), `sarex-inspections` → `proc/inspections-backend`.
|
||||
Суффиксы `_prod`, `contour_`, `-dev` в имени образа — артефакты веток CI, не часть имени проекта.
|
||||
|
||||
Общий CI-конвейер для всех этих репозиториев —
|
||||
[generic/common-ci](https://gitlab.sarex.io/generic/common-ci) (подключается в `.gitlab-ci.yml`
|
||||
каждого сервиса), базовый образ — [generic/base-image](https://gitlab.sarex.io/generic/base-image).
|
||||
|
||||
### 5.4 Вспомогательное в репозитории
|
||||
|
||||
| Путь | Назначение |
|
||||
|---|---|
|
||||
| `inventory.yaml` | Сгенерированный инвентарь prod: namespace → тип ресурса → имена (ConfigMap/Secret/Deployment/Service/EnvoyFilter) |
|
||||
| `snapshots/dsinv/` | Снимки живых манифестов (в `.gitignore`, локальный артефакт) |
|
||||
| `docs/apps/` | Диаграмма и описание по каждому бизнес-сервису |
|
||||
| `gitea-data/` | Локальные данные Gitea — рабочий артефакт, **не коммитить** |
|
||||
|
||||
---
|
||||
|
||||
## 6. Перекрытия и как выбирать источник истины
|
||||
|
||||
Для ~20 компонентов существуют оба источника — каталог в `infra/iac` и отдельный репозиторий.
|
||||
Наблюдаемое правило (по факту содержимого, **стоит подтвердить с владельцами**):
|
||||
|
||||
| Ситуация | Источник истины |
|
||||
|---|---|
|
||||
| Кластер перечислен в §5.1 (`yc-*`, `brusnika-*`, `wb`, `d8-ugmk-prod`) | **`infra/iac`**, ветка `master`. Правки в отдельном репозитории туда не доедут |
|
||||
| Контур деплоится GitLab CI (ветки `stage`, `preprod`, `contour`, `infra`, `contour/cps`, `stronghold`) | **Отдельный репозиторий компонента**, ветка = имя контура |
|
||||
| Контур ГПН | **`infra/iac-gpn`** (ArgoCD), не Flux |
|
||||
| Namespace, БД, S3-бакет, Kafka-топик, пользователь, k8s-секрет | **`infra/terraform`** (`infrastructure.yaml`) — не создавать вручную и не дублировать в Flux |
|
||||
| Изолированный контур без доступа к GitLab | `infra/iac` → зеркало **Gitea** → Flux. Пуш в GitLab обязателен, но недостаточен: нужно, чтобы зеркало обновилось |
|
||||
|
||||
Особые случаи:
|
||||
|
||||
- **`prometheus-stack` vs `kube-prometheus-stack`** — два разных репозитория с пересекающейся зоной;
|
||||
в `iac` компонент один (`prometheus-stack`). Требует ревизии.
|
||||
- **`terraform` vs `terraform-contour-mirror`** — README идентичны, `mirror` живёт только в ветке
|
||||
`contour` и активен (2026-08-04). Расхождение между ними — реальный риск дрейфа.
|
||||
- **`istio-config`** — самый «многоконтурный» репозиторий (7 веток) и одновременно компонент в `iac`.
|
||||
- **`poc/iac`** — архив; не путать с `infra/iac`.
|
||||
|
||||
---
|
||||
|
||||
## 7. Эксплуатация, аудит и данные
|
||||
|
||||
| Репозиторий | Отвечает за |
|
||||
|---|---|
|
||||
| [infra/k8s-changelog](https://gitlab.sarex.io/infra/k8s-changelog) ✅ | Ежедневный снимок всех манифестов кластера в стабильную файловую структуру и коммит в git — **читаемый diff состояния кластера** для аудита и восстановления. Чистит `status`, `managedFields`, значения секретов |
|
||||
| [infra/harvester](https://gitlab.sarex.io/infra/harvester) ✅ | **Резервное копирование данных платформы Sarex** (документация, планирование, замечания, рабочие процессы). Kafka-download/sync приложения, манифесты, mkdocs |
|
||||
| [infra/scripts/extract-kuberntes-manifests-to-s3](https://gitlab.sarex.io/infra/scripts/extract-kuberntes-manifests-to-s3) ◻️ | Выгрузка манифестов кластера в S3 |
|
||||
| [infra/yc-pg-dumper](https://gitlab.sarex.io/infra/yc-pg-dumper) ◻️ (+ компонент `infrastructure/yc-pg-dumper`) | Дампы PostgreSQL в Yandex Cloud |
|
||||
| [infra/backups/*](https://gitlab.sarex.io/infra/backups) ◻️ | `frontend`, `workers`, `sendbox`, `collect-pdm-data-from-postgresql` — подсистема бэкапов |
|
||||
| [infra/postgresql-ddl-extractor](https://gitlab.sarex.io/infra/postgresql-ddl-extractor) ◻️ | Извлечение DDL из PostgreSQL |
|
||||
| [infra/k8s-hustler](https://gitlab.sarex.io/infra/k8s-hustler), [infra/revisor](https://gitlab.sarex.io/infra/revisor), [infra/peeping](https://gitlab.sarex.io/infra/peeping) ◻️ | Утилиты инспекции/ревизии кластера |
|
||||
| [infra/compnay-cleanup-kit](https://gitlab.sarex.io/infra/compnay-cleanup-kit) ◻️ | Очистка данных компании *(опечатка в имени — так в GitLab)* |
|
||||
| [infra/py-s3-size](https://gitlab.sarex.io/infra/py-s3-size), [infra/get_size_SOD](https://gitlab.sarex.io/infra/get_size_SOD), [infra/jobs/object-storage-size-by-project](https://gitlab.sarex.io/infra/jobs/object-storage-size-by-project) ◻️ | Учёт объёмов объектного хранилища |
|
||||
| [infra/s3-replication-poc](https://gitlab.sarex.io/infra/s3-replication-poc) ◻️ | Репликация S3 (PoC) |
|
||||
| [infra/wunderwaffe-operator](https://gitlab.sarex.io/infra/wunderwaffe-operator), [infra/wunderwaffe-tasks](https://gitlab.sarex.io/infra/wunderwaffe-tasks), [infra/wunderwaffe-dumpster](https://gitlab.sarex.io/infra/wunderwaffe-dumpster) ◻️ | Собственный k8s-оператор и его задачи |
|
||||
|
||||
---
|
||||
|
||||
## 8. Контуры заказчиков
|
||||
|
||||
| Подгруппа / репозиторий | Контур | Содержимое |
|
||||
|---|---|---|
|
||||
| [infra/wb/*](https://gitlab.sarex.io/infra/wb) ◻️ | WB | `manifestos-k8s`, `postgresql16`, `helm-of-business`. Кластер `wb` в `iac` синхронизируется из `gitea-srx.wb.ru` |
|
||||
| [infra/gpnt/*](https://gitlab.sarex.io/infra/gpnt) ◻️ | ГПН, OpenShift | UBI-образы: `base`, `backend`, `nginx`, `postgres`, `rabbitmq`, `redis`, `comparator`; `gpnt-os` — «manifest and helm templates for openshift» |
|
||||
| [infra/gpnr/*](https://gitlab.sarex.io/infra/gpnr) ◻️ | ГПН-Р | `docker-packaging-gdal-builder`, `docker-packaging-potree-builder`, `u190001439_skzssrx*` |
|
||||
| [infra/severstal/*](https://gitlab.sarex.io/infra/severstal) ◻️ | Северсталь | UBI-образы + `ingress`, `provision` |
|
||||
| [infra/iac-gpn](https://gitlab.sarex.io/infra/iac-gpn) ✅ | ГПН | ArgoCD-монорепозиторий контура |
|
||||
| [infra/brusnika](https://gitlab.sarex.io/infra/brusnika), [infra/uralchem](https://gitlab.sarex.io/infra/uralchem), [infra/ugok](https://gitlab.sarex.io/infra/ugok), [infra/cps2](https://gitlab.sarex.io/infra/cps2) ◻️ | Брусника, Уралхим, УГОК, ЦПС | Контурные наборы (низкая активность — часть с 2025-01) |
|
||||
|
||||
---
|
||||
|
||||
## 9. Инструменты, скрипты, документация
|
||||
|
||||
| Репозиторий | Отвечает за |
|
||||
|---|---|
|
||||
| [infra/kafka-router](https://gitlab.sarex.io/infra/kafka-router) ✅ | Проксирование сообщений между Kafka-кластерами по `TOPIC_MAPPING`, с фильтрацией по компании (FastStream) |
|
||||
| [infra/tools/sarex-cli-service](https://gitlab.sarex.io/infra/tools/sarex-cli-service) | Python-скрипт подъёма локального окружения разработчика *(описание из GitLab)* |
|
||||
| [infra/tools/sdk-python](https://gitlab.sarex.io/infra/tools/sdk-python) ◻️ | Внутренний Python SDK |
|
||||
| [infra/bash-scripts](https://gitlab.sarex.io/infra/bash-scripts), [infra/python-scripts](https://gitlab.sarex.io/infra/python-scripts), [infra/scripts/*](https://gitlab.sarex.io/infra/scripts), [d.emelin/infra-scripts](https://gitlab.sarex.io/d.emelin/infra-scripts) ◻️ | Разрозненные операционные скрипты |
|
||||
| [infra/transfer-tools](https://gitlab.sarex.io/infra/transfer-tools) ◻️ | Перенос данных между контурами |
|
||||
| [infra/docs/deploy](https://gitlab.sarex.io/infra/docs/deploy), [infra/docs/services](https://gitlab.sarex.io/infra/docs/services), [infra/kb](https://gitlab.sarex.io/infra/kb) ◻️ | Документация по деплою и сервисам, база знаний |
|
||||
| [infra/automations/terraform-deletion_scheduled-454](https://gitlab.sarex.io/infra/automations/terraform-deletion_scheduled-454) ◻️ | Автоматизация; судя по имени — запланированное удаление ресурсов. **Проверить перед любыми действиями** |
|
||||
| [infra/poc/*](https://gitlab.sarex.io/infra/poc) (~30 репозиториев) ◻️ | Песочница: `k8s-teleport`, `k8s-events`, `contour-storage`, `git-server`, `minikube`, `offline-sentry`, `offline-signoz`, `cdc`, `delta`, `trace-viewer`, `streaming-dump`, `system-tests`, `s3-*`, `unity/*` и др. **Не источник истины для прода** |
|
||||
|
||||
---
|
||||
|
||||
## 10. Как пользоваться каталогом
|
||||
|
||||
**Меняю поведение компонента в кластере из §5.1** → `infra/iac`, `infrastructure/<компонент>/patches/`
|
||||
или оверлей кластера; проверка — `flux get kustomizations`, `flux get helmreleases -A`.
|
||||
|
||||
**Меняю поведение компонента в CI-контуре** → соответствующий `infra/<компонент>`, **ветка контура**,
|
||||
каталог `.helm/`.
|
||||
|
||||
**Выкатываю новую версию приложения** → `apps/<app>/`: тег образа в `base/<компонент>.yaml`,
|
||||
если кластер наследует базу (`d8-ugmk-prod`, `yc-k8s-test`), **и отдельно** в
|
||||
`apps/<app>/brusnika-*/`, `apps/<app>/yc-ecp/` — эти оверлеи базу не подключают (§5.3.4).
|
||||
Перед правкой сверься с §5.3.3: возможно, оверлей вообще не подключён к кластеру.
|
||||
|
||||
**Нужен новый секрет для приложения** → положить в Vault по пути `secrets/data/apps/<app>/…`
|
||||
и добавить `vault.hashicorp.com/agent-inject-*` в `podAnnotations` (§5.3.5). В git секрет не кладём.
|
||||
|
||||
**Ищу исходники сервиса по имени namespace или образа** → карта «приложение → репозиторий»
|
||||
в §5.3.8; там же порядок поиска, если компонента в таблице нет.
|
||||
|
||||
**Нужен новый namespace / БД / бакет / топик / секрет** → `infra/terraform`, `infrastructure.yaml`
|
||||
(секреты — через SOPS, см. `SOPS.md`); для контура — `terraform-contour` / `terraform-contour-mirror`.
|
||||
|
||||
**Нужен новый кластер** → `kubespray` → `k8s-provision` → `flux bootstrap --path=clusters/<имя>`
|
||||
в `infra/iac`.
|
||||
|
||||
**Понять, что реально крутится в кластере** → `inventory.yaml` в этом репозитории и
|
||||
`infra/k8s-changelog` (git-история состояния).
|
||||
|
||||
---
|
||||
|
||||
### Открытые вопросы
|
||||
|
||||
1. Привести оверлеи `brusnika-prod`, `brusnika-stage`, `yc-ecp` к наследованию `../base` — сейчас
|
||||
это полные копии, которые молча расходятся с базой (§5.3.4).
|
||||
2. Разобрать 17 неподключённых оверлеев приложений и 25 каталогов `dsinv/`: удалить или
|
||||
подключить (§5.3.3).
|
||||
3. Выровнять версию `universal-chart` — шесть приложений остались на 0.1.7 при базовой 0.1.9.
|
||||
4. Разграничить `prometheus-stack` и `kube-prometheus-stack` — какой из них актуален.
|
||||
5. Зафиксировать регламент синхронизации `terraform` ↔ `terraform-contour-mirror`.
|
||||
6. Для ~60 компонентных репозиториев определить, какие мигрируют в `infra/iac`, а какие остаются
|
||||
на CI-деплое; остальное — архивировать.
|
||||
7. Закрыть пробелы в паспортах сервисов (§5.3.6) и подтвердить назначение репозиториев с ◻️.
|
||||
@ -49,10 +49,19 @@ spec:
|
||||
[ -f /vault/secrets/attachments-db ] && . /vault/secrets/attachments-db
|
||||
[ -f /vault/secrets/attachments-s3 ] && . /vault/secrets/attachments-s3
|
||||
set +a
|
||||
mkdir -p /etc/sarex/yc-s3-storage
|
||||
cat > /etc/sarex/yc-s3-storage/yc-s3-service-account.json <<EOF
|
||||
{
|
||||
"endpoint": "${YANDEX_S3_ENDPOINT_URL}",
|
||||
"access_key_id": "${YANDEX_S3_ACCESS_KEY_ID}",
|
||||
"secret_access_key": "${YANDEX_S3_SECRET_ACCESS_KEY}",
|
||||
"use_ssl": ${YANDEX_S3_USE_SSL}
|
||||
}
|
||||
EOF
|
||||
exec /opt/attachments/entrypoint.sh
|
||||
image:
|
||||
name:
|
||||
_default: cr.yandex/crp3ccidau046kdj8g9q/attachments:feature_6238c882
|
||||
_default: cr.yandex/crp3ccidau046kdj8g9q/att9:dev
|
||||
pullPolicy:
|
||||
_default: IfNotPresent
|
||||
service:
|
||||
@ -76,6 +85,9 @@ spec:
|
||||
- name: POSTGRES_POOL_SIZE
|
||||
value:
|
||||
_default: "10"
|
||||
- name: YANDEX_S3_ACCOUNT_PATH
|
||||
value:
|
||||
_default: "/etc/sarex/yc-s3-storage/yc-s3-service-account.json"
|
||||
- name: API_ADDRESS
|
||||
value:
|
||||
_default: 0.0.0.0:8000
|
||||
@ -103,7 +115,7 @@ spec:
|
||||
YANDEX_S3_ENDPOINT_URL=minio.minio:9000
|
||||
YANDEX_S3_ACCESS_KEY_ID={{ index .Data.data "access_key" }}
|
||||
YANDEX_S3_SECRET_ACCESS_KEY={{ index .Data.data "secret_key" }}
|
||||
YANDEX_S3_USE_SSL=false
|
||||
YANDEX_S3_USE_SSL=true
|
||||
YANDEX_S3_REGION=ru-central
|
||||
YANDEX_S3_VERIFY=false
|
||||
BUCKET_NAME=attachments
|
||||
|
||||
@ -22,14 +22,14 @@ spec:
|
||||
DATABASE_PASSWORD={{ index .Data.data "password" }}
|
||||
DATABASE_SSL_MODE=disable
|
||||
{{- end -}}
|
||||
# vault.hashicorp.com/agent-inject-secret-attachments-s3: secrets/data/minio/apps/attachments
|
||||
# vault.hashicorp.com/agent-inject-template-attachments-s3: |-
|
||||
# {{- with secret "secrets/data/minio/apps/attachments" -}}
|
||||
# YANDEX_S3_ENDPOINT_URL=minio.minio:9000
|
||||
# YANDEX_S3_ACCESS_KEY_ID={{ index .Data.data "access_key" }}
|
||||
# YANDEX_S3_SECRET_ACCESS_KEY={{ index .Data.data "secret_key" }}
|
||||
# YANDEX_S3_USE_SSL=false
|
||||
# YANDEX_S3_REGION=ru-central
|
||||
# YANDEX_S3_VERIFY=false
|
||||
# BUCKET_NAME=attachments
|
||||
# {{- end -}}
|
||||
vault.hashicorp.com/agent-inject-secret-attachments-s3: secrets/data/minio/apps/attachments
|
||||
vault.hashicorp.com/agent-inject-template-attachments-s3: |-
|
||||
{{- with secret "secrets/data/minio/apps/attachments" -}}
|
||||
YANDEX_S3_ENDPOINT_URL=s3.uralmine.com
|
||||
YANDEX_S3_ACCESS_KEY_ID={{ index .Data.data "access_key" }}
|
||||
YANDEX_S3_SECRET_ACCESS_KEY={{ index .Data.data "secret_key" }}
|
||||
YANDEX_S3_USE_SSL=true
|
||||
YANDEX_S3_REGION=ru-central
|
||||
YANDEX_S3_VERIFY=false
|
||||
BUCKET_NAME=sarex-attachments-storage
|
||||
{{- end -}}
|
||||
|
||||
@ -42,7 +42,7 @@ spec:
|
||||
|
||||
image:
|
||||
name:
|
||||
_default: cr.yandex/crp3ccidau046kdj8g9q/bim-api:contour_f9f2a39
|
||||
_default: cr.yandex/crp3ccidau046kdj8g9q/bim-api:contour_f9f2a39-dirty
|
||||
pullPolicy:
|
||||
_default: IfNotPresent
|
||||
|
||||
|
||||
@ -64,7 +64,7 @@ spec:
|
||||
service:
|
||||
enabled: true
|
||||
name:
|
||||
_default: rfi-backend-api-svc
|
||||
_default: backend-svc
|
||||
type:
|
||||
_default: ClusterIP
|
||||
port:
|
||||
|
||||
@ -285,6 +285,9 @@ spec:
|
||||
S3_BUCKET={{ if gt (len $buckets) 0 }}{{ index (index $buckets 0) "name" }}{{ else }}django{{ end }}
|
||||
S3_LOGIN={{ index .Data.data "access_key" }}
|
||||
S3_PASSWORD={{ index .Data.data "secret_key" }}
|
||||
AWS_S3_ACCESS_KEY_ID={{ index .Data.data "access_key" }}
|
||||
AWS_S3_SECRET_ACCESS_KEY={{ index .Data.data "secret_key" }}
|
||||
AWS_STORAGE_BUCKET_NAME={{ if gt (len $buckets) 0 }}{{ index (index $buckets 0) "name" }}{{ else }}django{{ end }}
|
||||
{{- end }}
|
||||
vault.hashicorp.com/agent-inject-secret-django-kafka: secrets/data/kafka/apps/django
|
||||
vault.hashicorp.com/agent-inject-template-django-kafka: |-
|
||||
|
||||
@ -62,6 +62,7 @@ data:
|
||||
if_modified_since off;
|
||||
expires off;
|
||||
}
|
||||
|
||||
location ~^/api/pm/ {
|
||||
#rewrite /api/(.+) /$1 break;
|
||||
proxy_http_version 1.1;
|
||||
@ -70,11 +71,12 @@ data:
|
||||
proxy_pass http://backend-svc.pm.svc.cluster.local:8000;
|
||||
}
|
||||
|
||||
# location ~^/api/v1/documents/ {
|
||||
# #rewrite /api/(.+) /$1 break;
|
||||
# proxy_set_header Host $host;
|
||||
# proxy_pass http://backend-filestream-svc.documentations.svc.cluster.local:80;
|
||||
# }
|
||||
location ~^/api/v1/documents/ {
|
||||
proxy_http_version 1.1;
|
||||
#rewrite /api/(.+) /$1 break;
|
||||
proxy_set_header Host $host;
|
||||
proxy_pass http://backend-filestream-svc.documentations.svc.cluster.local:80;
|
||||
}
|
||||
|
||||
location ~^/(api|admin)/ {
|
||||
proxy_http_version 1.1;
|
||||
@ -83,6 +85,48 @@ data:
|
||||
proxy_pass http://backend-svc.django.svc.cluster.local:80;
|
||||
}
|
||||
|
||||
|
||||
location = /static/pdf-runtime/assets/mupdf-wasm.wasm {
|
||||
alias /opt/react_client/static/pdf-runtime/assets/mupdf-wasm.wasm;
|
||||
add_header Content-Type application/wasm always;
|
||||
add_header Cache-Control "public, max-age=31536000, immutable" always;
|
||||
add_header Access-Control-Allow-Origin "*" always;
|
||||
add_header Access-Control-Allow-Methods "GET, OPTIONS" always;
|
||||
add_header Access-Control-Allow-Headers "DNT,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,Authorization" always;
|
||||
}
|
||||
|
||||
location = /workspaces-v2/worker/static/viewer-pdf/mupdf-wasm.js {
|
||||
alias /opt/react_client/static/viewer-pdf/mupdf-wasm.js;
|
||||
add_header Content-Type application/javascript always;
|
||||
add_header Cache-Control "public, max-age=31536000, immutable" always;
|
||||
add_header Access-Control-Allow-Origin "*" always;
|
||||
add_header Access-Control-Allow-Methods "GET, OPTIONS" always;
|
||||
add_header Access-Control-Allow-Headers "DNT,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,Authorization" always;
|
||||
}
|
||||
|
||||
location = /workspaces-v2/worker/mupdf.worker-3.3.9.js {
|
||||
alias /opt/react_client/static/pdf-runtime/mupdf.worker-3.3.9.js;
|
||||
add_header Content-Type application/javascript always;
|
||||
add_header Cache-Control "public, max-age=31536000, immutable" always;
|
||||
add_header Access-Control-Allow-Origin "*" always;
|
||||
add_header Access-Control-Allow-Methods "GET, OPTIONS" always;
|
||||
add_header Access-Control-Allow-Headers "DNT,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,Authorization" always;
|
||||
}
|
||||
|
||||
location = /workspaces-v2/worker/static/viewer-pdf/mupdf.js {
|
||||
alias /opt/react_client/static/viewer-pdf/mupdf.js;
|
||||
add_header Content-Type application/javascript always;
|
||||
add_header Cache-Control "public, max-age=31536000, immutable" always;
|
||||
add_header Access-Control-Allow-Origin "*" always;
|
||||
add_header Access-Control-Allow-Methods "GET, OPTIONS" always;
|
||||
add_header Access-Control-Allow-Headers "DNT,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,Authorization" always;
|
||||
}
|
||||
|
||||
location = /workspaces-v2/worker/static/viewer-pdf/mupdf-wasm.wasm {
|
||||
add_header Content-Type application/wasm always;
|
||||
alias /opt/react_client/static/viewer-pdf/mupdf-wasm.wasm;
|
||||
}
|
||||
|
||||
location ~^/workspaces-v2/(.+).js {
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Connection "";
|
||||
@ -90,7 +134,6 @@ data:
|
||||
proxy_pass http://frontend-svc.workspaces.svc.cluster.local:80;
|
||||
}
|
||||
|
||||
|
||||
location ~^/workspaces-v2/(.+)\.wasm$ {
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Connection "";
|
||||
|
||||
@ -126,9 +126,13 @@ spec:
|
||||
- name: ZITADEL_HOST
|
||||
value:
|
||||
_default: https://sarex-login.uralmine.com
|
||||
# Включено вместе с message-hub: он консьюмер топика message-hub-stage
|
||||
# (SETTINGS_TOPICS в apps/message-hub/d8-ugmk-prod/message-hub.yaml),
|
||||
# а писать в этот топик должен django. Vault-шаблон django-kafka
|
||||
# и KAFKA_SSL_CAFILE уже есть в base — здесь только флаг.
|
||||
- name: SERVER_KAFKA_ENABLED
|
||||
value:
|
||||
_default: "False"
|
||||
_default: "True"
|
||||
- name: KAFKA_TOPICS
|
||||
value:
|
||||
_default: '{"planning": "message-hub-stage", "ams-sync": "ams-sync"}'
|
||||
@ -138,3 +142,17 @@ spec:
|
||||
- name: KC_USE_REDIRECT_LOGOUT
|
||||
value:
|
||||
_default: "False"
|
||||
podAnnotations:
|
||||
_default:
|
||||
vault.hashicorp.com/agent-inject-template-django-s3: |-
|
||||
{{- with secret "secrets/data/minio/apps/django" }}
|
||||
AWS_S3_ENDPOINT_URL=https://s3.uralmine.com
|
||||
S3_HOST=https://s3.uralmine.com
|
||||
{{- $buckets := index .Data.data "buckets" }}
|
||||
S3_BUCKET={{ if gt (len $buckets) 0 }}{{ index (index $buckets 0) "name" }}{{ else }}django{{ end }}
|
||||
S3_LOGIN={{ index .Data.data "access_key" }}
|
||||
S3_PASSWORD={{ index .Data.data "secret_key" }}
|
||||
AWS_S3_ACCESS_KEY_ID={{ index .Data.data "access_key" }}
|
||||
AWS_S3_SECRET_ACCESS_KEY={{ index .Data.data "secret_key" }}
|
||||
AWS_STORAGE_BUCKET_NAME={{ if gt (len $buckets) 0 }}{{ index (index $buckets 0) "name" }}{{ else }}django{{ end }}
|
||||
{{- end }}
|
||||
|
||||
@ -13,3 +13,7 @@ patches:
|
||||
target:
|
||||
kind: ConfigMap
|
||||
name: zitadel-configmap
|
||||
- path: s3-proxy.yaml
|
||||
target:
|
||||
kind: HelmRelease
|
||||
name: s3-proxy
|
||||
31
apps/django/d8-ugmk-prod/s3-proxy.yaml
Normal file
31
apps/django/d8-ugmk-prod/s3-proxy.yaml
Normal file
@ -0,0 +1,31 @@
|
||||
---
|
||||
# Патч s3-proxy для контура УГМК.
|
||||
#
|
||||
# В base зашит AWS_API_ENDPOINT=https://minio.contour.infra.sarex.tech —
|
||||
# в закрытом контуре этот хост недоступен, прокси не достучится до MinIO
|
||||
# и маршрут /media/ (s3-proxy-virt-service в istio-config) вернёт ошибку.
|
||||
#
|
||||
# podAnnotations — map, мержится по ключам, поэтому переопределён только
|
||||
# agent-inject-template-s3; остальные vault-аннотации берутся из base.
|
||||
# Эндпоинт задан литералом, а не через .Data.data.client.endpoint: так же
|
||||
# сделано в apps/django/d8-ugmk-prod/backend.yaml:145 для того же секрета
|
||||
# secrets/data/minio/apps/django — держим один способ на весь ns.
|
||||
apiVersion: helm.toolkit.fluxcd.io/v2
|
||||
kind: HelmRelease
|
||||
metadata:
|
||||
name: s3-proxy
|
||||
namespace: django
|
||||
spec:
|
||||
values:
|
||||
services:
|
||||
s3-proxy:
|
||||
podAnnotations:
|
||||
_default:
|
||||
vault.hashicorp.com/agent-inject-template-s3: |
|
||||
{{- with secret "secrets/data/minio/apps/django" }}
|
||||
AWS_API_ENDPOINT=https://s3.uralmine.com
|
||||
{{- $buckets := index .Data.data "buckets" }}
|
||||
AWS_S3_BUCKET={{ if gt (len $buckets) 0 }}{{ index (index $buckets 0) "name" }}{{ else }}django{{ end }}
|
||||
AWS_ACCESS_KEY_ID={{ index .Data.data "access_key" }}
|
||||
AWS_SECRET_ACCESS_KEY={{ index .Data.data "secret_key" }}
|
||||
{{- end }}
|
||||
139
apps/django/yc-ecp/frontend.yaml
Normal file
139
apps/django/yc-ecp/frontend.yaml
Normal file
@ -0,0 +1,139 @@
|
||||
---
|
||||
apiVersion: helm.toolkit.fluxcd.io/v2
|
||||
kind: HelmRelease
|
||||
metadata:
|
||||
name: frontend
|
||||
namespace: django
|
||||
spec:
|
||||
interval: 5m
|
||||
timeout: 10m
|
||||
|
||||
chart:
|
||||
spec:
|
||||
chart: universal-chart
|
||||
version: "0.1.9"
|
||||
sourceRef:
|
||||
kind: HelmRepository
|
||||
name: yc-oci-charts
|
||||
namespace: flux-system
|
||||
interval: 10m
|
||||
|
||||
install:
|
||||
remediation:
|
||||
retries: 3
|
||||
|
||||
upgrade:
|
||||
remediation:
|
||||
retries: 3
|
||||
|
||||
values:
|
||||
global:
|
||||
env: _default
|
||||
|
||||
services:
|
||||
frontend:
|
||||
enabled: true
|
||||
|
||||
image:
|
||||
name:
|
||||
_default: cr.yandex/crp3ccidau046kdj8g9q/sarex-frontend-dev:cps_82ba823b
|
||||
pullPolicy:
|
||||
_default: IfNotPresent
|
||||
|
||||
deployment:
|
||||
enabled: true
|
||||
|
||||
name:
|
||||
_default: frontend
|
||||
|
||||
replicaCount:
|
||||
_default: 1
|
||||
|
||||
port:
|
||||
_default: 80
|
||||
|
||||
resources:
|
||||
requests:
|
||||
cpu:
|
||||
_default: 25m
|
||||
memory:
|
||||
_default: 100Mi
|
||||
|
||||
probes:
|
||||
liveness:
|
||||
enabled: false
|
||||
readiness:
|
||||
enabled: false
|
||||
|
||||
service:
|
||||
enabled: true
|
||||
|
||||
name:
|
||||
_default: frontend-service
|
||||
|
||||
type:
|
||||
_default: ClusterIP
|
||||
|
||||
port:
|
||||
_default: 80
|
||||
|
||||
targetPort:
|
||||
_default: 80
|
||||
|
||||
portName:
|
||||
_default: http
|
||||
|
||||
imagePullSecrets:
|
||||
enabled:
|
||||
_default: true
|
||||
name:
|
||||
_default: dockerhub
|
||||
|
||||
# чарт прогоняет weight, key, operator и topologyKey через pluckEnv,
|
||||
# который читает только map вида {_default: …}; скаляры дают пустые значения
|
||||
affinity:
|
||||
podAntiAffinity:
|
||||
preferredDuringSchedulingIgnoredDuringExecution:
|
||||
- weight:
|
||||
_default: 100
|
||||
podAffinityTerm:
|
||||
labelSelector:
|
||||
matchExpressions:
|
||||
- key:
|
||||
_default: app
|
||||
operator:
|
||||
_default: In
|
||||
values:
|
||||
- frontend
|
||||
topologyKey:
|
||||
_default: kubernetes.io/hostname
|
||||
|
||||
# ConfigMap'ы nginx-configmap и robots-txt-config создаются вне этого
|
||||
# релиза — чарт только монтирует их
|
||||
volumes:
|
||||
_default:
|
||||
- name: nginx-configmap
|
||||
mountPath:
|
||||
_default: /etc/nginx/nginx.conf
|
||||
subPath:
|
||||
_default: nginx.conf
|
||||
configMap:
|
||||
name:
|
||||
_default: nginx-configmap
|
||||
items:
|
||||
- key: nginx.conf
|
||||
path:
|
||||
_default: nginx.conf
|
||||
|
||||
- name: robots-volume
|
||||
mountPath:
|
||||
_default: /opt/react_client/robots.txt
|
||||
subPath:
|
||||
_default: robots.txt
|
||||
configMap:
|
||||
name:
|
||||
_default: robots-txt-config
|
||||
items:
|
||||
- key: robots.txt
|
||||
path:
|
||||
_default: robots.txt
|
||||
9
apps/django/yc-ecp/kustomization.yaml
Normal file
9
apps/django/yc-ecp/kustomization.yaml
Normal file
@ -0,0 +1,9 @@
|
||||
---
|
||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||
kind: Kustomization
|
||||
namespace: django
|
||||
resources:
|
||||
- frontend.yaml
|
||||
- s3-proxy.yaml
|
||||
- s3-proxy-bim.yaml
|
||||
# - namespace.yaml
|
||||
7
apps/django/yc-ecp/namespace.yaml
Normal file
7
apps/django/yc-ecp/namespace.yaml
Normal file
@ -0,0 +1,7 @@
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Namespace
|
||||
metadata:
|
||||
name: django
|
||||
labels:
|
||||
istio-injection: enabled
|
||||
104
apps/django/yc-ecp/s3-proxy-bim.yaml
Normal file
104
apps/django/yc-ecp/s3-proxy-bim.yaml
Normal file
@ -0,0 +1,104 @@
|
||||
---
|
||||
apiVersion: helm.toolkit.fluxcd.io/v2
|
||||
kind: HelmRelease
|
||||
metadata:
|
||||
name: s3-proxy-bim
|
||||
namespace: django
|
||||
spec:
|
||||
interval: 5m
|
||||
timeout: 10m
|
||||
|
||||
chart:
|
||||
spec:
|
||||
chart: universal-chart
|
||||
version: "0.1.9"
|
||||
sourceRef:
|
||||
kind: HelmRepository
|
||||
name: yc-oci-charts
|
||||
namespace: flux-system
|
||||
interval: 10m
|
||||
|
||||
install:
|
||||
remediation:
|
||||
retries: 3
|
||||
|
||||
upgrade:
|
||||
remediation:
|
||||
retries: 3
|
||||
|
||||
values:
|
||||
global:
|
||||
env: _default
|
||||
|
||||
services:
|
||||
s3-proxy-bim:
|
||||
enabled: true
|
||||
|
||||
# образ публичный, из Docker Hub — pull-секрет не нужен
|
||||
image:
|
||||
name:
|
||||
_default: pottava/s3-proxy
|
||||
pullPolicy:
|
||||
_default: Always
|
||||
|
||||
deployment:
|
||||
enabled: true
|
||||
|
||||
name:
|
||||
_default: s3-proxy-bim
|
||||
|
||||
replicaCount:
|
||||
_default: 2
|
||||
|
||||
port:
|
||||
_default: 80
|
||||
|
||||
probes:
|
||||
liveness:
|
||||
enabled: false
|
||||
readiness:
|
||||
enabled: false
|
||||
|
||||
service:
|
||||
enabled: true
|
||||
|
||||
name:
|
||||
_default: s3-bim-service
|
||||
|
||||
type:
|
||||
_default: ClusterIP
|
||||
|
||||
port:
|
||||
_default: 80
|
||||
|
||||
targetPort:
|
||||
_default: 80
|
||||
|
||||
portName:
|
||||
_default: http
|
||||
|
||||
imagePullSecrets:
|
||||
enabled:
|
||||
_default: false
|
||||
|
||||
envs:
|
||||
- name: AWS_API_ENDPOINT
|
||||
value:
|
||||
_default: "https://storage.yandexcloud.net"
|
||||
|
||||
# ключи S3 лежат в Secret/s3-proxy-bim-secret, созданном вне этого релиза
|
||||
secretEnvs:
|
||||
- name: AWS_ACCESS_KEY_ID
|
||||
secretName:
|
||||
_default: "s3-proxy-bim-secret"
|
||||
secretKey: "login"
|
||||
|
||||
- name: AWS_SECRET_ACCESS_KEY
|
||||
secretName:
|
||||
_default: "s3-proxy-bim-secret"
|
||||
secretKey: "password"
|
||||
|
||||
- name: AWS_S3_BUCKET
|
||||
secretName:
|
||||
_default: "s3-proxy-bim-secret"
|
||||
secretKey: "bucket"
|
||||
105
apps/django/yc-ecp/s3-proxy.yaml
Normal file
105
apps/django/yc-ecp/s3-proxy.yaml
Normal file
@ -0,0 +1,105 @@
|
||||
---
|
||||
apiVersion: helm.toolkit.fluxcd.io/v2
|
||||
kind: HelmRelease
|
||||
metadata:
|
||||
name: s3-proxy
|
||||
namespace: django
|
||||
spec:
|
||||
interval: 5m
|
||||
timeout: 10m
|
||||
|
||||
chart:
|
||||
spec:
|
||||
chart: universal-chart
|
||||
version: "0.1.9"
|
||||
sourceRef:
|
||||
kind: HelmRepository
|
||||
name: yc-oci-charts
|
||||
namespace: flux-system
|
||||
interval: 10m
|
||||
|
||||
install:
|
||||
remediation:
|
||||
retries: 3
|
||||
|
||||
upgrade:
|
||||
remediation:
|
||||
retries: 3
|
||||
|
||||
values:
|
||||
global:
|
||||
env: _default
|
||||
|
||||
services:
|
||||
s3-proxy:
|
||||
enabled: true
|
||||
|
||||
image:
|
||||
name:
|
||||
_default: cr.yandex/crp3ccidau046kdj8g9q/s3-proxy:stable
|
||||
pullPolicy:
|
||||
_default: Always
|
||||
|
||||
deployment:
|
||||
enabled: true
|
||||
|
||||
name:
|
||||
_default: s3-proxy
|
||||
|
||||
replicaCount:
|
||||
_default: 2
|
||||
|
||||
port:
|
||||
_default: 80
|
||||
|
||||
probes:
|
||||
liveness:
|
||||
enabled: false
|
||||
readiness:
|
||||
enabled: false
|
||||
|
||||
service:
|
||||
enabled: true
|
||||
|
||||
name:
|
||||
_default: s3-service
|
||||
|
||||
type:
|
||||
_default: ClusterIP
|
||||
|
||||
port:
|
||||
_default: 80
|
||||
|
||||
targetPort:
|
||||
_default: 80
|
||||
|
||||
portName:
|
||||
_default: http
|
||||
|
||||
imagePullSecrets:
|
||||
enabled:
|
||||
_default: true
|
||||
name:
|
||||
_default: dockerhub
|
||||
|
||||
envs:
|
||||
- name: AWS_API_ENDPOINT
|
||||
value:
|
||||
_default: "https://storage.yandexcloud.net"
|
||||
|
||||
# ключи S3 лежат в Secret/s3-proxy-secret, созданном вне этого релиза
|
||||
secretEnvs:
|
||||
- name: AWS_ACCESS_KEY_ID
|
||||
secretName:
|
||||
_default: "s3-proxy-secret"
|
||||
secretKey: "login"
|
||||
|
||||
- name: AWS_SECRET_ACCESS_KEY
|
||||
secretName:
|
||||
_default: "s3-proxy-secret"
|
||||
secretKey: "password"
|
||||
|
||||
- name: AWS_S3_BUCKET
|
||||
secretName:
|
||||
_default: "s3-proxy-secret"
|
||||
secretKey: "bucket"
|
||||
@ -3,7 +3,7 @@ apiVersion: helm.toolkit.fluxcd.io/v2
|
||||
kind: HelmRelease
|
||||
metadata:
|
||||
name: frontend
|
||||
namespace: document-link
|
||||
namespace:
|
||||
|
||||
spec:
|
||||
interval: 10m
|
||||
@ -36,7 +36,7 @@ spec:
|
||||
|
||||
image:
|
||||
name:
|
||||
_default: cr.yandex/crp3ccidau046kdj8g9q/document-link-frontend:wb_cb2027ce
|
||||
_default: cr.yandex/crp3ccidau046kdj8g9q/document-link-frontend:contour_d8c3481b
|
||||
pullPolicy:
|
||||
_default: IfNotPresent
|
||||
|
||||
@ -50,7 +50,7 @@ spec:
|
||||
_default: 1
|
||||
|
||||
port:
|
||||
_default: 80
|
||||
_default: 3000
|
||||
|
||||
resources:
|
||||
requests:
|
||||
@ -78,7 +78,7 @@ spec:
|
||||
_default: 80
|
||||
|
||||
targetPort:
|
||||
_default: 80
|
||||
_default: 3000
|
||||
|
||||
portName:
|
||||
_default: http
|
||||
|
||||
@ -144,7 +144,7 @@ spec:
|
||||
_default: sarex.contour.infra.sarex.tech
|
||||
- name: DOCUMENTATION_URL
|
||||
value:
|
||||
_default: http://documentations-api.documentations.svc.cluster.local:80/
|
||||
_default: http://backend-api-svc.documentations.svc.cluster.local:80/
|
||||
- name: WORKFLOW_URL
|
||||
value:
|
||||
_default: http://backend-svc.processing.svc.cluster.local:80/
|
||||
|
||||
@ -68,7 +68,7 @@ spec:
|
||||
_default: sarex.uralmine.com
|
||||
- name: DOCUMENTATION_URL
|
||||
value:
|
||||
_default: http://documentations-api.documentations.svc.cluster.local:80/
|
||||
_default: http://backend-api-svc.documentations.svc.cluster.local:80/
|
||||
- name: WORKFLOW_URL
|
||||
value:
|
||||
_default: http://backend-svc.processing.svc.cluster.local:80/
|
||||
@ -95,7 +95,7 @@ spec:
|
||||
_default: http://marks-service:8000
|
||||
- name: PUBLIC_LINK_HOST
|
||||
value:
|
||||
_default: https://document-link-srx.wb.ru
|
||||
_default: https://sarex-document-link.uralmine.com
|
||||
- name: NAMESPACE
|
||||
value:
|
||||
_default: documentations
|
||||
|
||||
@ -92,7 +92,7 @@ spec:
|
||||
_default: http://marks-service:8000
|
||||
- name: PUBLIC_LINK_HOST
|
||||
value:
|
||||
_default: https://document-link-srx.wb.ru
|
||||
_default: https://sarex-document-link.uralmine.com
|
||||
- name: NAMESPACE
|
||||
value:
|
||||
_default: documentations
|
||||
|
||||
@ -167,11 +167,11 @@ spec:
|
||||
|
||||
- name: GATEWAY_URL
|
||||
value:
|
||||
_default: "http://pdm-api.documentations.svc.cluster.local:8080"
|
||||
_default: "http://pdm-svc.documentations.svc.cluster.local:80"
|
||||
|
||||
- name: RESOURCE_URL
|
||||
value:
|
||||
_default: "http://resources-service.resources.svc.cluster.local:8000"
|
||||
_default: "http://iam-backend.iam.svc.cluster.local:8000"
|
||||
|
||||
- name: SERVICE_HOST
|
||||
value:
|
||||
@ -199,7 +199,7 @@ spec:
|
||||
|
||||
- name: WORKFLOWS_HOST
|
||||
value:
|
||||
_default: "http://workflows-api-service.workflow.svc.cluster.local:8000/api/v1"
|
||||
_default: "http://backend-svc.processing.svc.cluster.local:80/api/v1"
|
||||
|
||||
- name: WORKFLOWS_TIMEOUT
|
||||
value:
|
||||
|
||||
@ -102,6 +102,23 @@ spec:
|
||||
name:
|
||||
_default: regcred
|
||||
|
||||
volumes:
|
||||
_default:
|
||||
- name: iam-zitadel-org-rules
|
||||
mountPath:
|
||||
_default: /config/zitadel/org-rules-prod.json
|
||||
subPath:
|
||||
_default: org-rules-prod.json
|
||||
readOnly:
|
||||
_default: true
|
||||
configMap:
|
||||
name:
|
||||
_default: iam-zitadel-org-rules
|
||||
items:
|
||||
- key: org-rules-prod.json
|
||||
path:
|
||||
_default: org-rules-prod.json
|
||||
|
||||
labels:
|
||||
monitoring: prometheus
|
||||
|
||||
@ -132,11 +149,11 @@ spec:
|
||||
|
||||
- name: ZITADEL_ENABLED
|
||||
value:
|
||||
_default: "false"
|
||||
_default: "true"
|
||||
|
||||
- name: ZITADEL_HOST
|
||||
value:
|
||||
_default: "https://login.sarex.io"
|
||||
_default: "https://sarex-login.uralmine.com"
|
||||
|
||||
- name: ZITADEL_ORG_RULES_FILE
|
||||
value:
|
||||
@ -187,10 +204,10 @@ spec:
|
||||
{{- with secret "secrets/data/apps/iam/postgres" -}}
|
||||
DB_DSN=postgres://{{ index .Data.data "username" }}:{{ index .Data.data "password" }}@{{ index .Data.data "host" }}:{{ index .Data.data "port" }}/{{ index .Data.data "database" }}
|
||||
{{- end -}}
|
||||
vault.hashicorp.com/agent-inject-secret-iam-zitadel: secrets/data/apps/iam/zitadel
|
||||
vault.hashicorp.com/agent-inject-secret-iam-zitadel: secrets/data/vault/common/django_auth
|
||||
vault.hashicorp.com/agent-inject-template-iam-zitadel: |-
|
||||
{{- with secret "secrets/data/apps/iam/zitadel" -}}
|
||||
ZITADEL_ACCESS_TOKEN={{ index .Data.data "access_token" }}
|
||||
{{- with secret "secrets/data/vault/common/django_auth" -}}
|
||||
ZITADEL_ACCESS_TOKEN={{ index .Data.data "django_zitadel_access_token" }}
|
||||
{{- end -}}
|
||||
vault.hashicorp.com/agent-inject-secret-iam-kafka: secrets/data/kafka/apps/iam
|
||||
vault.hashicorp.com/agent-inject-template-iam-kafka: |-
|
||||
|
||||
@ -5,3 +5,4 @@ namespace: iam
|
||||
resources:
|
||||
- namespace.yaml
|
||||
- backend.yaml
|
||||
- zitadel-org-rules-configmap.yaml
|
||||
|
||||
12
apps/iam/base/zitadel-org-rules-configmap.yaml
Normal file
12
apps/iam/base/zitadel-org-rules-configmap.yaml
Normal file
@ -0,0 +1,12 @@
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: iam-zitadel-org-rules
|
||||
namespace: iam
|
||||
data:
|
||||
org-rules-prod.json: |
|
||||
{
|
||||
"default_org_id": "383923292894987370",
|
||||
"rules": []
|
||||
}
|
||||
78
apps/iam/d8-ugmk-prod/backend-s3.yaml
Normal file
78
apps/iam/d8-ugmk-prod/backend-s3.yaml
Normal file
@ -0,0 +1,78 @@
|
||||
---
|
||||
apiVersion: helm.toolkit.fluxcd.io/v2
|
||||
kind: HelmRelease
|
||||
metadata:
|
||||
name: iam-backend
|
||||
namespace: iam
|
||||
spec:
|
||||
values:
|
||||
services:
|
||||
backend:
|
||||
envs:
|
||||
- name: ENVIRONMENT
|
||||
value:
|
||||
_default: "prod"
|
||||
|
||||
- name: LOG_LEVEL
|
||||
value:
|
||||
_default: "debug"
|
||||
|
||||
- name: AUTH_ENABLED
|
||||
value:
|
||||
_default: "true"
|
||||
|
||||
- name: HTTP_PORT
|
||||
value:
|
||||
_default: "8080"
|
||||
|
||||
- name: HTTP_READ_BUFFER_SIZE
|
||||
value:
|
||||
_default: "131072"
|
||||
|
||||
- name: DB_MIGRATIONS_PATH
|
||||
value:
|
||||
_default: "migrations"
|
||||
|
||||
- name: ZITADEL_ENABLED
|
||||
value:
|
||||
_default: "true"
|
||||
|
||||
- name: ZITADEL_HOST
|
||||
value:
|
||||
_default: "https://sarex-login.uralmine.com"
|
||||
|
||||
- name: ZITADEL_ORG_RULES_FILE
|
||||
value:
|
||||
_default: "config/zitadel/org-rules-prod.json"
|
||||
|
||||
- name: S3_ENABLED
|
||||
value:
|
||||
_default: "true"
|
||||
|
||||
- name: S3_ENDPOINT_URL
|
||||
value:
|
||||
_default: "https://s3.uralmine.com"
|
||||
|
||||
- name: S3_BUCKET_NAME
|
||||
value:
|
||||
_default: "sarex-media-storage"
|
||||
|
||||
- name: S3_REGION
|
||||
value:
|
||||
_default: "ru-central1"
|
||||
|
||||
- name: S3_PRESIGN_EXPIRES
|
||||
value:
|
||||
_default: "1h"
|
||||
|
||||
- name: KAFKA_ENABLED
|
||||
value:
|
||||
_default: "false"
|
||||
|
||||
- name: KAFKA_SSL_CAFILE
|
||||
value:
|
||||
_default: "/etc/ca-certificates/Yandex/ca-cert"
|
||||
|
||||
- name: KAFKA_TOPIC_LEGACY_AMS_SYNC
|
||||
value:
|
||||
_default: "ams-sync"
|
||||
@ -4,3 +4,8 @@ kind: Kustomization
|
||||
namespace: iam
|
||||
resources:
|
||||
- ../base
|
||||
patches:
|
||||
- path: backend-s3.yaml
|
||||
target:
|
||||
kind: HelmRelease
|
||||
name: iam-backend
|
||||
@ -8,3 +8,5 @@ resources:
|
||||
- celery.yaml
|
||||
- frontend.yaml
|
||||
- production-configmap.yaml
|
||||
- redis-deployment.yaml
|
||||
- redis-service.yaml
|
||||
|
||||
@ -46,7 +46,7 @@ data:
|
||||
|
||||
WORKFLOWS_HOST = "http://workflows-api-service.workflow.svc.cluster.local:8000"
|
||||
WORKFLOWS_URL = "http://workflows-api-service.workflow.svc.cluster.local:8000"
|
||||
DOCUMENTATIONS_URL = "http://documentations-api.documentations.svc.cluster.local:8080"
|
||||
DOCUMENTATIONS_URL = "http://backend-api-svc.documentations.svc.cluster.local:80"
|
||||
RESOURCES_API_HOST = os.getenv("RESOURCES_API_HOST", default="http://resources-service.resources.svc.cluster:8000")
|
||||
KAFKA_HOST = "wb-stage-kafka-bootstrap.kafka.svc.cluster.local:9093"
|
||||
KAFKA_USERNAME = "sarex"
|
||||
|
||||
27
apps/issues/base/redis-deployment.yaml
Normal file
27
apps/issues/base/redis-deployment.yaml
Normal file
@ -0,0 +1,27 @@
|
||||
---
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: redis
|
||||
namespace: issues
|
||||
labels:
|
||||
app: redis
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: redis
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: redis
|
||||
spec:
|
||||
containers:
|
||||
- name: redis
|
||||
image: cr.yandex/crp3ccidau046kdj8g9q/redis:latest
|
||||
imagePullPolicy: Always
|
||||
ports:
|
||||
- containerPort: 6379
|
||||
protocol: TCP
|
||||
imagePullSecrets:
|
||||
- name: regcred
|
||||
13
apps/issues/base/redis-service.yaml
Normal file
13
apps/issues/base/redis-service.yaml
Normal file
@ -0,0 +1,13 @@
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: redis
|
||||
namespace: issues
|
||||
spec:
|
||||
selector:
|
||||
app: redis
|
||||
ports:
|
||||
- port: 6379
|
||||
targetPort: 6379
|
||||
protocol: TCP
|
||||
20
apps/issues/d8-ugmk-prod/backend-s3.yaml
Normal file
20
apps/issues/d8-ugmk-prod/backend-s3.yaml
Normal file
@ -0,0 +1,20 @@
|
||||
---
|
||||
apiVersion: helm.toolkit.fluxcd.io/v2
|
||||
kind: HelmRelease
|
||||
metadata:
|
||||
name: backend
|
||||
namespace: issues
|
||||
spec:
|
||||
values:
|
||||
services:
|
||||
backend:
|
||||
podAnnotations:
|
||||
_default:
|
||||
vault.hashicorp.com/agent-inject-secret-issues-s3: secrets/data/minio/apps/issues
|
||||
vault.hashicorp.com/agent-inject-template-issues-s3: |-
|
||||
{{- with secret "secrets/data/minio/apps/issues" -}}
|
||||
YC_S3_ACCESS_KEY_ID={{ index .Data.data "access_key" }}
|
||||
YC_S3_SECRET_ACCESS_KEY={{ index .Data.data "secret_key" }}
|
||||
YC_S3_BUCKET_NAME=sarex-issues
|
||||
YC_S3_ENDPOINT_URL=https://s3.uralmine.com
|
||||
{{- end -}}
|
||||
20
apps/issues/d8-ugmk-prod/celery-s3.yaml
Normal file
20
apps/issues/d8-ugmk-prod/celery-s3.yaml
Normal file
@ -0,0 +1,20 @@
|
||||
---
|
||||
apiVersion: helm.toolkit.fluxcd.io/v2
|
||||
kind: HelmRelease
|
||||
metadata:
|
||||
name: celery
|
||||
namespace: issues
|
||||
spec:
|
||||
values:
|
||||
services:
|
||||
celery:
|
||||
podAnnotations:
|
||||
_default:
|
||||
vault.hashicorp.com/agent-inject-secret-issues-s3: secrets/data/minio/apps/issues
|
||||
vault.hashicorp.com/agent-inject-template-issues-s3: |-
|
||||
{{- with secret "secrets/data/minio/apps/issues" -}}
|
||||
YC_S3_ACCESS_KEY_ID={{ index .Data.data "access_key" }}
|
||||
YC_S3_SECRET_ACCESS_KEY={{ index .Data.data "secret_key" }}
|
||||
YC_S3_BUCKET_NAME=sarex-issues
|
||||
YC_S3_ENDPOINT_URL=https://s3.uralmine.com
|
||||
{{- end -}}
|
||||
@ -8,3 +8,11 @@ patches:
|
||||
target:
|
||||
kind: Namespace
|
||||
name: issues
|
||||
- path: backend-s3.yaml
|
||||
target:
|
||||
kind: HelmRelease
|
||||
name: backend
|
||||
- path: celery-s3.yaml
|
||||
target:
|
||||
kind: HelmRelease
|
||||
name: celery
|
||||
|
||||
7
apps/measurements/yc-ecp/kustomization.yaml
Normal file
7
apps/measurements/yc-ecp/kustomization.yaml
Normal file
@ -0,0 +1,7 @@
|
||||
---
|
||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||
kind: Kustomization
|
||||
namespace: measurements
|
||||
resources:
|
||||
- measurements.yaml
|
||||
- namespace.yaml
|
||||
111
apps/measurements/yc-ecp/measurements.yaml
Normal file
111
apps/measurements/yc-ecp/measurements.yaml
Normal file
@ -0,0 +1,111 @@
|
||||
---
|
||||
apiVersion: helm.toolkit.fluxcd.io/v2
|
||||
kind: HelmRelease
|
||||
metadata:
|
||||
name: measurements
|
||||
namespace: measurements
|
||||
spec:
|
||||
interval: 5m
|
||||
timeout: 10m
|
||||
|
||||
chart:
|
||||
spec:
|
||||
chart: universal-chart
|
||||
version: "0.1.9"
|
||||
sourceRef:
|
||||
kind: HelmRepository
|
||||
name: yc-oci-charts
|
||||
namespace: flux-system
|
||||
interval: 10m
|
||||
|
||||
install:
|
||||
remediation:
|
||||
retries: 3
|
||||
|
||||
upgrade:
|
||||
remediation:
|
||||
retries: 3
|
||||
|
||||
values:
|
||||
global:
|
||||
env: _default
|
||||
|
||||
services:
|
||||
backend:
|
||||
enabled: true
|
||||
|
||||
# в yc-ecp S3-настройки приходят из Secret, а не через Vault Agent,
|
||||
# поэтому serviceAccount, vault-аннотации и обёртка entrypoint не нужны
|
||||
serviceAccount:
|
||||
enabled:
|
||||
_default: false
|
||||
|
||||
image:
|
||||
name:
|
||||
_default: cr.yandex/crp3ccidau046kdj8g9q/measurements:prod_6070cd4d
|
||||
pullPolicy:
|
||||
_default: Always
|
||||
|
||||
deployment:
|
||||
enabled: true
|
||||
|
||||
name:
|
||||
_default: measurement
|
||||
|
||||
replicaCount:
|
||||
_default: 2
|
||||
|
||||
port:
|
||||
_default: 8000
|
||||
|
||||
# entrypoint.sh запускает gunicorn без --access-logfile, поэтому
|
||||
# запросы не попадают в лог; подменяем команду целиком
|
||||
command:
|
||||
_default: ["/bin/bash", "-ec"]
|
||||
args:
|
||||
_default:
|
||||
- gunicorn -w 4 -k uvicorn.workers.UvicornWorker -b 0.0.0.0:8000 --timeout 240 --access-logfile - --access-logformat '%(h)s "%(r)s" %(s)s %(b)s %(M)sms' measurements.main:app
|
||||
|
||||
resources:
|
||||
requests:
|
||||
cpu:
|
||||
_default: 25m
|
||||
memory:
|
||||
_default: 128Mi
|
||||
|
||||
probes:
|
||||
liveness:
|
||||
enabled: false
|
||||
readiness:
|
||||
enabled: false
|
||||
|
||||
service:
|
||||
enabled: true
|
||||
|
||||
name:
|
||||
_default: measurement-service
|
||||
|
||||
type:
|
||||
_default: ClusterIP
|
||||
|
||||
port:
|
||||
_default: 8000
|
||||
|
||||
targetPort:
|
||||
_default: 8000
|
||||
|
||||
portName:
|
||||
_default: http
|
||||
|
||||
imagePullSecrets:
|
||||
enabled:
|
||||
_default: true
|
||||
name:
|
||||
_default: dockerhub
|
||||
|
||||
|
||||
secretEnvs:
|
||||
- name: S3_JSON_SETTINGS
|
||||
secretName:
|
||||
_default: "s3-json-settings"
|
||||
secretKey: "S3_JSON_SETTINGS"
|
||||
7
apps/measurements/yc-ecp/namespace.yaml
Normal file
7
apps/measurements/yc-ecp/namespace.yaml
Normal file
@ -0,0 +1,7 @@
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Namespace
|
||||
metadata:
|
||||
name: measurements
|
||||
labels:
|
||||
istio-injection: enabled
|
||||
@ -8,3 +8,7 @@ patches:
|
||||
target:
|
||||
kind: Namespace
|
||||
name: message-hub
|
||||
- path: message-hub.yaml
|
||||
target:
|
||||
kind: HelmRelease
|
||||
name: message-hub
|
||||
|
||||
120
apps/message-hub/d8-ugmk-prod/message-hub.yaml
Normal file
120
apps/message-hub/d8-ugmk-prod/message-hub.yaml
Normal file
@ -0,0 +1,120 @@
|
||||
---
|
||||
# Патч message-hub для контура УГМК.
|
||||
#
|
||||
# ВНИМАНИЕ: envs — список, kustomize заменяет его ЦЕЛИКОМ (JSON merge patch),
|
||||
# поэтому здесь продублирован весь набор из apps/message-hub/base/message-hub.yaml.
|
||||
# podAnnotations — map, мержится по ключам, поэтому переопределён только
|
||||
# agent-inject-template-message-hub-kafka; остальные берутся из base.
|
||||
apiVersion: helm.toolkit.fluxcd.io/v2
|
||||
kind: HelmRelease
|
||||
metadata:
|
||||
name: message-hub
|
||||
namespace: message-hub
|
||||
spec:
|
||||
values:
|
||||
services:
|
||||
backend:
|
||||
# base: production_24425472 от 15.02.2026 — 18 production-релизов назад.
|
||||
# Здесь актуальный production от 31.07.2026.
|
||||
image:
|
||||
name:
|
||||
_default: cr.yandex/crp3ccidau046kdj8g9q/message-hub:production_e8010fe4
|
||||
|
||||
envs:
|
||||
- name: WORKER_TIMEOUT
|
||||
value:
|
||||
_default: "60"
|
||||
|
||||
- name: PYTHONPATH
|
||||
value:
|
||||
_default: "src"
|
||||
|
||||
- name: SETTINGS_MAX_RETRIES
|
||||
value:
|
||||
_default: "1"
|
||||
|
||||
# base: '{"planning": "pm", "assets": "assets_broadcast", "project_entity": "issues_broadcast"}'
|
||||
# Два исправления:
|
||||
# 1. ключ project_entity невалиден — TopicsType (src/enums.py) знает только
|
||||
# assets / planning / issues / resources_updated / resources_deleted,
|
||||
# на прочих валидатор check_topics_keys кидает ValueError при старте.
|
||||
# Консьюмер лежит в project_entity.py, но подписан на TopicsType.issues.
|
||||
# 2. planning был "pm", а django публикует в "message-hub-stage"
|
||||
# (KAFKA_TOPICS, apps/django/d8-ugmk-prod/backend.yaml) — продюсер
|
||||
# и консьюмер сидели на разных топиках.
|
||||
- name: SETTINGS_TOPICS
|
||||
value:
|
||||
_default: '{"planning": "message-hub-stage", "assets": "assets_broadcast", "issues": "issues_broadcast"}'
|
||||
|
||||
# В base нет, дефолт True. S3 контура (s3.uralmine.com) отдаёт
|
||||
# самоподписанный сертификат — тот же случай, что S3_VERIFY=False у pm.
|
||||
# Флаг общий: гасит проверку TLS сразу и для S3, и для всех HTTP-клиентов.
|
||||
- name: SETTINGS_VERIFY_SSL
|
||||
value:
|
||||
_default: "0"
|
||||
|
||||
# base: http://backend-service.pm.svc.cluster.local:8000 — сервис pm
|
||||
# называется backend-svc (apps/pm/base/backend.yaml:91).
|
||||
- name: SAREX_BASE_HOST
|
||||
value:
|
||||
_default: "http://backend-svc.pm.svc.cluster.local:8000"
|
||||
|
||||
# В base нет. Без него ServiceConfig с префиксом PM_ уходит
|
||||
# в дефолт http://localhost:8001. В dsinv и brusnika задан.
|
||||
- name: PM_HOST
|
||||
value:
|
||||
_default: "http://backend-svc.pm.svc.cluster.local:8000"
|
||||
|
||||
# Имена сверены с infrastructure/istio-config/d8-ugmk-prod/istio-config.yaml.
|
||||
- name: EAV_HOST
|
||||
value:
|
||||
_default: "http://backend-svc.eav.svc.cluster.local:80"
|
||||
|
||||
- name: ISSUES_HOST
|
||||
value:
|
||||
_default: "http://backend-svc.issues.svc.cluster.local:80"
|
||||
|
||||
- name: CACHE_HOST
|
||||
value:
|
||||
_default: "redis.pm.svc.cluster.local"
|
||||
|
||||
- name: CACHE_PORT
|
||||
value:
|
||||
_default: "6379"
|
||||
|
||||
- name: CACHE_SSL
|
||||
value:
|
||||
_default: "0"
|
||||
|
||||
# ВНИМАНИЕ: значение не подтверждено. В base было захардкожено
|
||||
# kafka-kafka-contour-controller-headless — имя из другого контура,
|
||||
# здесь HelmRelease называется kafka (infrastructure/kafka/d8-ugmk-prod).
|
||||
# Проверить: kubectl -n kafka get svc
|
||||
# Задано переменной, а не vault-шаблоном, специально: ошибка в шаблоне
|
||||
# блокирует старт пода (agent-init-first), ошибка в env — только логи.
|
||||
- name: KAFKA_HOST
|
||||
value:
|
||||
_default: "kafka-controller-headless.kafka.svc.cluster.local"
|
||||
|
||||
- name: KAFKA_PORT
|
||||
value:
|
||||
_default: "9092"
|
||||
|
||||
# listeners.client.protocol: SASL_SSL — без CA соединение не поднимется.
|
||||
- name: KAFKA_SSL_CAFILE
|
||||
value:
|
||||
_default: "/usr/local/share/ca-certificates/kafka.crt"
|
||||
|
||||
podAnnotations:
|
||||
_default:
|
||||
# Из base убраны KAFKA_HOST/KAFKA_PORT: файл /vault/secrets/message-hub-kafka
|
||||
# подгружается через `set -a; . file`, то есть переписывает переменные
|
||||
# окружения. Пока хост не подтверждён, держим его в envs.
|
||||
vault.hashicorp.com/agent-inject-secret-message-hub-kafka: secrets/data/kafka/apps/pm
|
||||
vault.hashicorp.com/agent-inject-template-message-hub-kafka: |-
|
||||
{{- with secret "secrets/data/kafka/apps/pm" -}}
|
||||
KAFKA_USERNAME={{ index .Data.data "username" }}
|
||||
KAFKA_PASSWORD={{ index .Data.data "password" }}
|
||||
KAFKA_SECURITY_PROTOCOL={{ index .Data.data.auth "security_protocol" }}
|
||||
KAFKA_SASL_MECHANISM={{ index .Data.data.auth "sasl_mechanism" }}
|
||||
{{- end -}}
|
||||
@ -246,7 +246,7 @@ spec:
|
||||
S3_LOGIN={{ index .Data.data "access_key" }}
|
||||
S3_PASSWORD={{ index .Data.data "secret_key" }}
|
||||
{{- $buckets := index .Data.data "buckets" }}
|
||||
S3_BUCKET={{- if gt (len $buckets) 0 -}}{{ index (index $buckets 0) "name" }}{{- else -}}pm-bucket{{- end -}}
|
||||
S3_BUCKET={{- if gt (len $buckets) 0 -}}{{ index (index $buckets 0) "name" }}{{- else -}}sarex-media-storage{{- end -}}
|
||||
S3_VERIFY=False
|
||||
{{- end -}}
|
||||
|
||||
|
||||
@ -228,7 +228,7 @@ spec:
|
||||
S3_LOGIN={{ index .Data.data "access_key" }}
|
||||
S3_PASSWORD={{ index .Data.data "secret_key" }}
|
||||
{{- $buckets := index .Data.data "buckets" }}
|
||||
S3_BUCKET={{- if gt (len $buckets) 0 -}}{{ index (index $buckets 0) "name" }}{{- else -}}pm-bucket{{- end -}}
|
||||
S3_BUCKET={{- if gt (len $buckets) 0 -}}{{ index (index $buckets 0) "name" }}{{- else -}}sarex-media-storage{{- end -}}
|
||||
S3_VERIFY=False
|
||||
{{- end -}}
|
||||
|
||||
|
||||
@ -8,3 +8,4 @@ resources:
|
||||
- celery.yaml
|
||||
- frontend.yaml
|
||||
- backend-configmap.yaml
|
||||
- resources-static.yaml
|
||||
|
||||
90
apps/pm/base/resources-static.yaml
Normal file
90
apps/pm/base/resources-static.yaml
Normal file
@ -0,0 +1,90 @@
|
||||
---
|
||||
apiVersion: helm.toolkit.fluxcd.io/v2
|
||||
kind: HelmRelease
|
||||
metadata:
|
||||
name: resources-static
|
||||
namespace: pm
|
||||
|
||||
spec:
|
||||
interval: 10m
|
||||
|
||||
chart:
|
||||
spec:
|
||||
chart: universal-chart
|
||||
version: "0.1.9"
|
||||
sourceRef:
|
||||
kind: HelmRepository
|
||||
name: yc-oci-charts
|
||||
namespace: flux-system
|
||||
interval: 10m
|
||||
|
||||
install:
|
||||
remediation:
|
||||
retries: 3
|
||||
|
||||
upgrade:
|
||||
remediation:
|
||||
retries: 3
|
||||
|
||||
values:
|
||||
global:
|
||||
env: _default
|
||||
|
||||
services:
|
||||
resources-static:
|
||||
enabled: true
|
||||
|
||||
image:
|
||||
name:
|
||||
_default: cr.yandex/crp3ccidau046kdj8g9q/resources-frontend:ugok_7f38a9ce
|
||||
pullPolicy:
|
||||
_default: IfNotPresent
|
||||
|
||||
deployment:
|
||||
enabled: true
|
||||
|
||||
name:
|
||||
_default: resources-static
|
||||
|
||||
replicaCount:
|
||||
_default: 1
|
||||
|
||||
port:
|
||||
_default: 80
|
||||
|
||||
resources:
|
||||
requests:
|
||||
cpu:
|
||||
_default: 25m
|
||||
memory:
|
||||
_default: 100Mi
|
||||
|
||||
probes:
|
||||
liveness:
|
||||
enabled: false
|
||||
readiness:
|
||||
enabled: false
|
||||
|
||||
service:
|
||||
enabled: true
|
||||
|
||||
name:
|
||||
_default: resources-static-svc
|
||||
|
||||
type:
|
||||
_default: ClusterIP
|
||||
|
||||
port:
|
||||
_default: 80
|
||||
|
||||
targetPort:
|
||||
_default: 80
|
||||
|
||||
portName:
|
||||
_default: http
|
||||
|
||||
imagePullSecrets:
|
||||
enabled:
|
||||
_default: true
|
||||
name:
|
||||
_default: regcred
|
||||
170
apps/pm/d8-ugmk-prod/backend.yaml
Normal file
170
apps/pm/d8-ugmk-prod/backend.yaml
Normal file
@ -0,0 +1,170 @@
|
||||
---
|
||||
# Патч backend для контура УГМК.
|
||||
#
|
||||
# ВНИМАНИЕ: args — список, kustomize заменяет его ЦЕЛИКОМ (JSON merge patch),
|
||||
# поэтому здесь продублирован весь скрипт из apps/pm/base/backend.yaml.
|
||||
# При правке args в base их нужно продублировать и сюда.
|
||||
# podAnnotations — map, мержится по ключам, поэтому переопределён только
|
||||
# один ключ agent-inject-template-pm-s3; остальные vault-аннотации берутся из base.
|
||||
apiVersion: helm.toolkit.fluxcd.io/v2
|
||||
kind: HelmRelease
|
||||
metadata:
|
||||
name: backend
|
||||
namespace: pm
|
||||
spec:
|
||||
values:
|
||||
services:
|
||||
backend:
|
||||
# base: production_a889f6a3 (релиз 1.14.1, 13.07.2026).
|
||||
# Здесь 1.14.7 — pipeline 72144, зелёный.
|
||||
image:
|
||||
name:
|
||||
_default: cr.yandex/crp3ccidau046kdj8g9q/pm-backend:production_fa0f1551
|
||||
|
||||
deployment:
|
||||
args:
|
||||
_default:
|
||||
- |
|
||||
set -a
|
||||
[ -f /vault/secrets/pm-db ] && . /vault/secrets/pm-db
|
||||
[ -f /vault/secrets/pm-rabbitmq ] && . /vault/secrets/pm-rabbitmq
|
||||
[ -f /vault/secrets/pm-s3 ] && . /vault/secrets/pm-s3
|
||||
set +a
|
||||
python manage.py makemigrations pm --noinput
|
||||
python manage.py migrate
|
||||
exec /opt/sarex/entrypoint.sh
|
||||
|
||||
# ВНИМАНИЕ: envs — список, kustomize заменяет его ЦЕЛИКОМ,
|
||||
# поэтому здесь продублирован весь набор из apps/pm/base/backend.yaml.
|
||||
# Отличия от base помечены комментариями.
|
||||
envs:
|
||||
- name: USERS_INTERNAL_HOST
|
||||
value:
|
||||
_default: "http://backend-svc.django.svc.cluster.local:80"
|
||||
|
||||
- name: CELERY_REDIS_HOST
|
||||
value:
|
||||
_default: "redis.pm.svc.cluster.local"
|
||||
|
||||
- name: RESOURCES_INTERNAL_HOST
|
||||
value:
|
||||
_default: "http://iam-backend.iam.svc.cluster.local:8000"
|
||||
|
||||
- name: EAV_HOST
|
||||
value:
|
||||
_default: "http://backend-svc.eav.svc.cluster.local:80"
|
||||
|
||||
- name: EAV_API_PREFIX
|
||||
value:
|
||||
_default: "/api/v0"
|
||||
|
||||
- name: EAV_API_PREFIX_V1
|
||||
value:
|
||||
_default: "/api/v1"
|
||||
|
||||
- name: TRACING_INSECURE
|
||||
value:
|
||||
_default: "False"
|
||||
|
||||
- name: SERVER_ENABLE_SYNC_RESOURCES
|
||||
value:
|
||||
_default: "True"
|
||||
|
||||
- name: SERVER_DELETED_TASK_MAX_AGE_DAYS
|
||||
value:
|
||||
_default: "1"
|
||||
|
||||
- name: SERVER_EXPIRED_TASK_NOTIFICATION_HOUR
|
||||
value:
|
||||
_default: "17"
|
||||
|
||||
- name: LANG
|
||||
value:
|
||||
_default: "C.UTF-8"
|
||||
|
||||
- name: LC_ALL
|
||||
value:
|
||||
_default: "C.UTF-8"
|
||||
|
||||
- name: PYTHONUTF8
|
||||
value:
|
||||
_default: "1"
|
||||
|
||||
- name: CACHE_SSL
|
||||
value:
|
||||
_default: "False"
|
||||
|
||||
- name: CACHE_SSL_CA_CERTS
|
||||
value:
|
||||
_default: ""
|
||||
|
||||
# base: "False". При False CACHE_CLIENT = None (config/settings/base.py:190),
|
||||
# и GET /api/pm/msp/external-task-info/ падает с
|
||||
# AttributeError: 'NoneType' object has no attribute 'get' —
|
||||
# sarex/pm/utils/broker_producer.py:38 дёргает .get() без проверки на None.
|
||||
- name: CACHE_ENABLE
|
||||
value:
|
||||
_default: "True"
|
||||
|
||||
# Новые: в base их нет. Дефолт CacheSettings.host — localhost,
|
||||
# т.е. без них включённый кэш стучится в собственный под.
|
||||
# Redis разворачивается тут же — apps/pm/d8-ugmk-prod/redis.yaml.
|
||||
- name: CACHE_HOST
|
||||
value:
|
||||
_default: "redis.pm.svc.cluster.local"
|
||||
|
||||
- name: CACHE_PORT
|
||||
value:
|
||||
_default: "6379"
|
||||
|
||||
- name: CLICKHOUSE_ENABLE
|
||||
value:
|
||||
_default: "False"
|
||||
|
||||
- name: KAFKA_ENABLE
|
||||
value:
|
||||
_default: "False"
|
||||
|
||||
- name: AUTH_PUBLIC_TOKEN_URL
|
||||
value:
|
||||
_default: "https://sarex.uralmine.com/api/token/public/"
|
||||
|
||||
- name: SERVER_HOST
|
||||
value:
|
||||
_default: "https://sarex.uralmine.com"
|
||||
|
||||
- name: SERVER_API_HOST
|
||||
value:
|
||||
_default: "https://sarex.uralmine.com"
|
||||
|
||||
- name: SERVER_DEBUG
|
||||
value:
|
||||
_default: "False"
|
||||
|
||||
- name: SERVER_ALLOWED_HOSTS
|
||||
value:
|
||||
_default: '["*"]'
|
||||
|
||||
- name: SERVER_USE_OTEL
|
||||
value:
|
||||
_default: "False"
|
||||
|
||||
- name: SERVER_VERIFY_SSL
|
||||
value:
|
||||
_default: "False"
|
||||
|
||||
- name: SERVER_LOG_LEVEL
|
||||
value:
|
||||
_default: "INFO"
|
||||
|
||||
podAnnotations:
|
||||
_default:
|
||||
vault.hashicorp.com/agent-inject-template-pm-s3: |-
|
||||
{{- with secret "secrets/data/minio/apps/pm" -}}
|
||||
S3_HOST={{ index .Data.data.client "endpoint" }}
|
||||
S3_LOGIN={{ index .Data.data "access_key" }}
|
||||
S3_PASSWORD={{ index .Data.data "secret_key" }}
|
||||
S3_VERIFY=False
|
||||
{{- $buckets := index .Data.data "buckets" }}
|
||||
S3_BUCKET={{ if gt (len $buckets) 0 }}{{ index (index $buckets 0) "name" }}{{ else }}sarex-media-storage{{ end }}
|
||||
{{- end -}}
|
||||
160
apps/pm/d8-ugmk-prod/celery.yaml
Normal file
160
apps/pm/d8-ugmk-prod/celery.yaml
Normal file
@ -0,0 +1,160 @@
|
||||
---
|
||||
# Патч celery для контура УГМК.
|
||||
#
|
||||
# ВНИМАНИЕ: envs — список, kustomize заменяет его ЦЕЛИКОМ (JSON merge patch),
|
||||
# поэтому здесь продублирован весь набор из apps/pm/base/celery.yaml.
|
||||
# При добавлении переменной в base её нужно продублировать и сюда.
|
||||
# podAnnotations — map, мержится по ключам, поэтому переопределён только
|
||||
# один ключ agent-inject-template-pm-s3; остальные vault-аннотации берутся из base.
|
||||
apiVersion: helm.toolkit.fluxcd.io/v2
|
||||
kind: HelmRelease
|
||||
metadata:
|
||||
name: celery
|
||||
namespace: pm
|
||||
spec:
|
||||
values:
|
||||
services:
|
||||
celery:
|
||||
# Образ общий с backend — держать в одной версии обязательно,
|
||||
# иначе воркер разъедется с API по схеме задач и моделям.
|
||||
image:
|
||||
name:
|
||||
_default: cr.yandex/crp3ccidau046kdj8g9q/pm-backend:production_fa0f1551
|
||||
|
||||
envs:
|
||||
# base: http://backend-service.sarex.svc.cluster.local:8000 — ns sarex не существует
|
||||
- name: USERS_INTERNAL_HOST
|
||||
value:
|
||||
_default: "http://backend-svc.django.svc.cluster.local:80"
|
||||
|
||||
- name: CELERY_REDIS_HOST
|
||||
value:
|
||||
_default: "redis.pm.svc.cluster.local"
|
||||
|
||||
# base: http://sarex-resources-service.resources — ns resources не развёрнут в контуре
|
||||
- name: RESOURCES_INTERNAL_HOST
|
||||
value:
|
||||
_default: "http://iam-backend.iam.svc.cluster.local:8000"
|
||||
|
||||
# base: http://eav-service.eav — сервис называется backend-svc и слушает 80
|
||||
- name: EAV_HOST
|
||||
value:
|
||||
_default: "http://backend-svc.eav.svc.cluster.local:80"
|
||||
|
||||
- name: EAV_API_PREFIX
|
||||
value:
|
||||
_default: "/api/v0"
|
||||
|
||||
- name: EAV_API_PREFIX_V1
|
||||
value:
|
||||
_default: "/api/v1"
|
||||
|
||||
- name: TRACING_INSECURE
|
||||
value:
|
||||
_default: "False"
|
||||
|
||||
- name: SERVER_ENABLE_SYNC_RESOURCES
|
||||
value:
|
||||
_default: "True"
|
||||
|
||||
- name: SERVER_DELETED_TASK_MAX_AGE_DAYS
|
||||
value:
|
||||
_default: "1"
|
||||
|
||||
- name: SERVER_EXPIRED_TASK_NOTIFICATION_HOUR
|
||||
value:
|
||||
_default: "17"
|
||||
|
||||
- name: LANG
|
||||
value:
|
||||
_default: "C.UTF-8"
|
||||
|
||||
- name: LC_ALL
|
||||
value:
|
||||
_default: "C.UTF-8"
|
||||
|
||||
- name: PYTHONUTF8
|
||||
value:
|
||||
_default: "1"
|
||||
|
||||
- name: CACHE_SSL
|
||||
value:
|
||||
_default: "False"
|
||||
|
||||
- name: CACHE_SSL_CA_CERTS
|
||||
value:
|
||||
_default: ""
|
||||
|
||||
# base: "False". Держим в одном значении с backend: при enable
|
||||
# config/celery.py включает периодическую синхронизацию ресурсов,
|
||||
# которая пишет ключи service_accounts / resources:* — их читает
|
||||
# backend в sarex/pm/utils/resources.py.
|
||||
- name: CACHE_ENABLE
|
||||
value:
|
||||
_default: "True"
|
||||
|
||||
# Новые: в base их нет, дефолт CacheSettings.host — localhost.
|
||||
- name: CACHE_HOST
|
||||
value:
|
||||
_default: "redis.pm.svc.cluster.local"
|
||||
|
||||
- name: CACHE_PORT
|
||||
value:
|
||||
_default: "6379"
|
||||
|
||||
- name: CLICKHOUSE_ENABLE
|
||||
value:
|
||||
_default: "False"
|
||||
|
||||
- name: KAFKA_ENABLE
|
||||
value:
|
||||
_default: "False"
|
||||
|
||||
# base: https://lk.sarex.io/api/token/public/
|
||||
- name: AUTH_PUBLIC_TOKEN_URL
|
||||
value:
|
||||
_default: "https://sarex.uralmine.com/api/token/public/"
|
||||
|
||||
# base: https://lk.sarex.io
|
||||
- name: SERVER_HOST
|
||||
value:
|
||||
_default: "https://sarex.uralmine.com"
|
||||
|
||||
# base: https://api.sarex.io
|
||||
- name: SERVER_API_HOST
|
||||
value:
|
||||
_default: "https://sarex.uralmine.com"
|
||||
|
||||
- name: SERVER_DEBUG
|
||||
value:
|
||||
_default: "False"
|
||||
|
||||
- name: SERVER_ALLOWED_HOSTS
|
||||
value:
|
||||
_default: '["*"]'
|
||||
|
||||
- name: SERVER_USE_OTEL
|
||||
value:
|
||||
_default: "False"
|
||||
|
||||
- name: SERVER_VERIFY_SSL
|
||||
value:
|
||||
_default: "False"
|
||||
|
||||
- name: SERVER_LOG_LEVEL
|
||||
value:
|
||||
_default: "INFO"
|
||||
|
||||
podAnnotations:
|
||||
_default:
|
||||
# base склеивал S3_BUCKET с S3_VERIFY: {{- end -}} съедал перевод строки.
|
||||
# S3_VERIFY поднят выше блока if, у {{ end }} убран хвостовой дефис.
|
||||
vault.hashicorp.com/agent-inject-template-pm-s3: |-
|
||||
{{- with secret "secrets/data/minio/apps/pm" -}}
|
||||
S3_HOST={{ index .Data.data.client "endpoint" }}
|
||||
S3_LOGIN={{ index .Data.data "access_key" }}
|
||||
S3_PASSWORD={{ index .Data.data "secret_key" }}
|
||||
S3_VERIFY=False
|
||||
{{- $buckets := index .Data.data "buckets" }}
|
||||
S3_BUCKET={{ if gt (len $buckets) 0 }}{{ index (index $buckets 0) "name" }}{{ else }}sarex-media-storage{{ end }}
|
||||
{{- end -}}
|
||||
22
apps/pm/d8-ugmk-prod/frontend.yaml
Normal file
22
apps/pm/d8-ugmk-prod/frontend.yaml
Normal file
@ -0,0 +1,22 @@
|
||||
---
|
||||
# Патч frontend для контура УГМК.
|
||||
#
|
||||
# ВНИМАНИЕ: тег обязан быть contour_*, НЕ production_*.
|
||||
# Сборка prod-варианта тянет remoteEntry.js модулей с https://modules.sarex.io,
|
||||
# который в закрытом контуре недоступен (configWebpack/config/endpoints.ts).
|
||||
# В contour-сборке пути к remoteEntry относительные — только она здесь работает.
|
||||
apiVersion: helm.toolkit.fluxcd.io/v2
|
||||
kind: HelmRelease
|
||||
metadata:
|
||||
name: frontend
|
||||
namespace: pm
|
||||
spec:
|
||||
values:
|
||||
services:
|
||||
frontend:
|
||||
# TODO(Дмитрий): подставить тег новой contour-сборки, когда pipeline
|
||||
# добежит. Пока продублирован тег из base (contour_e5c3d387,
|
||||
# 16.07.2026) — то есть патч сейчас ничего не меняет.
|
||||
image:
|
||||
name:
|
||||
_default: cr.yandex/crp3ccidau046kdj8g9q/pm-frontend:contour_fc00e54f
|
||||
@ -3,8 +3,21 @@ apiVersion: kustomize.config.k8s.io/v1beta1
|
||||
kind: Kustomization
|
||||
resources:
|
||||
- ../base
|
||||
- redis.yaml
|
||||
patches:
|
||||
- path: namespace.yaml
|
||||
target:
|
||||
kind: Namespace
|
||||
name: pm
|
||||
- path: backend.yaml
|
||||
target:
|
||||
kind: HelmRelease
|
||||
name: backend
|
||||
- path: celery.yaml
|
||||
target:
|
||||
kind: HelmRelease
|
||||
name: celery
|
||||
- path: frontend.yaml
|
||||
target:
|
||||
kind: HelmRelease
|
||||
name: frontend
|
||||
|
||||
98
apps/pm/d8-ugmk-prod/redis.yaml
Normal file
98
apps/pm/d8-ugmk-prod/redis.yaml
Normal file
@ -0,0 +1,98 @@
|
||||
---
|
||||
# Redis для celery в ns pm. В base его нет — там CELERY_REDIS_HOST указывает
|
||||
# на redis.pm.svc.cluster.local, но сам сервис не разворачивается.
|
||||
#
|
||||
# Имя Service обязано быть ровно "redis" (не redis-svc, как принято в остальных
|
||||
# релизах), иначе не сойдётся с CELERY_REDIS_HOST в backend.yaml и celery.yaml.
|
||||
apiVersion: helm.toolkit.fluxcd.io/v2
|
||||
kind: HelmRelease
|
||||
metadata:
|
||||
name: redis
|
||||
namespace: pm
|
||||
|
||||
spec:
|
||||
interval: 10m
|
||||
|
||||
chart:
|
||||
spec:
|
||||
chart: universal-chart
|
||||
version: "0.1.9"
|
||||
sourceRef:
|
||||
kind: HelmRepository
|
||||
name: yc-oci-charts
|
||||
namespace: flux-system
|
||||
interval: 10m
|
||||
|
||||
install:
|
||||
remediation:
|
||||
retries: 3
|
||||
|
||||
upgrade:
|
||||
remediation:
|
||||
retries: 3
|
||||
|
||||
values:
|
||||
global:
|
||||
env: _default
|
||||
|
||||
services:
|
||||
redis:
|
||||
enabled: true
|
||||
|
||||
image:
|
||||
name:
|
||||
_default: cr.yandex/crp3ccidau046kdj8g9q/redis:latest
|
||||
pullPolicy:
|
||||
_default: Always
|
||||
|
||||
deployment:
|
||||
enabled: true
|
||||
|
||||
name:
|
||||
_default: redis
|
||||
|
||||
replicaCount:
|
||||
_default: 1
|
||||
|
||||
port:
|
||||
_default: 6379
|
||||
|
||||
resources:
|
||||
requests:
|
||||
cpu:
|
||||
_default: 25m
|
||||
memory:
|
||||
_default: 64Mi
|
||||
|
||||
probes:
|
||||
liveness:
|
||||
enabled: false
|
||||
readiness:
|
||||
enabled: false
|
||||
|
||||
service:
|
||||
enabled: true
|
||||
|
||||
name:
|
||||
_default: redis
|
||||
|
||||
type:
|
||||
_default: ClusterIP
|
||||
|
||||
port:
|
||||
_default: 6379
|
||||
|
||||
targetPort:
|
||||
_default: 6379
|
||||
|
||||
# НЕ http: чарт по умолчанию подставляет "http", и тогда Istio навесит
|
||||
# на 6379 HTTP-фильтры и сломает RESP. Префикс tcp- переводит порт
|
||||
# в режим обычного TCP-проксирования.
|
||||
portName:
|
||||
_default: tcp-redis
|
||||
|
||||
imagePullSecrets:
|
||||
enabled:
|
||||
_default: true
|
||||
name:
|
||||
_default: regcred
|
||||
@ -42,7 +42,8 @@ spec:
|
||||
|
||||
image:
|
||||
name:
|
||||
_default: cr.yandex/crp3ccidau046kdj8g9q/workflows-engine:contour_3ef5b462
|
||||
_default: cr.yandex/crp3ccidau046kdj8g9q/workflows-engine:contour_a03d37da-dirty2
|
||||
|
||||
pullPolicy:
|
||||
_default: IfNotPresent
|
||||
|
||||
@ -161,23 +162,25 @@ spec:
|
||||
|
||||
- name: INTERNAL_PDM_URL
|
||||
value:
|
||||
_default: "http://documentations-api.documentations.svc.cluster.local:8080"
|
||||
_default: "http://backend-api-svc.documentations.svc.cluster.local:80"
|
||||
|
||||
- name: INTERNAL_FILESTREAM_URL
|
||||
value:
|
||||
_default: "http://documentations-filestream.documentations.svc.cluster.local:8080"
|
||||
|
||||
_default: "http://backend-filestream-svc.documentations.svc.cluster.local:80"
|
||||
- name: IGNORE_TAINTS_AND_NODE_SELECTOR
|
||||
value:
|
||||
_default: "true"
|
||||
- name: EXTERNAL_PDM_URL
|
||||
value:
|
||||
_default: "http://documentations-api.documentations.svc.cluster.local:8080"
|
||||
_default: "http://backend-api-svc.documentations.svc.cluster.local:80"
|
||||
|
||||
- name: EXTERNAL_FILESTREAM_URL
|
||||
value:
|
||||
_default: "http://documentations-filestream-service.documentations.svc.cluster.local:8080"
|
||||
_default: "http://backend-filestream-svc.documentations.svc.cluster.local:80"
|
||||
|
||||
- name: RESOURCES_API_INTERNAL_HOST
|
||||
value:
|
||||
_default: "http://resources-service.resources.svc.cluster.local:8000"
|
||||
_default: "http://iam-backend.iam.svc.cluster.local:8000"
|
||||
|
||||
- name: ENABLE_SQL_QUERY
|
||||
value:
|
||||
|
||||
@ -165,7 +165,7 @@ spec:
|
||||
|
||||
- name: INTERNAL_FILESTREAM_URL
|
||||
value:
|
||||
_default: "http://documentations-filestream.documentations.svc.cluster.local:8080"
|
||||
_default: "http://backend-filestream-svc.documentations.svc.cluster.local:80"
|
||||
|
||||
- name: EXTERNAL_PDM_URL
|
||||
value:
|
||||
|
||||
20
apps/rfi/d8-ugmk-prod/backend-s3.yaml
Normal file
20
apps/rfi/d8-ugmk-prod/backend-s3.yaml
Normal file
@ -0,0 +1,20 @@
|
||||
---
|
||||
apiVersion: helm.toolkit.fluxcd.io/v2
|
||||
kind: HelmRelease
|
||||
metadata:
|
||||
name: backend
|
||||
namespace: rfi
|
||||
spec:
|
||||
values:
|
||||
services:
|
||||
backend:
|
||||
podAnnotations:
|
||||
_default:
|
||||
vault.hashicorp.com/agent-inject-secret-rfi-s3: secrets/data/minio/apps/rfi
|
||||
vault.hashicorp.com/agent-inject-template-rfi-s3: |-
|
||||
{{- with secret "secrets/data/minio/apps/rfi" -}}
|
||||
YC_S3_ENDPOINT_URL=https://s3.uralmine.com
|
||||
YC_S3_BUCKET_NAME=sarex-rfi
|
||||
YC_S3_ACCESS_KEY_ID={{ index .Data.data "access_key" }}
|
||||
YC_S3_SECRET_ACCESS_KEY={{ index .Data.data "secret_key" }}
|
||||
{{- end -}}
|
||||
20
apps/rfi/d8-ugmk-prod/celery-s3.yaml
Normal file
20
apps/rfi/d8-ugmk-prod/celery-s3.yaml
Normal file
@ -0,0 +1,20 @@
|
||||
---
|
||||
apiVersion: helm.toolkit.fluxcd.io/v2
|
||||
kind: HelmRelease
|
||||
metadata:
|
||||
name: celery
|
||||
namespace: rfi
|
||||
spec:
|
||||
values:
|
||||
services:
|
||||
celery:
|
||||
podAnnotations:
|
||||
_default:
|
||||
vault.hashicorp.com/agent-inject-secret-rfi-s3: secrets/data/minio/apps/rfi
|
||||
vault.hashicorp.com/agent-inject-template-rfi-s3: |-
|
||||
{{- with secret "secrets/data/minio/apps/rfi" -}}
|
||||
YC_S3_ENDPOINT_URL=https://s3.uralmine.com
|
||||
YC_S3_BUCKET_NAME=sarex-rfi
|
||||
YC_S3_ACCESS_KEY_ID={{ index .Data.data "access_key" }}
|
||||
YC_S3_SECRET_ACCESS_KEY={{ index .Data.data "secret_key" }}
|
||||
{{- end -}}
|
||||
@ -9,3 +9,11 @@ patches:
|
||||
target:
|
||||
kind: HelmRelease
|
||||
name: frontend
|
||||
- path: backend-s3.yaml
|
||||
target:
|
||||
kind: HelmRelease
|
||||
name: backend
|
||||
- path: celery-s3.yaml
|
||||
target:
|
||||
kind: HelmRelease
|
||||
name: celery
|
||||
|
||||
@ -50,7 +50,7 @@ spec:
|
||||
_default: 1
|
||||
|
||||
port:
|
||||
_default: 80
|
||||
_default: 8080
|
||||
|
||||
resources:
|
||||
requests:
|
||||
@ -78,7 +78,7 @@ spec:
|
||||
_default: 80
|
||||
|
||||
targetPort:
|
||||
_default: 80
|
||||
_default: 8080
|
||||
|
||||
portName:
|
||||
_default: http
|
||||
|
||||
@ -253,7 +253,7 @@ spec:
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_DOCUMENTATIONS_REPOSITORY__BASE_URL
|
||||
value:
|
||||
_default: "http://documentations-api.documentations.svc.cluster.local:8080"
|
||||
_default: "http://backend-api-svc.documentations.svc.cluster.local:80"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_DOCUMENTATIONS_REPOSITORY__MAX_CONNECTIONS
|
||||
value:
|
||||
|
||||
@ -238,7 +238,7 @@ spec:
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_DOCUMENTATIONS_REPOSITORY__BASE_URL
|
||||
value:
|
||||
_default: "http://documentations-api.documentations.svc.cluster.local:8080"
|
||||
_default: "http://backend-api-svc.documentations.svc.cluster.local:80"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_DOCUMENTATIONS_REPOSITORY__MAX_CONNECTIONS
|
||||
value:
|
||||
|
||||
256
apps/transmittal/d8-ugmk-prod/backend-s3.yaml
Normal file
256
apps/transmittal/d8-ugmk-prod/backend-s3.yaml
Normal file
@ -0,0 +1,256 @@
|
||||
---
|
||||
apiVersion: helm.toolkit.fluxcd.io/v2
|
||||
kind: HelmRelease
|
||||
metadata:
|
||||
name: backend
|
||||
namespace: transmittal
|
||||
spec:
|
||||
values:
|
||||
services:
|
||||
backend:
|
||||
envs:
|
||||
- name: TRANSMITTAL_SERVICE_APP__NAME
|
||||
value:
|
||||
_default: "Transmittal Service"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_APP__LOG_LEVEL
|
||||
value:
|
||||
_default: "ERROR"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_FLOWS_REPOSITORY__BASE_URL
|
||||
value:
|
||||
_default: "http://backend-svc.flows.svc.cluster.local:80"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_FLOWS_REPOSITORY__MAX_CONNECTIONS
|
||||
value:
|
||||
_default: "10"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_FLOWS_REPOSITORY__MAX_KEEPALIVE_CONNECTIONS
|
||||
value:
|
||||
_default: "5"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_FLOWS_REPOSITORY__TIMEOUT
|
||||
value:
|
||||
_default: "30"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_APP__HOST
|
||||
value:
|
||||
_default: "https://sarex.contour.infra.sarex.tech/transmittal"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_APP__ENVIRONMENT
|
||||
value:
|
||||
_default: "prod"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_CORS__ALLOW_ORIGINS
|
||||
value:
|
||||
_default: '["*"]'
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_CORS__ALLOW_METHODS
|
||||
value:
|
||||
_default: '["*"]'
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_CORS__ALLOW_HEADERS
|
||||
value:
|
||||
_default: '["*"]'
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_CORS__ALLOW_CREDENTIALS
|
||||
value:
|
||||
_default: "true"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_UVICORN__HOST
|
||||
value:
|
||||
_default: "0.0.0.0"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_UVICORN__PORT
|
||||
value:
|
||||
_default: "8000"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_UVICORN__ENABLE_AUTO_RELOAD
|
||||
value:
|
||||
_default: "false"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_OTEL__ENABLE
|
||||
value:
|
||||
_default: "false"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_OTEL__HOST
|
||||
value:
|
||||
_default: "http://signoz-otel-collector-external.signoz.svc.cluster.local:4317"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_OTEL__SERVICE_NAME
|
||||
value:
|
||||
_default: "backend.transmittals-prod"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_OTEL__INSECURE
|
||||
value:
|
||||
_default: "false"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_DATABASE__SSL_MODE
|
||||
value:
|
||||
_default: "verify-full"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_DATABASE__SSL_ROOT_CERT_PATH
|
||||
value:
|
||||
_default: "/opt/.postgresql/root.crt"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_UVICORN__LOG_LEVEL
|
||||
value:
|
||||
_default: "info"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_UVICORN__NUM_WORKERS
|
||||
value:
|
||||
_default: "2"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_UVICORN__ROOT_PATH
|
||||
value:
|
||||
_default: ""
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_DATABASE__ENABLE_SSL
|
||||
value:
|
||||
_default: "false"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_RABBITMQ__HOST
|
||||
value:
|
||||
_default: "rabbitmq.rabbitmq.svc.cluster.local"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_RABBITMQ__PORT
|
||||
value:
|
||||
_default: "5672"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_SAREX_BACKEND_REPOSITORY__BASE_URL
|
||||
value:
|
||||
_default: "http://backend-svc.django.svc.cluster.local:80"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_SAREX_BACKEND_REPOSITORY__MAX_CONNECTIONS
|
||||
value:
|
||||
_default: "10"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_SAREX_BACKEND_REPOSITORY__MAX_KEEPALIVE_CONNECTIONS
|
||||
value:
|
||||
_default: "5"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_SAREX_BACKEND_REPOSITORY__TIMEOUT
|
||||
value:
|
||||
_default: "15"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_RESOURCE_REPOSITORY__BASE_URL
|
||||
value:
|
||||
_default: "http://iam-backend.iam.svc.cluster.local:8000"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_RESOURCE_REPOSITORY__MAX_CONNECTIONS
|
||||
value:
|
||||
_default: "10"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_RESOURCE_REPOSITORY__MAX_KEEPALIVE_CONNECTIONS
|
||||
value:
|
||||
_default: "5"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_RESOURCE_REPOSITORY__TIMEOUT
|
||||
value:
|
||||
_default: "15"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_DOCUMENTATIONS_REPOSITORY__BASE_URL
|
||||
value:
|
||||
_default: "http://backend-api-svc.documentations.svc.cluster.local:80"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_DOCUMENTATIONS_REPOSITORY__MAX_CONNECTIONS
|
||||
value:
|
||||
_default: "10"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_DOCUMENTATIONS_REPOSITORY__MAX_KEEPALIVE_CONNECTIONS
|
||||
value:
|
||||
_default: "5"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_DOCUMENTATIONS_REPOSITORY__TIMEOUT
|
||||
value:
|
||||
_default: "15"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_S3_CLIENT__MAX_POOL_CONNECTIONS
|
||||
value:
|
||||
_default: "10"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_S3_CLIENT__CONNECT_TIMEOUT
|
||||
value:
|
||||
_default: "10"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_S3_CLIENT__READ_TIMEOUT
|
||||
value:
|
||||
_default: "50"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_S3_CLIENT__REGION_NAME
|
||||
value:
|
||||
_default: "ru-central1"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_S3_CLIENT__VERIFY
|
||||
value:
|
||||
_default: "true"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_S3_CLIENT__ENDPOINT
|
||||
value:
|
||||
_default: "s3.uralmine.com"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_S3_CLIENT__USE_SSL
|
||||
value:
|
||||
_default: "true"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_HTML_TO_PDF_CONVERTER__BASE_URL
|
||||
value:
|
||||
_default: "http://export-project-service.django.svc.cluster.local:8000"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_HTML_TO_PDF_CONVERTER__MAX_CONNECTIONS
|
||||
value:
|
||||
_default: "10"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_HTML_TO_PDF_CONVERTER__MAX_KEEPALIVE_CONNECTIONS
|
||||
value:
|
||||
_default: "5"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_HTML_TO_PDF_CONVERTER__TIMEOUT
|
||||
value:
|
||||
_default: "50"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_MARKINGS__BASE_URL
|
||||
value:
|
||||
_default: "http://marks-service.documentations.svc.cluster.local:8000"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_MARKINGS__MAX_CONNECTIONS
|
||||
value:
|
||||
_default: "10"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_MARKINGS__MAX_KEEPALIVE_CONNECTIONS
|
||||
value:
|
||||
_default: "5"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_MARKINGS__TIMEOUT
|
||||
value:
|
||||
_default: "50"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_MAILGUN__BASE_URL
|
||||
value:
|
||||
_default: "https://api.mailgun.net/v3/mg.sarex.io"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_MAILGUN__MAX_CONNECTIONS
|
||||
value:
|
||||
_default: "10"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_MAILGUN__MAX_KEEPALIVE_CONNECTIONS
|
||||
value:
|
||||
_default: "5"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_MAILGUN__TIMEOUT
|
||||
value:
|
||||
_default: "15"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_MAILGUN__EMAIL
|
||||
value:
|
||||
_default: "hello@wb.io"
|
||||
|
||||
podAnnotations:
|
||||
_default:
|
||||
vault.hashicorp.com/agent-inject-secret-transmittal-s3: secrets/data/minio/apps/transmittal
|
||||
vault.hashicorp.com/agent-inject-template-transmittal-s3: |-
|
||||
{{- with secret "secrets/data/minio/apps/transmittal" -}}
|
||||
TRANSMITTAL_SERVICE_S3_CLIENT__ACCESS_KEY={{ index .Data.data "access_key" }}
|
||||
TRANSMITTAL_SERVICE_S3_CLIENT__SECRET_KEY={{ index .Data.data "secret_key" }}
|
||||
TRANSMITTAL_SERVICE_S3_CLIENT__DEFAULT_BUCKET=sarex-tf-state
|
||||
{{- end -}}
|
||||
@ -8,3 +8,11 @@ patches:
|
||||
target:
|
||||
kind: Namespace
|
||||
name: transmittal
|
||||
- path: backend-s3.yaml
|
||||
target:
|
||||
kind: HelmRelease
|
||||
name: backend
|
||||
- path: worker-s3.yaml
|
||||
target:
|
||||
kind: HelmRelease
|
||||
name: worker
|
||||
|
||||
256
apps/transmittal/d8-ugmk-prod/worker-s3.yaml
Normal file
256
apps/transmittal/d8-ugmk-prod/worker-s3.yaml
Normal file
@ -0,0 +1,256 @@
|
||||
---
|
||||
apiVersion: helm.toolkit.fluxcd.io/v2
|
||||
kind: HelmRelease
|
||||
metadata:
|
||||
name: worker
|
||||
namespace: transmittal
|
||||
spec:
|
||||
values:
|
||||
services:
|
||||
worker:
|
||||
envs:
|
||||
- name: TRANSMITTAL_SERVICE_FLOWS_REPOSITORY__BASE_URL
|
||||
value:
|
||||
_default: "http://backend-svc.flows.svc.cluster.local:8000"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_FLOWS_REPOSITORY__MAX_CONNECTIONS
|
||||
value:
|
||||
_default: "10"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_FLOWS_REPOSITORY__MAX_KEEPALIVE_CONNECTIONS
|
||||
value:
|
||||
_default: "5"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_FLOWS_REPOSITORY__TIMEOUT
|
||||
value:
|
||||
_default: "30"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_APP__NAME
|
||||
value:
|
||||
_default: "Transmittal Service"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_APP__LOG_LEVEL
|
||||
value:
|
||||
_default: "ERROR"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_APP__HOST
|
||||
value:
|
||||
_default: "https://lk.srx.wb.ru:30443/transmittal"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_APP__ENVIRONMENT
|
||||
value:
|
||||
_default: "prod"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_CORS__ALLOW_ORIGINS
|
||||
value:
|
||||
_default: '["*"]'
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_CORS__ALLOW_METHODS
|
||||
value:
|
||||
_default: '["*"]'
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_CORS__ALLOW_HEADERS
|
||||
value:
|
||||
_default: '["*"]'
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_CORS__ALLOW_CREDENTIALS
|
||||
value:
|
||||
_default: "true"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_UVICORN__HOST
|
||||
value:
|
||||
_default: "0.0.0.0"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_UVICORN__PORT
|
||||
value:
|
||||
_default: "8000"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_UVICORN__ENABLE_AUTO_RELOAD
|
||||
value:
|
||||
_default: "false"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_OTEL__ENABLE
|
||||
value:
|
||||
_default: "false"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_OTEL__HOST
|
||||
value:
|
||||
_default: "http://signoz-otel-collector-external.signoz.svc.cluster.local:4317"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_OTEL__SERVICE_NAME
|
||||
value:
|
||||
_default: "backend.transmittals-prod"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_OTEL__INSECURE
|
||||
value:
|
||||
_default: "false"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_DATABASE__SSL_MODE
|
||||
value:
|
||||
_default: "verify-full"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_DATABASE__SSL_ROOT_CERT_PATH
|
||||
value:
|
||||
_default: "/opt/.postgresql/root.crt"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_UVICORN__LOG_LEVEL
|
||||
value:
|
||||
_default: "info"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_UVICORN__NUM_WORKERS
|
||||
value:
|
||||
_default: "2"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_UVICORN__ROOT_PATH
|
||||
value:
|
||||
_default: ""
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_DATABASE__ENABLE_SSL
|
||||
value:
|
||||
_default: "false"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_RABBITMQ__HOST
|
||||
value:
|
||||
_default: "rabbitmq.rabbitmq.svc.cluster.local"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_RABBITMQ__PORT
|
||||
value:
|
||||
_default: "5672"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_SAREX_BACKEND_REPOSITORY__BASE_URL
|
||||
value:
|
||||
_default: "http://backend.django.svc.cluster.local:8000"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_SAREX_BACKEND_REPOSITORY__MAX_CONNECTIONS
|
||||
value:
|
||||
_default: "10"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_SAREX_BACKEND_REPOSITORY__MAX_KEEPALIVE_CONNECTIONS
|
||||
value:
|
||||
_default: "5"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_SAREX_BACKEND_REPOSITORY__TIMEOUT
|
||||
value:
|
||||
_default: "15"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_RESOURCE_REPOSITORY__BASE_URL
|
||||
value:
|
||||
_default: "http://resources-service.resources.svc.cluster.local:8000"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_RESOURCE_REPOSITORY__MAX_CONNECTIONS
|
||||
value:
|
||||
_default: "10"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_RESOURCE_REPOSITORY__MAX_KEEPALIVE_CONNECTIONS
|
||||
value:
|
||||
_default: "5"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_RESOURCE_REPOSITORY__TIMEOUT
|
||||
value:
|
||||
_default: "15"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_DOCUMENTATIONS_REPOSITORY__BASE_URL
|
||||
value:
|
||||
_default: "http://backend-api-svc.documentations.svc.cluster.local:80"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_DOCUMENTATIONS_REPOSITORY__MAX_CONNECTIONS
|
||||
value:
|
||||
_default: "10"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_DOCUMENTATIONS_REPOSITORY__MAX_KEEPALIVE_CONNECTIONS
|
||||
value:
|
||||
_default: "5"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_DOCUMENTATIONS_REPOSITORY__TIMEOUT
|
||||
value:
|
||||
_default: "15"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_S3_CLIENT__MAX_POOL_CONNECTIONS
|
||||
value:
|
||||
_default: "10"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_S3_CLIENT__CONNECT_TIMEOUT
|
||||
value:
|
||||
_default: "10"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_S3_CLIENT__READ_TIMEOUT
|
||||
value:
|
||||
_default: "50"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_S3_CLIENT__REGION_NAME
|
||||
value:
|
||||
_default: "ru-central1"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_S3_CLIENT__VERIFY
|
||||
value:
|
||||
_default: "true"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_S3_CLIENT__ENDPOINT
|
||||
value:
|
||||
_default: "s3.uralmine.com"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_S3_CLIENT__USE_SSL
|
||||
value:
|
||||
_default: "true"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_HTML_TO_PDF_CONVERTER__BASE_URL
|
||||
value:
|
||||
_default: "http://export-project-service.django.svc.cluster.local:8000"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_HTML_TO_PDF_CONVERTER__MAX_CONNECTIONS
|
||||
value:
|
||||
_default: "10"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_HTML_TO_PDF_CONVERTER__MAX_KEEPALIVE_CONNECTIONS
|
||||
value:
|
||||
_default: "5"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_HTML_TO_PDF_CONVERTER__TIMEOUT
|
||||
value:
|
||||
_default: "50"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_MARKINGS__BASE_URL
|
||||
value:
|
||||
_default: "http://marks-service.documentations.svc.cluster.local:8000"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_MARKINGS__MAX_CONNECTIONS
|
||||
value:
|
||||
_default: "10"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_MARKINGS__MAX_KEEPALIVE_CONNECTIONS
|
||||
value:
|
||||
_default: "5"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_MARKINGS__TIMEOUT
|
||||
value:
|
||||
_default: "50"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_MAILGUN__BASE_URL
|
||||
value:
|
||||
_default: "https://api.mailgun.net/v3/mg.sarex.io"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_MAILGUN__MAX_CONNECTIONS
|
||||
value:
|
||||
_default: "10"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_MAILGUN__MAX_KEEPALIVE_CONNECTIONS
|
||||
value:
|
||||
_default: "5"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_MAILGUN__TIMEOUT
|
||||
value:
|
||||
_default: "15"
|
||||
|
||||
- name: TRANSMITTAL_SERVICE_MAILGUN__EMAIL
|
||||
value:
|
||||
_default: "hello@wb.io"
|
||||
|
||||
podAnnotations:
|
||||
_default:
|
||||
vault.hashicorp.com/agent-inject-secret-transmittal-s3: secrets/data/minio/apps/transmittal
|
||||
vault.hashicorp.com/agent-inject-template-transmittal-s3: |-
|
||||
{{- with secret "secrets/data/minio/apps/transmittal" -}}
|
||||
TRANSMITTAL_SERVICE_S3_CLIENT__ACCESS_KEY={{ index .Data.data "access_key" }}
|
||||
TRANSMITTAL_SERVICE_S3_CLIENT__SECRET_KEY={{ index .Data.data "secret_key" }}
|
||||
TRANSMITTAL_SERVICE_S3_CLIENT__DEFAULT_BUCKET=sarex-tf-state
|
||||
{{- end -}}
|
||||
@ -9,15 +9,6 @@ spec:
|
||||
name: letsencrypt
|
||||
server: https://acme-v02.api.letsencrypt.org/directory
|
||||
solvers:
|
||||
- selector:
|
||||
dnsNames:
|
||||
- zitadel.test.sarex.brusnika.tech
|
||||
- grafana.test.sarex.brusnika.tech
|
||||
- openobserve.test.sarex.brusnika.tech
|
||||
- vmalert.test.sarex.brusnika.tech
|
||||
http01:
|
||||
ingress:
|
||||
class: istio
|
||||
- http01:
|
||||
ingress:
|
||||
class: nginx
|
||||
class: istio
|
||||
|
||||
@ -4,8 +4,9 @@ metadata:
|
||||
name: sarex-wildcard
|
||||
namespace: d8-ingress-istio
|
||||
spec:
|
||||
commonName: "*.uralmine.com"
|
||||
commonName: "*.sarex-k8s.uralmine.com"
|
||||
dnsNames:
|
||||
- "*.sarex-k8s.uralmine.com"
|
||||
- "*.uralmine.com"
|
||||
issuerRef:
|
||||
group: cert-manager.io
|
||||
|
||||
@ -1,57 +0,0 @@
|
||||
apiVersion: cert-manager.io/v1
|
||||
kind: Certificate
|
||||
metadata:
|
||||
name: gitea-cert
|
||||
namespace: istio-system
|
||||
spec:
|
||||
dnsNames:
|
||||
- gitea.invest.cps.sarex.lonsdaleites.ru
|
||||
issuerRef:
|
||||
kind: ClusterIssuer
|
||||
name: letsencrypt-prod
|
||||
secretName: gitea-tls-secret
|
||||
---
|
||||
apiVersion: networking.istio.io/v1beta1
|
||||
kind: Gateway
|
||||
metadata:
|
||||
name: gitea-gateway
|
||||
namespace: gateway
|
||||
spec:
|
||||
selector:
|
||||
istio: ingressgateway
|
||||
servers:
|
||||
- hosts:
|
||||
- gitea.invest.cps.sarex.lonsdaleites.ru
|
||||
port:
|
||||
name: http
|
||||
number: 80
|
||||
protocol: HTTP
|
||||
- hosts:
|
||||
- gitea.invest.cps.sarex.lonsdaleites.ru
|
||||
port:
|
||||
name: https
|
||||
number: 443
|
||||
protocol: HTTPS
|
||||
tls:
|
||||
credentialName: gitea-tls-secret
|
||||
mode: SIMPLE
|
||||
---
|
||||
apiVersion: networking.istio.io/v1beta1
|
||||
kind: VirtualService
|
||||
metadata:
|
||||
name: gitea-virt-service
|
||||
namespace: gitea
|
||||
spec:
|
||||
gateways:
|
||||
- gateway/gitea-gateway
|
||||
hosts:
|
||||
- gitea.invest.cps.sarex.lonsdaleites.ru
|
||||
http:
|
||||
- match:
|
||||
- uri:
|
||||
prefix: /
|
||||
route:
|
||||
- destination:
|
||||
host: gitea
|
||||
port:
|
||||
number: 3000
|
||||
@ -1,14 +0,0 @@
|
||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||
kind: Kustomization
|
||||
resources:
|
||||
- ../../../infrastructure/vault
|
||||
- ./gitea-istio.yaml
|
||||
- ./vault-istio.yaml
|
||||
patches:
|
||||
- path: ./patches/vault.yaml
|
||||
target:
|
||||
group: helm.toolkit.fluxcd.io
|
||||
version: v2
|
||||
kind: HelmRelease
|
||||
name: vault
|
||||
namespace: vault
|
||||
@ -1,57 +0,0 @@
|
||||
apiVersion: cert-manager.io/v1
|
||||
kind: Certificate
|
||||
metadata:
|
||||
name: vault-cert
|
||||
namespace: istio-system
|
||||
spec:
|
||||
dnsNames:
|
||||
- vault.invest.cps.sarex.lonsdaleites.ru
|
||||
issuerRef:
|
||||
kind: ClusterIssuer
|
||||
name: letsencrypt-prod
|
||||
secretName: vault-tls
|
||||
---
|
||||
apiVersion: networking.istio.io/v1beta1
|
||||
kind: Gateway
|
||||
metadata:
|
||||
name: vault-gateway
|
||||
namespace: gateway
|
||||
spec:
|
||||
selector:
|
||||
istio: ingressgateway
|
||||
servers:
|
||||
- hosts:
|
||||
- vault.invest.cps.sarex.lonsdaleites.ru
|
||||
port:
|
||||
name: http
|
||||
number: 80
|
||||
protocol: HTTP
|
||||
- hosts:
|
||||
- vault.invest.cps.sarex.lonsdaleites.ru
|
||||
port:
|
||||
name: https
|
||||
number: 443
|
||||
protocol: HTTPS
|
||||
tls:
|
||||
credentialName: vault-tls
|
||||
mode: SIMPLE
|
||||
---
|
||||
apiVersion: networking.istio.io/v1beta1
|
||||
kind: VirtualService
|
||||
metadata:
|
||||
name: vault-virt-service
|
||||
namespace: vault
|
||||
spec:
|
||||
gateways:
|
||||
- gateway/vault-gateway
|
||||
hosts:
|
||||
- vault.invest.cps.sarex.lonsdaleites.ru
|
||||
http:
|
||||
- match:
|
||||
- uri:
|
||||
prefix: /
|
||||
route:
|
||||
- destination:
|
||||
host: vault-vault-contour.vault.svc.cluster.local
|
||||
port:
|
||||
number: 8200
|
||||
@ -3,4 +3,13 @@ kind: Kustomization
|
||||
resources:
|
||||
- ./flux-system
|
||||
- ./helm-repositories.yaml
|
||||
- ./infrastructure
|
||||
|
||||
# infrastructure
|
||||
- ../../infrastructure/cert-manager/yc-ecp
|
||||
- ../../infrastructure/istio-config/yc-ecp
|
||||
- ../../infrastructure/dashboard/yc-ecp
|
||||
- ../../infrastructure/vault/yc-ecp
|
||||
|
||||
# apps
|
||||
- ../../apps/measurements/yc-ecp
|
||||
- ../../apps/django/yc-ecp
|
||||
|
||||
@ -164,15 +164,15 @@ spec:
|
||||
- name: regcred
|
||||
identity:
|
||||
auth:
|
||||
publicIssuerUrl: "https://sarex-camunda-keycloak.uralmine.com/auth/realms/camunda-platform"
|
||||
publicIssuerUrl: "https://camunda-keycloak.sarex-k8s.uralmine.com/auth/realms/camunda-platform"
|
||||
identity:
|
||||
redirectUrl: "https://sarex-camunda-identity.uralmine.com"
|
||||
redirectUrl: "https://camunda-identity.sarex-k8s.uralmine.com"
|
||||
operate:
|
||||
redirectUrl: "https://sarex-camunda-operate.uralmine.com"
|
||||
redirectUrl: "https://camunda-operate.sarex-k8s.uralmine.com"
|
||||
tasklist:
|
||||
redirectUrl: "https://sarex-camunda-tasklist.uralmine.com"
|
||||
redirectUrl: "https://camunda-tasklist.sarex-k8s.uralmine.com"
|
||||
optimize:
|
||||
redirectUrl: "https://sarex-camunda-optimize.uralmine.com"
|
||||
redirectUrl: "https://camunda-optimize.sarex-k8s.uralmine.com"
|
||||
webModeler:
|
||||
redirectUrl: "https://camunda-web-modeler.contour.infra.sarex.tech"
|
||||
console:
|
||||
|
||||
12
infrastructure/cert-manager/yc-ecp/cert-manager.yaml
Normal file
12
infrastructure/cert-manager/yc-ecp/cert-manager.yaml
Normal file
@ -0,0 +1,12 @@
|
||||
apiVersion: helm.toolkit.fluxcd.io/v2
|
||||
kind: HelmRelease
|
||||
metadata:
|
||||
name: cert-manager
|
||||
namespace: cert-manager
|
||||
spec:
|
||||
interval: 5m
|
||||
timeout: 10m
|
||||
values:
|
||||
global:
|
||||
imagePullSecrets:
|
||||
- dockerhub
|
||||
@ -0,0 +1,5 @@
|
||||
apiVersion: cert-manager.io/v1
|
||||
kind: ClusterIssuer
|
||||
metadata:
|
||||
name: letsencrypt-issuer
|
||||
$patch: delete
|
||||
@ -0,0 +1,5 @@
|
||||
apiVersion: cert-manager.io/v1
|
||||
kind: ClusterIssuer
|
||||
metadata:
|
||||
name: letsencrypt-issuer-istio
|
||||
$patch: delete
|
||||
10
infrastructure/cert-manager/yc-ecp/kustomization.yaml
Normal file
10
infrastructure/cert-manager/yc-ecp/kustomization.yaml
Normal file
@ -0,0 +1,10 @@
|
||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||
kind: Kustomization
|
||||
resources:
|
||||
- ../base
|
||||
patches:
|
||||
- path: cert-manager.yaml
|
||||
# ClusterIssuer/letsencrypt-prod создаёт istio-config; issuer'ы из base здесь
|
||||
# не нужны и вдобавок делят один privateKeySecretRef, затирая ACME-ключ друг друга
|
||||
- path: clusterissuer-letsencrypt-delete.yaml
|
||||
- path: clusterissuer-letsencrypt-istio-delete.yaml
|
||||
29
infrastructure/dashboard/yc-ecp/dashboard.yaml
Normal file
29
infrastructure/dashboard/yc-ecp/dashboard.yaml
Normal file
@ -0,0 +1,29 @@
|
||||
apiVersion: helm.toolkit.fluxcd.io/v2
|
||||
kind: HelmRelease
|
||||
metadata:
|
||||
name: dashboard
|
||||
namespace: kubernetes-dashboard
|
||||
spec:
|
||||
# istio в yc-ecp поставлен istio-operator, HelmRelease istio-base/istiod
|
||||
# в кластере нет — с зависимостями из base релиз никогда не станет Ready
|
||||
dependsOn: []
|
||||
interval: 5m
|
||||
timeout: 10m
|
||||
values:
|
||||
destinationRule:
|
||||
enabled: true
|
||||
host: "dashboard-kong-proxy"
|
||||
tlsMode: "DISABLE"
|
||||
# Gateway, Certificate и VirtualService описаны в istio-config
|
||||
virtualService:
|
||||
enabled: false
|
||||
gateway:
|
||||
enabled: false
|
||||
app:
|
||||
image:
|
||||
pullSecrets:
|
||||
- dockerhub
|
||||
kong:
|
||||
image:
|
||||
pullSecrets:
|
||||
- dockerhub
|
||||
6
infrastructure/dashboard/yc-ecp/kustomization.yaml
Normal file
6
infrastructure/dashboard/yc-ecp/kustomization.yaml
Normal file
@ -0,0 +1,6 @@
|
||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||
kind: Kustomization
|
||||
resources:
|
||||
- ../base
|
||||
patches:
|
||||
- path: dashboard.yaml
|
||||
@ -23,12 +23,14 @@ spec:
|
||||
- hosts:
|
||||
- sarex.uralmine.com
|
||||
- sarex-login.uralmine.com
|
||||
- sarex-rabbitmq.uralmine.com
|
||||
- sarex-camunda-keycloak.uralmine.com
|
||||
- sarex-camunda-identity.uralmine.com
|
||||
- sarex-camunda-operate.uralmine.com
|
||||
- sarex-camunda-tasklist.uralmine.com
|
||||
- sarex-camunda-optimize.uralmine.com
|
||||
- rabbitmq.sarex-k8s.uralmine.com
|
||||
- camunda-keycloak.sarex-k8s.uralmine.com
|
||||
- camunda-identity.sarex-k8s.uralmine.com
|
||||
- camunda-operate.sarex-k8s.uralmine.com
|
||||
- camunda-tasklist.sarex-k8s.uralmine.com
|
||||
- camunda-optimize.sarex-k8s.uralmine.com
|
||||
- sarex-stamp-verification.uralmine.com
|
||||
- sarex-document-link.uralmine.com
|
||||
tls:
|
||||
credentialName: istio-ingress-tls
|
||||
virtualServices:
|
||||
@ -189,6 +191,32 @@ spec:
|
||||
rewrite: /api/
|
||||
service: backend-svc.issues.svc.cluster.local
|
||||
port: 80
|
||||
checklists-api:
|
||||
name: checklists-api-virt-service
|
||||
namespace: default
|
||||
hosts:
|
||||
- sarex.uralmine.com
|
||||
gateways:
|
||||
- default/platform-gateway
|
||||
routes:
|
||||
- path:
|
||||
prefix: /checklists/api/
|
||||
rewrite: /api/
|
||||
service: backend-svc.checklists.svc.cluster.local
|
||||
port: 80
|
||||
bim-api:
|
||||
name: bim-api-virt-service
|
||||
namespace: default
|
||||
hosts:
|
||||
- sarex.uralmine.com
|
||||
gateways:
|
||||
- default/platform-gateway
|
||||
routes:
|
||||
- path:
|
||||
prefix: /bimv2/api/
|
||||
rewrite: /api/
|
||||
service: backend-svc.bim.svc.cluster.local
|
||||
port: 80
|
||||
flows-api:
|
||||
name: flows-api-virt-service
|
||||
namespace: default
|
||||
@ -215,6 +243,32 @@ spec:
|
||||
rewrite: /
|
||||
service: frontend-svc.issues.svc.cluster.local
|
||||
port: 80
|
||||
remarks-frontend:
|
||||
name: remarks-frontend-virt-service
|
||||
namespace: default
|
||||
hosts:
|
||||
- sarex.uralmine.com
|
||||
gateways:
|
||||
- default/platform-gateway
|
||||
routes:
|
||||
- path:
|
||||
prefix: /remarks/static/
|
||||
rewrite: /
|
||||
service: frontend-service.remarks.svc.cluster.local
|
||||
port: 80
|
||||
resources-frontend:
|
||||
name: resources-frontend-virt-service
|
||||
namespace: default
|
||||
hosts:
|
||||
- sarex.uralmine.com
|
||||
gateways:
|
||||
- default/platform-gateway
|
||||
routes:
|
||||
- path:
|
||||
prefix: /resources/static/
|
||||
rewrite: /
|
||||
service: resources-static-svc.pm.svc.cluster.local
|
||||
port: 80
|
||||
auth-frontend:
|
||||
name: auth-frontend-virt-service
|
||||
namespace: default
|
||||
@ -380,10 +434,28 @@ spec:
|
||||
rewrite: /
|
||||
service: frontend-svc.control-interface.svc.cluster.local
|
||||
port: 8080
|
||||
s3-proxy:
|
||||
# Отдача файлов из MinIO наружу. Бэкенды кладут в бакет и возвращают
|
||||
# фронту ссылку вида /media/<key> — без этого маршрута она уходит
|
||||
# в catch-all `/` на frontend-svc.django и отдаёт index.html.
|
||||
# Префикс /media/ — тот же, что в yc-ecp и dsinv, менять нельзя:
|
||||
# он зашит в ссылки, которые уже сохранены в БД.
|
||||
name: s3-proxy-virt-service
|
||||
namespace: default
|
||||
hosts:
|
||||
- sarex.uralmine.com
|
||||
gateways:
|
||||
- default/platform-gateway
|
||||
routes:
|
||||
- path:
|
||||
prefix: /media/
|
||||
rewrite: /
|
||||
service: s3-proxy-svc.django.svc.cluster.local
|
||||
port: 80
|
||||
camunda-keycloak:
|
||||
namespace: default
|
||||
hosts:
|
||||
- sarex-camunda-keycloak.uralmine.com
|
||||
- camunda-keycloak.sarex-k8s.uralmine.com
|
||||
gateways:
|
||||
- default/platform-gateway
|
||||
routes:
|
||||
@ -394,7 +466,7 @@ spec:
|
||||
camunda-identity:
|
||||
namespace: default
|
||||
hosts:
|
||||
- sarex-camunda-identity.uralmine.com
|
||||
- camunda-identity.sarex-k8s.uralmine.com
|
||||
gateways:
|
||||
- default/platform-gateway
|
||||
routes:
|
||||
@ -405,7 +477,7 @@ spec:
|
||||
camunda-operate:
|
||||
namespace: default
|
||||
hosts:
|
||||
- sarex-camunda-operate.uralmine.com
|
||||
- camunda-operate.sarex-k8s.uralmine.com
|
||||
gateways:
|
||||
- default/platform-gateway
|
||||
routes:
|
||||
@ -416,7 +488,7 @@ spec:
|
||||
camunda-tasklist:
|
||||
namespace: default
|
||||
hosts:
|
||||
- sarex-camunda-tasklist.uralmine.com
|
||||
- camunda-tasklist.sarex-k8s.uralmine.com
|
||||
gateways:
|
||||
- default/platform-gateway
|
||||
routes:
|
||||
@ -427,7 +499,7 @@ spec:
|
||||
camunda-optimize:
|
||||
namespace: default
|
||||
hosts:
|
||||
- sarex-camunda-optimize.uralmine.com
|
||||
- camunda-optimize.sarex-k8s.uralmine.com
|
||||
gateways:
|
||||
- default/platform-gateway
|
||||
routes:
|
||||
@ -438,7 +510,7 @@ spec:
|
||||
rabbitmq:
|
||||
namespace: default
|
||||
hosts:
|
||||
- sarex-rabbitmq.uralmine.com
|
||||
- rabbitmq.sarex-k8s.uralmine.com
|
||||
gateways:
|
||||
- default/platform-gateway
|
||||
routes:
|
||||
@ -457,3 +529,25 @@ spec:
|
||||
prefix: /
|
||||
service: zitadel-idp-contour.zitadel.svc.cluster.local
|
||||
port: 8080
|
||||
stamp-verification:
|
||||
namespace: default
|
||||
hosts:
|
||||
- sarex-stamp-verification.uralmine.com
|
||||
gateways:
|
||||
- default/platform-gateway
|
||||
routes:
|
||||
- path:
|
||||
prefix: /
|
||||
service: frontend-service.stamp-verification.svc.cluster.local
|
||||
port: 80
|
||||
document-link:
|
||||
namespace: default
|
||||
hosts:
|
||||
- sarex-document-link.uralmine.com
|
||||
gateways:
|
||||
- default/platform-gateway
|
||||
routes:
|
||||
- path:
|
||||
prefix: /
|
||||
service: frontend-service.document-link.svc.cluster.local
|
||||
port: 80
|
||||
|
||||
359
infrastructure/istio-config/yc-ecp/istio-config.yaml
Normal file
359
infrastructure/istio-config/yc-ecp/istio-config.yaml
Normal file
@ -0,0 +1,359 @@
|
||||
apiVersion: helm.toolkit.fluxcd.io/v2
|
||||
kind: HelmRelease
|
||||
metadata:
|
||||
name: istio-config
|
||||
namespace: default
|
||||
spec:
|
||||
# istio в yc-ecp поставлен istio-operator, HelmRelease istio-base/istiod/ingressgateway
|
||||
# в кластере нет — с зависимостями из base релиз никогда не станет Ready.
|
||||
# cert-manager нужен: этот релиз создаёт ClusterIssuer и Certificate
|
||||
dependsOn:
|
||||
- name: cert-manager
|
||||
namespace: cert-manager
|
||||
interval: 5m
|
||||
timeout: 10m
|
||||
values:
|
||||
global:
|
||||
env: yc-ecp
|
||||
environments:
|
||||
yc-ecp:
|
||||
namespaces: []
|
||||
certManager:
|
||||
# чарт рендерит ClusterIssuer как `spec: {{ toYaml $ci.spec }}`,
|
||||
# поэтому спека обязана лежать под ключом spec
|
||||
clusterIssuers:
|
||||
letsencrypt-prod:
|
||||
spec:
|
||||
acme:
|
||||
email: "sarex@sarex.io"
|
||||
server: "https://acme-v02.api.letsencrypt.org/directory"
|
||||
privateKeySecretRef:
|
||||
name: letsencrypt-prod
|
||||
solvers:
|
||||
- http01:
|
||||
ingress:
|
||||
class: istio
|
||||
# solver-под создаётся контроллером в namespace
|
||||
# сертификата, values чарта cert-manager на него
|
||||
# не действуют — pull-секрет задаётся здесь
|
||||
podTemplate:
|
||||
spec:
|
||||
imagePullSecrets:
|
||||
- name: dockerhub
|
||||
# ключ = имя Certificate И имя секрета: версия чарта в OCI-репозитории
|
||||
# поле secretName не читает, а берёт имя ключа
|
||||
certificates:
|
||||
gitea-tls-secret:
|
||||
namespace: istio-system
|
||||
dnsNames:
|
||||
- gitea.invest.cps.sarex.lonsdaleites.ru
|
||||
issuerRef:
|
||||
name: letsencrypt-prod
|
||||
kind: ClusterIssuer
|
||||
vault-tls:
|
||||
namespace: istio-system
|
||||
dnsNames:
|
||||
- vault.invest.cps.sarex.lonsdaleites.ru
|
||||
issuerRef:
|
||||
name: letsencrypt-prod
|
||||
kind: ClusterIssuer
|
||||
dashboard-tls:
|
||||
namespace: istio-system
|
||||
dnsNames:
|
||||
- dashboard.invest.cps.sarex.lonsdaleites.ru
|
||||
issuerRef:
|
||||
name: letsencrypt-prod
|
||||
kind: ClusterIssuer
|
||||
aero-invest-tls-secret:
|
||||
namespace: istio-system
|
||||
dnsNames:
|
||||
- aero.invest.sarex.io
|
||||
issuerRef:
|
||||
name: letsencrypt-prod
|
||||
kind: ClusterIssuer
|
||||
istio:
|
||||
gateways:
|
||||
gitea:
|
||||
name: gitea-gateway
|
||||
namespace: gateway
|
||||
servers:
|
||||
- hosts:
|
||||
- gitea.invest.cps.sarex.lonsdaleites.ru
|
||||
httpPortName: http
|
||||
httpsPortName: https
|
||||
tls:
|
||||
credentialName: gitea-tls-secret
|
||||
vault:
|
||||
name: vault-gateway
|
||||
namespace: gateway
|
||||
servers:
|
||||
- hosts:
|
||||
- vault.invest.cps.sarex.lonsdaleites.ru
|
||||
httpPortName: http
|
||||
httpsPortName: https
|
||||
tls:
|
||||
credentialName: vault-tls
|
||||
main:
|
||||
name: main-gateway
|
||||
namespace: gateway
|
||||
servers:
|
||||
- hosts:
|
||||
- aero.invest.sarex.io
|
||||
httpPortName: http
|
||||
httpsPortName: https
|
||||
tls:
|
||||
credentialName: aero-invest-tls-secret
|
||||
dashboard:
|
||||
name: dashboard-gateway
|
||||
namespace: gateway
|
||||
servers:
|
||||
- hosts:
|
||||
- dashboard.invest.cps.sarex.lonsdaleites.ru
|
||||
# без http-сервера порт 80 для этого хоста остаётся
|
||||
# автогенерируемому ingress-шлюзу, через который
|
||||
# cert-manager отдаёт HTTP-01 challenge
|
||||
onlyHttps: true
|
||||
httpsPortName: https
|
||||
tls:
|
||||
credentialName: dashboard-tls
|
||||
# имя VirtualService = ключ, поле name чарт игнорирует.
|
||||
# noCors: чарт иначе навешивает corsPolicy с дефолтными origins sarex.io
|
||||
virtualServices:
|
||||
gitea-virt-service:
|
||||
namespace: gateway
|
||||
noCors: true
|
||||
hosts:
|
||||
- gitea.invest.cps.sarex.lonsdaleites.ru
|
||||
gateways:
|
||||
- gateway/gitea-gateway
|
||||
routes:
|
||||
- path:
|
||||
prefix: /
|
||||
service: gitea.gitea.svc.cluster.local
|
||||
port: 3000
|
||||
vault-virt-service:
|
||||
namespace: gateway
|
||||
noCors: true
|
||||
hosts:
|
||||
- vault.invest.cps.sarex.lonsdaleites.ru
|
||||
gateways:
|
||||
- gateway/vault-gateway
|
||||
routes:
|
||||
- path:
|
||||
prefix: /
|
||||
service: vault-vault-contour.vault.svc.cluster.local
|
||||
port: 8200
|
||||
dashboard-virt-service:
|
||||
namespace: gateway
|
||||
noCors: true
|
||||
hosts:
|
||||
- dashboard.invest.cps.sarex.lonsdaleites.ru
|
||||
gateways:
|
||||
- gateway/dashboard-gateway
|
||||
routes:
|
||||
- path:
|
||||
prefix: /
|
||||
service: dashboard-kong-proxy.kubernetes-dashboard.svc.cluster.local
|
||||
port: 80
|
||||
|
||||
# --- aero.invest.sarex.io / main-gateway ---
|
||||
backend-service-virt-service:
|
||||
namespace: gateway
|
||||
hosts:
|
||||
- aero.invest.sarex.io
|
||||
gateways:
|
||||
- gateway/main-gateway
|
||||
cors:
|
||||
allowHeaders:
|
||||
- Authorization
|
||||
- Content-Type
|
||||
allowMethods:
|
||||
- GET
|
||||
- POST
|
||||
- PUT
|
||||
- PATCH
|
||||
- HEAD
|
||||
- DELETE
|
||||
routes:
|
||||
- path:
|
||||
prefix: /admin/
|
||||
service: backend-service.django.svc.cluster.local
|
||||
port: 8000
|
||||
- path:
|
||||
prefix: /api
|
||||
service: backend-service.django.svc.cluster.local
|
||||
port: 8000
|
||||
|
||||
s3-proxy-virt-service:
|
||||
namespace: gateway
|
||||
hosts:
|
||||
- aero.invest.sarex.io
|
||||
gateways:
|
||||
- gateway/main-gateway
|
||||
cors:
|
||||
allowHeaders:
|
||||
- Authorization
|
||||
- Content-Type
|
||||
allowMethods:
|
||||
- GET
|
||||
- POST
|
||||
- PUT
|
||||
- PATCH
|
||||
- HEAD
|
||||
- DELETE
|
||||
routes:
|
||||
- path:
|
||||
prefix: /s3/
|
||||
rewrite: /
|
||||
service: s3-bim-service.django.svc.cluster.local
|
||||
port: 80
|
||||
- path:
|
||||
prefix: /media/
|
||||
rewrite: /
|
||||
service: s3-service.django.svc.cluster.local
|
||||
port: 80
|
||||
|
||||
frontend-vs:
|
||||
namespace: gateway
|
||||
noCors: true
|
||||
hosts:
|
||||
- aero.invest.sarex.io
|
||||
gateways:
|
||||
- gateway/main-gateway
|
||||
routes:
|
||||
# без path — маршрут без match, catch-all, как в кластере;
|
||||
# он должен оставаться последним по порядку сопоставления
|
||||
- service: frontend-service.django.svc.cluster.local
|
||||
port: 80
|
||||
|
||||
bim-api-gazpromcps-api-virt-service:
|
||||
namespace: gateway
|
||||
hosts:
|
||||
- aero.invest.sarex.io
|
||||
gateways:
|
||||
- gateway/main-gateway
|
||||
cors:
|
||||
allowHeaders:
|
||||
- Authorization
|
||||
- Content-Type
|
||||
allowMethods:
|
||||
- GET
|
||||
- POST
|
||||
- PUT
|
||||
- PATCH
|
||||
- HEAD
|
||||
- DELETE
|
||||
routes:
|
||||
- path:
|
||||
prefix: /bim-gazpromcps/api/
|
||||
rewrite: /api/
|
||||
service: bim-api-gazpromcps-service.bim.svc.cluster.local
|
||||
port: 80
|
||||
- path:
|
||||
prefix: /bim-gazpromcps/files/
|
||||
rewrite: /files/
|
||||
service: bim-api-gazpromcps-service.bim.svc.cluster.local
|
||||
port: 80
|
||||
|
||||
bim-backend-v2-api-virt-service:
|
||||
namespace: gateway
|
||||
hosts:
|
||||
- aero.invest.sarex.io
|
||||
gateways:
|
||||
- gateway/main-gateway
|
||||
cors:
|
||||
allowHeaders:
|
||||
- Authorization
|
||||
- Content-Type
|
||||
allowMethods:
|
||||
- GET
|
||||
- POST
|
||||
- PUT
|
||||
- PATCH
|
||||
- HEAD
|
||||
- DELETE
|
||||
routes:
|
||||
- path:
|
||||
prefix: /bim2-gazpromcps/api/
|
||||
rewrite: /api/
|
||||
service: bim-backend-v2-service.bim.svc.cluster.local
|
||||
port: 80
|
||||
|
||||
eav-virt-service:
|
||||
namespace: gateway
|
||||
hosts:
|
||||
- aero.invest.sarex.io
|
||||
gateways:
|
||||
- gateway/main-gateway
|
||||
cors:
|
||||
allowHeaders:
|
||||
- Authorization
|
||||
- Content-Type
|
||||
allowMethods:
|
||||
- POST
|
||||
- GET
|
||||
- PATCH
|
||||
- DELETE
|
||||
- HEAD
|
||||
- PUT
|
||||
- OPTIONS
|
||||
routes:
|
||||
- path:
|
||||
prefix: /eav/api/
|
||||
rewrite: /api/
|
||||
service: eav-service.eav.svc.cluster.local
|
||||
port: 8000
|
||||
noCors: true
|
||||
- path:
|
||||
prefix: /eav/admin/
|
||||
rewrite: /eav/admin/
|
||||
service: eav-service.eav.svc.cluster.local
|
||||
port: 8000
|
||||
|
||||
api-virt-service:
|
||||
namespace: gateway
|
||||
hosts:
|
||||
- aero.invest.sarex.io
|
||||
gateways:
|
||||
- gateway/main-gateway
|
||||
cors:
|
||||
allowHeaders:
|
||||
- Authorization
|
||||
- Content-Type
|
||||
allowMethods:
|
||||
- GET
|
||||
- POST
|
||||
- PUT
|
||||
- PATCH
|
||||
- HEAD
|
||||
- DELETE
|
||||
routes:
|
||||
- path:
|
||||
prefix: /workflows/api/
|
||||
rewrite: /api/
|
||||
service: workflows-backend-service.processing.svc.cluster.local
|
||||
port: 80
|
||||
|
||||
projects-frontend-static-virt-service:
|
||||
namespace: gateway
|
||||
hosts:
|
||||
- aero.invest.sarex.io
|
||||
gateways:
|
||||
- gateway/main-gateway
|
||||
cors:
|
||||
allowHeaders:
|
||||
- Authorization
|
||||
- Content-Type
|
||||
allowMethods:
|
||||
- GET
|
||||
- POST
|
||||
- PUT
|
||||
- PATCH
|
||||
- HEAD
|
||||
- DELETE
|
||||
routes:
|
||||
- path:
|
||||
prefix: /projects/static/
|
||||
rewrite: /
|
||||
service: projects-frontend-static-service.projects.svc.cluster.local
|
||||
port: 80
|
||||
6
infrastructure/istio-config/yc-ecp/kustomization.yaml
Normal file
6
infrastructure/istio-config/yc-ecp/kustomization.yaml
Normal file
@ -0,0 +1,6 @@
|
||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||
kind: Kustomization
|
||||
resources:
|
||||
- ../base
|
||||
patches:
|
||||
- path: istio-config.yaml
|
||||
6
infrastructure/vault/yc-ecp/kustomization.yaml
Normal file
6
infrastructure/vault/yc-ecp/kustomization.yaml
Normal file
@ -0,0 +1,6 @@
|
||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||
kind: Kustomization
|
||||
resources:
|
||||
- ../base
|
||||
patches:
|
||||
- path: vault.yaml
|
||||
Loading…
Reference in New Issue
Block a user