Ограничение скорости запросов#
Ниже приведен пример развертывания веб-приложения, настройки балансировки нагрузки с помощью VirtualServer и применения политики ограничения скорости запросов. Установите ANIC. Сохраните публичный IP-адрес ANIC в переменной оболочки: Сохраните HTTP-порт ANIC в переменной оболочки: Создайте Deployment и Service для приложения: Примените настройки: Создайте политику с именем Примените настройки: Создайте ресурс VirtualServer для веб-приложения: Примените настройки: VirtualServer ссылается на политику Протестируйте конфигурацию. Если вы будете запрашивать приложение с частотой выше одного запроса в секунду, ANIC начнет отклонять ваши запросы: Примечание Вывод команды сокращен для наглядности примера.Предварительные действия#
$ IC_IP=XXX.YYY.ZZZ.III
$ IC_HTTP_PORT=<номер порта>
Развертывание веб-приложения#
apiVersion: apps/v1
kind: Deployment
metadata:
name: webapp
spec:
replicas: 1
selector:
matchLabels:
app: webapp
template:
metadata:
labels:
app: webapp
spec:
containers:
- name: webapp
image: angiesoftware/angie-hello:plain-text
ports:
- containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
name: webapp-svc
spec:
ports:
- port: 80
targetPort: 8080
protocol: TCP
name: http
selector:
app: webapp
$ kubectl apply -f webapp.yaml
rate-limit-policy
, которая разрешает только один запрос в секунду с одного IP-адреса.apiVersion: k8s.angie.software/v1
kind: Policy
metadata:
name: rate-limit-policy
spec:
rateLimit:
rate: 1r/s
key: ${binary_remote_addr}
zoneSize: 10M
$ kubectl apply -f rate-limit.yaml
apiVersion: k8s.angie.software/v1
kind: VirtualServer
metadata:
name: webapp
spec:
host: webapp.example.com
policies:
- name: rate-limit-policy
upstreams:
- name: webapp
service: webapp-svc
port: 80
routes:
- path: /
action:
pass: webapp
$ kubectl apply -f virtual-server.yaml
rate-limit-policy
, созданную выше.$ curl --resolve webapp.example.com:$IC_HTTP_PORT:$IC_IP http://webapp.example.com:$IC_HTTP_PORT/
Server address: 10.8.1.19:8080
Server name: webapp-dc88fc766-zr7f8
...
$ curl --resolve webapp.example.com:$IC_HTTP_PORT:$IC_IP http://webapp.example.com:$IC_HTTP_PORT/
<html>
<head><title>503 Service Temporarily Unavailable</title></head>
<body>
<center><h1>503 Service Temporarily Unavailable</h1></center>
<hr><center>Angie/1.8.1</center>
</body>
</html>