Skip to content

Commit cbd4696

Browse files
committed
Added rate limiting to ingress
1 parent 8d7aa7c commit cbd4696

4 files changed

Lines changed: 49 additions & 13 deletions

File tree

app/app.py

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,11 @@
22

33
from flask import Flask, request
44
from flask_cors import CORS
5-
from flask_limiter import Limiter
6-
from flask_limiter.util import get_remote_address
75

86
from blueprint_pages import app as blueprint_pages
97
import v2
108
import v1
119

12-
def real_ip():
13-
return request.headers.get("X-Forwarded-For", request.remote_addr).split(",")[0].strip()
14-
1510
print("Launching Flask App")
1611

1712
api_path = os.getenv('API_PREFIX', '/api')
@@ -23,13 +18,6 @@ def real_ip():
2318
cors = CORS(app)
2419
app.config['CORS_HEADERS'] = '*'
2520

26-
limiter = Limiter(
27-
app=app,
28-
key_func=real_ip,
29-
default_limits=["5 per minute"],
30-
headers_enabled=True
31-
)
32-
3321
# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> HTML PAGES
3422
app.register_blueprint(blueprint_pages)
3523

app/v2/response_formatters.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ def clean_value(value):
3838

3939
return {
4040
'metadata': {
41-
'api_test_version': 'v1.23',
41+
'api_test_version': 'v1.24',
4242
'river_id': river_id,
4343
'gen_date': datetime.datetime.now(datetime.UTC).strftime('%Y-%m-%dT%X+00:00'),
4444
'start_date': clean_value(start_date),
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
{{- if .Values.rateLimitedIngress.enabled -}}
2+
{{- $fullName := include "gsprestapi.fullname" . -}}
3+
4+
apiVersion: networking.k8s.io/v1
5+
kind: Ingress
6+
metadata:
7+
name: {{ $fullName }}-ratelimit
8+
namespace: {{ .Release.Namespace }}
9+
labels:
10+
{{ include "gsprestapi.labels" . | indent 4 }}
11+
12+
annotations:
13+
{{ toYaml .Values.rateLimitedIngress.annotations | indent 4 }}
14+
15+
spec:
16+
ingressClassName: nginx
17+
18+
rules:
19+
{{- range .Values.rateLimitedIngress.hosts }}
20+
- host: {{ .host }}
21+
http:
22+
paths:
23+
{{- range .paths }}
24+
- path: {{ . }}
25+
pathType: Prefix
26+
backend:
27+
service:
28+
name: {{ $fullName }}
29+
port:
30+
name: http
31+
{{- end }}
32+
{{- end }}
33+
34+
{{- end }}

helm/gsprestapi/values.yaml

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,20 @@ ingress:
3535
- geoglows.ecmwf.int
3636
secretName: geoglows-tls
3737

38+
rateLimitedIngress:
39+
enabled: true
40+
41+
annotations:
42+
nginx.ingress.kubernetes.io/limit-rps: "5"
43+
nginx.ingress.kubernetes.io/limit-burst: "3"
44+
45+
hosts:
46+
- host: geoglows-stage.ecmwf.int
47+
paths:
48+
- /api/v2/retrospective
49+
- /api/v2/forecastensemble
50+
- api/v2/forecastrecords
51+
3852
resources:
3953
requests:
4054
cpu: 1

0 commit comments

Comments
 (0)