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