почему ограничение скорости Istio работает некорректно? - PullRequest
0 голосов
/ 29 мая 2019

Я правильно настроил ограничение скорости в соответствии с руководством по istio, и это сработало. Но когда я снизил лимит, казалось, что ограничение скорости не изменилось. Вот все мои файлы конфигурации. Я надеюсь, что вы можете помочь мне. Большое спасибо.

apiVersion: config.istio.io/v1alpha2
kind: handler
metadata:
  name: quotahandler
  namespace: istio-system
spec:
  compiledAdapter: memquota
  params:
    quotas:
    - name: requestcountquota.instance.istio-system
      maxAmount: 500
      validDuration: 1s
      overrides:
      - dimensions:
          destination: productpage
          source: "10.28.11.20"
        maxAmount: 500
        validDuration: 1s
      - dimensions:
          destination: productpage
        maxAmount: 500  (Here I increased the number of requests per second.)
        validDuration: 1s
---
apiVersion: config.istio.io/v1alpha2
kind: instance
metadata:
  name: requestcountquota
  namespace: istio-system
spec:
  compiledTemplate: quota
  params:
    dimensions:
      source: request.headers["x-forwarded-for"] | "unknown"
      destination: destination.labels["app"] | destination.service.name | "unknown"
      destinationVersion: destination.labels["version"] | "unknown"
---
apiVersion: config.istio.io/v1alpha2
kind: QuotaSpec
metadata:
  name: request-count
  namespace: istio-system
spec:
  rules:
  - quotas:
    - charge: 1
      quota: requestcountquota
---
apiVersion: config.istio.io/v1alpha2
kind: QuotaSpecBinding
metadata:
  name: request-count
  namespace: istio-system
spec:
  quotaSpecs:
  - name: request-count
    namespace: istio-system
  services:
  - name: productpage
    namespace: default
    #  - service: '*'  # Uncomment this to bind *all* services to request-count
---
apiVersion: config.istio.io/v1alpha2
kind: rule
metadata:
  name: quota
  namespace: istio-system
spec:
  # quota only applies if you are not logged in.
  # match: match(request.headers["cookie"], "user=*") == false
  actions:
  - handler: quotahandler
    instances:
    - requestcountquota

Сначала я настраиваю его напрямую.

- dimensions:
Destination: product page
MaxAmount: 1
Valid Duration: 5S

Ограничение скорости работает хорошо. Когда я настраиваю:

- dimensions:
Destination: product page
MaxAmount: 500
ValidDuration: 1s

Запрос по-прежнему будет возвращать 429 в течение короткого времени , конфигурация (500 / с) должна быть неограниченной в это время. Во время теста я непосредственно посещал сервисный IP-адрес k8s, например, curl 10.233.5.240:9080/product стр.

Я надеюсь, что вы можете сказать мне, почему Большое спасибо за ваш ответ.

1 Ответ

0 голосов
/ 30 мая 2019

Я решил эту проблему, потому что компонент istio-policy имеет недостаточные ресурсы (процессор и память) и по умолчанию выделяет слишком мало, что делает политику неэффективной. Но я не знаю почему. Пожалуйста, объясните, что находится в memquota или redisquota. Разве конфигурации квот не все в конфигурациях посланников?

...