ডিবাগিং আইটিওও হার সীমাবদ্ধ হ্যান্ডলার


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

ভার্চুয়াল পরিষেবা সংজ্ঞা সমস্ত অংশগ্রহণকারীদের জন্য বেশ অনুরূপ:

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

  http:
  - route:
    - destination:
        host: s1

সমস্যাটি আসলে কিছুই হয় না এবং হারের সীমাবদ্ধতা ঘটে না। আমি curlজাল ভিতরে শুঁটি থেকে পরীক্ষা । রেডিস দৃষ্টান্তটি খালি (ডিবি 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। এটি ইসিএসে মোতায়েন করা আইসিটিও 1.4.0 এ।

আমি স্বল্প সীমা সহ মেমকোটাও (এটি আমাদের মঞ্চ পরিবেশ) চেষ্টা করেছি এবং কিছুই কাজ করছে বলে মনে হচ্ছে না। আমি কখনই কনফিগার করা হারের সীমা ছাড়িয়ে গিয়েছি না কেন 429 পাই না।

আমি কীভাবে এটি ডিবাগ করব জানি না এবং কনফিগারেশনটি কোথায় ভুল হয়েছে তা কিছু না করার কারণে তা জানি না।

কোন সাহায্য প্রশংসা করা হয়।


+1, আমি প্লেইন কুবেডম ক্লিন ক্লাস্টারে 1.4.2 এবং মেমকোটা দিয়ে কাজ করতে ব্যর্থ হয়েছি। আমি কোনও কাজে লাগাতে ডিবাগ করার জন্য একটি উল্লেখযোগ্য পরিমাণ সময় ব্যয় করেছি। এখানেও কিছু উত্তর দেখতে পছন্দ করবে। আমি একটি অনুগ্রহ শুরু করব।
gertvdijk

আমি ইতিমধ্যে বৃহত্তম অনুগ্রহ রেখেছি। এর মেয়াদ শেষ হয়ে গেল।
শারবাণী 3

উত্তর:


2

আমিও ডকুমেন্টেশনগুলি বোঝার চেষ্টা করে একটি নমুনা কাজ করার জন্য ঘন্টা সময় ব্যয় করেছি।

ডকুমেন্টেশন অনুসারে, তারা সুপারিশ করেছিল যে আমরা নীতি পরীক্ষাগুলি সক্ষম করি:

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

তবে যখন এটি কাজ করে না, আমি একটি "ইসতিওক্টল প্রোফাইল ডাম্প" করেছিলাম, নীতি অনুসন্ধান করেছি এবং বেশ কয়েকটি সেটিংস চেষ্টা করেছি।

আমি হেলম ইনস্টল ব্যবহার করেছি এবং নিম্নলিখিতগুলি পাস করেছি এবং তারপরে বর্ণিত আচরণ পেতে সক্ষম হয়েছি:

--set global.disablePolicyChecks = false \ --set value.pilot.policy.enabled = true \ ===> এটি এটিকে কাজ করেছে, তবে এটি ডক্সে নেই।


1
ধন্যবাদ! এটি খুব পুরানো এবং আমরা আইটিওটি বাদ দিয়েছি (আংশিক কারণে এটি)। : আমি আপনাকে যদিও কেন এই কাজ করছে না হিসাবে কিছু খেই নির্দেশিত প্রতি অনুগ্রহশীল দেব github.com/istio/istio/issues/19139
Reut Sharabani
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.