Мультитенантность — это возможность создавать в кластере Kubernetes изолированные окружения (проекты). Проекты похожи на пространства имен (Namespace), но имеют больше возможностей. Пространства имен используются только для логического разделения ресурсов в Kubernetes, и, например, не ограничивают сетевое взаимодействие, потребление ресурсов подами и возможности монтирования директории хоста. Такие особенности пространств имен не полностью соответствуют современным требованиям к разработке. По умолчанию для пространств имен также не включена сборка логов, аудит и сканирование на уязвимости.
Использование проектов позволяет решить эти проблемы и имеет следующие преимущества:
- для администраторов платформы:
- единообразие — администраторы могут создавать проекты, используя один и тот же шаблон, что обеспечивает единообразие и упрощает управление;
- безопасность — проекты обеспечивают изоляцию ресурсов и политик доступа между различными проектами, что поддерживает безопасное многотенантное окружение;
- потребление ресурсов — администраторы могут легко устанавливать квоты на ресурсы и ограничения для каждого проекта, предотвращая избыточное использование ресурсов.
- для пользователей платформы:
- быстрый старт — разработчики могут запрашивать у администраторов проекты, созданные по готовым шаблонам, что позволяет быстро начать разработку нового приложения;
- изоляция — каждый проект обеспечивает изолированное окружение, где разработчики могут развертывать и тестировать свои приложения без влияния на другие проекты.
Копирование секретов во все пространства имён не может использоваться совместно с проектами режима мультитенантности.
В этом режиме создаются изолированные окружения для пользователей в их проектах, а secret-copier
автоматически раздаёт секреты во все пространства имён.
Если в закрытом окружении пользователя окажутся чувствительные данные, это может привести к утечке данных и нарушению модели безопасности.
Ограничения
Проекты имеют ряд ограничений:
- Создание более одного пространства имён внутри проекта не предусматривается. Если требуется несколько пространств имён, создайте отдельный проект для каждого из них.
- Ресурсы шаблона применяются только к одному пространству имён, имя которого совпадает с именем проекта.
Создание проекта
- Для создания проекта создайте кастомный ресурс Project с указанием имени шаблона проекта в поле .spec.projectTemplateName.
-
В параметре .spec.parameters укажите значения параметров для секции .spec.parametersSchema.openAPIV3Schema кастомного ресурса
ProjectTemplate
.Пример создания проекта с помощью Project из
default
ProjectTemplate представлен ниже:apiVersion: deckhouse.io/v1alpha2 kind: Project metadata: name: my-project spec: description: This is an example from the Deckhouse documentation. projectTemplateName: default parameters: resourceQuota: requests: cpu: 5 memory: 5Gi storage: 1Gi limits: cpu: 5 memory: 5Gi networkPolicy: Isolated podSecurityProfile: Restricted extendedMonitoringEnabled: true administrators: - subject: Group name: k8s-admins
-
Для проверки статуса проекта выполните команду:
d8 k get projects my-project
Успешно созданный проект должен отображаться в статусе
Deployed
(синхронизирован). Если отображается статусError
(ошибка), добавьте аргумент-o yaml
к команде (например,d8 k get projects my-project -o yaml
) для получения более подробной информации о причине ошибки.
Автоматическое создание проекта для пространства имён
Для пространства имён возможно создать новый проект. Для этого пометьте пространство имён аннотацией projects.deckhouse.io/adopt
. Например:
-
Создайте новое пространство имён:
d8 k create ns test
-
Пометьте его аннотацией:
d8 k annotate ns test projects.deckhouse.io/adopt=""
-
Убедитесь, что проект создался:
d8 k get projects
В списке проектов появится новый проект, соответствующий пространству имён:
NAME STATE PROJECT TEMPLATE DESCRIPTION AGE deckhouse Deployed virtual This is a virtual project 181d default Deployed virtual This is a virtual project 181d test Deployed empty 1m
Шаблон созданного проекта можно изменить на существующий.
Обратите внимание, что при смене шаблона может возникнуть конфликт ресурсов: если в чарте шаблона прописаны ресурсы, которые уже присутствуют в пространстве имён, то применить шаблон не получится.
Подробнее с шаблонами проектов и их созданием можно ознакомиться в разделе администрирования.