Breaking Changes
Interceptor timeout defaults changed (#1474)
Default timeout behavior has been redesigned. KEDA_HTTP_REQUEST_TIMEOUT now defaults to 0 (disabled), KEDA_HTTP_RESPONSE_HEADER_TIMEOUT defaults to 300s (was 500ms), and KEDA_HTTP_READINESS_TIMEOUT defaults to 0 (disabled, was 20s). Timeout errors now return 504 instead of 502.
The following environment variables have been removed: KEDA_HTTP_TLS_HANDSHAKE_TIMEOUT, KEDA_HTTP_EXPECT_CONTINUE_TIMEOUT, KEDA_HTTP_KEEP_ALIVE, KEDA_HTTP_IDLE_CONN_TIMEOUT, KEDA_HTTP_DIAL_RETRY_TIMEOUT. These now use Go's DefaultTransport defaults.
Interceptor metrics redesigned (#1563, #1590)
Metrics now use bounded labels: path/host replaced by route_name/route_namespace, and non-standard HTTP methods are normalized to _OTHER. Metrics have also been renamed to follow OTel semantic conventions: interceptor_requests_total → interceptor_request_count_total, interceptor_pending_requests → interceptor_request_concurrency. Dashboards must be updated.
Highlights
New documentation (#1516)
The documentation has been completely rewritten and now lives at keda.sh/http-add-on. It features versioned docs, improved navigation, a quick start and guides for different personas (developers, cluster operators). The legacy in-repo docs have been removed.
InterceptorRoute CRD (#1532)
A new InterceptorRoute CRD separates routing/interceptor configuration from scaling configuration. HTTPScaledObject remains supported but is now deprecated — a warning is logged per resource to guide migration.
See the user guide and the migration guide for details.
Per-route timeout configuration (#1562)
InterceptorRoute supports per-route timeouts via the timeouts spec with request, responseHeader, and readiness fields. When unset, global env var defaults are used.
Migration helper: orphan-scaledobject annotation (#1593)
The new httpscaledobject.keda.sh/orphan-scaledobject annotation lets you preserve the auto-created ScaledObject when deleting an HTTPScaledObject during migration to InterceptorRoute, avoiding scaling gaps.
What's Changed
- refactor: simplify responseWriter using Unwrap pattern by @linkvt in #1555
- feat: implement InterceptorRoute CRD by @linkvt in #1532
- refactor: extract endpoint resolution into dedicated middleware by @linkvt in #1558
- chore(deps): update azure/setup-helm action to v5 by @renovate[bot] in #1561
- chore(deps): update github actions by @renovate[bot] in #1560
- refactor: move RPS calculation from interceptor to scaler by @Fedosin in #1557
- refactor: add new e2e test suite by @linkvt in #1545
- fix: reduce OTEL_METRIC_EXPORT_INTERVAL from 1ms to 5s by @linkvt in #1564
- fix(deps): update go dependencies (non-major) (patch) by @renovate[bot] in #1566
- chore(deps): update e2e dependencies by @renovate[bot] in #1565
- fix(deps): update go dependencies (non-major) by @renovate[bot] in #1568
- chore(deps): update github actions by @renovate[bot] in #1567
- refactor: extract test cert generation into a shared helper by @linkvt in #1569
- fix: resolve semgrep findings by @linkvt in #1570
- feat: redesign interceptor metrics with bounded labels by @linkvt in #1563
- chore(deps): update helm release opentelemetry-collector to v0.150.0 by @renovate[bot] in #1574
- fix(deps): update module go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp to v0.68.0 by @renovate[bot] in #1576
- chore: switch whoami test image to ghcr.io by @linkvt in #1572
- feat: implement per-route timeout configuration by @linkvt in #1562
- chore(deps): update pre-commit hook thlorenz/doctoc to v2.4.1 by @renovate[bot] in #1575
- chore(deps): bump github.com/moby/spdystream from 0.5.0 to 0.5.1 by @dependabot[bot] in #1579
- chore: automate kind version updates via Renovate by @linkvt in #1573
- refactor: set Content-Type in interceptor queue endpoint handler by @linkvt in #1580
- ci: reduce lychee link checker flakiness by @linkvt in #1582
- feat: support OTEL_TRACES_SAMPLER and OTEL_TRACES_SAMPLER_ARG settings by @Fedosin in #1577
- chore(deps): update github actions by @renovate[bot] in #1586
- fix(deps): update go dependencies (non-major) to v0.34.7 (patch) by @renovate[bot] in #1587
- refactor/feat(e2e): improve test reliability and add new InterceptorRoute e2e tests by @Fedosin in #1583
- fix: restrict metrics endpoint to /metrics path by @linkvt in #1591
- refactor: align metric names with OTel semantic conventions by @linkvt in #1590
- refactor: nest cold-start fallback service fields under service key by @linkvt in #1588
- feat: log deprecation warning for HTTPScaledObject by @linkvt in #1595
- feat: require explicit targetValue in scaling metric specs by @linkvt in #1597
- refactor: simplify queue count types and fix RPS naming by @linkvt in #1581
- feat: add orphan-scaledobject annotation for HTTPSO->IR migration by @linkvt in #1593
- chore: remove kubebuilder scaffolding artifacts by @linkvt in #1598
- chore: remove legacy in-repo docs in favor of keda.sh by @linkvt in #1594
- chore: pin ko base image to digest and track with Renovate by @linkvt in #1605
- chore: prepare release v0.14.0 by @linkvt in #1607
Full Changelog: v0.13.0...v0.14.0