Внутренняя логика работы
Создание проекта
Для создания проекта используются следующие кастомные ресурсы:
- ProjectTemplate — описывает шаблон проекта. Задается список ресурсов, которые будут созданы в проекте, а также схема параметров, которые можно передать при создании проекта;
- Project — описывает конкретный проект.
При создании Project из определенного ProjectTemplate происходит следующее:
- Переданные параметры валидируются по OpenAPI-спецификации (параметр
openAPIV3Schemaресурса ProjectTemplate). - Выполняется рендеринг шаблона для ресурсов с помощью Helm. Значения для рендеринга берутся из параметра
parametersресурса Project. - Создаётся неймспейс с именем, которое совпадает c именем Project.
- По очереди создаются все ресурсы, описанные в шаблоне.
При изменении шаблона проекта все созданные проекты будут обновлены в соответствии с новым шаблоном.
Изоляция проекта
В основе проекта используется механизм изоляции ресурсов в рамках неймспейса. Неймспейсы позволяют группировать поды, сервисы, секреты и другие объекты, но не обеспечивают полноценной изоляции. Проект расширяет функциональность неймспейсов, предлагая дополнительные инструменты для повышения уровня контроля и безопасности.
Для управления уровнем изоляции проекта можно использовать возможности Kubernetes, например:
- Ресурсы контроля доступа (AuthorizationRule / RoleBinding) — позволяют управлять взаимодействием объектов внутри неймспейса. С их помощью можно задавать правила и назначать роли, чтобы точно контролировать, кто и что может делать в проекте.
- Ресурсы контроля использования нагрузки (ResourceQuota) — с их помощью можно задать лимиты на использование процессорного времени (CPU), оперативной памяти (RAM), а также количества объектов внутри неймспейса. Это помогает избежать чрезмерной нагрузки и обеспечивает мониторинг за приложениями в рамках проекта.
- Ресурсы контроля сетевой связности (NetworkPolicy) — управляют входящим и исходящим сетевым трафиком в неймспейсе. Таким образом, можно настроить разрешенные подключения между подами, улучшить безопасность и управляемость сетевого взаимодействия в рамках проекта.
Эти инструменты можно комбинировать, чтобы настроить проект в соответствии с требованиями вашего приложения.