ฉันกำลังพยายามใช้อัตรา จำกัด กับบริการภายในของเรา (ภายในเครือข่าย)
ฉันใช้ตัวอย่างจากเอกสารและสร้างการ จำกัด การกำหนดค่าอัตรา 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 ไม่ว่าฉันจะไปเกินขีด จำกัด อัตราที่กำหนด
ฉันไม่ทราบวิธีแก้ไขข้อบกพร่องนี้และดูว่าการกำหนดค่าผิดที่ทำให้ไม่ทำอะไร
ความช่วยเหลือใด ๆ ที่ชื่นชม