From 6b06db66b9af0d994d0354fff93ef2dc30743ea6 Mon Sep 17 00:00:00 2001 From: Naeel Date: Sun, 26 Apr 2026 09:06:45 +0300 Subject: [PATCH] doc: record layer1 multi-tenant pass analysis --- doc/thinking/2026-04-26-layer1-pass.md | 93 ++++++++++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 doc/thinking/2026-04-26-layer1-pass.md diff --git a/doc/thinking/2026-04-26-layer1-pass.md b/doc/thinking/2026-04-26-layer1-pass.md new file mode 100644 index 0000000..8a24f37 --- /dev/null +++ b/doc/thinking/2026-04-26-layer1-pass.md @@ -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` + +Именно такая последовательность и была здесь. \ No newline at end of file