Repository navigation
Сделать работу MCP комфортной для агентов за ограниченным RBAC #296
karabasBaRaBaS-1276
started this conversation in
Ideas
Replies: 2 comments
|
Thank you, this is a very useful report. Each point went into its own issue, and all of them are planned for 0.25.5:
|
0 replies
|
All five points are now in Sextant 0.25.5. Installed copies update themselves; Homebrew and Scoop already have it.
The details are on the wiki page MCP server. If you try it with opencode on that cluster, I would be glad to hear how the session goes now. |
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
What problem does it solve?
Попробовал использовать mcp сервер с AI-агентом (opencode).
Сценарий, который ломается
Типичная сессия агента начинается с «дай обзор текущего состояния». На кластере с урезанным RBAC это выглядит так:
get_problems(все неймспейсы) → падение:Cannot read properties of null (reading 'length')list_resourcesпо подам кластер-вайд → сырой 403 от API:cannot list resource "pods" at the cluster scopeget_events/get_metrics/ список namespaces → те же 403get_permissions→ пусто, потому что тот же урезанный пользователь не может читать RBAC-объекты (unreadable: ["ClusterRoles", "RoleBindings", …])Ирония в том, что Sextant уже знает ответ — он лежит в настройках доступа кластера. Агент просто не может его увидеть.
Proposed idea
1. Дать агенту видеть карту собственных прав.
Отдавать настроенный пользователем доступ по кластеру (неймспейсы / kinds / действия / secret-values) через
list_clustersили отдельным лёгким toolget_access. Ноль обращений к API-серверу, ноль новых прав — и агент сразу знает, что перебирать, вместо перебора наугад. Одна эта правка превратила бы всю сессию выше в один вызов.2. Фолбэк на сконфигурированные неймспейсы вместо ошибки.
Инструменты, в описании которых заявлено «все неймспейсы, доступные агенту, если ns не указан», сегодня ловят cluster-scope 403, когда RBAC запрещает кластерный list. Фолбэк на перебор неймспейсов из пункта (1) сделал бы поведение «ns не задан» соответствующим документации даже в запертых кластерах.
3.
SelfSubjectRulesReviewдляget_permissions.Когда сами RBAC-объекты нечитаемы, агент всё равно может узнать свои эффективные права через
authorization.k8s.io SelfSubjectRulesReview— API-сервер считает их сам для вызывающего. С теми же оговорками, что и сейчас (вебхук-авторизаторы не учитываются), но это делаетget_permissionsполезным именно в урезанных конфигурациях, где он нужнее всего.4. Плавная деградация для
get_problems.Вместо падения на null — считать проблемы по доступным неймспейсам, а кластерные объекты помечать как «пропущено/неизвестно».
get_problemsс указанием неймспейса на этой же конфигурации работает нормально, то есть всё уже есть.5. Компактный вывод для
list_resources.Полные объекты подов — 130–230 КБ на неймспейс: за пределами лимитов MCP-клиента, приходится мириться с обрезкой и обрабатывать JSON локально. Опциональный
summary: true(те же колонки, что десктопские таблицы уже считают) или проекцияfieldsсократили бы главный сценарий «получить список и оценить состояние» в 10–50 раз. По умолчанию поведение не меняется — полная обратная совместимость.Alternatives
No response
Area
Clusters & kubeconfig
All reactions