Описание
Модуль позволяет создавать проекты в кластере Kubernetes. Проект — это изолированное окружение, в котором можно развернуть приложения.
Для чего это нужно?
Стандартный ресурс Namespace
, который используется для логического разделения ресурсов в Kubernetes, не предоставляет необходимых функций, поэтому не является изолированным окружением:
- Потребление ресурсов подами по умолчанию не ограничено;
- Сетевое взаимодействие с другими подами по умолчанию работает из любой точки кластера;
- Неограниченный доступ к ресурсам узла: адресное пространство, сетевое пространство, смонтированные директории хоста.
Возможности настройки пространств имен Namespace
не полностью соответствуют современным требованиям к разработке. По умолчанию для Namespace
не включены следующие функции:
- Сборка логов;
- Аудит;
- Сканирование уязвимостей.
Функционал проектов позволяет решить эти проблемы.
Преимущества модуля
Для администраторов платформы:
- Единообразие: Администраторы могут создавать проекты, используя один и тот же шаблон, что обеспечивает единообразие и упрощает управление.
- Безопасность: Проекты обеспечивают изоляцию ресурсов и политик доступа между различными проектами, что поддерживает безопасное многотенантное окружение.
- Потребление ресурсов: Администраторы могут легко устанавливать квоты на ресурсы и ограничения для каждого проекта, предотвращая избыточное использование ресурсов.
Для пользователей платформы:
- Изоляция: Каждый проект обеспечивает изолированное окружение, где разработчики могут развертывать и тестировать свои приложения без влияния на другие проекты.
- Быстрый старт: Разработчики могут запрашивать у администраторов проекты, созданные по готовым шаблоны, что позволяет быстро начать разработку нового приложения.
Внутренняя логика работы
Для создания проектов используются следующие Custom Resource’ы:
- ProjectTemplate — ресурс, который описывает шаблон проекта. При помощи него задается список ресурсов, которые будут созданы в проекте, а также схема параметров, которые можно передать при создании проекта;
- Project — ресурс, который описывает конкретный проект.
При создании ресурса Project из определенного ProjectTemplate происходит следующее:
- Переданные параметры валидируются по OpenAPI-спецификации (параметр openAPI ресурса ProjectTemplate);
- Выполняется рендеринг шаблона для ресурсов с помощью Helm. Значения для рендеринга берутся из параметра parameters ресурса Project;
- Cоздается
Namespace
с именем, которое совпадает c именем Project; - По очереди создаются все ресурсы, описанные в шаблоне.
Внимание! При изменении шаблона проекта, все созданные проекты будут обновлены в соответствии с новым шаблоном.