Внутренняя логика работы

Создание проекта

Для создания проекта используются следующие кастомные ресурсы:

  • ProjectTemplate — описывает шаблон проекта. Задается список ресурсов, которые будут созданы в проекте, а также схему параметров, которые можно передать при создании проекта;
  • Project — описывает конкретный проект.

При создании Project из определенного ProjectTemplate происходит следующее:

  1. Переданные параметры валидируются по OpenAPI-спецификации (параметр openAPI ресурса ProjectTemplate);
  2. Выполняется рендеринг шаблона для ресурсов с помощью Helm. Значения для рендеринга берутся из параметра parameters ресурса Project;
  3. Создаётся пространство имён с именем, которое совпадает c именем Project;
  4. По очереди создаются все ресурсы, описанные в шаблоне.

При изменении шаблона проекта, все созданные проекты будут обновлены в соответствии с новым шаблоном.

Изоляция проекта

В основе проекта используется механизм изоляции ресурсов в рамках пространства имён. Пространства имён позволяют группировать поды, сервисы, секреты и другие объекты, но не обеспечивают полноценной изоляции. Проект расширяет функциональность пространств имен, предлагая дополнительные инструменты для повышения уровня контроля и безопасности. Для управления уровнем изоляции проекта можно использовать возможности Kubernetes, например:

  • Ресурсы контроля доступа (AuthorizationRule / RoleBinding) — позволяют управлять взаимодействием объектов внутри пространства имён. С их помощью можно задавать правила и назначать роли, чтобы точно контролировать, кто и что может делать в проекте.
  • Ресурсы контроля использования нагрузки (ResourceQuota) — с их помощью можно задать лимиты на использование процессорного времени (CPU), оперативной памяти (RAM), а также количества объектов внутри пространства имён. Это помогает избежать чрезмерной нагрузки и обеспечивает мониторинг за приложениями в рамках проекта.
  • Ресурсы контроля сетевой связности (NetworkPolicy) — управляют входящим и исходящим сетевым трафиком в пространстве имён. Таким образом, можно настроить разрешенные подключения между подами, улучшить безопасность и управляемость сетевого взаимодействия в рамках проекта.

Эти инструменты можно комбинировать, чтобы настроить проект в соответствии с требованиями вашего приложения.