Может ли Istio ограничивать скорость виртуального сервиса вне сети?

Я пытаюсь реализовать ограничение скорости для моих существующих приложений, которые не входят в сетку.

В настоящее время все, что настроено, - это входной шлюз, шлюз и виртуальная служба.

apiVersion: "config.istio.io/v1alpha2"
kind: memquota
metadata:
  name: handler
  namespace: istio-system
spec:
  quotas:
  - name: requestcount.quota.istio-system
    maxAmount: 1
    validDuration: 1s
---
apiVersion: "config.istio.io/v1alpha2"
kind: quota
metadata:
  name: requestcount
  namespace: istio-system
spec:
  dimensions:
    source: request.headers["x-forwarded-for"] | "unknown"
    destination: destination.labels["app"] | destination.service | "unknown"
---
apiVersion: config.istio.io/v1alpha2
kind: rule
metadata:
  name: quota
spec:
  actions:
  - handler: handler.memquota
    instances:
    - requestcount.quota
---
apiVersion: config.istio.io/v1alpha2
kind: QuotaSpec
metadata:
  name: request-count
  namespace: istio-system
spec:
  rules:
  - quotas:
    - charge: 1
      quota: requestcount
---
apiVersion: config.istio.io/v1alpha2
kind: QuotaSpecBinding
metadata:
  name: request-count
  namespace: istio-system
spec:
  quotaSpecs:
  - name: request-count
    namespace: istio-system
  services:
  - name: web-stage
    namespace: default

---
### Virtual Service
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: web-stage
  namespace: default
spec:
  hosts:
  - "web-stage.host.com"
  gateways:
  - web-gateway
  http:
  - match:
    route:
    - destination:
        port:
          number: 80
        host: web-stage

С квотой, установленной на 1, я могу легко заблокировать службу, но я могу протолкнуть любое количество запросов в секунду.

Я не уверен, с чего начать отладку.


person user1445360    schedule 01.02.2019    source источник


Ответы (1)


Это может быть проблемой с определением rule, насколько я знаю, оно должно быть объявлено в том же пространстве имен, что и ресурс quota, поэтому quota не отправляется адаптеру memquota:

apiVersion: config.istio.io/v1alpha2
kind: rule
metadata:
  name: quota
  namespace: istio-system
spec:
  actions:
  - handler: handler.memquota
    instances:
    - requestcount.quota

В целях отладки вы можете запрашивать журналы из istio-policy модулей, указав контейнер Mixer:

kubectl logs <istio-policy-Pod-name> -n istio-system -c mixer

Я рекомендую вам посетить это руководство по внедрению ограничений скорости в Istio сетка.

person Nick_Kh    schedule 01.02.2019