apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
name: test-ratelimit
spec:
rateLimit:
period: 1s
average: 150
burst: 300
sourceCriterion:
ipStrategy:
depth: 1
excludedIPs:
- 127.0.0.1/32
- 192.168.1.7
requestHeaderName: username
requestHost: true
average
average
是给定来源所允许的最大速率,默认情况下是每秒的请求数。
该参数的默认值是0,表示没有速率限制。
该速率实际上是用average
除以period
来定义的。因此,对于低于1 req/s
的速率,需要定义一个大于一秒的period
。
period
period
与average
一起定义了实际的最大速率,例如:r = average / period
。
该参数的默认值是1秒。
burst
burst
是在任意短的同一时间段内允许通过的最大请求数。
该参数的默认值是1。
sourceCriterion
SourceCriterion
定义了用于将来自公共源的请求分组的标准。优先级顺序是ipStrategy
,然后是requestHeaderName
,然后是requestHost
。 如果未设置,则默认为使用请求的远程地址(remote address)字段(作为ipStrategy
)。
sourceCriterion.ipStrategy
ipStrategy
选项定义两个参数,这些参数设置Traefik如何确定客户端IP:depth
和excludedIPs
。
ipStrategy.depth
depth
选项告诉Traefik使用X-Forwarded-For
标头,并获取位于depth
指定位置(从右开始)的IP。
depth
大于X-Forwarded-For
中IP的总数,则客户端IP将为空。depth
的值小于或等于0,则将被忽略。ipStrategy.excludedIPs
excludeedIPs
告诉Traefik扫描X-Forwarded-For
标头,并选择不在excludedIPs
列表中的第一个IP(从右开始)。
如果设置了
depth
,那么excludedIPs
将会被忽略。
sourceCriterion.requestHeaderName
对于给定header具有相同值的请求被分组为来自同一源。
sourceCriterion.requestHost
是否将请求主机视为源。