내부 서비스 중 일부 (메시 내부)에 속도 제한을 적용하려고합니다.
나는 문서에서 예제를 사용하고 (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를 얻지 못했습니다.
이것을 디버깅하는 방법을 모르고 구성이 잘못되어 아무것도하지 않는 위치를 봅니다.
도움을 주시면 감사하겠습니다.