Skip to content

Commit beed7fb

Browse files
Content dev
1 parent d580eaa commit beed7fb

1 file changed

Lines changed: 31 additions & 50 deletions

File tree

  • content/learning-paths/servers-and-cloud-computing/kedify-http-autoscaling

content/learning-paths/servers-and-cloud-computing/kedify-http-autoscaling/install-ingress.md

Lines changed: 31 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -4,89 +4,70 @@ weight: 3
44
layout: "learningpathall"
55
---
66

7-
Before deploying HTTP applications with Kedify autoscaling, you need an Ingress Controller to handle incoming traffic. Most managed Kubernetes services offered by major cloud providers (AWS EKS, Google GKE, Azure AKS) do not include an Ingress Controller by default.
7+
## Install an ingress controller for HTTP autoscaling on Kubernetes
8+
9+
Before deploying HTTP applications with Kedify autoscaling, you need an ingress controller to handle incoming traffic. Most managed Kubernetes services (AWS EKS, Google GKE, Azure AKS) do not include an ingress controller by default. In this learning path, you install the NGINX Ingress Controller with Helm and target Arm64 nodes.
810

911
{{% notice Note %}}
10-
If your cluster already has an Ingress Controller installed and configured, you can skip this step and proceed directly to the [HTTP Scaling guide](../http-scaling/).
12+
If your cluster already has an ingress controller installed and configured, you can skip this step and proceed to the [HTTP scaling guide](../http-scaling/).
1113
{{% /notice %}}
1214

13-
## Install NGINX Ingress Controller via Helm
15+
## Install the NGINX Ingress Controller with Helm
1416

1517
Add the NGINX Ingress Controller Helm repository:
16-
1718
```bash
1819
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
1920
helm repo update
2021
```
2122

22-
Install the NGINX Ingress Controller:
23-
23+
Install the NGINX Ingress Controller (with `nodeSelector` and `tolerations` for arm64):
2424
```bash
25-
helm upgrade --install ingress-nginx ingress-nginx/ingress-nginx \
26-
--namespace ingress-nginx \
27-
--create-namespace \
28-
\
29-
--set "controller.nodeSelector.kubernetes\.io/arch=arm64" \
30-
--set "controller.tolerations[0].key=kubernetes.io/arch" \
31-
--set "controller.tolerations[0].operator=Equal" \
32-
--set "controller.tolerations[0].value=arm64" \
33-
--set "controller.tolerations[0].effect=NoSchedule" \
34-
\
35-
--set "controller.admissionWebhooks.patch.nodeSelector.kubernetes\.io/arch=arm64" \
36-
--set "controller.admissionWebhooks.patch.tolerations[0].key=kubernetes.io/arch" \
37-
--set "controller.admissionWebhooks.patch.tolerations[0].operator=Equal" \
38-
--set "controller.admissionWebhooks.patch.tolerations[0].value=arm64" \
39-
--set "controller.admissionWebhooks.patch.tolerations[0].effect=NoSchedule"
25+
helm upgrade --install ingress-nginx ingress-nginx/ingress-nginx --namespace ingress-nginx --create-namespace --set "controller.nodeSelector.kubernetes\.io/arch=arm64" --set "controller.tolerations[0].key=kubernetes.io/arch" --set "controller.tolerations[0].operator=Equal" --set "controller.tolerations[0].value=arm64" --set "controller.tolerations[0].effect=NoSchedule" --set "controller.admissionWebhooks.patch.nodeSelector.kubernetes\.io/arch=arm64" --set "controller.admissionWebhooks.patch.tolerations[0].key=kubernetes.io/arch" --set "controller.admissionWebhooks.patch.tolerations[0].operator=Equal" --set "controller.admissionWebhooks.patch.tolerations[0].value=arm64" --set "controller.admissionWebhooks.patch.tolerations[0].effect=NoSchedule"
4026
```
4127

42-
Wait for the LoadBalancer to be ready:
43-
28+
Wait for the load balancer to be ready:
4429
```bash
45-
kubectl wait --namespace ingress-nginx \
46-
--for=condition=ready pod \
47-
--selector=app.kubernetes.io/component=controller \
48-
--timeout=300s
30+
kubectl wait --namespace ingress-nginx --for=condition=ready pod --selector=app.kubernetes.io/component=controller --timeout=300s
4931
```
5032

51-
## Get the External Endpoint
33+
Managed clouds may take a few minutes to allocate a public IP address or hostname.
5234

53-
Get the external IP address or hostname for your ingress controller and save it as an environment variable:
35+
## Get the external endpoint
5436

37+
Retrieve the external IP address or hostname and store it in an environment variable:
5538
```bash
56-
export INGRESS_IP=$(kubectl get service ingress-nginx-controller --namespace=ingress-nginx -o jsonpath='{.status.loadBalancer.ingress[0].ip}{.status.loadBalancer.ingress[0].hostname}')
39+
export INGRESS_IP=$(kubectl get service ingress-nginx-controller --namespace=ingress-nginx -o jsonpath='{.status.loadBalancer.ingress[0].ip}{.status.loadBalancer.ingress[0].hostname}')
5740
echo "Ingress IP/Hostname: $INGRESS_IP"
5841
```
5942

60-
This will save the external IP or hostname in the `INGRESS_IP` environment variable and display it. If the command doesn't print any value, please repeat it after some time. Please note the value:
61-
- **AWS EKS**: You'll see an AWS LoadBalancer hostname (e.g., `a1234567890abcdef-123456789.us-west-2.elb.amazonaws.com`)
62-
- **Google GKE**: You'll see an IP address (e.g., `34.102.136.180`)
63-
- **Azure AKS**: You'll see an IP address (e.g., `20.62.196.123`)
43+
Typical values by provider:
44+
- **AWS EKS**: Load balancer hostname (for example, `a1234567890abcdef-123456789.us-west-2.elb.amazonaws.com`)
45+
- **Google GKE**: IP address (for example, `34.102.136.180`)
46+
- **Azure AKS**: IP address (for example, `20.62.196.123`)
6447

65-
## Configure Access
48+
If no value is printed, wait briefly and re-run the command.
6649

67-
To configure access to the ingress controller, you have two options:
50+
## Configure access
6851

69-
### Option 1: DNS Setup (Recommended for production)
70-
Point `application.keda` to your ingress controller's external IP/hostname using your DNS provider.
52+
You have two options:
7153

72-
### Option 2: Host Header (Quick setup)
73-
Use the external IP/hostname directly with a `Host:` header in your requests. When testing, you will use:
54+
- **Option 1 — DNS (recommended for production):**
55+
Create a DNS record pointing `application.keda` to the external IP address or hostname of your ingress controller.
7456

75-
```bash
76-
curl -H "Host: application.keda" http://$INGRESS_IP
77-
```
78-
79-
The `$INGRESS_IP` environment variable contains the actual external IP or hostname from your ingress controller service.
57+
- **Option 2 — host header (quick test):**
58+
Use the external IP address or hostname directly with a `Host:` header:
59+
```bash
60+
curl -H "Host: application.keda" http://$INGRESS_IP
61+
```
62+
Here, `$INGRESS_IP` expands to the external IP address or hostname of the ingress controller.
8063

81-
## Verification
82-
83-
Verify that the ingress controller is working by checking its readiness:
64+
## Verify the installation
8465

66+
List the controller pods and confirm they are running:
8567
```bash
8668
kubectl get pods --namespace ingress-nginx
8769
```
8870

8971
You should see the `ingress-nginx-controller` pod in `Running` status.
9072

91-
92-
Now that you have an Ingress Controller installed and configured, proceed to the next section to deploy an application and configure Kedify autoscaling.
73+
Now that you have an ingress controller installed and configured, proceed to the next section to deploy an application and configure Kedify autoscaling.

0 commit comments

Comments
 (0)