Platform V DropApp APIServer#

Platform V DropApp APIServer (dapp-apiserver) - пользовательский API-сервер Kubernetes для ресурса projects.dropapp.ru/v1alpha1.

Сервер позволяет работать с пространствами имен, к которым пользователь имеет доступ. Это обходит практическое ограничение стандартного списка пространств имен, где пользователь обычно видит либо все пространства имен, либо ни одного.

Как сервер показывает пользователю только его проекты#

Ключевая идея в том, что Project не хранится как отдельный объект в собственной БД или CRD-хранилище. Вместо этого dapp-apiserver строит проекцию над Kubernetes Namespace и отдает ее пользователю как ресурс Project.

Это работает так:

  1. Пользователь заходит в dapp-apiserver, уже прошедший аутентификацию и авторизацию через стандартный стек аутентификации и авторизации API-сервера.

  2. В request context storage-слой извлекает user.Info текущего пользователя.

  3. AuthorizationCache поддерживает производное представление: какие пространства имен доступны конкретным пользователям и группам на основе текущего RBAC.

  4. При list/get/watch ресурса Project хранилище:

    • берет имя текущего пользователя из context;

    • получает из AuthorizationCache список пространств имен, разрешенных этому пользователю;

    • фильтрует результаты и возвращает только соответствующие Project.

  5. Для watch используется userProjectWatcher, который отслеживает изменения набора видимых пространств имен и генерирует события только по доступным пользователю проектам.