istio 限流:本地限流+全局限流

istio 限流在官网的位置是 任务->策略执行->使用 Envoy 启用速率限制

istio 限流基于数据面 Envoy 开发,Envoy 支持两个类型限流,分别是本地限流和全局限流(本地限流和全局限流可以一起使用)

开始之前

  • 安装 istio
  • 部署 bookinfo 应用,参考 istio 专栏文章

本地限流

概念

  • 配置为单实例,例如当 replicaset 设置为3,token_bucket 为3时,每个 pod 都可以处理3个请求,总共9个请求,与全局限流不一样
  • 不依赖任何外部后端(无需调用其他服务)
  • 基于 令牌桶机制,支持四层对连接的限制和七层对请求数的限制
    • 令牌桶算法是一种限制发送到服务端的请求数量的方法,基于一定数量的令牌桶。存储桶以恒定的速
      率不断填充令牌,当向服务发送请求时,会从存储桶中删除一个令牌。如果存储桶为空,则请求将被
      拒绝。通常需要指定以下内容:
      • 桶被填充的速率(填充间隔)
      • 每个填充间隔添加到桶中的令牌数

demo 测试

  • 部署官网提供的 demo
  • 创建本地限流的 envoyfilter 文件
apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
  name: filter-local-ratelimit-svc
  namespace: mm-xianliu
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
              token_bucket:
                max_tokens: 3
                tokens_per_fill: 3
                fill_interval: 30s
              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: # 被限流流量添加 header
                - append: false
                  header:
                    key: x-local-rate-limit
                    value: 'true'

其中 filter_enabled 表示添启用本地限流功能,filter_enforced 表示强制执行本地限流,response_headers_to_add 表示被限流的流量的 response 中会加上这个 header

filter_enabled 和 filter_enforced 需要一起使用

例如,设置令牌桶的数量为3,允许30s 内3最多三次访问,第四次访问失败时会在 response 中添加 x-local-rate-limit: true 的 header
istio 限流:本地限流+全局限流_第1张图片

全局限流

你可能感兴趣的:(Istio,istio,云原生)