doc: record layer1 multi-tenant pass analysis
This commit is contained in:
@@ -0,0 +1,93 @@
|
||||
# 2026-04-26 - Layer1 test доведён до PASS=5/5
|
||||
|
||||
## Контекст
|
||||
|
||||
Внешний исходник Fission, который реально правился и тестировался, находится в отдельной рабочей копии:
|
||||
|
||||
- `~/terra/fission-src`
|
||||
|
||||
Этот документ хранится в текущем workspace-репозитории как краткая рабочая фиксация результата и причин, чтобы не потерять контекст между шагами диагностики, скриптами и проверками.
|
||||
|
||||
## Что было нужно получить
|
||||
|
||||
Тест `test_layer1.sh` должен был подтверждать, что новый namespace с label:
|
||||
|
||||
- `fission.io/managed=true`
|
||||
|
||||
подхватывается без рестарта Fission, и в нём реально работает:
|
||||
|
||||
- `Environment`
|
||||
- `Function`
|
||||
- `HTTPTrigger`
|
||||
- вызов через router
|
||||
|
||||
## Финальный результат
|
||||
|
||||
Финальный запуск дал:
|
||||
|
||||
```text
|
||||
PASS=5 FAIL=0
|
||||
```
|
||||
|
||||
Функция ответила `HTTP 200`.
|
||||
|
||||
## Две настоящие причины падения
|
||||
|
||||
### 1. Executor RBAC был неполным
|
||||
|
||||
Dynamic namespace registration в executor работал, но `fission-executor` не имел полного набора прав для provisioning `fission-fetcher` в новом namespace.
|
||||
|
||||
Не хватало не только прав на создание:
|
||||
|
||||
- `serviceaccounts`
|
||||
- `roles`
|
||||
- `rolebindings`
|
||||
|
||||
Но ещё и:
|
||||
|
||||
- `events.create`
|
||||
- `localsubjectaccessreviews.create`
|
||||
|
||||
Без этого executor не мог создать полный `Role` для fetcher.
|
||||
|
||||
### 2. Router RBAC отсутствовал для namespace watcher
|
||||
|
||||
После починки executor симптом сменился с `500` на `404`.
|
||||
|
||||
Это показало, что executor-path уже работает, а router не подхватывает новый namespace.
|
||||
|
||||
Причина: у `fission-router` не было cluster-scope прав:
|
||||
|
||||
- `namespaces:list`
|
||||
- `namespaces:watch`
|
||||
|
||||
## Что было сделано
|
||||
|
||||
В `fission-src` был расширен `deploy/multitenant/rbac.yaml`:
|
||||
|
||||
- для executor dynamic SA provisioning
|
||||
- для router namespace watcher
|
||||
|
||||
После этого:
|
||||
|
||||
- `fission-fetcher` начал создаваться корректно
|
||||
- `Role` и `RoleBinding` стали появляться автоматически
|
||||
- router начал видеть новые namespace и подхватывать triggers
|
||||
- `test_layer1.sh` прошёл полностью
|
||||
|
||||
## Полезный вывод
|
||||
|
||||
При multi-tenant hot registration нужно проверять не только код watcher-ов, но и весь Kubernetes RBAC contract по цепочке:
|
||||
|
||||
1. namespace watch/list
|
||||
2. provisioning service account и RBAC в tenant namespace
|
||||
3. делегируемые permission-ы в создаваемых Role
|
||||
4. router runtime subscription на triggers/functions
|
||||
|
||||
Если ломается любой из этих этапов, симптомы будут меняться по мере частичных фиксов:
|
||||
|
||||
- сначала `serviceaccount not found`
|
||||
- потом `500 timeout`
|
||||
- потом `404`
|
||||
|
||||
Именно такая последовательность и была здесь.
|
||||
Reference in New Issue
Block a user