Files
fission-src/doc/console-compat-2026-05-15.md
T
“Naeel” 4eedf95f5c fix(namespace): executor/router/buildermgr RemoveNamespace + per-NS informer lifecycle
- Add RemoveNamespace(ctx, ns) to executortype.ExecutorType interface
- Implement RemoveNamespace in poolmgr, newdeploy, container executor types
- Add per-namespace context cancellation (nsCancels map) in all three types so
  informer factories are stopped when namespace is removed (fixes goroutine leak)
- Add PoolPodController.RemoveNamespace to clear envLister/podLister maps
- Add deregisterNamespace() in executor multitenant subscriber
- Switch executor/router/buildermgr watcher strategy from TrackOnly to DispatchRemove
  so RemoveFunc is called when fission.io/managed label is removed
- Add RemoveFunc to executor/router/buildermgr namespace subscribers
- Add RemoveNamespace to environmentWatcher and packageWatcher with per-NS cancel
- Add RemoveNamespace to HTTPTriggerSet: cancels informers, removes from maps, calls syncTriggers
- Fix ns_watcher_test.go fakeExecutorType to implement new RemoveNamespace method

Fixes:
- Executor dedup gap: re-added namespace was silently skipped (envLister/deplLister still present)
- Goroutine/FD leak: old informer factories ran forever after namespace removal
- Router stale routes: HTTPTriggers for removed namespace stayed in routing table
2026-05-18 09:04:13 +04:00

3.7 KiB
Raw Blame History

Console ↔ fission-src multitenant: compatibility check (2026-05-15)

Что изменилось в fission-src (feature/multitenant)

Изменение Файл
Удалён старый partial RBAC deploy/executor-ns-watcher-rbac.yaml
Добавлен полный RBAC для NSWatcher deploy/multitenant/rbac.yaml
Добавлен EnsureNamespaceSA pkg/utils/serviceaccount.go
NSWatcher вызывает EnsureNamespaceSA при обнаружении NS с fission.io/managed=true pkg/executor/multitenant/ns_watcher.go
Добавлен тест NSWatcher с fake k8s pkg/utils/namespace_manager_test.go

Что делает консоль при создании namespace

SetupFissionNamespace в console/internal/fission/namespace.go:

  1. Создаёт Namespace с лейблами:

    • managed-by=fission-console
    • fission.io/managed=true ← триггер для NSWatcher
  2. Создаёт ServiceAccounts: fission-fetcher, fission-builder

  3. Создаёт RoleBindings с cluster-admin ClusterRole для всех Fission SA:

    • fission-executor, fission-router, fission-buildermgr, fission-kubewatcher, fission-timer
    • fission-fetcher (из fission NS + локально в user NS)
    • fission-builder (из fission NS + локально в user NS)

Взаимодействие с EnsureNamespaceSA

EnsureNamespaceSA вызывается NSWatcher после того как консоль создала NS. Логика (в setupSAAndRoleBindings):

  1. Создаёт/получает SA fission-fetcher → SA уже существует → IsAlreadyExists → OK
  2. Для каждого permission из fetcherCheck вызывает checkPermission через localsubjectaccessreviews
  3. Поскольку у fission-fetcher уже есть cluster-admin RoleBinding (создан консолью) → все проверки возвращают exists=truerules остаётся пустым → Role и RoleBinding не создаются

Итог: EnsureNamespaceSA является no-op если консоль уже настроила namespace. Никаких конфликтов.


Что нужно на кластере

Для работы NSWatcher нужен deploy/multitenant/rbac.yaml применён один раз:

kubectl apply -f ~/terra/fission-src/deploy/multitenant/rbac.yaml

Это даёт:

  • fission-executorlist/watch namespaces (NSWatcher)
  • fission-routerlist/watch namespaces (NSWatcher)
  • fission-executorcreate SA/Role/RoleBinding в user NS (fission-executor-sa-provisioner)

Без этого RBAC EnsureNamespaceSA будет падать с Forbidden, но консоль продолжит работать — она создаёт SA/RoleBindings сама и не зависит от NSWatcher.


Вердикт

Сценарий Статус
Новый NS создаётся через консоль работает как раньше
NSWatcher обнаруживает NS по fission.io/managed=true совместимо
EnsureNamespaceSA вызывается в уже настроенном NS no-op, нет конфликтов
Старый NS (без нового fission-bundle) консоль не зависит от NSWatcher
Сборка консоли (go build ./...) BUILD OK

Код консоли менять не нужно. Нужно только применить deploy/multitenant/rbac.yaml при деплое нового fission-bundle.