Autoscale HTTP applications on Kubernetes with KEDA and Kedify
Introduction
Install Kedify using Helm
Install an ingress controller for testing HTTP autoscaling
Deploy an HTTP application through Kubernetes Ingress
Configure and test HTTP autoscaling with Kedify
Next Steps
Autoscale HTTP applications on Kubernetes with KEDA and Kedify
Deploy and verify an HTTP application
You’ll deploy a sample HTTP application and expose it through Kubernetes Ingress. Then, you’ll send a request to verify that its endpoint returns an HTTP response.
Configure the ingress address
Before testing the application, make sure that INGRESS_ADDRESS is set to your ingress controller’s external IP address or hostname. For a local cluster, you can use the address that you forwarded using port-forward earlier.
If you completed Install an ingress controller for HTTP autoscaling in Kubernetes , you should already have this set. Otherwise, if you installed Traefik separately, run:
export INGRESS_ADDRESS=$(kubectl get service traefik --namespace traefik -o jsonpath='{.status.loadBalancer.ingress[0].ip}{.status.loadBalancer.ingress[0].hostname}')
echo "Ingress address: $INGRESS_ADDRESS"
If the service has no external address, use port-forward.
If you use an existing ingress controller, set INGRESS_ADDRESS to its endpoint and change ingressClassName in the following manifest to its IngressClass name.
Deploy the application and configure ingress
Now you’ll deploy an HTTP server and expose it using an Ingress resource. For more information, see the
Kedify sample HTTP-server source code
.
Run the following command to deploy your application:
cat <<'EOF' | kubectl apply -f -
apiVersion: apps/v1
kind: Deployment
metadata:
name: application
spec:
replicas: 1
selector:
matchLabels:
app: application
template:
metadata:
labels:
app: application
spec:
nodeSelector:
kubernetes.io/arch: arm64
tolerations:
- key: "kubernetes.io/arch"
operator: "Equal"
value: "arm64"
effect: "NoSchedule"
containers:
- name: application
image: ghcr.io/kedify/sample-http-server:latest
imagePullPolicy: Always
ports:
- name: http
containerPort: 8080
protocol: TCP
env:
- name: RESPONSE_DELAY
value: "0.3"
---
apiVersion: v1
kind: Service
metadata:
name: application-service
spec:
ports:
- name: http
protocol: TCP
port: 8080
targetPort: http
selector:
app: application
type: ClusterIP
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: application-ingress
spec:
ingressClassName: traefik
rules:
- host: application.keda
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: application-service
port:
number: 8080
EOF
The manifest includes the following options that affect scaling behavior:
RESPONSE_DELAYis set in theDeploymentmanifest and adds approximately 300 ms latency per request. This slower response time increases the number of concurrent requests, making scaling effects easier to observe.- The ingress uses the host
application.keda. To access this app, use your ingress controller’s address with aHost:header.
Verify that the application is running
Run the following command to check that one replica is ready:
kubectl get deployment application
The output is similar to:
NAME READY UP-TO-DATE AVAILABLE AGE
application 1/1 1 1 3m44s
Test the application
After the application and ingress are deployed, verify that everything is working correctly by sending a request to the exposed endpoint.
Run the following command:
curl -I -H "Host: application.keda" http://$INGRESS_ADDRESS
The output is similar to:
HTTP/1.1 200 OK
Date: Thu, 11 Sep 2025 14:11:24 GMT
Content-Type: text/html
Content-Length: 301
Connection: keep-alive
What you’ve accomplished
You’ve deployed the sample HTTP application through Kubernetes Ingress and tested its endpoint for an HTTP response.
Next, you’ll configure and test Kedify HTTP autoscaling using this application and INGRESS_ADDRESS.