Модуль multitenancy-manager позволяет создавать изолированные проекты в Deckhouse Kubernetes Platform (DKP). Проекты обеспечивают квоты ресурсов, сетевую изоляцию и функции безопасности, выходящие за рамки стандартных неймспейсов.

Подробнее с настройками модуля и примерами его использования можно ознакомиться в соответствующем разделе документации.

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

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

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

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

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

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

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

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

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

Для управления уровнем изоляции проекта можно использовать возможности Kubernetes, например:

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

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

Архитектура модуля

Для упрощения схемы приняты следующие допущения:

  • На схеме показано, что контейнеры разных подов взаимодействуют друг с другом напрямую. Фактически они взаимодействуют через соответствующие сервисы Kubernetes (внутренние балансировщики). Названия сервисов не указываются, если они очевидны из контекста. В остальных случаях название сервиса указано над стрелкой.
  • Поды могут быть запущены в нескольких репликах, однако на схеме все поды изображены в одной реплике.

Архитектура модуля multitenancy-manager на уровне 2 модели C4 и его взаимодействия с другими компонентами DKP изображены на следующей диаграмме.

Архитектура модуля multitenancy-manager

Компоненты модуля

Модуль состоит из следующих компонентов:

  • Multitenancy-manager — компонент состоит из одного контейнера multitenancy-manager и обеспечивает следующие функции:

    • управление кастомными ресурсами Project и ProjectTemplate;
    • валидация кастомных ресурсов Project и ProjectTemplate;
    • валидация стандартного ресурса Namespace если в параметрах модуля multitenancy-manager задано .spec.settings.allowNamespacesWithoutProjects=false;
    • создание ресурсов, указанных в кастомном ресурсе ProjectTemplate, на основе параметров, заданных в Project.

    Внимание. Multitenancy-manager имеет права cluster-admin, что позволяет создавать любые объекты, описанные в ресурсе ProjectTemplate.

Взаимодействия модуля

Модуль взаимодействует со следующими компонентами:

  • Kube-apiserver:
    • управление кастомными ресурсами Project и ProjectTemplate;
    • валидация кастомных ресурсов Project, ProjectTemplate, а также стандартного ресурса Namespace;
    • создание ресурсов, указанных в кастомном ресурсе ProjectTemplate, на основе параметров, заданных в Project.

Дополнительные ресурсы