You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: articles/application-gateway/ingress-controller-autoscale-pods.md
+25-24Lines changed: 25 additions & 24 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,6 +1,6 @@
1
1
---
2
2
title: Autoscale AKS pods with Azure Application Gateway metrics
3
-
description: This article provides instructions on how to scale your AKS backend pods using Application Gateway metrics and Azure Kubernetes Metric Adapter
3
+
description: This article provides instructions on how to scale your AKS back-end pods by using Application Gateway metrics and the Azure Kubernetes Metrics Adapter.
4
4
services: application-gateway
5
5
author: greg-lindsay
6
6
ms.service: azure-application-gateway
@@ -10,35 +10,31 @@ ms.date: 9/17/2024
10
10
ms.author: greglin
11
11
---
12
12
13
-
# Autoscale your AKS pods using Application Gateway Metrics (Beta)
13
+
# Autoscale your AKS pods by using Application Gateway metrics
14
14
15
15
As incoming traffic increases, it becomes crucial to scale up your applications based on the demand.
16
16
17
-
In the following tutorial, we explain how you can use Application Gateway's `AvgRequestCountPerHealthyHost` metric to scale up your application. `AvgRequestCountPerHealthyHost` measures average requests sent to a specific backend pool and backend HTTP setting combination.
17
+
This article explains how you can use the `AvgRequestCountPerHealthyHost` metric in Azure Application Gateway to scale up an application. The `AvgRequestCountPerHealthyHost`metric measures average requests sent to a specific combination of a back-end pool and a back-end HTTP setting.
18
18
19
-
Use following two components:
19
+
Use the following two components:
20
20
21
-
*[`Azure Kubernetes Metric Adapter`](https://github.com/Azure/azure-k8s-metrics-adapter) - We use the metric adapter to expose Application Gateway metrics through the metric server. The Azure Kubernetes Metric Adapter is an opensource project under Azure, similar to the Application Gateway Ingress Controller.
22
-
*[`Horizontal Pod Autoscaler`](/azure/aks/concepts-scale#horizontal-pod-autoscaler) - We use HPA to use Application Gateway metrics and target a deployment for scaling.
21
+
-[Azure Kubernetes Metrics Adapter](https://github.com/Azure/azure-k8s-metrics-adapter): You use this component to expose Application Gateway metrics through the metric server. It's an open-source project under Azure, similar to the Application Gateway Ingress Controller.
22
+
-[Horizontal Pod Autoscaler](/azure/aks/concepts-scale#horizontal-pod-autoscaler): You use this component to apply Application Gateway metrics and target a deployment for scaling.
23
23
24
24
> [!NOTE]
25
-
> The Azure Kubernetes Metrics Adapter is no longer maintained. Kubernetes Event-driven Autoscaling (KEDA) is an alternative.<br>
26
-
> Also see [Application Gateway for Containers](for-containers/overview.md).
25
+
> The Azure Kubernetes Metrics Adapter is no longer maintained. Kubernetes Event-driven Autoscaling (KEDA) is an alternative.
27
26
28
-
> [!TIP]
29
-
> Also see [What is Application Gateway for Containers](for-containers/overview.md).
27
+
## Set up the Azure Kubernetes Metrics Adapter
30
28
31
-
## Setting up Azure Kubernetes Metric Adapter
32
-
33
-
1. First, create a Microsoft Entra service principal and assign it `Monitoring Reader` access over Application Gateway's resource group.
29
+
1. Create a Microsoft Entra service principal and assign it `Monitoring Reader` access over the Application Gateway instance's resource group:
applicationGatewayGroupId=$(az group show -g $applicationGatewayGroupName -o tsv --query "id")
38
34
az ad sp create-for-rbac -n "azure-k8s-metric-adapter-sp" --role "Monitoring Reader" --scopes applicationGatewayGroupId
39
35
```
40
36
41
-
1. Now, deploy the [`Azure Kubernetes Metric Adapter`](https://github.com/Azure/azure-k8s-metrics-adapter) using the Microsoft Entra service principal created previously.
37
+
1. Deploy the Azure Kubernetes Metrics Adapter by using the Microsoft Entra service principal that you created previously:
1. Create an `ExternalMetric` resource with name `appgw-request-count-metric`. This resource instructs the metric adapter to expose `AvgRequestCountPerHealthyHost` metric for `myApplicationGateway` resource in `myResourceGroup` resource group. You can use the `filter` field to target a specific backend pool and backend HTTP setting in the Application Gateway.
49
+
1. Create an `ExternalMetric` resource with the name `appgw-request-count-metric`. This resource instructs the metric adapter to expose the `AvgRequestCountPerHealthyHost` metric for the `myApplicationGateway` resource in the `myResourceGroup` resource group. You can use the `filter` field to target a specific back-end pool and back-end HTTP setting in the Application Gateway instance.
54
50
55
51
```yaml
56
52
apiVersion: azure.com/v1alpha2
@@ -60,8 +56,8 @@ Use following two components:
60
56
spec:
61
57
type: azuremonitor
62
58
azure:
63
-
resourceGroup: myResourceGroup # replace with your application gateway's resource group name
64
-
resourceName: myApplicationGateway # replace with your application gateway's name
59
+
resourceGroup: myResourceGroup # replace with your Application Gateway instance's resource group name
60
+
resourceName: myApplicationGateway # replace with your Application Gateway instance's name
You can now make a request to the metric server to see if our new metric is getting exposed:
69
+
You can now make a request to the metric server to see if the new metric is being exposed:
70
+
74
71
```bash
75
72
kubectl get --raw "/apis/external.metrics.k8s.io/v1beta1/namespaces/default/appgw-request-count-metric"
76
73
# Sample Output
@@ -93,13 +90,14 @@ kubectl get --raw "/apis/external.metrics.k8s.io/v1beta1/namespaces/default/appg
93
90
# }
94
91
```
95
92
96
-
## Using the new metric to scale up the deployment
93
+
## Use the new metric to scale up the deployment
94
+
95
+
After you expose `appgw-request-count-metric` through the metric server, you're ready to use the [Horizontal Pod Autoscaler](/azure/aks/concepts-scale#horizontal-pod-autoscaler) to scale up your target deployment.
97
96
98
-
Once we're able to expose `appgw-request-count-metric`through the metric server, we're ready to use [`Horizontal Pod Autoscaler`](/azure/aks/concepts-scale#horizontal-pod-autoscaler) to scale up our target deployment.
97
+
The following example targets a sample deployment named `aspnet`. You scale up pods when `appgw-request-count-metric`is `200` per pod, up to a maximum of `10` pods.
99
98
100
-
In following example, we target a sample deployment `aspnet`. We scale up Pods when `appgw-request-count-metric` > 200 per Pod up to a max of `10` Pods.
99
+
Replace your target deployment name and apply the following autoscale configuration:
101
100
102
-
Replace your target deployment name and apply the following auto scale configuration:
103
101
```yaml
104
102
apiVersion: autoscaling/v2
105
103
kind: HorizontalPodAutoscaler
@@ -119,10 +117,13 @@ spec:
119
117
targetAverageValue: 200
120
118
```
121
119
122
-
Test your setup by using a load test tool like apache bench:
120
+
Test your setup by using a load test tool like ApacheBench:
121
+
123
122
```bash
124
123
ab -n10000 http://<applicaiton-gateway-ip-address>/
125
124
```
126
125
127
126
## Next steps
128
-
-[**Troubleshoot Ingress Controller issues**](ingress-controller-troubleshoot.md): Troubleshoot any issues with the Ingress Controller.
Copy file name to clipboardExpand all lines: articles/application-gateway/ingress-controller-expose-websocket-server.md
+18-12Lines changed: 18 additions & 12 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,6 +1,6 @@
1
1
---
2
2
title: Expose a WebSocket server to Application Gateway
3
-
description: This article provides information on how to expose a WebSocket server to Application Gateway with ingress controller for AKS clusters.
3
+
description: This article provides information on how to expose a WebSocket server to Application Gateway with an ingress controller for AKS clusters.
4
4
services: application-gateway
5
5
author: greg-lindsay
6
6
ms.service: azure-application-gateway
@@ -11,12 +11,12 @@ ms.author: greglin
11
11
12
12
# Expose a WebSocket server to Application Gateway
13
13
14
-
As outlined in the Application Gateway v2 documentation - it [provides native support for the WebSocket and HTTP/2 protocols](features.md#websocket-and-http2-traffic). Both Application Gateway and the Kubernetes Ingress don't have a user-configurable setting to selectively enable or disable WebSocket support.
14
+
Azure Application Gateway v2 [provides native support for the WebSocket and HTTP/2 protocols](features.md#websocket-and-http2-traffic). Both Application Gateway and the Kubernetes ingress don't have a user-configurable setting to selectively enable or disable WebSocket support.
15
15
16
-
> [!TIP]
17
-
> Also see [What is Application Gateway for Containers](for-containers/overview.md).
16
+
## YAML for WebSocket server deployment
17
+
18
+
The following Kubernetes deployment YAML shows the minimum configuration for deploying a WebSocket server, which is the same as deploying a regular web server:
18
19
19
-
The following Kubernetes deployment YAML shows the minimum configuration used to deploy a WebSocket server, which is the same as deploying a regular web server:
20
20
```yaml
21
21
apiVersion: apps/v1
22
22
kind: Deployment
@@ -73,9 +73,10 @@ spec:
73
73
servicePort: 80
74
74
```
75
75
76
-
Given that all the prerequisites are fulfilled, and you have an Application Gateway controlled by a Kubernetes Ingress in your AKS, the deployment shown previously would result in a WebSockets server exposed on port 80 of your Application Gateway's public IP and the `ws.contoso.com` domain.
76
+
Assuming that all the prerequisites are fulfilled, and you have an Application Gateway instance controlled by a Kubernetes ingress in Azure Kubernetes Service (AKS), the preceding deployment would result in a WebSocket server exposed on port 80 of your Application Gateway instance's public IP address and the `ws.contoso.com` domain.
77
77
78
78
The following cURL command would test the WebSocket server deployment:
If your deployment doesn't explicitly define health probes, Application Gateway attempts an HTTP `GET` operation on your WebSocket server endpoint.
93
+
Depending on the server implementation (such as [this example](https://github.com/gorilla/websocket/blob/master/examples/chat/main.go)), you might need WebSocket-specific headers (`Sec-Websocket-Version`, for instance).
94
+
95
+
Because Application Gateway doesn't add WebSocket headers, the Application Gateway health probe response from your WebSocket server is most likely `400 Bad Request`. Application Gateway then marks your pods as unhealthy. This status eventually results in a `502 Bad Gateway` for the consumers of the WebSocket server.
96
+
97
+
To avoid the `502 Bad Gateway` error, you might need to add an HTTP `GET` handler for a health check to your server. For example, `/health` returns `200 OK`.
98
+
99
+
## Related content
90
100
91
-
If your deployment doesn't explicitly define health probes, Application Gateway would attempt an HTTP GET on your WebSocket server endpoint.
92
-
Depending on the server implementation ([here's one we love](https://github.com/gorilla/websocket/blob/master/examples/chat/main.go)) WebSocket specific headers may be required (`Sec-Websocket-Version` for instance).
93
-
Since Application Gateway doesn't add WebSocket headers, the Application Gateway's health probe response from your WebSocket server is most likely `400 Bad Request`.
94
-
As a result, Application Gateway marks your pods as unhealthy. This status eventually results in a `502 Bad Gateway` for the consumers of the WebSocket server.
95
-
To avoid the bad gateway error, you might need to add an HTTP GET handler for a health check to your server (`/health` for instance, which returns `200 OK`).
101
+
- [What is Application Gateway for Containers?](for-containers/overview.md)
0 commit comments