当前位置: 首页 > 知识库问答 >
问题:

Istio特使速率限制不适用于子路径描述符

夏炎彬
2023-03-14

尝试使用Istio EnvoyFilter实现速率限制。服务级别速率限制工作正常。但未能为我的服务的任何子路径配置速率限制。例如,“/productpage”和“/api/v1/products”仍然共享服务级别速率限制。

下面是Istio EnvoyFilter配置与Istio演示项目Bookinfo,如果配置有任何问题,请让我知道。

apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
  name: filter-local-ratelimit-svc
  namespace: istio-system
spec:
  workloadSelector:
    labels:
      app: productpage
  configPatches:
    - applyTo: HTTP_FILTER
      match:
        context: SIDECAR_INBOUND
        listener:
          filterChain:
            filter:
              name: "envoy.filters.network.http_connection_manager"
      patch:
        operation: INSERT_BEFORE
        value:
          name: envoy.filters.http.local_ratelimit
          typed_config:
            "@type": type.googleapis.com/udpa.type.v1.TypedStruct
            type_url: type.googleapis.com/envoy.extensions.filters.http.local_ratelimit.v3.LocalRateLimit
            value:
              stat_prefix: http_local_rate_limiter

    - applyTo: HTTP_ROUTE
      match:
        context: SIDECAR_INBOUND
        routeConfiguration:
          vhost:
            name: "inbound|http|9080"
            route:
              action: ANY
      patch:
        operation: MERGE
        value:
          typed_per_filter_config:
            envoy.filters.http.local_ratelimit:
              "@type": type.googleapis.com/udpa.type.v1.TypedStruct
              type_url: type.googleapis.com/envoy.extensions.filters.http.local_ratelimit.v3.LocalRateLimit
              value:
                rate_limits:
                  - actions:
                      - request_headers:
                          header_name: ":path"
                          descriptor_key: path
                stat_prefix: http_local_rate_limiter
                token_bucket:
                  max_tokens: 5
                  tokens_per_fill: 5
                  fill_interval: 60s
                filter_enabled:
                  runtime_key: local_rate_limit_enabled
                  default_value:
                    numerator: 100
                    denominator: HUNDRED
                filter_enforced:
                  runtime_key: local_rate_limit_enforced
                  default_value:
                    numerator: 100
                    denominator: HUNDRED
                response_headers_to_add:
                  - append: false
                    header:
                      key: x-local-rate-limit
                      value: "true" 
                descriptors:
                  - entries:
                      - key: path
                        value: /productpage
                    token_bucket:
                      max_tokens: 3
                      tokens_per_fill: 3
                      fill_interval: 60s
                  - entries:
                      - key: path
                        value: /api/v1/products
                    token_bucket:
                      max_tokens: 2
                      tokens_per_fill: 2
                      fill_interval: 60s

通过以下移动速率限制行动解决:

- applyTo: HTTP_ROUTE
      match:
        context: SIDECAR_INBOUND
        routeConfiguration:
          vhost:
            name: "inbound|http|9080"
            route:
              action: ANY
      patch:
        operation: MERGE
        value:
          route:
              rate_limits:
              - actions:
                - request_headers:
                    header_name: ":path"
                    descriptor_key: path 

共有1个答案

宗政鸿志
2023-03-14

通过如下移动利率限制操作解决此问题:

- applyTo: HTTP_ROUTE
      match:
        context: SIDECAR_INBOUND
        routeConfiguration:
          vhost:
            name: "inbound|http|9080"
            route:
              action: ANY
      patch:
        operation: MERGE
        value:
          route:
              rate_limits:
              - actions:
                - request_headers:
                    header_name: ":path"
                    descriptor_key: path 
 类似资料:
  • 我们必须为Istio配置速率限制。我们正在使用istio 1.6。提供的所有示例都具有基于标头的速率限制。我们是否可以对所有请求限制我们的应用程序,而不考虑标题。像istio一样,应该限制所有用户在一分钟内访问应用程序超过500次。

  • 通过应用以下脚本,我无法看到istio 1.7中应用的速率限制。 除此之外,我还部署了istio bookinfo示例应用程序 已配置到此应用的istio入口网关路由 当我通过应用相关的速率限制标头通过入口网关访问应用程序时 它一直给我200个OK响应,不管我应用它多少次,尽管应用的rimit是每分钟2个请求。 此外,当我试图在redis中查看数据时,在那里看不到任何数据。 任何人都将不胜感激。

  • 我正在尝试对我们的一些内部服务(网格内部)应用速率限制。 我使用了文档中的示例并生成了redis速率限制配置,其中包括(redis)处理程序、配额实例、配额规范、配额规范绑定和应用处理程序的规则。 此redis处理程序: 配额实例(目前我只对按目的地限制感兴趣): 配额规格,如果我理解正确,每个请求收费1: 所有参与服务预取的配额绑定规范。我还尝试了,但也没有任何效果。 应用处理程序的规则。目前在

  • 我的特定用例是,我想使用redis速率限制器在spring cloud gateway实现速率限制,例如,对于特定路由,每分钟4个请求。 但它并没有像预期的那样工作,一旦一个请求完成,它就会自动填充存储桶。使用了spring cloud论坛提供的相同实现,但无法限制我对特定时间窗口的请求: 通过将RequiredRate设置为所需的请求数、requestedTokens设置为以秒为单位的时间跨度、

  • 我想设置pythonpath,但它不适用于其他目录。 我的朋友: 导出PYTHONPATH=/usr/lib/python2.7 导出PYTHONPATH=$PYTHONPATH/plat-linux2:$PYTHONPATH/lib-dynload:$PYTHONPATH/dist-包:$PYTHONPATH/lib-tk:$PYTHONPATH 如果我只保留第一行(单个目录) export P

  • 速率限制配置参考 filter.http.RateLimit filter.http.RateLimit proto { "domain": "...", "stage": "...", "request_type": "...", "timeout": "{...}" } domain (string, REQUIRED) 需要调用速率限制服务时的域。 stage (uint3