93 lines
3.3 KiB
Markdown
93 lines
3.3 KiB
Markdown
# 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`
|
||
|
||
Именно такая последовательность и была здесь. |