Описание

Модуль позволяет создавать проекты в кластере Kubernetes. Проект — это изолированное окружение, в котором можно развернуть приложения.

Для чего это нужно?

Стандартный ресурс Namespace, который используется для логического разделения ресурсов в Kubernetes, не предоставляет необходимых функций, поэтому не является изолированным окружением:

  • Потребление ресурсов подами по умолчанию не ограничено;
  • Сетевое взаимодействие с другими подами по умолчанию работает из любой точки кластера;
  • Неограниченный доступ к ресурсам узла: адресное пространство, сетевое пространство, смонтированные директории хоста.

Возможности настройки пространств имен Namespace не полностью соответствуют современным требованиям к разработке. По умолчанию для Namespace не включены следующие функции:

  • Сборка логов;
  • Аудит;
  • Сканирование уязвимостей.

Функционал проектов позволяет решить эти проблемы.

Преимущества модуля

Для администраторов платформы:

  • Единообразие: Администраторы могут создавать проекты, используя один и тот же шаблон, что обеспечивает единообразие и упрощает управление.
  • Безопасность: Проекты обеспечивают изоляцию ресурсов и политик доступа между различными проектами, что поддерживает безопасное многотенантное окружение.
  • Потребление ресурсов: Администраторы могут легко устанавливать квоты на ресурсы и ограничения для каждого проекта, предотвращая избыточное использование ресурсов.

Для пользователей платформы:

  • Изоляция: Каждый проект обеспечивает изолированное окружение, где разработчики могут развертывать и тестировать свои приложения без влияния на другие проекты.
  • Быстрый старт: Разработчики могут запрашивать у администраторов проекты, созданные по готовым шаблоны, что позволяет быстро начать разработку нового приложения.

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

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

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

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

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

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