डिबगिंग istio दर सीमित हैंडलर


9

मैं हमारी कुछ आंतरिक सेवाओं (मेष के अंदर) पर सीमित दरों को लागू करने की कोशिश कर रहा हूं।

मैंने डॉक्स से उदाहरण का उपयोग किया और कॉन्फ़िगरेशन को सीमित करने के लिए रेडिस दर को सीमित किया, जिसमें हैंडलर लागू करने के लिए (रेडिस) हैंडलर, कोटा उदाहरण, कोटा कल्पना, कोटा कल्पना बंधन और नियम शामिल हैं।

यह रेडिस हैंडलर:

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जाल के अंदर फली से परीक्षण किया । रेडिस का उदाहरण रिक्त है (db 0 पर कोई कुंजी नहीं है, जो मुझे लगता है कि वह दर सीमित है जो उपयोग करेगी) तो मुझे पता है कि यह व्यावहारिक रूप से कुछ भी सीमित नहीं कर सकता है।

हैंडलर ठीक से कॉन्फ़िगर किया गया लगता है (मैं यह कैसे सुनिश्चित कर सकता हूं?) क्योंकि मुझे इसमें कुछ त्रुटियां थीं जो मिक्सर (नीति) में बताई गई थीं। अभी भी कुछ त्रुटियां हैं लेकिन कोई भी नहीं जिसे मैं इस समस्या या कॉन्फ़िगरेशन से जोड़ता हूं। एकमात्र पंक्ति जिसमें रेडिस हैंडलर का उल्लेख है वह है:

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दर सीमित करने में सक्षम हूं । यह istio 1.4.0 पर है, जिसे EKS पर तैनात किया गया है।

मैंने कम सीमा के साथ मेमकोटा (यह हमारे मंचन का वातावरण है) की कोशिश की और कुछ भी काम नहीं करता है। मुझे कभी भी 429 नहीं मिला चाहे मैं कितना भी कॉन्फ़िगर की गई दर सीमा से अधिक क्यों न हो।

मुझे नहीं पता कि यह कैसे डिबग करना है और यह देखना है कि कॉन्फ़िगरेशन कहाँ गलत है, क्योंकि यह कुछ भी नहीं कर रहा है।

किसी भी मदद की सराहना की है।


+1, मैं भी सादे कुबड़े साफ क्लस्टर पर 1.4.2 और मेमकोटा के साथ काम करने में कुछ भी पाने में विफल रहता हूं। मैंने बिना किसी लाभ के डिबग करने के लिए महत्वपूर्ण समय बिताया है। यहां कुछ जवाब देखना भी पसंद करेंगे। मैं एक इनाम शुरू करूँगा।
gertvdijk

मैंने पहले से ही सबसे बड़ा इनाम रखा। यह समाप्त हो गया।
रीट शरबानी

जवाबों:


2

मैंने भी दस्तावेज़ को समझने और एक नमूना काम करने के लिए घंटों बिताए।

प्रलेखन के अनुसार, उन्होंने सिफारिश की कि हम नीति जांच सक्षम करें:

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

हालांकि जब यह काम नहीं किया, तो मैंने एक "istioctl प्रोफाइल डंप" किया, नीति की खोज की, और कई सेटिंग्स की कोशिश की।

मैंने हेल्म स्थापित का प्रयोग किया और निम्नलिखित को पारित किया और फिर वर्णित व्यवहार प्राप्त करने में सक्षम था:

--set Global.disablePolicyChecks = false \ --set values.pilot.policy.enabled = true \ ===> इसने काम किया, लेकिन यह डॉक्स में नहीं है।


1
धन्यवाद! यह बहुत पुराना है और हमने istio को गिरा दिया (आंशिक रूप से इसके कारण)। मैं आपको कुछ सुराग देने के लिए इनाम दूंगा हालांकि यह काम क्यों नहीं कर रहा है: github.com/istio/istio/issues/19139
Reut Sharabani
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.