ฉันกำลังพยายามใช้ขีดจำกัดอัตราสากลสำหรับการเชื่อมต่อ tcp ผ่านเกตเวย์ istio ingressฉันได้ปฏิบัติตามเอกสารอย่างเป็นทางการสำหรับการใช้บริการตัวจำกัดอัตรา http ทั่วโลกและจัดการเพื่อให้ใช้งานได้ https://istio.io/latest/docs/tasks/policy-enforcement/rate-limit/แต่ไม่รองรับการเชื่อมต่อ TCP
นี่คือการกำหนดค่าขีด จำกัด อัตรา http
รุ่น api: networking.istio.io/v1alpha3
ประเภท: EnvoyFilter
ข้อมูลเมตา:
ชื่อ: filter-ratelimit
#namespace: istio-ingress
ข้อมูลจำเพาะ:
ตัวเลือกภาระงาน:
# เลือกตามป้ายกำกับในเนมสเปซเดียวกัน
ป้ายกำกับ:
istio: ทางเข้า
configPatch:
# การกำหนดค่าทูตที่คุณต้องการแก้ไข
- ใช้กับ: HTTP_FILTER
จับคู่:
บริบท: เกตเวย์
ผู้ฟัง:
ห่วงโซ่ตัวกรอง:
กรอง:
ชื่อ: "envoy.filters.network.http_connection_manager"
ตัวกรองย่อย:
ชื่อ: "ทูต.ตัวกรอง.http.เราเตอร์"
ปะ:
การดำเนินการ: INSERT_BEFORE
# เพิ่มตัวกรองขีด จำกัด อัตราทูตในห่วงโซ่ตัวกรอง HTTP
ค่า:
ชื่อ: envoy.filters.http.ratelimit
พิมพ์_config:
"@type": type.googleapis.com/envoy.extensions.filters.http.ratelimit.v3.RateLimit
# โดเมนเป็นอะไรก็ได้! จับคู่กับการกำหนดค่าบริการ ratelimter
โดเมน: ctfd-ratelimit
failure_mode_deny: จริง
หมดเวลา: 10 วินาที
อัตรา_จำกัด_บริการ:
grpc_service:
ทูต_grpc:
ชื่อคลัสเตอร์: rate_limit_cluster
หมดเวลา: 10 วินาที
transport_api_version: V3
- ใช้กับ: CLUSTER
จับคู่:
บริบท: เกตเวย์
กลุ่ม:
บริการ: ratelimit.istio-ingress.svc.cluster.local
ปะ:
การดำเนินการ: เพิ่ม
# เพิ่มคลัสเตอร์บริการจำกัดอัตราสำหรับบริการจำกัดอัตราที่กำหนดไว้ในขั้นตอนที่ 1
ค่า:
ชื่อ: rate_limit_cluster
ประเภท: STRICT_DNS
connect_timeout: 10 วินาที
lb_policy: ROUND_ROBIN
http2_protocol_options: {}
load_assignment:
ชื่อคลัสเตอร์: rate_limit_cluster
จุดสิ้นสุด:
- lb_endpoints:
- จุดสิ้นสุด:
ที่อยู่:
ที่อยู่ socket_:
ที่อยู่: ratelimit.istio-ingress.svc.cluster.local
port_value: 8081
รุ่น api: networking.istio.io/v1alpha3
ประเภท: EnvoyFilter
ข้อมูลเมตา:
ชื่อ: filter-ratelimit-svc
#namespace: istio-ingress
ข้อมูลจำเพาะ:
ตัวเลือกภาระงาน:
ป้ายกำกับ:
istio: ทางเข้า
configPatch:
- ใช้กับ: VIRTUAL_HOST
จับคู่:
บริบท: เกตเวย์
เส้นทางการกำหนดค่า:
vhost:
ชื่อ: ""
เส้นทาง:
การกระทำ: อะไรก็ได้
ปะ:
การดำเนินการ: ผสาน
# ใช้กฎการจำกัดอัตรา
ค่า:
อัตรา_จำกัด:
- การกระทำ: # การกระทำใด ๆ ในที่นี่
- request_headers:
header_name: ":เส้นทาง"
descriptor_key: "เส้นทาง"
api เวอร์ชัน: v1
ประเภท: ConfigMap
ข้อมูลเมตา:
ชื่อ: ratelimit-config
ข้อมูล:
config.yaml: |
โดเมน: tcp-ratelimit
คำอธิบาย:
- คีย์: เส้นทาง
อัตรา_จำกัด:
หน่วย: นาที
request_per_unit: 1
ฉันได้เริ่มเปลี่ยนการอ้างอิงตัวกรองทูตให้เป็นไปตามเครือข่ายมากขึ้น แต่ฉันไม่แน่ใจว่าฉันขาดอะไรอีกหรือว่านี่เป็นวิธีที่ถูกต้องหรือไม่ นี่คือสิ่งที่ฉันเปลี่ยนจากการกำหนดค่าก่อนหน้าจนถึงตอนนี้
รุ่น api: networking.istio.io/v1alpha3
ประเภท: EnvoyFilter
ข้อมูลเมตา:
ชื่อ: filter-ratelimit
#namespace: istio-ingress
ข้อมูลจำเพาะ:
ตัวเลือกภาระงาน:
# เลือกตามป้ายกำกับในเนมสเปซเดียวกัน
ป้ายกำกับ:
istio: ทางเข้า
configPatch:
# การกำหนดค่าทูตที่คุณต้องการแก้ไข
- ใช้กับ: NETWORK_FILTER
จับคู่:
บริบท: เกตเวย์
ผู้ฟัง:
ห่วงโซ่ตัวกรอง:
กรอง:
ชื่อ: "envoy.filters.network.ratelimit"
ปะ:
การดำเนินการ: INSERT_BEFORE
# เพิ่มตัวกรองขีด จำกัด อัตราทูตในห่วงโซ่ตัวกรอง HTTP
ค่า:
ชื่อ: envoy.filters.network.ratelimit
พิมพ์_config:
"@type": type.googleapis.com/envoy.extensions.filters.network.ratelimit.v3.RateLimit
# โดเมนเป็นอะไรก็ได้! จับคู่กับการกำหนดค่าบริการ ratelimter
โดเมน: tcp-ratelimit
failure_mode_deny: จริง
หมดเวลา: 10 วินาที
อัตรา_จำกัด_บริการ:
grpc_service:
ทูต_grpc:
ชื่อคลัสเตอร์: rate_limit_cluster
หมดเวลา: 10 วินาที
transport_api_version: V3
- ใช้กับ: CLUSTER
จับคู่:
บริบท: เกตเวย์
กลุ่ม:
บริการ: ratelimit.istio-ingress.svc.cluster.local
ปะ:
การดำเนินการ: เพิ่ม
# เพิ่มคลัสเตอร์บริการจำกัดอัตราสำหรับบริการจำกัดอัตราที่กำหนดไว้ในขั้นตอนที่ 1
ค่า:
ชื่อ: rate_limit_cluster
ประเภท: STRICT_DNS
connect_timeout: 10 วินาที
lb_policy: ROUND_ROBIN
http2_protocol_options: {}
load_assignment:
ชื่อคลัสเตอร์: rate_limit_cluster
จุดสิ้นสุด:
- lb_endpoints:
- จุดสิ้นสุด:
ที่อยู่:
ที่อยู่ socket_:
ที่อยู่: ratelimit.istio-ingress.svc.cluster.local
port_value: 8081
สิ่งที่ฉันพยายามทำเป็นไปได้ไหม