From 77204c155064cc0a70b1dd3f775a81ad8e25826e Mon Sep 17 00:00:00 2001 From: emelinda Date: Sat, 8 Aug 2026 22:59:06 +0300 Subject: [PATCH] =?UTF-8?q?Processing:=20=D1=84=D1=80=D0=BE=D0=BD=D1=82?= =?UTF-8?q?=D0=B5=D0=BD=D0=B4=20=D0=B2=D0=BA=D0=BB=D1=8E=D1=87=D1=91=D0=BD?= =?UTF-8?q?,=20api=20=D0=B8=20=D1=84=D1=80=D0=BE=D0=BD=D1=82=D0=B5=D0=BD?= =?UTF-8?q?=D0=B4=20=D0=B2=D1=8B=D0=B2=D0=B5=D0=B4=D0=B5=D0=BD=D1=8B=20?= =?UTF-8?q?=D0=BD=D0=B0=D1=80=D1=83=D0=B6=D1=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Фронтенд был исключён из-за адресов, вшитых в бандл на этапе сборки через константу __BUILD_ENV__. Опасение не подтвердилось: сборка обращается к тому же origin относительными путями — иначе в yc-k8s-test и d8-ugmk-prod не понадобился бы отдельный маршрут /workflows/api/ перед /workflows/. Маршруты добавлены на домен платформы, а не на отдельный поддомен: поддомен потребовал бы пересборки образа с другим __BUILD_ENV__. /workflows/api/ -> rewrite /api/ -> backend-svc.processing /workflows/ -> rewrite / -> frontend-svc.processing Порядок внутри пары значим: /workflows/api/ обязан идти перед /workflows/, иначе запросы к API уйдут в раздачу статики. Оба стоят перед /api/ и / — правила django их бы перехватили. Маршруты положены в существующий VirtualService platform, а не в отдельный: Istio не сливает несколько VirtualService на одной паре хост+gateway, и часть правил молча потерялась бы. --- apps/processing/aero/kustomization.yaml | 17 +++++--------- .../istio-config/aero/istio-config.yaml | 23 +++++++++++++++++++ 2 files changed, 29 insertions(+), 11 deletions(-) diff --git a/apps/processing/aero/kustomization.yaml b/apps/processing/aero/kustomization.yaml index dcb17fd..fe4c717 100644 --- a/apps/processing/aero/kustomization.yaml +++ b/apps/processing/aero/kustomization.yaml @@ -19,17 +19,12 @@ patches: name: engine namespace: processing - # frontend удалён: адреса бэкендов зашиты в образ на этапе сборки через - # __BUILD_ENV__, и ни один из готовых профилей не смотрит на домен контура. - # Подключать его имеет смысл только вместе с пересборкой образа под aero. - - target: {kind: HelmRelease, name: frontend} - patch: | - $patch: delete - apiVersion: helm.toolkit.fluxcd.io/v2 - kind: HelmRelease - metadata: - name: frontend - namespace: processing + # frontend идёт из base без патчей. Адреса бэкендов вшиты в бандл на этапе + # сборки (константа __BUILD_ENV__), но сборка ugok2 обращается к тому же + # origin относительными путями — иначе в остальных кластерах не понадобился + # бы отдельный маршрут /workflows/api/ перед /workflows/. Поэтому фронтенд + # публикуется на домене платформы, а не на своём поддомене: маршруты в + # infrastructure/istio-config/aero, VirtualService platform. # --- workflows-api ---------------------------------------------------------- - target: {kind: HelmRelease, name: workflows-api} diff --git a/infrastructure/istio-config/aero/istio-config.yaml b/infrastructure/istio-config/aero/istio-config.yaml index f435aa0..94215d5 100644 --- a/infrastructure/istio-config/aero/istio-config.yaml +++ b/infrastructure/istio-config/aero/istio-config.yaml @@ -111,6 +111,29 @@ spec: prefix: /media/ service: s3-proxy-svc.django.svc.cluster.local port: 80 + # Микрофронтенд workflows и его API. Порядок внутри пары + # значим: /workflows/api/ обязан идти перед /workflows/, иначе + # запросы к API уйдут в раздачу статики. + # + # Оба маршрута висят на домене платформы, а не на отдельном + # поддомене, потому что адреса бэкендов вшиты в JS-бандл на + # этапе сборки (константа __BUILD_ENV__) и указывают на тот же + # origin относительными путями. Отдельный поддомен означал бы + # пересборку образа. + # + # Маршруты живут в ЭТОМ VirtualService, а не в своём: Istio не + # сливает несколько VirtualService, привязанных к одной паре + # хост+gateway, — часть правил молча потерялась бы. + - path: + prefix: /workflows/api/ + rewrite: /api/ + service: backend-svc.processing.svc.cluster.local + port: 80 + - path: + prefix: /workflows/ + rewrite: / + service: frontend-svc.processing.svc.cluster.local + port: 80 - path: prefix: /api/ service: backend-svc.django.svc.cluster.local