Service Mesh (ASM) memungkinkan Anda mengonfigurasi pembatasan laju lokal secara deklaratif melalui CustomResourceDefinition (CRD) ASMLocalRateLimiter. Topik ini menyediakan contoh konfigurasi dan menjelaskan berbagai bidang dalam ASMLocalRateLimiter.
Contoh konfigurasi
Contoh 1: Pembatasan laju gerbang
Konfigurasi berikut menerapkan pembatasan laju pada gerbang untuk mencegah layanan downstream kewalahan oleh lalu lintas masuk. Dengan mengatur seconds ke 1 dan quota ke 100, sistem mengeluarkan 100 token per detik, sehingga gerbang dapat memproses maksimal 100 permintaan per detik.
limit.quota dalam konfigurasi ini berlaku untuk satu instans gerbang. Jika gerbang memiliki n instans, ambang batas pembatasan laju untuk layanan backend dari rute test1 adalah n × quota. Jika Anda mengubah jumlah instans gerbang, Anda juga harus menyesuaikan ambang batas pembatasan laju tersebut.
Contoh 2: Pembatasan laju sisi klien
Contoh ini memerlukan instans ASM versi 1.25.6.74 atau lebih baru.
Contoh berikut membatasi aplikasi sleep menjadi satu permintaan ke layanan httpbin setiap 10 detik.
Contoh 3: Pembatasan laju sisi server
Contoh ini memerlukan instans ASM versi 1.25.6.74 atau lebih baru.
Contoh berikut membatasi akses ke aplikasi httpbin menjadi sekali setiap 10 detik.
Contoh 4: Pembatasan laju waypoint
Contoh berikut membatasi waypoint bernama default agar hanya meneruskan satu permintaan ke layanan httpbin setiap 10 detik.
Contoh ini hanya berlaku untuk mode Ambient dan memerlukan instans ASM versi 1.25.6.74 atau lebih baru.
Deskripsi bidang
apiVersion
Jika instans ASM Anda versi 1.15.3.105 atau lebih baru, gunakan
apiVersion: istio.alibabacloud.com/v1. Jika Anda memiliki konfigurasi yang sudah ada di kluster ACK, ubahapiVersion: istio.alibabacloud.com/v1beta1dalam CRD ASMLocalRateLimiter yang sesuai menjadiapiVersion: istio.alibabacloud.com/v1, lalu redeploy.Jika versi instans ASM Anda lebih lama dari 1.15.3.105, gunakan
apiVersion: istio.alibabacloud.com/v1beta1.
spec
Tabel berikut menjelaskan bidang-bidang dalam bagian spec. Untuk informasi selengkapnya tentang fitur-fitur ASMLocalRateLimiter dan contoh penggunaannya, lihat Konfigurasikan pembatasan laju lokal untuk gerbang masuk.
Bidang | Tipe | Diperlukan | Deskripsi |
workloadSelector | map<string, string> | Ya | Satu atau beberapa label yang digunakan untuk menentukan kumpulan pod tertentu tempat konfigurasi pembatasan laju berlaku. Cakupan pencarian label dibatasi pada namespace konfigurasi tempat sumber daya tersebut berada. Untuk informasi selengkapnya, lihat Workload Selector. |
isGateway | bool | Tidak | Menentukan apakah konfigurasi berlaku untuk gerbang. Nilai default adalah |
configs | Ya | Konfigurasi pembatasan laju lokal. Anda dapat mengonfigurasi beberapa konfigurasi. | |
applyToTraffic | string | Tidak | Jenis lalu lintas tempat kebijakan pembatasan laju diterapkan. Parameter opsional:
Nilai default adalah Catatan Bidang ini hanya didukung di ASM versi 1.25 dan yang lebih baru. |
LocalRateLimiterConfig
Bidang | Tipe | Diperlukan | Deskripsi |
name | string | Ya | Nama konfigurasi pembatasan laju tunggal. |
match | Ya | Kondisi pencocokan. | |
limit | Ya | Konfigurasi ambang batas pembatasan laju. | |
limit_overrides | Tidak | Konfigurasi penggantian ambang batas pembatasan laju. Anda dapat menggunakan bidang ini untuk menentukan ambang batas pembatasan laju terpisah untuk permintaan tertentu. Anda dapat mengonfigurasi beberapa konfigurasi penggantian. Catatan Hanya didukung di ASM versi 1.19.0 dan yang lebih baru. | |
target_services | Tidak | Layanan tempat kebijakan pembatasan laju diterapkan. Catatan Bidang ini hanya didukung di ASM versi 1.25 dan yang lebih baru. |
TargetServiceRef
Bidang ini hanya didukung di ASM versi 1.25 dan yang lebih baru.
Bidang | Tipe | Wajib | Deskripsi |
kind | string | Tidak | Jenis layanan tempat kebijakan pembatasan laju diterapkan. Nilai valid:
Nilai default adalah |
name | string | Ya | Nama layanan tempat kebijakan pembatasan laju diterapkan. |
namespace | string | Tidak | Namespace tempat layanan yang dikenai kebijakan pembatasan laju berada. Nilai default adalah namespace tempat Anda mendefinisikan kebijakan pembatasan laju. |
port | int32 | Tidak | Port layanan tempat kebijakan pembatasan laju diterapkan. |
section_name | string | Tidak | Properti tambahan layanan. Bidang ini hanya berlaku untuk
|
Contoh 1
Contoh berikut berlaku untuk port 8000 layanan httpbin di namespace default.
target_services:
- kind: Service
namespace: default
name: httpbin
port: 8000Contoh 2
Asumsikan ServiceEntry berikut ada di instans saat ini.
apiVersion: networking.istio.io/v1
kind: ServiceEntry
metadata:
name: se-httpbin-external
spec:
hosts:
- httpbin.test.com
location: MESH_EXTERNAL
ports:
- name: http
number: 80
protocol: HTTP
- name: https
number: 443
protocol: HTTPS
resolution: DNSKebijakan berikut berlaku untuk port 80 ServiceEntry ini.
target_services:
- kind: ServiceEntry
namespace: default
name: se-httpbin-external
port: 80Contoh 3
Asumsikan VirtualService berikut ada di instans saat ini.
apiVersion: networking.istio.io/v1
kind: VirtualService
metadata:
name: vs-httpbin
spec:
hosts:
- httpbin.test.com
http:
- name: default
route:
- destination:
host: httpbin
port:
number: 8000Kebijakan berikut berlaku untuk aturan routing bernama default dalam VirtualService tersebut.
target_services:
- kind: VirtualService
namespace: default
name: vs-httpbin
section_name: defaultRemoteAddressMatcher
Bidang | Tipe | Deskripsi | |
distinct | bool | Tidak | Menentukan apakah pembatasan laju diterapkan secara terpisah untuk IP sumber permintaan yang berbeda. Jika Catatan Bidang ini hanya didukung di ASM versi 1.25 dan yang lebih baru. |
RatelimitMatch
Bidang | Tipe | Diperlukan | Deskripsi |
vhost | Tidak | Kondisi pencocokan VirtualHost. |
LimitConfig
Bidang | Tipe | Diperlukan | Deskripsi |
status | int | Tidak | Kode respons HTTP kustom untuk permintaan yang dikendalikan alirannya. Saat permintaan dikendalikan alirannya, kode respons ini dikembalikan. Nilai default adalah 429. Nilainya harus lebih besar dari atau sama dengan 400. Catatan Bidang ini didukung di ASM versi 1.24.6.64 dan yang lebih baru. |
fill_interval | Duration | Tidak | Unit waktu untuk pengisian token, misalnya, |
quota | int | Tidak | Jumlah token. Nilainya harus berupa bilangan bulat. Contoh: 1000. |
per_downstream_connection | bool | Tidak | Cakupan bucket token pengendali laju. Nilai default adalah Nilai valid:
Catatan Hanya didukung di ASM versi 1.13.4 dan yang lebih baru. |
custom_response_body | string | Tidak | Konten badan respons kustom yang dikembalikan saat permintaan dikendalikan alirannya. Catatan Hanya didukung di ASM versi 1.13.4 dan yang lebih baru. |
response_header_to_add | map[string]string | Tidak | Konten header kustom yang ditambahkan saat permintaan dikendalikan alirannya. Catatan Hanya didukung di ASM versi 1.13.4 dan yang lebih baru. |
RateLimitOverrideConfig
Bidang | Tipe | Diperlukan | Deskripsi |
request_match | Ya | Kondisi pencocokan permintaan yang ditentukan oleh konfigurasi penggantian ambang batas pembatasan laju. Hanya permintaan yang memenuhi kondisi pencocokan yang akan menerapkan ambang batas pembatasan laju dalam konfigurasi penggantian. | |
limit | Ya | Ambang batas pembatasan laju permintaan yang ditentukan oleh konfigurasi penggantian ambang batas pembatasan laju. Catatan Saat bidang limit dideklarasikan dalam konfigurasi penggantian ambang batas pembatasan laju (RateLimitOverrideConfig), hanya bidang fill_interval dan quota yang berlaku. Bidang lainnya (per_downstream_connection, custom_response_body, dan response_header_to_add) tetap konsisten dengan deklarasi dalam bidang LocalRateLimiterConfig.limit. |
VirtualHostMatch
Bidang | Tipe | Diperlukan | Deskripsi |
name | string | Ya | Nama |
port | int | Tidak | Port permintaan yang dicocokkan. |
route | Tidak | Nama rute yang sesuai dengan antarmuka permintaan yang dicocokkan. |
RouteMatch
Bidang | Tipe | Diperlukan | Deskripsi |
name_match | string | Tidak | Nama rute yang dicocokkan, yang sesuai dengan nama rute tunggal di bawah |
header_match | Tidak | Header permintaan layanan yang dicocokkan. Anda dapat mengonfigurasi beberapa header. Penting Di ASM versi 1.19.0 dan yang lebih baru, bidang ini telah ditinggalkan. Gunakan RateLimitOverrideConfig untuk mencocokkan permintaan. |
RequestMatcher
Anda dapat menggunakan beberapa bidang dalam RequestMatcher secara bersamaan. Jika beberapa bidang digunakan, permintaan harus memenuhi semua kondisi pencocokan agar dianggap cocok.
Bidang | Tipe | Diperlukan | Deskripsi |
header_match | Tidak | Header permintaan yang dicocokkan. Anda dapat mengonfigurasi beberapa header. | |
query_match | Tidak | Parameter kueri permintaan yang dicocokkan. Anda dapat mengonfigurasi beberapa parameter kueri. |
HeaderMatcher
Bidang | Tipe | Diperlukan | Deskripsi | |
name | string | Tidak | Nama header. | |
Pilih salah satu dari berikut ini | regex_match | string | Tidak | Pencocokan ekspresi reguler. |
exact_match | string | Tidak | Pencocokan eksak. | |
prefix_match | string | Tidak | Pencocokan awalan. Mencocokkan berdasarkan awalan string. | |
suffix_match | string | Tidak | Pencocokan akhiran. Mencocokkan berdasarkan akhiran string. | |
present_match | bool | Tidak |
| |
invert_match | bool | Tidak | Nilai default adalah false.
| |
distinct | bool | Tidak | Menentukan apakah bucket pembatasan laju terpisah dialokasikan untuk nilai header permintaan yang berbeda. Jika distinct diatur ke true, Anda tidak dapat menggunakan jenis pencocokan lainnya. Catatan Bidang ini hanya didukung di ASM versi 1.25 dan yang lebih baru. | |
QueryParameterMatcher
Bidang | Tipe | Diperlukan | Deskripsi | |
name | string | Ya | Nama parameter query. | |
Pilih salah satu dari berikut ini | exact_match | string | Tidak | Mencocokkan secara eksak isi parameter kueri. |
prefix_match | string | Tidak | Mencocokkan awalan isi parameter kueri. | |
suffix_match | string | Tidak | Mencocokkan akhiran isi parameter kueri. | |
regex_match | string | Tidak | Mencocokkan isi parameter kueri dengan ekspresi reguler. | |
contains_match | string | Tidak | Mencocokkan berdasarkan keberadaan substring tertentu dalam isi parameter kueri. | |
present_match | bool | Tidak |
| |
ignore_case | bool | Tidak | Menentukan apakah pencocokan parameter kueri mengabaikan perbedaan huruf besar/kecil. | |