Peristiwa seperti promosi penjualan dapat menyebabkan lonjakan lalu lintas secara tiba-tiba yang melebihi beban maksimum sistem Anda, berpotensi mengakibatkan antrean panggilan sangat panjang hingga membekukan seluruh sistem. Alibaba Cloud Service Mesh (ASM) menyediakan fitur pembatasan lokal yang memungkinkan Anda membatasi traffic pada gerbang masuk untuk melindungi sistem Anda. Topik ini menjelaskan cara mengonfigurasi pembatasan lokal untuk gerbang masuk.
Prasyarat
Instans ASM telah dibuat dan memenuhi persyaratan berikut:
Jika Anda menggunakan instans ASM komersial (Edisi Professional atau Ultimate), versi instans harus 1.11.5.30 atau lebih baru. Untuk informasi selengkapnya, lihat Upgrade an ASM instance.
Jika Anda menggunakan instans ASM Standard, versi instans harus 1.9 atau lebih baru. Anda hanya dapat menggunakan fitur rate limiting bawaan Istio untuk menerapkan pembatasan lokal. Dokumen referensi bervariasi tergantung pada versi Istio. Untuk informasi selengkapnya tentang cara mengonfigurasi pembatasan lokal pada versi Istio terbaru, lihat Enabling Rate Limits using Envoy.
Gerbang masuk telah dideploy. Untuk informasi selengkapnya, lihat Create an ingress gateway.
Layanan bookinfo dan nginx telah dibuat. Dalam topik ini, layanan bookinfo dideploy di namespace default, sedangkan 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.
Aturan gateway dan layanan virtual telah dibuat. Untuk informasi selengkapnya, lihat Manage gateway rules dan Manage virtual services.
Tool pembangkit traffic hey telah diinstal. Untuk informasi selengkapnya, lihat hey.
Objek yang Berlaku
Fitur pembatasan lokal ASM berlaku untuk gerbang ASM dan layanan aplikasi yang telah disuntikkan sidecar.
Deskripsi Contoh Skenario
Topik ini menggunakan layanan Bookinfo dan Nginx sebagai contoh untuk menunjukkan cara menggunakan pembatasan gateway dan layanan. Layanan Nginx dideploy secara terpisah di namespace foo untuk memverifikasi cakupan aturan pembatasan.
Skenario 1: Konfigurasikan aturan pembatasan untuk rute layanan virtual tunggal
Konfigurasikan aturan pembatasan untuk rute productpage-route-name1 pada kombinasi nama domain dan port bf2.example.com:80. productpage-route-name1 adalah item rute dalam layanan virtual bookinfo yang Anda buat di bagian Prasyarat. Rute ini mencocokkan path permintaan seperti /productpage, /static, /login, dan /logout, serta meneruskan permintaan yang cocok ke layanan productpage. Setelah Anda mengonfigurasi aturan tersebut, laju traffic ke path-path ini akan dibatasi.
Buat aturan pembatasan lokal.
Masuk ke Konsol ASM. Di panel navigasi sebelah kiri, pilih .
Pada halaman Mesh Management, klik nama instans ASM. Di panel navigasi sebelah kiri, pilih . Pada halaman yang muncul, klik Create.
Pada halaman Create, konfigurasikan parameter berikut sesuai kebutuhan lalu klik OK.
Untuk informasi selengkapnya tentang item konfigurasi, lihat ASMLocalRateLimiter CRD reference.
Area konfigurasi
Item konfigurasi
Deskripsi
Basic throttling information
Namespace
Namespace workload tempat aturan pembatasan laju lokal berlaku. Dalam contoh ini, Anda harus memilih istio-system karena semua gateway ASM dideploy di namespace istio-system.
Name
Nama kustom untuk konfigurasi pembatasan lokal. Untuk contoh ini, masukkan ingressgateway.
Effective workload type
Jenis workload tempat pembatasan berlaku. Anda dapat memilih Apply to Application Service atau Apply to Gateway. Dalam contoh ini, pilih Apply To Gateway.
Associated workload
Jika jenis workload efektif diatur ke Gateway, Anda dapat mengaitkan workload menggunakan opsi Select Gateway Rule. Konfigurasi pembatasan laju lokal kemudian dikaitkan dengan workload gateway yang sama seperti aturan gateway yang dipilih. Untuk contoh ini, pilih bookinfo-gateway.
Throttling rule list
Gateway domain name
Nama domain yang dideklarasikan dalam aturan gateway. Aturan pembatasan laju berlaku untuk kombinasi port dan nama domain tertentu. Dalam contoh ini, pilih bf2.example.com.
Gateway port
Port yang dideklarasikan dalam aturan gateway. Aturan pembatasan berlaku untuk kombinasi port dan nama domain tertentu. Untuk contoh ini, pilih 80.
Match virtual service route
Pilih rute yang dideklarasikan dalam layanan virtual yang terkait dengan aturan gateway. Aturan pembatasan akan berlaku untuk rute layanan virtual tertentu. Untuk contoh ini, pilih productpage-route-name1.
Throttling configuration
Tentukan panjang jendela waktu deteksi dan jumlah permintaan yang diizinkan dalam jendela tersebut untuk algoritma token bucket. Jika jumlah permintaan yang dikirim dalam jendela waktu melebihi jumlah yang diizinkan, permintaan tersebut akan dibatasi. Untuk contoh ini, gunakan konfigurasi berikut:
Atur Time Window For Throttling Detection ke 1 second.
Atur Number of requests allowed in the time window ke 10.
Konfigurasi di atas menunjukkan bahwa tidak lebih dari 10 permintaan dapat dikirim ke workload layanan ini dalam 1 detik.
Advanced options
Klik Show Advanced Settings untuk menentukan beberapa perilaku lanjutan saat pembatasan terjadi. Anda dapat mengonfigurasi opsi lanjutan sesuai kebutuhan. Dalam contoh ini, masukkan
{"ret_code": xxx,"message": "Your request be limited"}di bidang Custom Throttling Response Body.File YAML berikut menunjukkan konfigurasi pembatasan lokal.
Jika Anda tidak mengonfigurasi opsi lanjutan, respons default akan dikembalikan saat pembatasan dipicu.
Jika Anda mengonfigurasi opsi lanjutan, respons kustom akan dikembalikan saat pembatasan dipicu.
Di tool hey, jalankan perintah berikut untuk terus-menerus menghasilkan volume traffic tinggi.
hey -host bf2.example.com -c 10 -n 100000 http://<ASM gateway IP address>/productpagehey -host bf2.example.com -c 10 -n 100000 http://<ASM gateway IP address>/nginxJalankan perintah berikut untuk mengakses path /productpage gateway.
curl -H 'host: bf2.example.com' http://<ASM gateway IP address>/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. Hal ini menunjukkan bahwa akses tidak dibatasi.
Skenario 2: Konfigurasikan aturan pembatasan untuk kombinasi nama domain dan port pada gateway
Konfigurasikan aturan pembatasan untuk kombinasi nama domain dan port bf2.example.com:80. Ini membatasi traffic ke semua path untuk kombinasi tersebut.
Konfigurasikan aturan pembatasan.
Masuk ke Konsol ASM. Di panel navigasi sebelah kiri, pilih .
Pada halaman Mesh Management, klik nama instans ASM. Di panel navigasi sebelah kiri, pilih . Pada halaman yang muncul, klik Create.
Pada halaman Create, konfigurasikan parameter berikut sesuai kebutuhan lalu klik OK.
Untuk informasi selengkapnya tentang item konfigurasi, lihat ASMLocalRateLimiter CRD reference.
Area konfigurasi
Item konfigurasi
Deskripsi
Basic throttling information
Namespace
Namespace workload tempat aturan pembatasan laju lokal berlaku. Dalam contoh ini, Anda harus memilih istio-system karena semua gateway ASM dideploy di namespace istio-system.
Name
Nama kustom untuk konfigurasi pembatasan lokal. Untuk contoh ini, masukkan ingressgateway.
Effective workload type
Jenis workload tempat pembatasan berlaku. Anda dapat memilih Application Service atau Gateway. Dalam contoh ini, Gateway dipilih.
Associated workload
Jika jenis workload efektif diatur untuk diterapkan pada gateway, Anda dapat mengaitkan workload menggunakan opsi Select Gateway Rule. Konfigurasi pembatasan laju lokal kemudian dikaitkan dengan workload gateway yang sama seperti aturan gateway yang dipilih. Dalam contoh ini, pilih bookinfo-gateway.
Throttling rule list
Gateway domain name
Pilih nama domain yang dideklarasikan dalam aturan gateway. Aturan pembatasan laju berlaku untuk kombinasi port dan nama domain tertentu. Dalam contoh ini, pilih bf2.example.com.
Gateway port
Pilih port yang dideklarasikan dalam aturan gateway. Aturan pembatasan berlaku untuk kombinasi port dan nama domain tertentu. Dalam contoh ini, pilih 80.
Match virtual service route
Pilih rute yang dideklarasikan dalam layanan virtual yang terkait dengan aturan gateway. Aturan pembatasan berlaku untuk rute layanan virtual tertentu. Untuk contoh ini, jangan pilih rute apa pun. Hal ini menunjukkan bahwa aturan pembatasan berlaku untuk semua rute di bawah nama domain dan port yang ditentukan.
Throttling configuration
Tentukan panjang jendela waktu deteksi dan jumlah permintaan yang diizinkan dalam jendela tersebut untuk algoritma token bucket. Jika jumlah permintaan yang dikirim dalam jendela waktu melebihi jumlah yang diizinkan, permintaan tersebut akan dibatasi. Untuk contoh ini, gunakan konfigurasi berikut:
Atur Time Window For Throttling Detection ke 1 second.
Atur Number of requests allowed in the time window ke 10.
Konfigurasi di atas menunjukkan bahwa tidak lebih dari 10 permintaan dapat dikirim ke workload layanan ini dalam 1 detik.
File YAML berikut menunjukkan konfigurasi pembatasan lokal.
Di tool hey, jalankan perintah berikut untuk terus-menerus menghasilkan volume traffic tinggi.
hey -host bf2.example.com -c 10 -n 100000 http://${ASM_GATEWAY_IP}/nginxJalankan perintah berikut untuk mengakses path /nginx gateway.
curl -H 'host: bf2.example.com' http://${ASM_GATEWAY_IP}/nginx -vRespons
HTTP/1.1 429 Too Many Requestsmenunjukkan bahwa akses ke path /nginx pada gateway dibatasi.
Skenario 3: Konfigurasikan aturan pembatasan untuk permintaan dengan header tertentu pada rute layanan virtual tunggal
Konfigurasikan aturan pembatasan untuk rute nginx-route-name1 pada kombinasi nama domain dan port bf2.example.com:80. Tetapkan bahwa aturan hanya berlaku untuk permintaan yang menyertakan header ratelimit: "true". Permintaan lain pada rute ini tidak terpengaruh. Rute nginx-route-name1 merupakan item rute dalam layanan virtual bookinfo yang Anda buat di bagian Prasyarat. Rute ini mencocokkan path permintaan /nginx dan meneruskan permintaan yang sesuai ke layanan nginx.
Konfigurasikan aturan pembatasan.
Masuk ke Konsol ASM. Di panel navigasi sebelah kiri, pilih .
Pada halaman Mesh Management, klik nama instans ASM. Di panel navigasi sebelah kiri, pilih . Pada halaman yang muncul, klik Create.
Pada halaman Create, konfigurasikan parameter berikut sesuai kebutuhan lalu klik OK.
Untuk informasi selengkapnya tentang item konfigurasi, lihat ASMLocalRateLimiter CRD reference.
Area konfigurasi
Item konfigurasi
Deskripsi
Basic throttling information
Namespace
Namespace untuk konfigurasi pembatasan laju lokal harus diatur ke namespace workload tempat pembatasan laju berlaku. Dalam contoh ini, Anda harus memilih istio-system karena semua gateway ASM dideploy di namespace istio-system.
Name
Nama kustom untuk konfigurasi pembatasan lokal. Untuk contoh ini, masukkan ingressgateway.
Effective workload type
Jenis workload tempat pembatasan berlaku. Anda dapat memilih Applicable Application atau Applicable Gateway. Untuk contoh ini, pilih Applicable Gateway.
Associated workload
Jika Anda mengatur Effective Workload Type ke Gateway, Anda dapat mengaitkan workload menggunakan opsi Select Gateway Rule. Konfigurasi pembatasan laju lokal kemudian dikaitkan dengan workload gateway yang sama seperti aturan gateway yang dipilih. Untuk contoh ini, pilih bookinfo-gateway.
Throttling rule list
Gateway domain name
Pilih nama domain yang dideklarasikan dalam aturan gateway. Kombinasi port yang ditentukan dan nama domain ini menentukan tempat penerapan aturan pembatasan laju. Dalam contoh ini, pilih bf2.example.com.
Gateway port
Pilih port yang dideklarasikan dalam aturan gateway. Aturan pembatasan berlaku untuk kombinasi port dan nama domain tertentu. Dalam contoh ini, pilih 80.
Match virtual service route
Pilih rute dari layanan virtual yang terkait dengan aturan gateway. Aturan pembatasan berlaku untuk rute layanan virtual tertentu. Untuk contoh ini, pilih nginx-route-name1.
Match request properties
Tentukan aturan pencocokan permintaan agar konfigurasi pembatasan berlaku. Untuk contoh ini, gunakan konfigurasi berikut:
Untuk Match Attribute, pilih Specific Request Header.
Atur Request Header Name ke ratelimit.
Untuk Matching Method, pilih Exact Match.
Masukkan true untuk Matched Content.
Throttling configuration
Tentukan panjang jendela waktu deteksi dan jumlah permintaan yang diizinkan dalam jendela tersebut untuk algoritma token bucket. Jika jumlah permintaan yang dikirim dalam jendela waktu melebihi jumlah yang diizinkan, permintaan tersebut akan dibatasi. Untuk contoh ini, gunakan konfigurasi berikut:
Atur Time Window For Throttling Detection ke 1 second.
Atur Number of requests allowed in the time window ke 10.
Konfigurasi di atas menunjukkan bahwa tidak lebih dari 10 permintaan dapat dikirim ke workload layanan ini dalam 1 detik.
File YAML berikut menunjukkan konfigurasi pembatasan lokal.
Di tool hey, jalankan perintah berikut untuk terus-menerus menghasilkan volume traffic tinggi. Semua permintaan membawa header
ratelimit: trueuntuk memicu pembatasan.hey -host bf2.example.com -H 'ratelimit: true' -c 10 -n 10000 http://${ASM_GATEWAY_IP}/nginxJalankan perintah berikut untuk mengakses path
/nginxgateway.curl -H 'host: bf2.example.com' -H 'ratelimit: true' http://${ASM_GATEWAY_IP}/nginx -vRespons
HTTP/1.1 429 Too Many Requestsmenunjukkan bahwa permintaan ke path/nginxgateway yang membawa headerratelimit: truedibatasi.Jalankan perintah berikut untuk mengakses path
/nginxgateway, tetapi tanpa headerratelimit: true.curl -H 'host: bf2.example.com' http://${ASM_GATEWAY_IP}/nginx -vRespons tidak menyertakan kode status 429. Hal ini menunjukkan bahwa permintaan tanpa header
ratelimit: truetidak terpengaruh oleh pembatasan.
Operasi Terkait
Hapus konfigurasi pembatasan dan lanjutkan akses
Hapus aturan pembatasan.
Masuk ke Konsol ASM. Di panel navigasi sebelah kiri, pilih .
Pada halaman Mesh Management, klik nama instans ASM. Di panel navigasi sebelah kiri, pilih .
Pada halaman Traffic Protection and Scheduling, temukan aturan pembatasan yang ingin dihapus lalu klik Delete di kolom Actions. Pada kotak dialog Confirm, klik OK.
Jalankan perintah berikut untuk mengakses path
/nginxgateway.curl -H 'host: bf2.example.com' http://${ASM_GATEWAY_IP}/nginx -vRespons tidak menyertakan kode status 429. Hal ini menunjukkan bahwa akses tidak dibatasi.