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.
73 lines
4.5 KiB
YAML
73 lines
4.5 KiB
YAML
---
|
||
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 не встречается.
|