v1.27.0 Release Notes

Fission v1.27.0 release notes: zero-restart multi-namespace tenancy, invocation correlation and failure attribution, function debugging, and run-local.

Upgrade Notes

v1.27.0 adds multi-namespace tenancy and a function-developer observability toolkit. The new tenancy modes are opt-in — the default (tenancy.mode: static) renders byte-identical RBAC and keeps the existing master-key auth model, so a routine upgrade changes nothing for a single-namespace or additionalFissionNamespaces install. Two runtime defaults do change visibly and are worth reviewing before you roll out. The minimum Kubernetes version is unchanged at 1.32.

For the general upgrade steps (CRDs, CLI, Helm chart), see the Upgrade Guide. The behavioral changes specific to v1.27.0 and the action each requires are below.

The router returns a structured JSON error body by default

A failed invocation that the router can attribute now returns a small JSON body — {component, reason, requestId, traceId, message} — instead of the previous plain-text error string, and a correlated X-Fission-Request-ID / X-Fission-Component header pair. Status codes are preserved exactly, so any caller that only checks the response code is unaffected. A client that parses the literal text of the old error body should be updated to read the JSON, or you can restore the exact legacy plain-text body by setting ROUTER_STRUCTURED_ERRORS=false.

Trace sampling now honors OTEL_TRACES_SAMPLER

The head sampler set in OTEL_TRACES_SAMPLER was previously ignored; it is now applied, so trace export aligns with the chart’s long-documented parentbased_traceidratio at 0.1. This only matters if you have an OTLP exporter configured. If you do, successful-trace export volume drops to the documented 10% rate while every error trace is still force-exported. To restore 100% export, set OTEL_TRACES_SAMPLER=parentbased_always_on.

Deprecations/Removals

  • The InfluxDB log driver (fission function logs --dbtype influxdb) now prints an end-of-life warning when selected — InfluxDB v1.x is EOL. Use the default kubernetes driver or the new Loki read path.
  • Minimum Kubernetes is unchanged at 1.32 (kubeVersion: ">=1.32.0-0").

Highlights

  • Multi-namespace tenancy — zero-restart onboarding with per-namespace isolation. Adding a namespace no longer restarts the entire control plane or re-specializes every function (the root cause of #3298). A new tenancy.mode value picks the posture: static (today’s env-seeded set, the default), dynamic (onboard a namespace with a cluster-scoped FissionTenant CR and the new fission tenant CLI, no restart), or cluster (auto-onboard every non-system namespace, for trusted single-tenant clusters). Dynamic and cluster modes derive a per-namespace HMAC key — the master key never leaves the control plane, so a compromised tenant can act only as itself — while keeping function pods (fetcher/builder) least-privilege in every mode. storagesvc also scopes archive content per namespace, so one tenant can no longer download or delete another tenant’s archive even if it learns the id; legacy bare-UUID archives are grandfathered with no migration. See Multi-namespace tenancy.
  • Invocation correlation and failure attribution. Every invocation now carries a stable X-Fission-Request-ID from the router through to the function pod, and a failed invocation tells the caller where it failed — a Fission component, the user’s function, a timeout, or a cold start — through a structured error body and a new fission_invocation_failures_total{component,reason} metric. Error spans are force-exported even when the base sampler would have dropped them, so failures are always traceable.
  • Function debugging toolkit — fission function describe + smarter test. fission function describe <name> is a single-pane health view answering “can I call this right now?” — invocability (warm-pod and EndpointSlice serving count), status conditions, package build status with the build log shown on a failed build, and the backing pods with a SERVED column. fission function test now echoes the per-invocation request id and, on an attributed failure, renders a one-line diagnosis (✗ function "x" failed in executor (specialization_failed) — status 503, request abc).
  • Local development inner loop — fission function run-local (alpha). Run a function locally in Docker against its real environment runtime image with no cluster round-trip, collapsing the edit→test loop to container start plus sub-second invokes. It supports all three executor types, hot reload (--watch), the builder leg for compiled languages (--build), Secret/ConfigMap and env injection (--secret / --configmap / -e), and a debugger bridge (--debug-port). See Local development with run-local.
  • Generic, OTLP-aligned logging read path. The log-query path is now a pluggable driver registry with a Loki reference adapter alongside the default kubernetes driver, and fission function logs gains --request-id / --trace-id / --level correlation filters plus real streaming --follow. Control-plane components can push their structured logs (carrying trace_id) to an OTLP collector, and a per-invocation router access record is the correlation key that ties fission function logs --request-id <id> together. See Logs with Loki and Function debugging.

Fixes

  • storagesvc honors the S3 endpoint scheme and enables TLS for an https endpoint instead of assuming plaintext.
  • Internal HTTP router (httpmux). The router, executor, and storagesvc move onto a small internal mux (static + {var}/{var:regexp} routes) and drop gorilla/mux, with an exact-route fast-path index and a WebSocket-detection fix.
  • Three latent bug fixes in a focused hardening pass: storagesvc no longer reports success after a truncated archive write (the close error was discarded), and the MCP token verifier and the InfluxDB response decoder no longer format a misleading <nil> into their error messages.
  • fission function pods READY column printed total/ready (reversed); a 1-of-2-ready pod now correctly shows 1/2.
  • Dependency hygiene — dropped the GPL-flagged freetype from the build by isolating the benchmark module, replaced hashicorp/go-retryablehttp with a stdlib retry transport, and moved WebSocket tests to coder/websocket.
  • Helm chart published as 1.27.0, versioned independently from the app version.

Changelog

What’s Changed

New Contributors

Full Changelog: https://github.com/fission/fission/compare/v1.26.0...v1.27.0

References

Last modified June 22, 2026: Doc changes v1.27.0 (#302) (cad509d)