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: trueaverageaverage是给定来源所允许的最大速率,默认情况下是每秒的请求数。
该参数的默认值是0,表示没有速率限制。
该速率实际上是用average除以period来定义的。因此,对于低于1 req/s的速率,需要定义一个大于一秒的period。
periodperiod与average一起定义了实际的最大速率,例如:r = average / period。
该参数的默认值是1秒。
burstburst是在任意短的同一时间段内允许通过的最大请求数。
该参数的默认值是1。
sourceCriterionSourceCriterion定义了用于将来自公共源的请求分组的标准。优先级顺序是ipStrategy,然后是requestHeaderName,然后是requestHost。 如果未设置,则默认为使用请求的远程地址(remote address)字段(作为ipStrategy)。
sourceCriterion.ipStrategyipStrategy选项定义两个参数,这些参数设置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是否将请求主机视为源。