随着现在更多环境的服务进行上云,对网关这块能实现的功能也比较关注,除了能正常的实现代理的作用,还需要可以进行比如:熔断,链路追踪,限流等,这里主要操作下对ingress的限流。
首先还是需要在k8s集群上部署一个服务用来进行测试,我这里部署了一个nginx的pod,然后用ingress代理这个nginx服务,最后在ingress上做限流操作,通过访问ingress查看是否达到限流的作用。
下面创建ingress的yaml来代理nginx这个服务并做限流,如下:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: test-ingress-limit
annotations:
nginx.ingress.kubernetes.io/limit-rps: “1”
spec:
ingressClassName: nginx
rules:
- host: csh-limit.com
http:
paths:
- path: /index.html
pathType: Prefix
backend:
serviceName: nginx-svc
servicePort: 80
注: nginx.ingress.kubernetes.io/limit-rps:每秒从指定 IP 接受的请求数。突发限制设置为此限制乘以突发乘数,默认乘数为5。当客户端超过此限制时,返回limit-req-status-code default: 503。
接下来开始进行创建并模拟请求看看,如下:
如图所示通过模拟访问ingress已经达到限流的作用,具体的配置参数可以参考如下地址:
https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/annotations/#rate-limiting