iac/apps/workspaces/aero/kustomization.yaml
emelinda e55958f7cb Workspaces в контуре aero: api и фронтенд-ремоут
apps/workspaces/aero — оверлей поверх base:

  * DJANGO_HOST в base неверен дважды: сервиса backend не существует
    (он backend-svc), и 8000 — это targetPort контейнера, а сервис
    принимает на 80. Проверено в кластере: backend-svc:80 отдаёт 200,
    backend-svc:8000 таймаутит, backend:8000 не резолвится. Та же
    ошибка была в base у processing/engine-low.
  * ENVIRONMENT/DJANGO_ORIGINATOR — «prod» заменён на aero: значение
    уезжает в Sentry и в заголовки запросов к смежным сервисам.
  * DOCUMENTATION_HOST переписан на честное имя внутри кластера.
    Выключить интеграцию нечем: DOCUMENTATION_LOGGER_FEATURE гасит
    только логирование, а GetDocumentByWS вызывается из обработчика
    GET workspace безусловно. Сервиса documentations в контуре нет и
    не будет — карточка воркспейса отдаётся без документа.

Фронтенд идёт из base без патчей и наружу НЕ публикуется: это Module
Federation remote srx_workspaces, его подгружает главный фронтенд
платформы. Версия — v2, и это не выбор: в бандле
sarex-frontend-dev:contour_5.22.0 лежит строка
/workspaces-v2/module/remoteEntry.js и имя ремоута srx_workspaces,
обращений к v1 нет вовсе. У v1 (platform/workspaces-frontend) к тому же
нет ни одной contour-сборки.

nginx-configmap: исправлен порядок директив в трёх location'ах.
set обязан идти ДО rewrite ... break — обе принадлежат
ngx_http_rewrite_module, и флаг break прекращает обработку его
директив, поэтому set после него не выполнялся. Переменная оставалась
пустой, nginx писал «no host in upstream :80» и отдавал 500. Так падали
и /workspaces-v2/..., и /workflows/... — маршрут / при этом работал,
из-за чего дефект и не был замечен раньше.

Обвязка: regcred и роль Vault для namespace workspaces, apps/workspaces
в gitea_sync_paths, секреты secrets/apps/workspaces/postgres и
secrets/vault/common/django_auth. Последний — вопреки имени пути НЕ
токен Zitadel: workspaces читает оттуда ключ key и кладёт его в
DJANGO_BASIC_AUTH, то есть это base64 логина и пароля администратора
django. Совпадение проверено в кластере по sha256.
2026-08-09 00:15:46 +03:00

73 lines
4.5 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
namespace: workspaces
resources:
- ../base
patches:
# --- workspaces-api ---------------------------------------------------------
# Патчи адресуются по индексу, поэтому перед каждым replace идёт op: test на
# имя переменной. Если в base порядок envs изменится, сборка упадёт явно,
# вместо того чтобы молча перезаписать соседнее значение.
- target: {kind: HelmRelease, name: backend}
patch: |
# В base адрес django неверный ДВАЖДЫ: сервиса backend не существует
# (он называется backend-svc), и порт 8000 — это targetPort контейнера,
# а сам сервис принимает на 80. Проверено в кластере:
# backend-svc...:80 -> HTTP 200
# backend-svc...:8000 -> таймаут
# backend...:8000 -> имя не резолвится
# Ровно та же ошибка была в base у processing/engine-low.
- op: test
path: /spec/values/services/backend/envs/11/name
value: DJANGO_HOST
- op: replace
path: /spec/values/services/backend/envs/11/value/_default
value: http://backend-svc.django.svc.cluster.local:80
# ENVIRONMENT/ORIGINATOR в base говорят «prod» — это контур, а не прод.
# Значение уезжает в Sentry и в заголовки запросов к смежным сервисам.
- op: test
path: /spec/values/services/backend/envs/10/name
value: ENVIRONMENT
- op: replace
path: /spec/values/services/backend/envs/10/value/_default
value: aero
- op: test
path: /spec/values/services/backend/envs/12/name
value: DJANGO_ORIGINATOR
- op: replace
path: /spec/values/services/backend/envs/12/value/_default
value: aero_ws
# documentations в контуре нет и не будет. Выключить интеграцию целиком
# нечем: DOCUMENTATION_LOGGER_FEATURE (уже "0" в base) гасит только
# логирование, а GetDocumentByWS вызывается из обработчика GET workspace
# безусловно. Поэтому адрес оставлен «говорящим»: в логах будет видно имя
# несуществующего сервиса, а не молчаливый таймаут в никуда.
# Практическое следствие: карточка воркспейса отдаёт данные без документа.
- op: test
path: /spec/values/services/backend/envs/7/name
value: DOCUMENTATION_HOST
- op: replace
path: /spec/values/services/backend/envs/7/value/_default
value: http://documentations-api-svc.documentations.svc.cluster.local:80
# --- frontend ---------------------------------------------------------------
# Идёт из base без единого патча — и это осознанно, а не «руки не дошли».
#
# Фронтенд workspaces — это Module Federation remote с именем srx_workspaces,
# точка входа /module/remoteEntry.js. Его подгружает главный фронтенд
# платформы, поэтому наружу он НЕ публикуется: маршрут ему не нужен, нужен
# проксирующий location внутри nginx главного фронтенда. Он уже есть —
# apps/django/aero/nginx-configmap.yaml, location ~^/workspaces-v2/(.+).js,
# rewrite снимает префикс и проксирует в frontend-svc.workspaces:80.
#
# Версия — именно v2, хотя в репозитории есть и v1 (workspaces-frontend-static
# в apps/workspaces/dsinv). Так решает не выбор, а собранный бандл платформы:
# в образе sarex-frontend-dev:contour_5.22.0 лежит строка
# "/workspaces-v2/module/remoteEntry.js" и имя ремоута srx_workspaces,
# обращений к v1 в нём нет вовсе. Плюс у v1 нет ни одной contour-сборки:
# в его CI (platform/workspaces-frontend) слова contour не встречается.