Selama acara bertrafik tinggi seperti penjualan kilat, lonjakan lalu lintas mendadak dapat membebani sistem Anda, menyebabkan antrean permintaan dan kegagalan layanan. ASM menyediakan fitur pembatasan laju lokal untuk mengontrol trafik di gerbang masuk dan melindungi layanan backend Anda. Topik ini menjelaskan cara mengonfigurasi fitur tersebut.
Prasyarat
-
Anda memiliki instans ASM yang memenuhi persyaratan berikut:
-
Edisi Perusahaan atau Edisi Ultimate ASM: versi 1.11.5.30 atau lebih baru. Untuk informasi selengkapnya tentang cara meningkatkan instans ASM, lihat Upgrade an ASM instance.
-
Edisi Standar ASM: versi 1.9 atau lebih baru. Edisi ini hanya mendukung pembatasan laju lokal melalui metode Istio native. Untuk berbagai versi Istio, rujuk dokumentasi versi yang sesuai. Untuk versi Istio terbaru, lihat Enabling Rate Limits using Envoy.
-
Gerbang masuk telah dideploy. Untuk informasi selengkapnya, lihat Create an ingress gateway.
-
Anda telah membuat layanan bookinfo dan nginx. Dalam topik ini, layanan bookinfo dideploy di namespace default, dan layanan nginx dideploy di namespace foo. Untuk informasi selengkapnya tentang cara membuat layanan bookinfo, lihat Deploy an application in a cluster associated with an ASM instance.
-
Anda telah membuat gateway dan layanan virtual. Untuk informasi selengkapnya, lihat Manage gateways dan Manage virtual services.
-
Anda telah menginstal tool pengujian beban. Untuk informasi selengkapnya, lihat hey.
Penerapan
Fitur pembatasan laju lokal di ASM berlaku untuk gateway ASM dan layanan aplikasi dengan sidecar yang disuntikkan.
Kasus penggunaan
Topik ini menggunakan layanan bookinfo dan nginx untuk menunjukkan cara menerapkan pembatasan laju pada gateway dan layanan. Layanan nginx dideploy di namespace foo untuk memverifikasi cakupan pembatasan laju.
Skenario 1: Pembatasan laju pada rute layanan virtual
Konfigurasikan aturan pembatasan laju untuk rute productpage-route-name1 pada kombinasi domain dan port bf2.example.com:80. Rute productpage-route-name1 merupakan bagian dari layanan virtual bookinfo yang dibuat dalam bagian Prasyarat. Rute ini mencocokkan permintaan ke path seperti /productpage, /static, /login, dan /logout, lalu meneruskannya ke layanan productpage. Setelah aturan pembatasan laju dikonfigurasi, laju trafik ke path-path tersebut akan dibatasi.
-
Buat aturan pembatasan laju lokal.
-
Masuk ke Konsol ASM. Di panel navigasi kiri, pilih .
-
Pada halaman Mesh Management, klik nama instans ASM. Di panel navigasi kiri, pilih . Pada halaman yang muncul, klik Create.
-
Pada halaman Create, konfigurasikan parameter seperti dijelaskan di bawah ini, lalu klik OK.
Untuk informasi selengkapnya tentang parameter, lihat ASMLocalRateLimiter CRD reference.
Section
Parameter
Description
Basic Information About Throttling
Namespaces
Namespace untuk aturan pembatasan laju lokal. Ini harus sama dengan namespace workload yang dibatasi lajunya. Dalam contoh ini, Anda harus memilih istio-system karena semua gateway ASM dideploy di namespace istio-system.
Name
Nama kustom untuk konfigurasi pembatasan laju lokal. Contoh ini menggunakan ingressgateway.
Type of Effective Workload
Jenis workload tempat pembatasan laju diterapkan. Nilai yang didukung adalah Applicable Service dan Applicable Gateway. Contoh ini menggunakan Applicable Gateway.
Relevant Workload
Jika Anda memilih Applicable Gateway, Anda juga harus memilih Select Istio Gateway. Aturan berlaku untuk workload yang terkait dengan gateway yang dipilih. Contoh ini menggunakan bookinfo-gateway.
List of Throttling Rules
Gateway Domain Name
Pilih domain yang dideklarasikan di gateway. Aturan pembatasan laju berlaku untuk kombinasi port dan domain yang ditentukan. Contoh ini menggunakan bf2.example.com.
Gateway Port
Pilih port yang dideklarasikan di gateway. Aturan pembatasan laju berlaku untuk kombinasi port dan domain yang ditentukan. Contoh ini menggunakan 80.
Match Routes of Virtual Service
Pilih rute yang dideklarasikan di layanan virtual yang terkait dengan gateway. Aturan pembatasan laju berlaku untuk rute layanan virtual yang ditentukan. Contoh ini menggunakan productpage-route-name1.
Throttling Configuration
Tentukan jendela deteksi dan jumlah permintaan yang diizinkan untuk algoritma token bucket pembatasan laju lokal. Permintaan yang melebihi batas dalam jendela deteksi akan dikendalikan alirannya. Dalam contoh ini, gunakan konfigurasi berikut:
-
Atur Time Window for Throttling Detection menjadi 1s.
-
Atur Number of Requests Allowed in Time Window menjadi 10.
Pengaturan ini membatasi permintaan ke workload layanan hingga 10 per detik.
advanced config
Klik Show Advanced Settings untuk menentukan perilaku lanjutan saat pembatasan laju terjadi. Anda dapat mengonfigurasi pengaturan lanjutan sesuai kebutuhan. Dalam contoh ini, atur Custom Throttling Response Body menjadi
{"ret_code": xxx,"message": "Your request be limited"}.Kode berikut menunjukkan file YAML untuk konfigurasi pembatasan laju lokal.
-
Jika Anda tidak mengonfigurasi pengaturan lanjutan, sistem akan mengembalikan respons default saat pembatasan laju dipicu.
-
Jika Anda mengonfigurasi pengaturan lanjutan, sistem akan mengembalikan respons kustom saat pembatasan laju dipicu.
-
-
-
Jalankan perintah berikut di tool hey untuk terus-menerus menghasilkan trafik stres.
hey -host bf2.example.com -c 10 -n 100000 http://${ASM_GATEWAY_IP}/productpagehey -host bf2.example.com -c 10 -n 100000 http://${ASM_GATEWAY_IP}/nginx -
Jalankan perintah berikut untuk mengakses path /productpage gateway.
curl -H 'host: bf2.example.com' http://${ASM_GATEWAY_IP}/productpage -vOutput yang diharapkan:
< HTTP/1.1 429 Too Many Requests < Content-Length: 18 < Content-Type: text/plain < Date: Thu, 13 Jan 2022 03:03:09 GMT < Server: istio-envoy < local_rate_limitedOutput tersebut menunjukkan bahwa akses ke layanan bookinfo dibatasi.
-
Jalankan perintah berikut untuk mengakses path /nginx gateway.
curl -H 'host: bf2.example.com' http://${ASM_GATEWAY_IP}/nginx -vRespons tidak menyertakan kode status 429, yang menunjukkan bahwa akses tidak dibatasi.
Skenario 2: Pembatasan laju pada domain dan port gateway
Konfigurasikan aturan pembatasan laju untuk kombinasi domain dan port bf2.example.com:80 guna membatasi trafik ke semua path pada kombinasi tersebut.
-
Konfigurasikan aturan pembatasan laju.
-
Masuk ke Konsol ASM. Di panel navigasi kiri, pilih .
-
Pada halaman Mesh Management, klik nama instans ASM. Di panel navigasi kiri, pilih . Pada halaman yang muncul, klik Create.
-
Pada halaman Create, konfigurasikan parameter seperti dijelaskan di bawah ini, lalu klik OK.
Untuk informasi selengkapnya tentang parameter, lihat ASMLocalRateLimiter CRD reference.
Section
Parameter
Description
Basic Information About Throttling
Namespaces
Namespace untuk aturan pembatasan laju lokal. Ini harus sama dengan namespace workload yang dibatasi lajunya. Dalam contoh ini, Anda harus memilih istio-system karena semua gateway ASM dideploy di namespace istio-system.
Name
Nama kustom untuk konfigurasi pembatasan laju lokal. Contoh ini menggunakan ingressgateway.
Type of Effective Workload
Jenis workload tempat pembatasan laju diterapkan. Nilai yang didukung adalah Applicable Service dan Applicable Gateway. Contoh ini menggunakan Applicable Gateway.
Relevant Workload
Jika Anda memilih Applicable Gateway, Anda juga harus memilih Select Istio Gateway. Aturan berlaku untuk workload yang terkait dengan gateway yang dipilih. Contoh ini menggunakan bookinfo-gateway.
List of Throttling Rules
Gateway Domain Name
Pilih domain yang dideklarasikan di gateway. Aturan pembatasan laju berlaku untuk kombinasi port dan domain yang ditentukan. Contoh ini menggunakan bf2.example.com.
Gateway Port
Pilih port yang dideklarasikan di gateway. Aturan pembatasan laju berlaku untuk kombinasi port dan domain yang ditentukan. Contoh ini menggunakan 80.
Match Routes of Virtual Service
Jangan pilih rute dalam contoh ini. Hal ini menerapkan aturan pembatasan laju ke semua rute untuk domain dan port yang ditentukan.
Throttling Configuration
Tentukan jendela deteksi dan jumlah permintaan yang diizinkan untuk algoritma token bucket pembatasan laju lokal. Permintaan yang melebihi batas dalam jendela deteksi akan dikendalikan alirannya. Dalam contoh ini, gunakan konfigurasi berikut:
-
Atur Time Window for Throttling Detection menjadi 1s.
-
Atur Number of Requests Allowed in Time Window menjadi 10.
Pengaturan ini membatasi permintaan ke workload layanan hingga 10 per detik.
Kode berikut menunjukkan file YAML untuk konfigurasi pembatasan laju lokal.
-
-
-
Jalankan perintah berikut di tool hey untuk terus-menerus menghasilkan trafik stres.
hey -host bf2.example.com -c 10 -n 100000 http://${ASM_GATEWAY_IP}/nginx -
Jalankan perintah berikut untuk mengakses path /nginx gateway.
curl -H 'host: bf2.example.com' http://${ASM_GATEWAY_IP}/nginx -vRespons mengembalikan
HTTP/1.1 429 Too Many Requests, yang menunjukkan bahwa akses ke path /nginx pada gateway dibatasi.
Skenario 3: Pembatasan laju berdasarkan header permintaan
Konfigurasikan aturan pembatasan laju untuk rute nginx-route-name1 pada kombinasi domain dan port bf2.example.com:80. Aturan ini hanya berlaku untuk permintaan yang menyertakan header permintaan ratelimit: "true" dan tidak memengaruhi permintaan lain ke rute tersebut. Rute nginx-route-name1 merupakan bagian dari layanan virtual bookinfo yang dibuat dalam bagian Prasyarat. Rute ini mencocokkan permintaan ke path /nginx dan meneruskannya ke layanan nginx.
-
Konfigurasikan aturan pembatasan laju.
-
Masuk ke Konsol ASM. Di panel navigasi kiri, pilih .
-
Pada halaman Mesh Management, klik nama instans ASM. Di panel navigasi kiri, pilih . Pada halaman yang muncul, klik Create.
-
Pada halaman Create, konfigurasikan parameter seperti dijelaskan di bawah ini, lalu klik OK.
Untuk informasi selengkapnya tentang parameter, lihat ASMLocalRateLimiter CRD reference.
Section
Parameter
Description
Basic Information About Throttling
Namespaces
Namespace untuk aturan pembatasan laju lokal. Ini harus sama dengan namespace workload yang dibatasi lajunya. Dalam contoh ini, Anda harus memilih istio-system karena semua gateway ASM dideploy di namespace istio-system.
Name
Nama kustom untuk konfigurasi pembatasan laju lokal. Contoh ini menggunakan ingressgateway.
Type of Effective Workload
Jenis workload tempat pembatasan laju diterapkan. Nilai yang didukung adalah Applicable Service dan Applicable Gateway. Contoh ini menggunakan Applicable Gateway.
Relevant Workload
Jika Anda memilih Applicable Gateway, Anda juga harus memilih Select Istio Gateway. Aturan berlaku untuk workload yang terkait dengan gateway yang dipilih. Contoh ini menggunakan bookinfo-gateway.
List of Throttling Rules
Gateway Domain Name
Pilih domain yang dideklarasikan di gateway. Aturan pembatasan laju berlaku untuk kombinasi port dan domain yang ditentukan. Contoh ini menggunakan bf2.example.com.
Gateway Port
Pilih port yang dideklarasikan di gateway. Aturan pembatasan laju berlaku untuk kombinasi port dan domain yang ditentukan. Contoh ini menggunakan 80.
Match Routes of Virtual Service
Pilih rute yang dideklarasikan di layanan virtual yang terkait dengan gateway. Aturan pembatasan laju berlaku untuk rute layanan virtual yang ditentukan. Contoh ini menggunakan nginx-route-name1.
Match Request Attributes
Tentukan kondisi pencocokan permintaan untuk memicu aturan pembatasan laju. Dalam contoh ini, gunakan konfigurasi berikut:
-
Atur Matched Attributes menjadi Specific Request Header.
-
Atur Request Header menjadi ratelimit.
-
Atur Matching Method menjadi Exact Match.
-
Atur Matched Content menjadi true.
Throttling Configuration
Tentukan jendela deteksi dan jumlah permintaan yang diizinkan untuk algoritma token bucket pembatasan laju lokal. Permintaan yang melebihi batas dalam jendela deteksi akan dikendalikan alirannya. Dalam contoh ini, gunakan konfigurasi berikut:
-
Atur Time Window for Throttling Detection menjadi 1s.
-
Atur Number of Requests Allowed in Time Window menjadi 10.
Pengaturan ini membatasi permintaan ke workload layanan hingga 10 per detik.
Kode berikut menunjukkan file YAML untuk konfigurasi pembatasan laju lokal.
-
-
-
Jalankan perintah berikut di tool hey untuk terus-menerus menghasilkan trafik stres. Semua permintaan membawa header permintaan
ratelimit: trueguna memicu pembatasan laju.hey -host bf2.example.com -H 'ratelimit: true' -c 10 -n 10000 http://${ASM_GATEWAY_IP}/nginx -
Jalankan perintah berikut untuk mengakses path
/nginxgateway.curl -H 'host: bf2.example.com' -H 'ratelimit: true' http://${ASM_GATEWAY_IP}/nginx -vRespons mengembalikan
HTTP/1.1 429 Too Many Requests, yang menunjukkan bahwa permintaan ke path/nginxgateway dengan header permintaanratelimit: truedibatasi. -
Jalankan perintah berikut untuk mengakses path
/nginxgateway, tetapi tanpa header permintaanratelimit: true.curl -H 'host: bf2.example.com' http://${ASM_GATEWAY_IP}/nginx -vRespons tidak menyertakan kode status 429, yang menunjukkan bahwa permintaan tanpa header permintaan
ratelimit: truetidak dibatasi.
Operasi terkait
Hapus aturan pembatasan laju
-
Hapus aturan pembatasan laju.
-
Masuk ke Konsol ASM. Di panel navigasi kiri, pilih .
-
Pada halaman Mesh Management, klik nama instans ASM. Di panel navigasi kiri, pilih .
-
Pada halaman Rate Limiting, temukan aturan pembatasan laju yang dituju, klik Delete di kolom Actions, lalu klik OK di kotak dialog Submit.
-
-
Jalankan perintah berikut untuk mengakses path
/nginxgateway.curl -H 'host: bf2.example.com' http://${ASM_GATEWAY_IP}/nginx -vRespons tidak menyertakan kode status 429, yang menunjukkan bahwa akses tidak dibatasi.