Platform V DropApp APIServer#
Platform V DropApp APIServer (dapp-apiserver) - пользовательский API-сервер Kubernetes для ресурса projects.dropapp.ru/v1alpha1.
Сервер позволяет работать с пространствами имен, к которым пользователь имеет доступ. Это обходит практическое ограничение стандартного списка пространств имен, где пользователь обычно видит либо все пространства имен, либо ни одного.
Как сервер показывает пользователю только его проекты#
Ключевая идея в том, что Project не хранится как отдельный объект в собственной БД или CRD-хранилище. Вместо этого dapp-apiserver строит проекцию над Kubernetes Namespace и отдает ее пользователю как ресурс Project.
Это работает так:
Пользователь заходит в dapp-apiserver, уже прошедший аутентификацию и авторизацию через стандартный стек аутентификации и авторизации API-сервера.
В
request contextstorage-слой извлекаетuser.Infoтекущего пользователя.AuthorizationCacheподдерживает производное представление: какие пространства имен доступны конкретным пользователям и группам на основе текущего RBAC.При
list/get/watchресурсаProjectхранилище:берет имя текущего пользователя из
context;получает из
AuthorizationCacheсписок пространств имен, разрешенных этому пользователю;фильтрует результаты и возвращает только соответствующие
Project.
Для
watchиспользуетсяuserProjectWatcher, который отслеживает изменения набора видимых пространств имен и генерирует события только по доступным пользователю проектам.