Мультитенантность — это возможность создавать в кластере Kubernetes изолированные окружения (проекты). Проекты похожи на пространства имен (Namespace), но имеют больше возможностей. Пространства имен используются только для логического разделения ресурсов в Kubernetes, и, например, не ограничивают сетевое взаимодействие, потребление ресурсов подами и возможности монтирования директории хоста. Такие особенности пространств имен не полностью соответствуют современным требованиям к разработке. По умолчанию для пространств имен также не включена сборка логов, аудит и сканирование на уязвимости.
Использование проектов позволяет решить эти проблемы и имеет следующие преимущества:
- единообразие — администраторы могут создавать проекты, используя один и тот же шаблон, что обеспечивает единообразие и упрощает управление;
- безопасность — проекты обеспечивают изоляцию ресурсов и политик доступа между различными проектами, что поддерживает безопасное многотенантное окружение;
- потребление ресурсов — администраторы могут легко устанавливать квоты на ресурсы и ограничения для каждого проекта, предотвращая избыточное использование ресурсов.
- быстрый старт — разработчики могут запрашивать у администраторов проекты, созданные по готовым шаблонам, что позволяет быстро начать разработку нового приложения;
- изоляция — каждый проект обеспечивает изолированное окружение, где разработчики могут развертывать и тестировать свои приложения без влияния на другие проекты.
Копирование секретов во все пространства имён не может использоваться совместно с проектами режима мультитенантности. В этом режиме создаются изолированные окружения для пользователей в их проектах, а secret-copier автоматически раздаёт секреты во все пространства имён. Если в закрытом окружении пользователя окажутся чувствительные данные, это может привести к утечке данных и нарушению модели безопасности.
Проекты имеют ряд ограничений:
1. Для создания проекта создайте кастомный ресурс Project с указанием имени шаблона проекта в поле .spec.projectTemplateName.
2. В параметре .spec.parameters укажите значения параметров для секции .spec.parametersSchema.openAPIV3Schema кастомного ресурса ProjectTemplate.
Пример создания проекта с помощью Project из default ProjectTemplate представлен ниже:
3. Для проверки статуса проекта выполните команду:
Успешно созданный проект должен отображаться в статусе Deployed (синхронизирован). Если отображается статус Error (ошибка), добавьте аргумент -o yaml к команде (например, d8 k get projects my-project -o yaml) для получения более подробной информации о причине ошибки.
Для пространства имён возможно создать новый проект. Для этого пометьте пространство имён аннотацией projects.deckhouse.io/adopt. Например:
1. Создайте новое пространство имён:
2. Пометьте его аннотацией:
3. Убедитесь, что проект создался:
В списке проектов появится новый проект, соответствующий пространству имён:
Шаблон созданного проекта можно изменить на существующий.
Обратите внимание, что при смене шаблона может возникнуть конфликт ресурсов: если в чарте шаблона прописаны ресурсы, которые уже присутствуют в пространстве имён, то применить шаблон не получится.
Опишите вашу задачу, и мы поможем вам ее решить