การดีบักตัวจัดการ จำกัด อัตรา istio


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เพื่อเปิดใช้งานการ จำกัด อัตรา นี่คือ istio 1.4.0, ปรับใช้บน EKS

ฉันยังลอง memquota (นี่คือสภาพแวดล้อมการจัดเตรียมของเรา) โดยมีขีด จำกัด ต่ำและดูเหมือนว่าไม่มีอะไรทำงาน ฉันไม่เคยได้รับ 429 ไม่ว่าฉันจะไปเกินขีด จำกัด อัตราที่กำหนด

ฉันไม่ทราบวิธีแก้ไขข้อบกพร่องนี้และดูว่าการกำหนดค่าผิดที่ทำให้ไม่ทำอะไร

ความช่วยเหลือใด ๆ ที่ชื่นชม


+1, ฉันยังไม่สามารถทำงานกับ 1.4.2 & memquota ในกลุ่มคลีนธรรมดา kubeadm ได้ ฉันใช้เวลาเป็นจำนวนมากในการดีบักที่ไม่มีประโยชน์ ชอบที่จะเห็นคำตอบบางอย่างที่นี่เช่นกัน ฉันจะเริ่มรางวัล
gertvdijk

ฉันได้รับรางวัลที่ยิ่งใหญ่ที่สุดแล้ว มันหมดอายุแล้ว
Reut Sharabani

คำตอบ:


2

ฉันใช้เวลาหลายชั่วโมงในการพยายามถอดรหัสเอกสารและทำงานให้เป็นตัวอย่าง

ตามเอกสารพวกเขาแนะนำให้เราเปิดใช้งานการตรวจสอบนโยบาย

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

อย่างไรก็ตามเมื่อที่ไม่ได้ทำงานฉันได้ "ถ่ายโอนข้อมูลโปรไฟล์ istioctl" ค้นหานโยบายและลองการตั้งค่าต่าง ๆ

ฉันใช้ Helm ติดตั้งและผ่านสิ่งต่อไปนี้จากนั้นก็สามารถรับพฤติกรรมที่อธิบายได้:

--set global.disablePolicyChecks = false \ --set values.pilot.policy.enabled = true \ ===> สิ่งนี้ทำให้มันทำงานได้ แต่มันไม่ได้อยู่ในเอกสาร


1
ขอบคุณ! นี่เก่าเกินไปและเราได้ลดลง istio (บางส่วนเนื่องจากสิ่งนี้) ฉันจะให้รางวัลแก่คุณแม้ว่าจะชี้ไปที่เบาะแสว่าทำไมสิ่งนี้ถึงไม่ทำงาน: github.com/istio/istio/istio/issues/19139
Reut Sharabani
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.