kubernetes Istio/envoy特定源IP尝试到达特定路径时的速率限制

kyxcudwk  于 2023-04-05  发布在  Kubernetes
关注(0)|答案(1)|浏览(143)

我已经在istio上实现了全局速率限制器,就像这篇文档一样-使用Istio实现全局速率限制。我试图弄清楚如何设置描述符,以便当特定IP(x.x.x.x)尝试访问特定路径(/xyz)时,它会立即受到速率限制。如果同一IP尝试不同路径或任何其他IP尝试任何路径,则允许每分钟100个请求
但是我的configmap和/或envoyfilter设置是错误的,因为我没有得到预期的输出
这是我的configmap

apiVersion: v1
kind: ConfigMap
metadata:
  name: ratelimit-config
data:
  config.yaml: |
    domain: frontend-ratelimit
    descriptors:
      - key: remote_address
        value: x.x.x.x
        descriptors:
        - key: PATH
          value: "/xyz"
          rate_limit:
            replaces:
            - name: src_ip
            unit: second
            requests_per_unit: 0
      - key: remote_address
        rate_limit:
          name: src_ip
          unit: minute
          requests_per_unit: 100

这里是envoyfilter与行动

apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
  name: filter-ratelimit-svc
spec:
  workloadSelector:
    labels:
      istio: ingressgateway
  configPatches:
    - applyTo: VIRTUAL_HOST
      match:
        context: GATEWAY
        routeConfiguration:
          vhost:
            name: ""
            route:
              action: ANY
      patch:
        operation: MERGE
        # Applies the rate limit rules.
        value:
          rate_limits:
            - actions:
              - remote_address: {}
              - request_headers:
                  header_name: :path
                  descriptor_key: PATH
            - actions:
              - remote_address: {}

我试过每次都用不同的操作块和描述符来改变configmap和envoyfilter,但我似乎从来没有让两个条件都工作过。总是其中一个条件按预期工作,而另一个条件似乎失败了
为了更好地概括我想达到的目标
1.当x.x.x.x尝试到达/xyz时,允许0请求
1.当x.x.x.x尝试到达任何路径时,允许100 req/min
1.当y.y.y.y尝试到达任何路径时,允许100 req/min

qoefvg9y

qoefvg9y1#

我注意到的一件事是,在您的filter-ratelimit-svc文件中,您有:

value:
    rate_limits:
      - actions:
        - remote_address: {}
        - request_headers:
            header_name: :path
            descriptor_key: PATH
        - actions:
          - remote_address: {}

我遇到了类似的问题,当我将- remote_address: {}从第一个action中移走,只在第二个动作中离开时,它才起作用。filter-ratelimit-svc将是这样的:价值:

rate_limits:
  - actions:
    - request_headers:
        header_name: :path
        descriptor_key: PATH
    - actions:
      - remote_address: {}

相关问题