knative / knative/func

Migrate KEDA HTTP scaling from HTTPScaledObject to ScaledObject with external trigger

Open
#4,043 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
Go
Stars
365
Forks
223
Avg merge
2d 3h
Merged PRs (30d)
25

Description

## Problem

Currently, the KEDA deployer uses `HTTPScaledObject` for HTTP-based autoscaling. This creates an internal `ScaledObject` under the hood, which means we cannot create a second `ScaledObject` for the same Deployment (e.g. for Kafka consumer-lag scaling). KEDA's admission webhook rejects it:

```
admission webhook "vscaledobject.kb.io" denied the request: the workload 'my-func'
of type 'apps/v1.Deployment' is already managed by the ScaledObject 'my-func'
```

This makes it impossible to combine HTTP + Kafka triggers on the same function.

## Proposed solution

Replace `HTTPScaledObject` with a single `ScaledObject` that uses the KEDA HTTP add-on's external scaler as one of its triggers, alongside any other triggers (Kafka, cron, etc.).

The HTTP add-on exposes an external scaler gRPC endpoint that a regular `ScaledObject` can reference via an `external` trigger. The interceptor routing can be handled via `InterceptorRoute` (or the HTTP add-on's route CRD) instead of relying on `HTTPScaledObject` to set it up.

This would:
1. Allow combining HTTP + Kafka (or any other) triggers in a single `ScaledObject`
2. Give us direct control over all trigger configuration in one place
3. Remove the hidden internal `ScaledObject` that `HTTPScaledObject` creates

## Current workaround

Users must choose either HTTP-only or Kafka-only triggers — they cannot be combined.

## References
- KEDA HTTP add-on external scaler: the add-on runs a gRPC external scaler service
- KEDA limitation: one `ScaledObject` per workload

Contributor guide

Open the contributing guide

Research direction

Start by locating the KEDA deployer code that creates HTTPScaledObject resources and reviewing how other triggers are assembled. Verify the KEDA HTTP add-on external scaler and InterceptorRoute or route CRD integration; done means one ScaledObject can combine HTTP and other triggers without the duplicate-workload admission error.

Written by the indexing model from the issue text.

Assessment

Tech stack
go
Domain
devops, infrastructure
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.