Service Mesh (ASM) memungkinkan Anda mendefinisikan konfigurasi ASMGlobalRateLimiter secara deklaratif melalui Custom Resource Definition (CRD) untuk menerapkan throttling global. Topik ini menjelaskan bidang-bidang dalam CRD ASMGlobalRateLimiter.
Contoh konfigurasi
Contoh 1: Throttling sisi server
Contoh ini memerlukan instans ASM versi 1.25.6.74 atau yang lebih baru.
Contoh berikut membatasi akses ke aplikasi httpbin menjadi satu kali per menit.
Contoh 2: Throttling sisi klien
Contoh ini memerlukan instans ASM versi 1.25.6.74 atau yang lebih baru.
Contoh berikut membatasi aplikasi sleep agar hanya dapat mengakses layanan httpbin satu kali per menit.
Contoh 3: Throttling Waypoint
Contoh ini hanya berlaku untuk mode Ambient dan memerlukan instans ASM versi 1.25.6.74 atau lebih baru.
Contoh ini mengonfigurasi aturan throttling untuk sebuah aplikasi pada waypoint default. Jika suatu permintaan berisi header permintaan x-user, sebuah bucket dialokasikan berdasarkan nilai header tersebut untuk membatasi akses menjadi satu kali per menit. Jika permintaan tidak berisi header tersebut, akses dibatasi hingga 20 kali per menit.
spec
Bidang | Tipe | Wajib | Deskripsi |
workloadSelector | map<string, string> | Ya | Satu atau lebih label yang menentukan sekumpulan beban kerja di mana aturan throttling berlaku. Ruang lingkup pencarian berbasis label dibatasi pada namespace tempat sumber daya tersebut berada. Untuk informasi lebih lanjut, lihat Pemilih Beban Kerja. |
isGateway | bool | Tidak | Menentukan apakah aturan throttling berlaku pada gateway. Nilai default: false. |
rateLimitService | Ya | Konfigurasi layanan throttling global. | |
configs | Ya | Aturan throttling global. Anda dapat mengonfigurasi beberapa aturan. | |
applyToTraffic | string | Tidak | Jenis traffic tempat kebijakan pembatasan laju diterapkan. Parameter opsional:
Nilai default adalah Catatan Bidang ini hanya didukung di ASM versi 1.25 dan yang lebih baru. |
RateLimitServiceConfig
Bidang | Tipe | Wajib | Deskripsi |
host | string | Ya | Nama domain kluster tempat layanan throttling global berada. |
port | int | Ya | Port layanan gRPC dari layanan throttling global. |
timeout | Duration | Tidak | Periode timeout untuk proxy mesh saat menghubungi layanan throttling global. Contoh: |
GlobalRateLimiterConfig
Bidang | Tipe | Wajib | Deskripsi |
name | string | Ya | Nama aturan throttling. |
match | Ya | Kriteria cocok. | |
limit | Ya | Konfigurasi ambang batas throttling. | |
limit_overrides | Tidak | Menentukan apakah akan menimpa ambang batas throttling yang telah dikonfigurasi. Anda dapat menggunakan bidang ini untuk menentukan ambang batas throttling secara individual untuk permintaan tertentu. Anda dapat mengonfigurasi beberapa penimpaan ambang batas throttling. Catatan Bidang ini didukung hanya oleh instance ASM versi V1.19.0 atau lebih baru. | |
target_services | Tidak | Layanan tempat kebijakan throttling 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 yang 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 tersebut. |
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 dalam 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 tersebut.
target_services:
- kind: ServiceEntry
namespace: default
name: se-httpbin-external
port: 80Contoh 3
Asumsikan VirtualService berikut ada dalam 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 entri rute bernama default dalam VirtualService tersebut.
target_services:
- kind: VirtualService
namespace: default
name: vs-httpbin
section_name: defaultRatelimitMatch
Bidang | Tipe | Wajib | Deskripsi |
vhost | Ya | Kriteria cocok untuk host virtual. |
GlobalServiceLimitConfig
Bidang | Tipe | Wajib | Deskripsi |
unit | string | Ya | Satuan waktu throttling. Nilai valid:
|
quota | int | Ya | Jumlah total permintaan yang diizinkan per satuan waktu. |
GlobalRateLimitOverrideConfig
Bidang | Tipe | Wajib | Deskripsi |
request_match | Ya | Kriteria yang harus dipenuhi permintaan saat konfigurasi penimpaan ambang batas throttling diterapkan. Ambang batas throttling yang ditentukan dalam konfigurasi penimpaan hanya diterapkan pada permintaan yang sesuai dengan kriteria. | |
limit | Ya | Ambang batas throttling yang ditentukan dalam konfigurasi penimpaan ambang batas throttling. |
VirtualHostMatch
Bidang | Tipe | Wajib | Deskripsi |
name | string | Ya | Nama host virtual yang akan dicocokkan. |
port | int | Tidak | Port permintaan yang akan dicocokkan. |
route | Tidak | Nama rute yang sesuai dengan port permintaan yang akan dicocokkan. |
RouteMatch
Bidang | Tipe | Wajib | Deskripsi |
name_match | string | Tidak | Nama rute yang akan dicocokkan. Bidang ini menentukan satu rute dalam layanan virtual. |
header_match | Tidak | Header permintaan layanan yang akan dicocokkan. Anda dapat mengonfigurasi beberapa header. Catatan Pada instance ASM versi V1.19.0 dan lebih baru, bidang ini sudah tidak digunakan lagi. Kami merekomendasikan Anda menggunakan GlobalRateLimitOverrideConfig untuk mencocokkan permintaan. |
RequestMatcher
Anda dapat menggunakan beberapa bidang dalam bagian RequestMatcher secara bersamaan. Jika demikian, suatu permintaan hanya cocok jika memenuhi semua kriteria yang ditentukan.
Bidang | Tipe | Wajib | Deskripsi |
header_match | Tidak | Header untuk mencocokkan permintaan. Anda dapat mengonfigurasi beberapa header. | |
remote_address | Tidak | Alamat IP sumber untuk mencocokkan permintaan. | |
query_match | Tidak | Parameter kueri untuk mencocokkan permintaan. Anda dapat mengonfigurasi beberapa parameter kueri. |
RemoteAddressMatcher
Bidang | Tipe | Wajib | Deskripsi |
address | string | Ya | Alamat IP sumber untuk mencocokkan permintaan. |
v4_prefix_mask_len | uint32 | Tidak | Jika Anda ingin mencocokkan rentang alamat IPv4, masukkan panjang subnet mask dari alamat IPv4 di bidang ini, dan masukkan alamat IPv4 di bidang alamat. Rentang alamat yang dihitung setelah subnet mask digunakan akan dicocokkan. |
v6_prefix_mask_len | uint32 | Tidak | Jika Anda ingin mencocokkan rentang alamat IPv6, masukkan panjang subnet mask dari alamat IPv6 di bidang ini, dan masukkan alamat IPv6 di bidang alamat. Rentang alamat yang dihitung setelah subnet mask digunakan akan dicocokkan. |
HeaderMatcher
Bidang | Tipe | Wajib | Deskripsi | |
name | string | Tidak | Nama header. | |
Pilih salah satu dari berikut | regex_match | string | Tidak | Ekspresi reguler yang digunakan untuk melakukan pencocokan header. |
exact_match | string | Tidak | Nilai yang digunakan untuk melakukan pencocokan eksak. | |
prefix_match | string | Tidak | Awalan yang digunakan untuk melakukan pencocokan awalan. | |
suffix_match | string | Tidak | Akhiran yang digunakan untuk melakukan pencocokan akhiran. | |
present_match | bool | Tidak |
| |
invert_match | bool | Tidak | Nilai default adalah false.
| |
QueryParameterMatcher
Bidang | Tipe | Wajib | Deskripsi | |
name | string | Ya | Nama parameter kueri. | |
Pilih salah satu dari berikut | exact_match | string | Tidak | Nilai yang digunakan untuk melakukan pencocokan eksak pada parameter kueri. |
prefix_match | string | Tidak | Awalan yang digunakan untuk melakukan pencocokan awalan pada parameter kueri. | |
suffix_match | string | Tidak | Akhiran yang digunakan untuk melakukan pencocokan akhiran pada parameter kueri. | |
regex_match | string | Tidak | Ekspresi reguler yang digunakan untuk melakukan pencocokan ekspresi reguler pada parameter kueri. | |
contains_match | string | Tidak | Konten yang digunakan untuk melakukan pencocokan berdasarkan keberadaan substring pada parameter kueri. Nilai parameter kueri harus mengandung substring yang ditentukan. | |
present_match | bool | Tidak |
| |
ignore_case | bool | Tidak | Menentukan apakah akan mengabaikan sensitivitas huruf besar/kecil saat Anda melakukan pencocokan parameter kueri. | |
Referensi
Untuk informasi selengkapnya, lihat Menggunakan ASMGlobalRateLimiter untuk mengonfigurasi throttling global pada gerbang masuk dan traffic masuk ke layanan.