Конфликт двух одинаковых приложений #7

Open
opened 2025-03-17 10:15:54 +00:00 by gzhulikov · 4 comments
Owner

Описание ошибки

Если создать два приложения, связанных с одним и тем же репозиторием и веткой, mlcmp пересоздаются каждые несколько секунд. Возможно нужна защита от такой ситуации.

Насколько я знаю, имеются в виду две копии фреймворка. Например, на интеграционном стенде и production.

## Описание ошибки Если создать два приложения, связанных с одним и тем же репозиторием и веткой, mlcmp пересоздаются каждые несколько секунд. Возможно нужна защита от такой ситуации. Насколько я знаю, имеются в виду две копии фреймворка. Например, на интеграционном стенде и production.
gzhulikov added the
bug
label 2025-03-17 10:15:54 +00:00

В случае, если по одному репозиторию создано два разных приложения, одним и тем же разработчиком или разными разработчиками, то правильное поведение следующее

  1. Для создания приложений A и B используются два разных экземпляра PlatformApp, с которым связаны разные ссылки, секреты, настройки, репозитории.
  2. Пр-во имен приложений A и B определяются названием домашнего пр-ва имен разработчиков, создающих A и B, и названиями приложений. Таким образом, приложения размещаются в различных пространствах имен.
  3. При внесении обновлений в исходный репозиторий фреймворк отображает изменения в каждое из развернутых приложений.
  4. При внесении изменений вручную в одно из приложений, второе приложение не изменяется.

Для прояснения причины указанного в ошибке поведения нужно

  • воспроизвести указанное в ошибке поведение и собрать логи: ArgoCD, контроллеров фреймворка
  • сделать слепок (скриншот) конфигурации AgroCD при одновременном создании нескольких приложений из одного источника
В случае, если по одному репозиторию создано два разных приложения, одним и тем же разработчиком или разными разработчиками, то правильное поведение следующее 1. Для создания приложений A и B используются два разных экземпляра PlatformApp, с которым связаны разные ссылки, секреты, настройки, репозитории. 2. Пр-во имен приложений A и B определяются названием домашнего пр-ва имен разработчиков, создающих A и B, и названиями приложений. Таким образом, приложения размещаются в различных пространствах имен. 3. При внесении обновлений в исходный репозиторий фреймворк отображает изменения в каждое из развернутых приложений. 4. При внесении изменений вручную в одно из приложений, второе приложение не изменяется. Для прояснения причины указанного в ошибке поведения нужно - воспроизвести указанное в ошибке поведение и собрать логи: ArgoCD, контроллеров фреймворка - сделать слепок (скриншот) конфигурации AgroCD при одновременном создании нескольких приложений из одного источника
Owner

В случае, если по одному репозиторию создано два разных приложения, одним и тем же разработчиком или разными разработчиками, то правильное поведение следующее

  1. Для создания приложений A и B используются два разных экземпляра PlatformApp, с которым связаны разные ссылки, секреты, настройки, репозитории.
    ...
  2. При внесении обновлений в исходный репозиторий фреймворк отображает изменения в каждое из развернутых приложений.

В текущей реализации два приложения могут использовать один и тот же Repository (ссылка на Repository указывается в манифесте PlatformApp). Это сделано осознанно - переиспользование реестров пакетов, реестров образов.

Принципиальная проблема в том, что пространство имен MLComponent (и любого другого ресурса) может отличаться от имени приложения (=пространства имен приложения).

Наблюдаемое поведение, вероятно, возникает из-за работы argocd. Один экземпляр MLComponent синхронизируются двумя приложениями argocd. В процессе синхронизации приложения argocd устанавливает метки, которые инициируют синхронизацию другого приложения argocd, что приводит к пересозданию ресурсов фреймворком.

  1. Пр-во имен приложений A и B определяются названием домашнего пр-ва имен разработчиков, создающих A и B, и названиями приложений. Таким образом, приложения размещаются в различных пространствах имен.

В текущей реализации имя приложения PlatformApp уже включает в себя имя PlatformUser. Изменение этого соглашения не решило бы описанную проблему.

> В случае, если по одному репозиторию создано два разных приложения, одним и тем же разработчиком или разными разработчиками, то правильное поведение следующее > > 1. Для создания приложений A и B используются два разных экземпляра PlatformApp, с которым связаны разные ссылки, секреты, настройки, репозитории. > ... > 3. При внесении обновлений в исходный репозиторий фреймворк отображает изменения в каждое из развернутых приложений. В текущей реализации два приложения могут использовать один и тот же Repository (ссылка на Repository указывается в манифесте PlatformApp). Это сделано осознанно - переиспользование реестров пакетов, реестров образов. Принципиальная проблема в том, что пространство имен MLComponent (и любого другого ресурса) может отличаться от имени приложения (=пространства имен приложения). Наблюдаемое поведение, вероятно, возникает из-за работы argocd. Один экземпляр MLComponent синхронизируются двумя приложениями argocd. В процессе синхронизации приложения argocd устанавливает метки, которые инициируют синхронизацию другого приложения argocd, что приводит к пересозданию ресурсов фреймворком. > 2. Пр-во имен приложений A и B определяются названием домашнего пр-ва имен разработчиков, создающих A и B, и названиями приложений. Таким образом, приложения размещаются в различных пространствах имен. В текущей реализации имя приложения PlatformApp уже включает в себя имя PlatformUser. Изменение этого соглашения не решило бы описанную проблему.

Первое. Пр-во имен должно задаваться при развертывании, а не в манифестах в git. Если оно задано неверно, должна быть ошибка развертывания.

Второе. Сервис развертывания (сейчас это ArgoCD) должен работать с ограниченными правами и только в пр-ве имен разворачиваемого приложения. Для двух разных приложений два разных аккаунта.

Права для сервиса развертывания

    • на CRD фреймворка
    • на ConfigMap и (в дальнейшем) "LCUPDDcW" (без Get) на Secret

При этом предполагается, что сервис может отличить свои CRD от созданных разработчиком вручную, например, по меткам.

Все остальное запрещено

Первое. Пр-во имен должно задаваться при развертывании, а не в манифестах в git. Если оно задано неверно, должна быть ошибка развертывания. Второе. Сервис развертывания (сейчас это ArgoCD) должен работать с ограниченными правами и только в пр-ве имен разворачиваемого приложения. Для двух разных приложений два разных аккаунта. Права для сервиса развертывания - * на CRD фреймворка - * на ConfigMap и (в дальнейшем) "LCUPDDcW" (без Get) на Secret При этом предполагается, что сервис может отличить свои CRD от созданных разработчиком вручную, например, по меткам. Все остальное запрещено
vpolezhaev added the
platform-app
label 2025-04-10 14:58:12 +00:00
Owner

Запланировано к реализации:

  1. Валидировать, что имя PlatformApp имеет префикс, соответствующий пространству имен пользователя.
  2. Ограничивать пространство имен ресурсов в приложении ArgoCD.

Что, по текущему представлению, в ближайшее время сделать не получится:

  1. При использовании ArgoCD не можем подставлять пространства имен в манифесты ресурсов приложения при развертывании, они должны быть заданы в репозиториях (текущее представление). Решением может быть использование собственного плагина (существенная доработка).
  2. ArgoCD не позволяет использовать разные сервисные аккаунты (с ограниченными правами) для разных пространств имен (текущее представление).
Запланировано к реализации: 1. Валидировать, что имя PlatformApp имеет префикс, соответствующий пространству имен пользователя. 2. Ограничивать пространство имен ресурсов в приложении ArgoCD. Что, по текущему представлению, в ближайшее время сделать не получится: 1. При использовании ArgoCD не можем подставлять пространства имен в манифесты ресурсов приложения при развертывании, они должны быть заданы в репозиториях (текущее представление). Решением может быть использование собственного плагина (существенная доработка). 2. ArgoCD не позволяет использовать разные сервисные аккаунты (с ограниченными правами) для разных пространств имен (текущее представление).
Sign in to join this conversation.
No description provided.