From 96d0d2e373b5437976759fcfd62771ab1312970b Mon Sep 17 00:00:00 2001 From: emelinda Date: Sun, 9 Aug 2026 20:42:23 +0300 Subject: [PATCH] =?UTF-8?q?BIM=20=D0=B2=20=D0=BA=D0=BE=D0=BD=D1=82=D1=83?= =?UTF-8?q?=D1=80=D0=B5=20aero:=20api=20=D0=B8=20worker=20=D0=B8=D0=B7=20a?= =?UTF-8?q?ero/bimbackend?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Разворачивается ИМЕННО bimbackend (Python, пара api + worker), а не platform/bim-backend-v2 из apps/bim/base — тот откачен коммитом 285255e. ../base здесь намеренно не подключён. Различить два приложения по образу нельзя: оба пушат bim-api. Различие в тегах — у bimbackend полный SHA коммита (CI пушит bim-api:${CI_COMMIT_SHA} с master), у bim-backend-v2 contour_*. Взят 870965d1..., тот же, что крутится в dsinv. Манифесты обычные, а не universal-chart: в репозитории сервис так и описан (apps/bim/dsinv), своего чарта у него нет. Отличия от dsinv: * секреты из Vault вместо secretKeyRef на несуществующие Secret'ы; штатный entrypoint файлы читать не умеет, поэтому обёрнут в sh -ec; * PROCESSING_API_URL и WORKSPACES_API_URL приведены к именам контура — в dsinv это workflows-service:8000 и workspaces-service:8000, здесь оба сервиса называются backend-svc и слушают 80; * RABBIT_HOST у воркера в dsinv указывает на rabbitmq-service.bim — брокера в этом namespace нет ни там, ни здесь; у api в том же файле адрес правильный. Поставлен общий брокер контура, vhost корневой; * S3_BUCKET переведён на общее медиахранилище sarex-media-storage; * убраны GOOGLE_APPLICATION_CREDENTIALS и том с ключом — Google в контуре нет, флаг FEATURE_ENABLE_GCLOUD и так выключен; * NodePort с прибитым 31352 заменён на ClusterIP: наружу сервис выходит через общий Gateway; * снят nodeSelector name=generic, imagePullSecrets переведён на regcred. ИЗВЕСТНОЕ ОГРАНИЧЕНИЕ, принято осознанно. S3 у этого приложения на MinIO не настраивается: в storage/s3.py адрес зашит в код — endpoint_url='https://storage.yandexcloud.net' переменной окружения для него нет. Из контура он недостижим, поэтому операции с файлами будут падать по таймауту, а остальные эндпоинты живы. Альтернативы — пересборка образа с вынесенным endpoint либо перевод на BIM_CURRENT_STORAGE=local (тип есть в storage/storages.py). Наружу выведен на bim.sarex.local.lonsdaleites.ru, имя добавлено в dnsNames сертификата. Тот же адрес приложение знает про себя через BIM_API_EXTERNAL_HOST и строит по нему ссылки. --- aero/roles/sarex_stack/defaults/main.yml | 32 +++ apps/bim/aero/bim-api.yaml | 216 ++++++++++++++++++ apps/bim/aero/bim-worker.yaml | 149 ++++++++++++ apps/bim/aero/kustomization.yaml | 11 + apps/bim/aero/namespace.yaml | 7 + clusters/aero/apps/kustomization.yaml | 3 + .../istio-config/aero/istio-config.yaml | 20 ++ 7 files changed, 438 insertions(+) create mode 100644 apps/bim/aero/bim-api.yaml create mode 100644 apps/bim/aero/bim-worker.yaml create mode 100644 apps/bim/aero/kustomization.yaml create mode 100644 apps/bim/aero/namespace.yaml diff --git a/aero/roles/sarex_stack/defaults/main.yml b/aero/roles/sarex_stack/defaults/main.yml index 530d1fe..23de13c 100644 --- a/aero/roles/sarex_stack/defaults/main.yml +++ b/aero/roles/sarex_stack/defaults/main.yml @@ -88,6 +88,7 @@ registry_secrets: - {name: regcred, namespace: measurements} - {name: regcred, namespace: processing} - {name: regcred, namespace: workspaces} + - {name: regcred, namespace: bim} # Поднимать стек (docker compose up -d). Требует запущенной службы docker и # docker login в cr.yandex — по умолчанию выключено. @@ -157,6 +158,7 @@ gitea_sync_paths: - apps/measurements - apps/processing - apps/workspaces + - apps/bim # Рабочая копия репозитория gitea на хосте (клон, живёт между прогонами). gitea_sync_workdir: "{{ deploy_dir }}/gitea-sync" @@ -243,6 +245,7 @@ vault_k8s_roles: - {name: processing, namespaces: [processing]} - {name: measurements, namespaces: [measurements]} - {name: workspaces, namespaces: [workspaces]} + - {name: bim, namespaces: [bim]} # Боевые креды инфраструктурных сервисов. Пути и имена ключей заданы чартами # (см. vaultRoot у minio и auth.vault у rabbitmq в infrastructure/*/aero) — @@ -370,6 +373,30 @@ vault_app_secrets: # django, той самой учётки из secrets/apps/django/superuser выше. Из этого же # пути django в base читает django_zitadel_access_token, но в контуре Zitadel # нет и та аннотация удалена в apps/django/aero — здесь удалять её НЕ нужно. + # --- Секреты приложения bim (aero/bimbackend) ------------------------------ + # Имена ключей задают vault-шаблоны в apps/bim/aero. Приложение читает БД + # через DB_*, а не POSTGRES_*, — шаблон переименовывает при рендере. + - path: secrets/apps/bim/postgres + data: + host: postgresql.postgresql.svc.cluster.local + port: "5432" + database: "{{ sarex_postgres_bim_db }}" + username: "{{ sarex_postgres_bim_user }}" + password: "{{ sarex_secrets.SAREX_BIM_DB_PASSWORD }}" + # Как и у остальных: отдельного пользователя брокера нет, берём админского. + # Отдельного vhost тоже нет — в dsinv у bim он называется api, здесь корневой. + - path: secrets/rabbitmq/apps/bim + data: + username: "{{ sarex_rabbitmq_k8s_user }}" + password: "{{ sarex_secrets.SAREX_RABBITMQ_PASSWORD }}" + # S3. ВНИМАНИЕ: приложению эти креды, скорее всего, не пригодятся — адрес + # хранилища у него зашит в код (storage/s3.py, storage.yandexcloud.net) и + # на MinIO не переключается. Секрет всё равно нужен: без него vault-agent + # не отрендерит шаблон и под не стартует вовсе. + - path: secrets/minio/apps/bim + data: + access_key: "{{ sarex_minio_k8s_user }}" + secret_key: "{{ sarex_secrets.SAREX_MINIO_ROOT_PASSWORD }}" - path: secrets/vault/common/django_auth data: key: "{{ (superuser_name ~ ':' ~ superuser_password) | b64encode }}" @@ -410,6 +437,11 @@ sarex_postgres_processing_user: processing sarex_postgres_workspaces_db: workspace_db sarex_postgres_workspaces_user: workspace +# То же для bim. Должно совпадать с записью bim_db в contour.databases +# (infrastructure/postgresql/aero). +sarex_postgres_bim_db: bim_db +sarex_postgres_bim_user: bim + # Бакет медиафайлов django. ВНИМАНИЕ: чарт MinIO бакеты не создаёт — его нужно # завести отдельно, иначе загрузка файлов будет падать. sarex_django_s3_bucket: sarex-media-storage diff --git a/apps/bim/aero/bim-api.yaml b/apps/bim/aero/bim-api.yaml new file mode 100644 index 0000000..5d0e6be --- /dev/null +++ b/apps/bim/aero/bim-api.yaml @@ -0,0 +1,216 @@ +--- +# BIM API — приложение из aero/bimbackend (Python, api + worker). +# +# ЭТО НЕ ТО ЖЕ, ЧТО apps/bim/base. В base описан platform/bim-backend-v2 — +# другой сервис, на Go, с единственным httpserver. Спутать их легко: ОБА +# пушат в реестр один и тот же образ bim-api, и различаются только тегами и +# содержимым. У bimbackend теги — полный SHA коммита (CI пушит +# bim-api:${CI_COMMIT_SHA} с master), у bim-backend-v2 — contour_*. +# Поэтому здесь ../base намеренно НЕ подключён. +# +# Манифесты обычные, а не HelmRelease с universal-chart: в репозитории этот +# сервис так и описан (apps/bim/dsinv), своего чарта у него нет, и заводить +# его ради контура значило бы поддерживать ещё одну сущность. +apiVersion: v1 +kind: ServiceAccount +metadata: + name: bim-api-sa + namespace: bim +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: bim-api + namespace: bim + labels: + app: bim-api +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + app: bim-api + template: + metadata: + labels: + app: bim-api + annotations: + # Порт Vault исключён из перехвата sidecar'ом: сам Vault живёт вне + # кластера, и заворачивать обращения к нему в mesh незачем. + traffic.sidecar.istio.io/excludeOutboundPorts: "8200" + vault.hashicorp.com/agent-init-first: "true" + vault.hashicorp.com/agent-inject: "true" + vault.hashicorp.com/agent-pre-populate-only: "true" + vault.hashicorp.com/auth-path: auth/kubernetes + vault.hashicorp.com/role: bim + # БД. Имена переменных — DB_*, как их читает settings.py bimbackend, + # а не POSTGRES_*, как у остальных приложений контура. + vault.hashicorp.com/agent-inject-secret-bim-db: secrets/data/apps/bim/postgres + vault.hashicorp.com/agent-inject-template-bim-db: |- + {{- with secret "secrets/data/apps/bim/postgres" -}} + DB_HOST={{ index .Data.data "host" }} + DB_PORT={{ index .Data.data "port" }} + DB_NAME={{ index .Data.data "database" }} + DB_USER={{ index .Data.data "username" }} + DB_PASSWORD={{ index .Data.data "password" }} + {{- end -}} + vault.hashicorp.com/agent-inject-secret-bim-rabbitmq: secrets/data/rabbitmq/apps/bim + vault.hashicorp.com/agent-inject-template-bim-rabbitmq: |- + {{- with secret "secrets/data/rabbitmq/apps/bim" -}} + RABBIT_USER={{ index .Data.data "username" }} + RABBIT_PASSWORD={{ index .Data.data "password" }} + {{- end -}} + vault.hashicorp.com/agent-inject-secret-bim-s3: secrets/data/minio/apps/bim + vault.hashicorp.com/agent-inject-template-bim-s3: |- + {{- with secret "secrets/data/minio/apps/bim" -}} + AWS_ACCESS_KEY_ID={{ index .Data.data "access_key" }} + AWS_SECRET_ACCESS_KEY={{ index .Data.data "secret_key" }} + {{- end -}} + # Публичный ключ JWT отдаётся файлом. Оба флага аутентификации ниже + # выключены, то есть читаться он не должен, — но путь в переменной + # обязан существовать, иначе рискуем падением при импорте настроек. + vault.hashicorp.com/agent-inject-secret-jwt-public: secrets/data/vault/common/rsa_keys + vault.hashicorp.com/agent-inject-template-jwt-public: |- + {{- with secret "secrets/data/vault/common/rsa_keys" -}} + {{ index .Data.data "public_key" }} + {{- end -}} + spec: + serviceAccountName: bim-api-sa + imagePullSecrets: + - name: regcred + containers: + - name: bim-api + # Тег — полный SHA, как их пушит CI aero/bimbackend с master. Именно + # этот образ крутится в dsinv. contour_*-теги у образа bim-api брать + # НЕЛЬЗЯ: их собирает bim-backend-v2, это чужое приложение. + image: cr.yandex/crp3ccidau046kdj8g9q/bim-api:870965d1967cd761965029b0480884ab7fa7c951 + imagePullPolicy: IfNotPresent + # Штатный entrypoint не умеет читать секреты из файлов, поэтому + # оборачиваем его: подгружаем отрендеренное vault-агентом и передаём + # управление. exec — чтобы приложение осталось процессом с PID 1 и + # корректно получало сигналы остановки. + command: ["/bin/sh", "-ec"] + args: + - | + set -a + [ -f /vault/secrets/bim-db ] && . /vault/secrets/bim-db + [ -f /vault/secrets/bim-rabbitmq ] && . /vault/secrets/bim-rabbitmq + [ -f /vault/secrets/bim-s3 ] && . /vault/secrets/bim-s3 + set +a + exec ./entrypoint_api.sh + ports: + - containerPort: 5555 + name: http + protocol: TCP + - containerPort: 9000 + name: prom + protocol: TCP + env: + - name: JWT_PUBLIC_KEY_PATH + value: /vault/secrets/jwt-public + - name: FEATURE_ENABLE_JWT_AUTH + value: "false" + - name: FEATURE_ENABLE_SAREX_AUTH + value: "false" + - name: FEATURE_ENABLE_WORKSPACES + value: "true" + # Google-хранилища в контуре нет и не будет. Флаг выключен, а + # переменная GOOGLE_APPLICATION_CREDENTIALS и том с ключом, + # которые есть в dsinv, здесь убраны за ненадобностью. + - name: FEATURE_ENABLE_GCLOUD + value: "false" + # ВНИМАНИЕ: S3 в этом приложении НЕ НАСТРАИВАЕТСЯ на MinIO. + # В storage/s3.py адрес зашит в код: + # endpoint_url='https://storage.yandexcloud.net' + # переменной окружения для него нет. Из контура он недостижим, + # поэтому любые операции с файлами будут падать по таймауту — + # это принято осознанно, API и остальные эндпоинты живут. + # Починить можно только пересборкой образа с вынесенным endpoint + # либо переводом на BIM_CURRENT_STORAGE=local (тип есть в + # storage/storages.py). + - name: FEATURE_ENABLE_S3 + value: "true" + - name: S3_BUCKET + value: sarex-media-storage + - name: BIM_CURRENT_STORAGE + value: s3 + - name: AWS_DEFAULT_REGION + value: ru-central1 + - name: FEATURE_ENABLE_PROCESSING + value: "1" + # Адреса смежных сервисов приведены к именам контура. В dsinv это + # workflows-service:8000 и workspaces-service:8000 — таких сервисов + # здесь нет, оба называются backend-svc и слушают 80. + - name: PROCESSING_API_URL + value: http://backend-svc.processing.svc.cluster.local:80/internal + - name: PROCESSING_C2M_VERSION + value: stable + - name: WORKSPACES_API_URL + value: http://backend-svc.workspaces.svc.cluster.local:80/internal + # Сервиса сравнений в контуре нет и не планируется, флага для его + # отключения приложение не предоставляет. Имя оставлено говорящим: + # в логах будет видно, куда именно оно не достучалось. + - name: COMPARATOR_API_URL + value: http://comparator-api-service.comparator.svc.cluster.local/internal + - name: BIM_API_EXTERNAL_HOST_SCHEMA + value: https + - name: BIM_API_EXTERNAL_HOST + value: bim.sarex.local.lonsdaleites.ru + - name: BIM_API_INTERNAL_HOST_SCHEMA + value: http + - name: BIM_API_INTERNAL_HOST + value: bim-api-service.bim.svc.cluster.local:5555 + - name: WEBHOOK_URL + value: http://bim-api-service.bim.svc.cluster.local:5555 + # Брокер общий, vhost по умолчанию. В dsinv vhost называется api, + # но в контуре отдельных vhost'ов нет — см. secrets/rabbitmq/*. + - name: RABBIT_HOST + value: rabbitmq.rabbitmq.svc.cluster.local:5672 + - name: RABBIT_VHOST + value: "/" + - name: MESH_OPTIMIZER_PATH + value: gltfpack + - name: DEBUG + value: "0" + - name: STORAGE_SEGMENT + value: sarex-production-storage + - name: STORAGE_PROJECT + value: sarex-production + - name: TMP_DIR + value: /tmp + - name: prometheus_multiproc_dir + value: /tmp + - name: BUNDLE_VERSION + value: v1 + - name: DISABLE_INSTANCING + value: "0" + resources: + requests: + cpu: 25m + memory: 200Mi + volumeMounts: + - mountPath: /tmp + name: tmp-volume + volumes: + - name: tmp-volume + emptyDir: {} +--- +apiVersion: v1 +kind: Service +metadata: + name: bim-api-service + namespace: bim + labels: + app: bim-api +spec: + # ClusterIP, а не NodePort с прибитым портом 31352, как в dsinv: наружу + # сервис выходит через общий Gateway и VirtualService контура, отдельный + # порт на нодах ему не нужен. + type: ClusterIP + ports: + - name: http + port: 5555 + targetPort: 5555 + protocol: TCP + selector: + app: bim-api diff --git a/apps/bim/aero/bim-worker.yaml b/apps/bim/aero/bim-worker.yaml new file mode 100644 index 0000000..467d075 --- /dev/null +++ b/apps/bim/aero/bim-worker.yaml @@ -0,0 +1,149 @@ +--- +# Воркер bimbackend. Крутит тот же образ и те же настройки, что api, — +# отличается только точкой входа (entrypoint_worker.sh) и отсутствием портов. +# Обоснования переменных не дублирую, они в bim-api.yaml. +apiVersion: v1 +kind: ServiceAccount +metadata: + name: bim-worker-sa + namespace: bim +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: bim-worker + namespace: bim + labels: + app: bim-worker +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + app: bim-worker + template: + metadata: + labels: + app: bim-worker + annotations: + traffic.sidecar.istio.io/excludeOutboundPorts: "8200" + vault.hashicorp.com/agent-init-first: "true" + vault.hashicorp.com/agent-inject: "true" + vault.hashicorp.com/agent-pre-populate-only: "true" + vault.hashicorp.com/auth-path: auth/kubernetes + vault.hashicorp.com/role: bim + vault.hashicorp.com/agent-inject-secret-bim-db: secrets/data/apps/bim/postgres + vault.hashicorp.com/agent-inject-template-bim-db: |- + {{- with secret "secrets/data/apps/bim/postgres" -}} + DB_HOST={{ index .Data.data "host" }} + DB_PORT={{ index .Data.data "port" }} + DB_NAME={{ index .Data.data "database" }} + DB_USER={{ index .Data.data "username" }} + DB_PASSWORD={{ index .Data.data "password" }} + {{- end -}} + vault.hashicorp.com/agent-inject-secret-bim-rabbitmq: secrets/data/rabbitmq/apps/bim + vault.hashicorp.com/agent-inject-template-bim-rabbitmq: |- + {{- with secret "secrets/data/rabbitmq/apps/bim" -}} + RABBIT_USER={{ index .Data.data "username" }} + RABBIT_PASSWORD={{ index .Data.data "password" }} + {{- end -}} + vault.hashicorp.com/agent-inject-secret-bim-s3: secrets/data/minio/apps/bim + vault.hashicorp.com/agent-inject-template-bim-s3: |- + {{- with secret "secrets/data/minio/apps/bim" -}} + AWS_ACCESS_KEY_ID={{ index .Data.data "access_key" }} + AWS_SECRET_ACCESS_KEY={{ index .Data.data "secret_key" }} + {{- end -}} + vault.hashicorp.com/agent-inject-secret-jwt-public: secrets/data/vault/common/rsa_keys + vault.hashicorp.com/agent-inject-template-jwt-public: |- + {{- with secret "secrets/data/vault/common/rsa_keys" -}} + {{ index .Data.data "public_key" }} + {{- end -}} + spec: + serviceAccountName: bim-worker-sa + imagePullSecrets: + - name: regcred + containers: + - name: bim-worker + image: cr.yandex/crp3ccidau046kdj8g9q/bim-api:870965d1967cd761965029b0480884ab7fa7c951 + imagePullPolicy: IfNotPresent + command: ["/bin/sh", "-ec"] + args: + - | + set -a + [ -f /vault/secrets/bim-db ] && . /vault/secrets/bim-db + [ -f /vault/secrets/bim-rabbitmq ] && . /vault/secrets/bim-rabbitmq + [ -f /vault/secrets/bim-s3 ] && . /vault/secrets/bim-s3 + set +a + exec ./entrypoint_worker.sh + env: + - name: JWT_PUBLIC_KEY_PATH + value: /vault/secrets/jwt-public + - name: FEATURE_ENABLE_JWT_AUTH + value: "false" + - name: FEATURE_ENABLE_SAREX_AUTH + value: "false" + - name: FEATURE_ENABLE_WORKSPACES + value: "true" + - name: FEATURE_ENABLE_GCLOUD + value: "false" + - name: FEATURE_ENABLE_S3 + value: "true" + - name: S3_BUCKET + value: sarex-media-storage + - name: BIM_CURRENT_STORAGE + value: s3 + - name: AWS_DEFAULT_REGION + value: ru-central1 + - name: FEATURE_ENABLE_PROCESSING + value: "1" + - name: PROCESSING_API_URL + value: http://backend-svc.processing.svc.cluster.local:80/internal + - name: PROCESSING_C2M_VERSION + value: stable + - name: WORKSPACES_API_URL + value: http://backend-svc.workspaces.svc.cluster.local:80/internal + - name: COMPARATOR_API_URL + value: http://comparator-api-service.comparator.svc.cluster.local/internal + - name: BIM_API_EXTERNAL_HOST_SCHEMA + value: https + - name: BIM_API_EXTERNAL_HOST + value: bim.sarex.local.lonsdaleites.ru + - name: BIM_API_INTERNAL_HOST_SCHEMA + value: http + - name: BIM_API_INTERNAL_HOST + value: bim-api-service.bim.svc.cluster.local:5555 + - name: WEBHOOK_URL + value: http://bim-api-service.bim.svc.cluster.local:5555 + # В dsinv у воркера здесь rabbitmq-service.bim:5672 — брокера в + # namespace bim нет ни там, ни здесь; у api в том же файле адрес + # другой и правильный. Ставим общий брокер контура. + - name: RABBIT_HOST + value: rabbitmq.rabbitmq.svc.cluster.local:5672 + - name: RABBIT_VHOST + value: "/" + - name: MESH_OPTIMIZER_PATH + value: gltfpack + - name: DEBUG + value: "0" + - name: STORAGE_SEGMENT + value: sarex-production-storage + - name: STORAGE_PROJECT + value: sarex-production + - name: TMP_DIR + value: /tmp + - name: prometheus_multiproc_dir + value: /tmp + - name: BUNDLE_VERSION + value: v1 + - name: DISABLE_INSTANCING + value: "0" + resources: + requests: + cpu: 25m + memory: 200Mi + volumeMounts: + - mountPath: /tmp + name: tmp-volume + volumes: + - name: tmp-volume + emptyDir: {} diff --git a/apps/bim/aero/kustomization.yaml b/apps/bim/aero/kustomization.yaml new file mode 100644 index 0000000..b44f550 --- /dev/null +++ b/apps/bim/aero/kustomization.yaml @@ -0,0 +1,11 @@ +--- +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +namespace: bim +# ../base НЕ подключён намеренно: там описан platform/bim-backend-v2 — другое +# приложение, которое разворачивать в контуре не нужно. Подробности в шапке +# bim-api.yaml. +resources: + - namespace.yaml + - bim-api.yaml + - bim-worker.yaml diff --git a/apps/bim/aero/namespace.yaml b/apps/bim/aero/namespace.yaml new file mode 100644 index 0000000..ce05970 --- /dev/null +++ b/apps/bim/aero/namespace.yaml @@ -0,0 +1,7 @@ +--- +apiVersion: v1 +kind: Namespace +metadata: + name: bim + labels: + istio-injection: enabled diff --git a/clusters/aero/apps/kustomization.yaml b/clusters/aero/apps/kustomization.yaml index 388022c..66fe75e 100644 --- a/clusters/aero/apps/kustomization.yaml +++ b/clusters/aero/apps/kustomization.yaml @@ -12,3 +12,6 @@ resources: # Воркспейсы: api и фронтенд-ремоут. Фронтенд наружу не публикуется — его # подгружает главный фронтенд платформы через свой nginx (/workspaces-v2/). - ../../../apps/workspaces/aero + # BIM: api и worker из aero/bimbackend. Не путать с apps/bim/base — там + # другое приложение (platform/bim-backend-v2), в контуре оно не нужно. + - ../../../apps/bim/aero diff --git a/infrastructure/istio-config/aero/istio-config.yaml b/infrastructure/istio-config/aero/istio-config.yaml index 94215d5..fce92a4 100644 --- a/infrastructure/istio-config/aero/istio-config.yaml +++ b/infrastructure/istio-config/aero/istio-config.yaml @@ -146,6 +146,25 @@ spec: prefix: / service: frontend-svc.django.svc.cluster.local port: 80 + # BIM API (aero/bimbackend). Отдельный поддомен, а не префикс на + # домене платформы: свой фронтенд у сервиса отсутствует, а его + # пути на общем домене конфликтовали бы с маршрутом /api/ django. + # Тот же адрес приложение знает про себя само — + # BIM_API_EXTERNAL_HOST в apps/bim/aero, оно строит по нему ссылки. + # + # Имя добавлено в dnsNames сертификата ниже: без этого браузер + # получит сертификат, в котором его нет. + bim: + namespace: gateway + hosts: + - bim.sarex.local.lonsdaleites.ru + gateways: + - gateway/contour-gateway + routes: + - path: + prefix: / + service: bim-api-service.bim.svc.cluster.local + port: 5555 # Management UI RabbitMQ. rabbitmq: namespace: gateway @@ -203,6 +222,7 @@ spec: - dashboard.sarex.local.lonsdaleites.ru - rabbitmq.sarex.local.lonsdaleites.ru - minio.sarex.local.lonsdaleites.ru + - bim.sarex.local.lonsdaleites.ru issuerRef: # Боевой издатель, см. infrastructure/cert-manager/aero/configs. name: letsencrypt-issuer-istio