rbac: add fission-executor-sa-provisioner for SA/Role/RoleBinding creation in user NS

Fixes EnsureNamespaceSA getting 403 Forbidden when provisioning fission-fetcher
SA in dynamically registered namespaces. Adds ClusterRole + ClusterRoleBinding
with create/update/patch for serviceaccounts, roles, rolebindings.

Also adds doc/progress.md and doc/thinking/2026-04-26-rbac-fix.md.
This commit is contained in:
Naeel
2026-04-26 07:46:33 +03:00
parent 161de70576
commit 8ccc9fb342
3 changed files with 100 additions and 0 deletions
+38
View File
@@ -0,0 +1,38 @@
# Fission Multi-Tenant — Progress
## Задача
Добиться 5/5 PASS в `test_layer1.sh`: динамически добавленный NS с меткой `fission.io/managed=true` должен работать без рестарта Fission.
---
## Статус задач
| # | Задача | Статус |
|---|--------|--------|
| 1 | Добавить `EnsureNamespaceSA` в `pkg/utils/serviceaccount.go` | ✅ DONE |
| 2 | Вызов `EnsureNamespaceSA` из `ns_watcher.go` при регистрации NS | ✅ DONE |
| 3 | Сборка образа `naeel/fission-bundle:v1.22.0-multi-ns-8` | ✅ DONE |
| 4 | Деплой образа v8 в кластер (executor/router/buildermgr) | ✅ DONE |
| 5 | Коммит `161de70` "multi-tenant: EnsureNamespaceSA + ns_watcher SA provisioning (v8)" | ✅ DONE |
| 6 | Исправить RBAC: добавить `create/update/patch` для SA/roles/rolebindings в `deploy/multitenant/rbac.yaml` | 🔄 IN PROGRESS |
| 7 | Применить RBAC через `kubectl apply`, верифицировать | ⏳ TODO |
| 8 | Коммит RBAC fix | ⏳ TODO |
| 9 | Запустить `test_layer1.sh`, добиться 5/5 PASS | ⏳ TODO |
---
## Текущий результат теста
`test_layer1.sh` — 4/5:
- Шаг 5 падает: `serviceaccount "fission-fetcher" not found` в NS `l1-test-77773`
## Диагностика (2026-04-26)
- Код `EnsureNamespaceSA` присутствует в `serviceaccount.go`
- `ns_watcher.go` строка 168 вызывает `EnsureNamespaceSA`
- RBAC: `kubectl auth can-i create serviceaccounts --as=...fission-executor -n l1-test-77773`**`no`** ❌
- ClusterRole `fission-executor-multi-ns` не имеет `create` для `serviceaccounts`, и нет rules для `roles`/`rolebindings`
- Вывод: `setupSAAndRoleBindings` вызывается, но получает 403 Forbidden и тихо фейлится → SA не создаётся → pod не стартует
## Решение
Добавить в `deploy/multitenant/rbac.yaml` новый ClusterRole + ClusterRoleBinding с правами `create/update/patch` для `serviceaccounts`, `roles`, `rolebindings`. Применить через `kubectl apply`.
**Пересборка образа НЕ нужна** — логика правильная, проблема только в RBAC.