envoyfilter

apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
  name: rate-limit
  namespace: default
spec:
  workloadSelector:
    labels:
      app: demo-app # 替换为你的服务 Pod 的标签(通过 `kubectl get pods -n default --show-labels` 查看)
  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
    patch: 
      operation: MERGE
      value: 
        route: 
          rate_limits: 
          - actions: 
            - remote_address: {}
          - actions: 
            - header_value_match: 
                descriptor_value: route1
                headers: 
                - name: :path
                  string_match: 
                    prefix: /hello
          - actions: 
            - remote_address: {}
          - actions: 
            - header_value_match: 
                descriptor_value: route2
                headers: 
                - name: :path
                  string_match: 
                    prefix: /welcome
        typed_per_filter_config: 
          envoy.filters.http.local_ratelimit: 
            '@type': type.googleapis.com/envoy.extensions.filters.http.local_ratelimit.v3.LocalRateLimit
            always_consume_default_token_bucket: false
            descriptors: 
            - entries: 
              - key: header_match
                value: route1
              token_bucket: 
                fill_interval: 60s
                max_tokens: 5000
                tokens_per_fill: 5000
            - entries: 
              - key: header_match
                value: route2
              token_bucket: 
                fill_interval: 60s
                max_tokens: 100
                tokens_per_fill: 100
            enable_x_ratelimit_headers: DRAFT_VERSION_03
            filter_enabled:
              default_value:
                denominator: HUNDRED
                numerator: 100
              runtime_key: http_local_rate_limiter
            filter_enforced:
              default_value:
                denominator: HUNDRED
                numerator: 100
              runtime_key: http_local_rate_limiter
            response_headers_to_add:
            - append: false
              header:
                key: x-local-rate-limit
                value: "true"
            stat_prefix: http
            token_bucket:
              fill_interval: 10s
              max_tokens: 2147483647
              tokens_per_fill: 2147483647

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐