Files
fission-console/doc/thinking/2026-04-26-layer1-pass.md
T

93 lines
3.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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`
Именно такая последовательность и была здесь.