मैं हमारी कुछ आंतरिक सेवाओं (मेष के अंदर) पर सीमित दरों को लागू करने की कोशिश कर रहा हूं।
मैंने डॉक्स से उदाहरण का उपयोग किया और कॉन्फ़िगरेशन को सीमित करने के लिए रेडिस दर को सीमित किया, जिसमें हैंडलर लागू करने के लिए (रेडिस) हैंडलर, कोटा उदाहरण, कोटा कल्पना, कोटा कल्पना बंधन और नियम शामिल हैं।
यह रेडिस हैंडलर:
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 नहीं मिला चाहे मैं कितना भी कॉन्फ़िगर की गई दर सीमा से अधिक क्यों न हो।
मुझे नहीं पता कि यह कैसे डिबग करना है और यह देखना है कि कॉन्फ़िगरेशन कहाँ गलत है, क्योंकि यह कुछ भी नहीं कर रहा है।
किसी भी मदद की सराहना की है।