01-限流

样例

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

periodaverage一起定义了实际的最大速率,例如:r = average / period

该参数的默认值是1秒。

峰值burst

burst是在任意短的同一时间段内允许通过的最大请求数。

该参数的默认值是1。

源规范sourceCriterion

SourceCriterion定义了用于将来自公共源的请求分组的标准。优先级顺序是ipStrategy,然后是requestHeaderName,然后是requestHost。 如果未设置,则默认为使用请求的远程地址(remote address)字段(作为ipStrategy)。

sourceCriterion.ipStrategy

ipStrategy选项定义两个参数,这些参数设置Traefik如何确定客户端IP:depthexcludedIPs

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

是否将请求主机视为源。

上次修改: 14 April 2020