istio rate limiting handler 디버깅


9

내부 서비스 중 일부 (메시 내부)에 속도 제한을 적용하려고합니다.

나는 문서에서 예제를 사용하고 (redis) 핸들러, 할당량 인스턴스, 할당량 사양, 할당량 사양 바인딩 및 처리기를 적용하는 규칙을 포함하는 redis 속도 제한 구성을 생성했습니다.

이 redis 핸들러 :

apiVersion: config.istio.io/v1alpha2
kind: handler
metadata:
  name: redishandler
  namespace: istio-system
spec:
  compiledAdapter: redisquota
  params:
    redisServerUrl: <REDIS>:6379
    connectionPoolSize: 10
    quotas:
    - name: requestcountquota.instance.istio-system
      maxAmount: 10
      validDuration: 100s
      rateLimitAlgorithm: FIXED_WINDOW
      overrides:
      - dimensions:
          destination: s1
        maxAmount: 1
      - dimensions:
          destination: s3
        maxAmount: 1
      - dimensions:
          destination: s2
        maxAmount: 1

할당량 인스턴스 (현재 목적지별로 제한하는 데 관심이 있습니다) :

apiVersion: config.istio.io/v1alpha2
kind: instance
metadata:
  name: requestcountquota
  namespace: istio-system
spec:
  compiledTemplate: quota
  params:
    dimensions:
      destination: destination.labels["app"] | destination.service.host | "unknown"

올바르게 이해하면 요청 당 1 씩 청구되는 할당량 사양 :

apiVersion: config.istio.io/v1alpha2
kind: QuotaSpec
metadata:
  name: request-count
  namespace: istio-system
spec:
  rules:
  - quotas:
    - charge: 1
      quota: requestcountquota

모든 참여 서비스가 프리 페치하는 할당량 바인딩 스펙입니다. 나는 또한 service: "*"아무것도하지 않은 것을 시도했다 .

apiVersion: config.istio.io/v1alpha2
kind: QuotaSpecBinding
metadata:
  name: request-count
  namespace: istio-system
spec:
  quotaSpecs:
  - name: request-count
    namespace: istio-system
  services:
  - name: s2
    namespace: default
  - name: s3
    namespace: default
  - name: s1
    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:
  actions:
  - handler: redishandler
    instances:
    - requestcountquota

VirtualService 정의는 모든 참가자에게 매우 유사합니다.

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: s1
spec:
  hosts:
  - s1

  http:
  - route:
    - destination:
        host: s1

문제는 실제로 발생하지 않으며 속도 제한이 발생하지 않습니다. curl메쉬 내부의 포드에서 테스트했습니다 . redis 인스턴스가 비어 있습니다 (db 0에는 키가 없으며 속도 제한이 사용하는 것으로 가정합니다). 실제로 속도를 제한 할 수 없다는 것을 알고 있습니다.

믹서 (정책) 에보 고 된 오류가 있기 때문에 처리기가 올바르게 구성 된 것 같습니다 (어떻게 확인할 수 있습니까?). 여전히 몇 가지 오류가 있지만이 문제 또는 구성과 관련이 없습니다. redis 핸들러가 언급 된 유일한 줄은 다음과 같습니다.

2019-12-17T13:44:22.958041Z info    adapters    adapter closed all scheduled daemons and workers    {"adapter": "redishandler.istio-system"}   

그러나 문제가 있는지 확실하지 않습니다. 나는 그렇지 않다고 가정합니다.

배포 후 다시로드 할 나머지 줄은 다음과 같습니다.

2019-12-17T13:44:22.601644Z info    Built new config.Snapshot: id='43'
2019-12-17T13:44:22.601866Z info    adapters    getting kubeconfig from: "" {"adapter": "kubernetesenv.istio-system"}
2019-12-17T13:44:22.601881Z warn    Neither --kubeconfig nor --master was specified.  Using the inClusterConfig.  This might not work.
2019-12-17T13:44:22.602718Z info    adapters    Waiting for kubernetes cache sync...    {"adapter": "kubernetesenv.istio-system"}
2019-12-17T13:44:22.903844Z info    adapters    Cache sync successful.  {"adapter": "kubernetesenv.istio-system"}
2019-12-17T13:44:22.903878Z info    adapters    getting kubeconfig from: "" {"adapter": "kubernetesenv.istio-system"}
2019-12-17T13:44:22.903882Z warn    Neither --kubeconfig nor --master was specified.  Using the inClusterConfig.  This might not work.
2019-12-17T13:44:22.904808Z info    Setting up event handlers
2019-12-17T13:44:22.904939Z info    Starting Secrets controller
2019-12-17T13:44:22.904991Z info    Waiting for informer caches to sync
2019-12-17T13:44:22.957893Z info    Cleaning up handler table, with config ID:42
2019-12-17T13:44:22.957924Z info    adapters    deleted remote controller   {"adapter": "kubernetesenv.istio-system"}
2019-12-17T13:44:22.957999Z info    adapters    adapter closed all scheduled daemons and workers    {"adapter": "prometheus.istio-system"}
2019-12-17T13:44:22.958041Z info    adapters    adapter closed all scheduled daemons and workers    {"adapter": "redishandler.istio-system"}   
2019-12-17T13:44:22.958065Z info    adapters    shutting down daemon... {"adapter": "kubernetesenv.istio-system"}
2019-12-17T13:44:22.958050Z info    adapters    shutting down daemon... {"adapter": "kubernetesenv.istio-system"}
2019-12-17T13:44:22.958096Z info    adapters    shutting down daemon... {"adapter": "kubernetesenv.istio-system"}
2019-12-17T13:44:22.958182Z info    adapters    shutting down daemon... {"adapter": "kubernetesenv.istio-system"}
2019-12-17T13:44:23.958109Z info    adapters    adapter closed all scheduled daemons and workers    {"adapter": "kubernetesenv.istio-system"}
2019-12-17T13:55:21.042131Z info    transport: loopyWriter.run returning. connection error: desc = "transport is closing"
2019-12-17T14:14:00.265722Z info    transport: loopyWriter.run returning. connection error: desc = "transport is closing"

속도 제한을 활성화하기 위해 demo프로필을 사용하고 disablePolicyChecks: false있습니다. 이것은 EKS에 배포 된 istio 1.4.0에 있습니다.

나는 또한 memquota (이것은 우리의 준비 환경입니다)를 낮은 한계로 시도했지만 아무것도 작동하지 않는 것 같습니다. 구성된 속도 제한을 초과하여 429를 얻지 못했습니다.

이것을 디버깅하는 방법을 모르고 구성이 잘못되어 아무것도하지 않는 위치를 봅니다.

도움을 주시면 감사하겠습니다.


+1, 나는 일반 kubeadm 클린 클러스터에서 1.4.2 및 memquota와 함께 작동하는 것을 얻지 못했습니다. 나는 쓸데없이 디버깅하는 데 많은 시간을 보냈습니다. 여기에 몇 가지 답변을보고 싶습니다. 현상금을 시작하겠습니다.
gertvdijk

나는 이미 가장 큰 현상금을 넣었습니다. 만료되었습니다.
42 분 Reut Sharabani

답변:


2

나도 문서를 해독하고 샘플 작업을 시도하는 데 몇 시간을 보냈습니다.

문서에 따르면 정책 검사를 활성화 할 것을 권장했습니다.

https://istio.io/docs/tasks/policy-enforcement/rate-limiting/

그러나 그래도 작동하지 않으면 "istioctl 프로필 덤프"를 수행하고 정책을 검색 한 후 몇 가지 설정을 시도했습니다.

Helm install을 사용하여 다음을 통과 한 후 설명 된 동작을 얻을 수있었습니다.

--set global.disablePolicyChecks = false \ --set values.pilot.policy.enabled = true \ ===> 이것이 작동하게 만들었지 만 문서에는 없습니다.


1
감사합니다! 이것은 너무 오래되었고 우리는 istio를 떨어 뜨 렸습니다 (부분적으로 이것 때문에). : 그래도 왜 작동하지 않습니다에 일부 단서를 가리키는 당신에게 현상금을 줄 것이다 github.com/istio/istio/issues/19139
롯 (Reut) Sharabani
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.