ASM通过ASMGlobalRateLimiter实现全局限流的声明式配置。本文介绍ASMGlobalRateLimiter的字段说明。
配置示例
示例一:服务端限流
本示例需要实例版本≥1.25.6.74。
以下示例限制了 httpbin 应用 1 分钟内只能被访问一次。
示例二:客户端限流
本示例需要实例版本≥1.25.6.74。
以下示例限制了 sleep 应用 1 分钟内只能访问一次 httpbin 服务。
示例三:waypoint 限流
本示例仅适用于Ambient模式,且需要实例版本≥1.25.6.74。
该示例配置了应用在名为default的 waypoint 的限流规则,当请求携带x-user请求头时,会根据不同的值分配 bucket,限制每分钟只能访问 1 次,当不携带该请求头时,则限制每分钟访问 20 次。
spec
| 字段 | 类型 | 是否必选 | 说明 | 
| workloadSelector | map<string, string> | 是 | 通过一个或多个标签,指明限流配置生效的一组特定的工作负载。标签搜索的范围限制在资源所在的配置命名空间。更多信息,请参见Workload Selector。 | 
| isGateway | bool | 否 | 限流配置生效的工作负载是否为网关,默认为false。 | 
| rateLimitService | 是 | 限流服务配置。 | |
| configs | 是 | 全局限流配置,可配置多条。 | |
| applyToTraffic | string | 否 | 限流策略应用的流量类型。可选参数: 
 默认值为 说明  该字段仅支持ASM 1.25及以上版本。 | 
RateLimitServiceConfig
| 字段 | 类型 | 是否必选 | 说明 | 
| host | string | 是 | 限流服务Service的集群域名。 | 
| port | int | 是 | 限流服务的Service gRPC端口。 | 
| timeout | Duration | 否 | 网格代理连接限流服务的超时时间。例如 | 
GlobalRateLimiterConfig
| 字段 | 类型 | 是否必选 | 说明 | 
| name | string | 是 | 单条限流配置的名称。 | 
| match | 是 | 匹配条件。 | |
| limit | 是 | 限流阈值配置。 | |
| limit_overrides | 否 | 限流阈值覆盖配置。可通过该字段针对特定的请求指定单独的限流阈值。支持配置多个覆盖配置。 说明  仅支持ASM 1.19.0及以上版本。 | |
| target_services | 否 | 限流策略作用的服务。 说明  该字段仅支持ASM 1.25及以上版本。 | 
TargetServiceRef
此类型字段仅支持ASM 1.25及以上版本。
| 字段 | 类型 | 是否必须 | 说明 | 
| kind | string | 否 | 限流策略作用的服务 kind。可选值: 
 默认为 | 
| name | string | 是 | 限流策略作用的服务名称。 | 
| namespace | string | 否 | 限流策略作用的服务所处的命名空间。默认为您定义的限流策略所处命名空间。 | 
| port | int32 | 否 | 限流策略作用的服务端口。 | 
| section_name | string | 否 | 服务的额外属性,当前只对 
 | 
示例一
以下示例定义了 default 命名空间的 httpbin Service 的 8000 端口上。
target_services:
- kind: Service
  namespace: default
  name: httpbin
  port: 8000示例二
当前实例中存在如下 ServiceEntry。
apiVersion: networking.istio.io/v1
kind: ServiceEntry
metadata:
  name: se-httpbin-external
spec:
  hosts:
  - httpbin.test.com
  location: MESH_EXTERNAL
  ports:
  - name: http
    number: 80
    protocol: HTTP
  - name: https
    number: 443
    protocol: HTTPS
  resolution: DNS以下策略将生效于该 ServiceEntry 的 80 端口上。
target_services:
- kind: ServiceEntry
  namespace: default
  name: se-httpbin-external
  port: 80示例三
当前实例中存在以下 VirtualService。
apiVersion: networking.istio.io/v1
kind: VirtualService
metadata:
  name: vs-httpbin
spec:
  hosts:
  - httpbin.test.com
  http:
  - name: default
    route:
    - destination:
        host: httpbin
        port:
          number: 8000以下策略将生效与 VirtualService 中定义的 http 名为 default 的路由规则上。
target_services:
- kind: VirtualService
  namespace: default
  name: vs-httpbin
  section_name: defaultRatelimitMatch
| 字段 | 类型 | 是否必选 | 说明 | 
| vhost | 是 | VirtualHost匹配条件。 | 
GlobalServiceLimitConfig
| 字段 | 类型 | 是否必选 | 说明 | 
| unit | string | 是 | 限流计量时间单位。取值: 
 | 
| quota | int | 是 | 单位时间内允许的请求总量。 | 
GlobalRateLimitOverrideConfig
| 字段 | 类型 | 是否必选 | 说明 | 
| request_match | 是 | 限流阈值覆盖配置指定的请求匹配条件。只有匹配条件的请求会应用覆盖配置中的限流阈值。 | |
| limit | 是 | 限流阈值覆盖配置指定的请求限流阈值。 | 
VirtualHostMatch
| 字段 | 类型 | 是否必选 | 说明 | 
| name | string | 是 | 匹配的VirtualHost名称。 | 
| port | int | 否 | 匹配的请求端口。 | 
| route | 否 | 匹配的请求接口对应的路由名称。 | 
RouteMatch
| 字段 | 类型 | 是否必选 | 说明 | 
| name_match | string | 否 | 匹配的路由名称,对应VirtualService下的单条路由名称。 | 
| header_match | 否 | 匹配服务请求的Header,支持配置多个。 说明  在ASM 1.19.0及以上版本,该字段被标注为废弃(Deprecated),请使用GlobalRateLimitOverrideConfig对请求进行匹配。 | 
RequestMatcher
RequestMatcher中的多个字段可以同时使用。同时使用时,请求必须同时符合每个字段的匹配条件才会被匹配。
| 字段 | 类型 | 是否必选 | 说明 | 
| header_match | 否 | 匹配请求的header,支持配置多个。 | |
| remote_address | 否 | 匹配请求的源IP。 | |
| query_match | 否 | 匹配请求的查询参数(query params),支持配置多个。 | 
RemoteAddressMatcher
| 字段 | 类型 | 是否必选 | 说明 | 
| address | string | 是 | 匹配的请求源的IP地址。 | 
| v4_prefix_mask_len | uint32 | 否 | 如果需要匹配IPv4地址范围,在此字段填写IPv4地址子网掩码长度,并在address处填写IPv4地址。将会匹配address在掩码后的地址范围。 | 
| v6_prefix_mask_len | uint32 | 否 | 如果需要匹配IPv6地址范围,在此字段填写IPv6地址子网掩码长度,并在address处填写IPv6地址。将会匹配address在掩码后的地址范围。 | 
HeaderMatcher
| 字段 | 类型 | 是否必选 | 说明 | |
| name | string | 否 | Header名称。 | |
| 任选其一 | regex_match | string | 否 | 正则表达式匹配。 | 
| exact_match | string | 否 | 精确匹配。 | |
| prefix_match | string | 否 | 前缀匹配,以什么开头进行匹配。 | |
| suffix_match | string | 否 | 后缀匹配,以什么结尾进行匹配。 | |
| present_match | bool | 否 | 
 | |
| invert_match | bool | 否 | 默认为false。 
 | |
QueryParameterMatcher
| 字段 | 类型 | 是否必选 | 说明 | |
| name | string | 是 | 查询参数的名称。 | |
| 任选其一 | exact_match | string | 否 | 精确匹配查询参数的内容。 | 
| prefix_match | string | 否 | 前缀匹配查询参数的内容。 | |
| suffix_match | string | 否 | 后缀匹配查询参数的内容。 | |
| regex_match | string | 否 | 正则表达式匹配查询参数的内容。 | |
| contains_match | string | 否 | 包含匹配查询参数的内容,即要求查询参数的内容必须包含某个子串。 | |
| present_match | bool | 否 | 
 | |
| ignore_case | bool | 否 | 是否在匹配查询参数时忽略大小写。 | |