Anda dapat mengonfigurasi throttling global untuk rute tertentu dari gateway ingress guna menerapkan kontrol yang tepat atas trafik. Hal ini membantu mengatasi masalah seperti lonjakan trafik, beban layanan, kehabisan sumber daya, dan serangan jahat. Dengan demikian, stabilitas layanan backend terlindungi, biaya berkurang, dan pengalaman pengguna meningkat.
Prasyarat
Kluster Kubernetes terkelola telah ditambahkan ke instans ASM Anda, dan versi instans ASM adalah 1.18.0.131 atau lebih baru. Untuk informasi selengkapnya, lihat Menambahkan kluster ke instans ASM.
Injeksi sidecar otomatis diaktifkan untuk namespace
defaultdi kluster Kubernetes. Untuk informasi selengkapnya, lihat Mengaktifkan injeksi otomatis.Sebuah gateway ingress bernama ingressgateway telah dibuat dan port 80 diaktifkan. Untuk informasi lebih lanjut, lihat Buat gateway ingress.
Persiapan
Men-deploy layanan pembatasan laju
Buat file ratelimit-svc.yaml dengan konten berikut:
Di lingkungan kubeconfig kluster ACK, jalankan perintah berikut untuk membuat layanan pembatasan laju beserta layanan Redis dependennya di dalam kluster.
Untuk informasi selengkapnya tentang cara menghubungkan ke kluster menggunakan kubectl, lihat Mendapatkan file kubeconfig kluster dan menggunakan kubectl untuk menghubungkan ke kluster.
kubectl apply -f ratelimit-svc.yaml
Men-deploy aplikasi sampel Bookinfo
Unduh file bookinfo.yaml aplikasi Bookinfo dari repositori Istio di GitHub.
Untuk men-deploy aplikasi Bookinfo ke kluster instans ASM, jalankan perintah berikut di lingkungan kubeconfig kluster ACK.
kubectl apply -f bookinfo.yamlBuat file bookinfo-gateway.yaml dengan konten berikut:
Di lingkungan kubeconfig untuk instans ASM, jalankan perintah berikut untuk membuat aturan routing untuk aplikasi Bookinfo pada gerbang masuk.
Aturan routing tersebut bernama
productpage-route-name1dan mencocokkan permintaan untuk nama domainbf2.example.com. Untuk informasi selengkapnya tentang cara menggunakan kubectl untuk mengakses instans ASM, lihat Menggunakan kubectl pada lapisan kontrol untuk mengakses sumber daya Istio.kubectl apply -f bookinfo-gateway.yaml
Skenario 1: Konfigurasikan aturan throttling global untuk rute gateway ingress tertentu
Konfigurasikan aturan pembatasan laju untuk rute productpage-route-name1 yang terkait dengan kombinasi nama domain dan port bf2.example.com:80. Rute productpage-route-name1 merupakan bagian dari layanan virtual bookinfo yang dibuat di bagian Persiapan. Rute ini mencocokkan permintaan untuk path seperti /productpage, /static, /login, dan /logout, serta meneruskan permintaan yang cocok ke layanan productpage. Setelah aturan pembatasan laju dikonfigurasi, permintaan yang dikirim ke path-path tersebut akan dikenai pembatasan laju.
Buat file global-ratelimit-gw.yaml dengan konten berikut:
Tabel berikut menjelaskan beberapa bidang. Untuk informasi lebih lanjut, lihat Deskripsi bidang ASMGlobalRateLimiter.
Bidang
Deskripsi
workloadSelectorWorkload tempat aturan pembatasan laju berlaku. Dalam contoh ini, pembatasan laju global berlaku pada gerbang masuk ingressgateway. Atur parameter ini menjadi
istio: ingressgateway.isGatewayMenentukan apakah aturan berlaku untuk gerbang. Dalam contoh ini, parameter ini diatur ke
true.rateLimitServiceNama domain, port, dan pengaturan batas waktu koneksi untuk layanan throttling. Blok kode berikut menunjukkan pengaturan layanan throttling yang diterapkan di Preparations:
host: ratelimit.default.svc.cluster.local port: 8081 timeout: seconds: 5limitParameter konfigurasi pembatasan laju yang berlaku.
unitmenentukan satuan waktu untuk deteksi pembatasan laju.quotamenentukan jumlah total permintaan yang diizinkan per satuan waktu.Dalam contoh ini,
unitdiatur keMINUTEdanquotadiatur ke1. Ini berarti hanya satu permintaan yang dapat dikirim per menit pada rute yang cocok. Permintaan berlebih akan dibatasi.vhostKonfigurasi nama domain dan item rute yang dicocokkan oleh aturan pembatasan laju. Nilai
namedanportharus sama dengan nama domain di layanan virtual yang diterapkan pada gerbang dan port gerbang masuk. Nama rute yang ditentukan diroute.name_matchharus sama dengan nama item rute di layanan virtual.Di lingkungan kubeconfig instans ASM, jalankan perintah berikut untuk membuat aturan pembatasan laju global untuk rute
productpage-route-name1pada gerbang.kubectl apply -f global-ratelimit-gw.yamlJalankan perintah berikut untuk mendapatkan konfigurasi aturan throttling global:
kubectl get asmglobalratelimiter global-test -n istio-system -o yamlSalin konten field
config.yamldari fieldstatussumber daya ASMGlobalRateLimiter pada output langkah sebelumnya. Tempelkan konten tersebut ke dalam file `ratelimit-config.yaml` untuk menghasilkan konfigurasi layanan pembatasan laju global.Isi string field
config.yaml, yang terletak di bawah fieldstatusASMGlobalRateLimiter, harus ditempelkan persis seperti aslinya ke dalam fieldconfig.yamldi bagiandataConfigMap.Di lingkungan kubeconfig kluster ACK, jalankan perintah berikut untuk memperbarui konfigurasi layanan pembatasan laju global di kluster.
kubectl apply -f ratelimit-config.yamlJalankan perintah berikut untuk mengakses aplikasi Bookinfo dua kali.
Ganti
<IP gerbang ASM>dengan alamat IP aktual gerbang. Untuk informasi selengkapnya tentang cara mendapatkan alamat IP gerbang, lihat Mendapatkan alamat gerbang masuk.curl -H 'host: bf2.example.com' http://<IP gerbang ASM>/productpage -v curl -H 'host: bf2.example.com' http://<IP gerbang ASM>/productpage -vBlok kode berikut menunjukkan output yang diharapkan untuk akses kedua ke aplikasi Bookinfo:
< HTTP/1.1 429 Too Many Requests < x-envoy-ratelimited: true < x-ratelimit-limit: 1, 1;w=60 < x-ratelimit-remaining: 0 < x-ratelimit-reset: 48 < date: Thu, 26 Oct 2023 04:10:11 GMT < server: istio-envoy < content-length: 0 < * Connection #0 to host 116.62.XXX.XXX left intactDalam konfigurasi throttling global, hanya satu permintaan yang diizinkan untuk mengakses aplikasi Bookinfo dalam satu menit. Ketika Anda mengakses aplikasi Bookinfo dua kali dalam satu menit, permintaan pertama berhasil dan throttling dipicu pada permintaan kedua. Ini menunjukkan bahwa throttling global berlaku pada rute gateway ingress tertentu.
Skenario 2: Konfigurasikan aturan throttling global untuk nama domain tertentu dan port tertentu pada gateway ingress
Anda dapat mengonfigurasi aturan pembatasan laju global untuk kombinasi nama domain dan port bf2.example.com:80. Setelah aturan dikonfigurasi, permintaan yang dikirim ke nama domain dan port ini akan dikenai pembatasan laju.
Buat file global-ratelimit-gw.yaml dengan konten berikut:
Tabel berikut menjelaskan beberapa bidang. Untuk informasi lebih lanjut, lihat Deskripsi bidang ASMGlobalRateLimiter.
Bidang
Deskripsi
workloadSelectorWorkload tempat aturan pembatasan laju berlaku. Dalam contoh ini, pembatasan laju global berlaku pada gerbang masuk ingressgateway. Atur parameter ini menjadi
istio: ingressgateway.isGatewayMenentukan apakah aturan berlaku untuk gerbang. Dalam contoh ini, parameter ini diatur ke
true.rateLimitServiceNama domain, port, dan pengaturan batas waktu koneksi layanan throttling. Blok kode berikut menunjukkan pengaturan layanan throttling yang dideploy di Persiapan:
host: ratelimit.default.svc.cluster.local port: 8081 timeout: seconds: 5limitParameter konfigurasi pembatasan laju yang berlaku.
unitmenentukan satuan waktu untuk deteksi pembatasan laju.quotamenentukan jumlah total permintaan yang diizinkan per satuan waktu.Dalam contoh ini,
unitdiatur keMINUTEdanquotadiatur ke1. Ini berarti hanya satu permintaan yang dapat dikirim per menit pada rute yang cocok. Permintaan berlebih akan dibatasi.vhostKonfigurasi nama domain dan item rute yang dicocokkan oleh aturan pembatasan laju. Nilai
namedanportharus sama dengan nama domain di layanan virtual yang diterapkan pada gerbang dan port gerbang masuk.Di lingkungan kubeconfig untuk instans ASM, jalankan perintah berikut untuk membuat aturan pembatasan laju global yang berlaku untuk rute
productpage-route-name1pada gerbang.kubectl apply -f global-ratelimit-gw.yamlJalankan perintah berikut untuk mendapatkan konfigurasi aturan throttling global:
kubectl get asmglobalratelimiter global-test -n istio-system -o yamlDari output langkah sebelumnya, salin konten field
config.yamldi dalam fieldstatussumber daya ASMGlobalRateLimiter dan tempelkan ke file ratelimit-config.yaml untuk membuat konfigurasi layanan pembatasan laju global.Tempelkan isi string dari field
config.yaml, yang berada di bawah fieldstatussumber daya ASMGlobalRateLimiter, persis seperti aslinya ke dalam fieldconfig.yamldi bagiandataConfigMap.Di lingkungan kubeconfig untuk kluster ACK, jalankan perintah berikut untuk memperbarui konfigurasi layanan pembatasan laju global di kluster.
kubectl apply -f ratelimit-config.yamlJalankan perintah berikut untuk mengakses aplikasi Bookinfo dua kali.
Ganti
<IP gerbang ASM>dengan alamat IP gerbang. Untuk informasi selengkapnya tentang cara mendapatkan alamat IP gerbang, lihat Mendapatkan alamat gerbang masuk.curl -H 'host: bf2.example.com' http://<IP gerbang ASM>/productpage -v curl -H 'host: bf2.example.com' http://<IP gerbang ASM>/productpage -vBlok kode berikut menunjukkan output yang diharapkan untuk akses kedua ke aplikasi Bookinfo:
< HTTP/1.1 429 Too Many Requests < x-envoy-ratelimited: true < x-ratelimit-limit: 1, 1;w=60 < x-ratelimit-remaining: 0 < x-ratelimit-reset: 48 < date: Thu, 26 Oct 2023 04:10:11 GMT < server: istio-envoy < content-length: 0 < * Connection #0 to host 116.62.XXX.XXX left intactKonfigurasi pembatasan laju global hanya mengizinkan satu permintaan per menit untuk kombinasi nama domain dan port
bf2.example.com:80. Ketika Anda mengakses kombinasi nama domain dan port ini dua kali berturut-turut, permintaan pertama berhasil dan permintaan kedua dibatasi. Hasil ini menunjukkan bahwa aturan pembatasan laju global untuk gerbang masuk telah berhasil dikonfigurasi.
Skenario 3: Konfigurasikan aturan throttling global untuk permintaan yang berisi header spesifik dan parameter kueri pada rute tertentu dalam layanan virtual untuk gateway ingress
Dalam skenario ini, versi instance ASM harus 1.19.0 atau lebih baru. Untuk informasi lebih lanjut tentang cara memperbarui instance ASM, lihat Perbarui instance ASM.
Skenario ini menunjukkan cara mengonfigurasi aturan pembatasan laju untuk rute productpage-route-name1, yang terkait dengan kombinasi nama domain dan port bf2.example.com:80. Aturan ini hanya berlaku untuk permintaan yang berisi header permintaan ratelimit: "true" dan parameter kueri ratelimit=enabled. Aturan ini mencocokkan permintaan untuk path seperti /productpage, /static, /login, dan /logout, serta meneruskan permintaan yang cocok ke layanan productpage. Setelah Anda mengonfigurasi aturan pembatasan laju, permintaan yang dikirim ke path-path tersebut akan dikenai pembatasan laju.
Buat file global-ratelimit-gw.yaml dengan konten berikut:
Tabel berikut menjelaskan beberapa bidang. Untuk informasi lebih lanjut, lihat Deskripsi bidang ASMGlobalRateLimiter.
Bidang
Deskripsi
workloadSelectorWorkload tempat aturan pembatasan laju berlaku. Dalam contoh ini, pembatasan laju global berlaku pada gerbang masuk ingressgateway. Atur parameter ini menjadi
istio: ingressgateway.isGatewayMenentukan apakah aturan berlaku untuk gerbang. Dalam contoh ini, parameter ini diatur ke
true.rateLimitServiceNama domain, port, dan pengaturan batas waktu koneksi layanan throttling. Blok kode berikut menunjukkan pengaturan layanan throttling yang dideploy di Persiapan:
host: ratelimit.default.svc.cluster.local port: 8081 timeout: seconds: 5limitParameter konfigurasi pembatasan laju yang berlaku pada rute layanan virtual.
unitmenentukan satuan waktu untuk deteksi pembatasan laju.quotamenentukan jumlah total permintaan yang diizinkan per satuan waktu. Dalam contoh ini,unitdiatur keSECONDdanquotadiatur ke100000. Ini berarti 100.000 permintaan diizinkan per detik pada rute yang cocok. Pengaturan ini kira-kira setara dengan tidak ada pembatasan laju yang dikonfigurasi. Tujuannya adalah hanya permintaan yang memenuhi kondisi tertentu yang dibatasi, sedangkan permintaan lain tidak perlu memicu pembatasan laju.vhostKonfigurasi nama domain dan item rute yang dicocokkan oleh aturan pembatasan laju. Nilai
namedanportharus sama dengan nama domain di layanan virtual yang diterapkan pada gerbang dan port gerbang masuk. Nama rute yang ditentukan diroute.name_matchharus sama dengan nama item rute di layanan virtual.limit_overridesMenentukan apakah ambang batas throttling yang dikonfigurasi akan diganti. Anda dapat menggunakan bidang ini untuk menentukan ambang batas throttling secara individual untuk permintaan tertentu. Dalam contoh ini:
Field
request_matchdilimit_overridesdiatur untuk mencocokkan secara eksak permintaan yang berisi header permintaanratelimit: "true"dan memiliki parameter kueriratelimit=enableddi path permintaan.Di field
limitdarilimit_overrides,unitdiatur keMINUTEdanquotadiatur ke1. Ini berarti untuk permintaan yang memenuhi kondisi yang ditentukan olehrequest_match, hanya satu permintaan yang diizinkan per menit.
Di lingkungan kubeconfig instans ASM, jalankan perintah berikut untuk membuat aturan pembatasan laju global untuk rute
productpage-route-name1pada gerbang.kubectl apply -f global-ratelimit-gw.yamlJalankan perintah berikut untuk mendapatkan konfigurasi aturan throttling global:
kubectl get asmglobalratelimiter global-test -n istio-system -o yamlUntuk menghasilkan konfigurasi layanan pembatasan laju global, tempelkan konten field
config.yamldari fieldstatussumber daya ASMGlobalRateLimiter (yang ditemukan pada output langkah sebelumnya) ke dalam file `ratelimit-config.yaml`.Isi string dari field
config.yamldi bawah fieldstatussumber daya ASMGlobalRateLimiter harus ditempelkan persis seperti aslinya ke dalam fieldconfig.yamldi bagiandataConfigMap.Di lingkungan kubeconfig kluster ACK, jalankan perintah berikut untuk memperbarui konfigurasi layanan pembatasan laju global di kluster.
kubectl apply -f ratelimit-config.yamlJalankan perintah berikut untuk mengakses aplikasi Bookinfo dua kali.
Ganti
<IP gerbang ASM>dengan alamat IP aktual gerbang. Untuk informasi selengkapnya tentang cara mendapatkan alamat IP gerbang, lihat Mendapatkan alamat gerbang masuk.curl -H 'host: bf2.example.com' http://<IP gerbang ASM>/productpage -v curl -H 'host: bf2.example.com' http://<IP gerbang ASM>/productpage -vBlok kode berikut menunjukkan output yang diharapkan untuk akses kedua ke aplikasi Bookinfo:
< HTTP/1.1 429 Too Many Requests < x-envoy-ratelimited: true < x-ratelimit-limit: 1, 1;w=60 < x-ratelimit-remaining: 0 < x-ratelimit-reset: 48 < date: Thu, 26 Oct 2023 04:10:11 GMT < server: istio-envoy < content-length: 0 < * Connection #0 to host 116.62.XXX.XXX left intactKonfigurasi pembatasan laju global hanya mengizinkan satu permintaan per menit ke aplikasi Bookinfo untuk permintaan yang berisi header permintaan
ratelimit: "true"dan parameter kueriratelimit=enabled. Ketika Anda mengakses aplikasi Bookinfo dua kali berturut-turut dengan header permintaan dan parameter kueri ini, permintaan pertama berhasil dan permintaan kedua dibatasi. Hal ini menunjukkan bahwa konfigurasi pembatasan laju global untuk gerbang masuk berhasil mencocokkan permintaan tertentu.Jalankan perintah berikut untuk mengakses aplikasi Bookinfo lagi, tetapi jangan sertakan header permintaan
ratelimit: "true"atau parameter kueriratelimit=enableddalam permintaan.curl -H 'host: bf2.example.com' http://<IP gerbang ASM>/productpage -vOutput menunjukkan bahwa tidak ada kode status 429 yang ditemukan dan aplikasi Bookinfo berhasil diakses. Ini menunjukkan bahwa permintaan lain pada rute tersebut tidak tunduk pada aturan throttling global.
Skenario 4: Konfigurasikan aturan throttling global untuk alamat IP klien tertentu pada rute tertentu dalam layanan virtual untuk gateway ingress
Dalam skenario ini, versi instance ASM harus 1.19.0 atau lebih baru. Untuk informasi lebih lanjut tentang cara memperbarui instance ASM, lihat Perbarui instance ASM.
Untuk mengonfigurasi throttling untuk alamat IP klien tertentu pada gateway ingress, pastikan bahwa External Traffic Policy dari gateway ingress diatur ke Local. Untuk informasi lebih lanjut tentang cara membuat gateway ingress dan deskripsi parameter gateway ingress, lihat Buat gateway ingress.
Anda dapat memperoleh alamat IP klien dari permintaan yang dikirim ke gerbang dari field
downstream_remote_addressdi log akses gerbang. Dalam contoh ini, konfigurasikan alamat IP klien yang ingin Anda batasi sesuai kebutuhan.
Konfigurasikan aturan pembatasan laju untuk rute layanan virtual productpage-route-name1 di bawah kombinasi nama domain dan port bf2.example.com:80. Aturan pembatasan laju hanya berlaku untuk permintaan dari alamat IP klien tertentu, sedangkan permintaan lain pada rute ini tidak terpengaruh.
Buat file global-ratelimit-gw.yaml dengan konten berikut:
Tabel berikut menjelaskan beberapa bidang. Untuk informasi lebih lanjut, lihat Deskripsi bidang ASMGlobalRateLimiter.
Bidang
Deskripsi
workloadSelectorWorkload tempat aturan pembatasan laju berlaku. Dalam contoh ini, pembatasan laju global berlaku pada gerbang masuk ingressgateway. Atur parameter ini menjadi
istio: ingressgateway.isGatewayMenentukan apakah aturan berlaku untuk gerbang. Dalam contoh ini, parameter ini diatur ke
true.rateLimitServiceNama domain, port, dan pengaturan batas waktu koneksi layanan throttling. Blok kode berikut menunjukkan pengaturan layanan throttling yang dideploy di Persiapan:
host: ratelimit.default.svc.cluster.local port: 8081 timeout: seconds: 5limitParameter konfigurasi pembatasan laju yang berlaku pada rute layanan virtual.
unitmenentukan satuan waktu untuk deteksi pembatasan laju.quotamenentukan jumlah total permintaan yang diizinkan per satuan waktu.Dalam contoh ini,
unitdiatur keSECONDdanquotadiatur ke100000. Ini berarti 100.000 permintaan diizinkan per detik pada rute yang cocok. Pengaturan ini kira-kira setara dengan tidak ada pembatasan laju yang dikonfigurasi. Tujuannya adalah hanya permintaan yang memenuhi kondisi tertentu yang dibatasi, sedangkan permintaan lain tidak perlu memicu pembatasan laju.vhostKonfigurasi nama domain dan item rute yang dicocokkan oleh aturan pembatasan laju. Nilai
namedanportharus sama dengan nama domain di layanan virtual yang diterapkan pada gerbang dan port gerbang masuk. Nama rute yang ditentukan diroute.name_matchharus sama dengan nama item rute di layanan virtual.limit_overridesMenentukan apakah ambang batas throttling yang dikonfigurasi akan diganti. Anda dapat menggunakan bidang ini untuk menentukan ambang batas throttling secara individual untuk permintaan tertentu. Dalam contoh ini:
Di field
request_match,remote_address.addressdigunakan untuk mencocokkan alamat IP sumber permintaan klien, danremote_addess.v4_prefix_mask_lendigunakan untuk mencocokkan masker subnet rentang alamat IP sumber klien (opsional).Di field
limitdari fieldlimit_overrides,unitdiatur keMINUTEdanquotadiatur ke1. Ini berarti untuk permintaan yang memenuhi kondisi yang ditentukan olehrequest_match, hanya satu permintaan yang diizinkan per menit.
Di lingkungan kubeconfig instans ASM, jalankan perintah berikut untuk membuat aturan pembatasan laju global yang berlaku untuk rute
productpage-route-name1pada gerbang.kubectl apply -f global-ratelimit-gw.yamlJalankan perintah berikut untuk mendapatkan konfigurasi aturan throttling global:
kubectl get asmglobalratelimiter global-test -n istio-system -o yamlSalin konten field
config.yamldari fieldstatussumber daya ASMGlobalRateLimiter pada output dari langkah sebelumnya. Tempelkan konten ini ke file ratelimit-config.yaml untuk menghasilkan konfigurasi layanan pembatasan laju global.Isi string dari field
config.yamldi dalam fieldstatussumber daya ASMGlobalRateLimiter harus ditempelkan persis seperti aslinya ke dalam fieldconfig.yamldi bagiandataConfigMap.Di lingkungan kubeconfig kluster ACK, jalankan perintah berikut untuk memperbarui konfigurasi layanan pembatasan laju global di kluster.
kubectl apply -f ratelimit-config.yamlJalankan perintah berikut untuk mengakses aplikasi Bookinfo dua kali.
Ganti
<IP gerbang ASM>dengan alamat IP aktual gerbang Anda. Untuk informasi selengkapnya tentang cara mendapatkan alamat IP gerbang, lihat Mendapatkan alamat gerbang masuk.curl -H 'host: bf2.example.com' http://<IP gerbang ASM>/productpage -v curl -H 'host: bf2.example.com' http://<IP gerbang ASM>/productpage -vBlok kode berikut menunjukkan output yang diharapkan untuk akses kedua ke aplikasi Bookinfo:
< HTTP/1.1 429 Too Many Requests < x-envoy-ratelimited: true < x-ratelimit-limit: 1, 1;w=60 < x-ratelimit-remaining: 0 < x-ratelimit-reset: 48 < date: Thu, 26 Oct 2023 04:10:11 GMT < server: istio-envoy < content-length: 0 < * Connection #0 to host 116.62.XXX.XXX left intactDalam konfigurasi throttling global, hanya satu permintaan yang diizinkan untuk mengakses aplikasi Bookinfo dalam satu menit. Permintaan harus dikirim dari alamat IP tertentu atau blok CIDR. Ketika Anda menggunakan klien dengan alamat IP tertentu untuk mengakses gateway ingress, permintaan pertama berhasil dan throttling dipicu pada permintaan kedua. Ini menunjukkan bahwa throttling global berlaku pada permintaan yang dikirim dari alamat IP tertentu.
Jalankan perintah berikut untuk mengakses aplikasi Bookinfo lagi menggunakan alamat IP yang berbeda:
curl -H 'host: bf2.example.com' http://<IP gerbang ASM>/productpage -vOutput menunjukkan bahwa tidak ada kode status 429 yang ditemukan dan aplikasi Bookinfo berhasil diakses. Ini menunjukkan bahwa permintaan lain pada rute tersebut tidak tunduk pada aturan throttling global.
Skenario 5: Konfigurasikan aturan pembatasan laju terpisah untuk alamat IP klien yang berbeda pada rute layanan virtual tertentu dari gerbang masuk
Skenario ini memerlukan instans ASM versi 1.25.0 atau lebih baru. Untuk informasi selengkapnya tentang cara memutakhirkan instans, lihat Memutakhirkan instans ASM.
Skenario ini mensyaratkan bahwa kebijakan trafik eksternal gerbang masuk ASM diatur ke
Local. Untuk informasi selengkapnya tentang pembuatan gerbang masuk dan item konfigurasinya, lihat Membuat gerbang masuk.Anda dapat memperoleh alamat IP klien dari permintaan yang dikirim ke gerbang dari field
downstream_remote_addressdi log akses gerbang. Dalam contoh ini, konfigurasikan alamat IP klien yang ingin Anda batasi berdasarkan kebutuhan Anda.
Dalam skenario ini, Anda mengonfigurasi aturan pembatasan laju untuk rute layanan virtual productpage-route-name1 di bf2.example.com:80. Aturan tersebut menentukan bahwa setiap alamat IP klien dibatasi secara terpisah, hanya mengizinkan satu permintaan per menit dari setiap alamat IP klien.
Buat file global-ratelimit-gw.yaml.
apiVersion: istio.alibabacloud.com/v1beta1 kind: ASMGlobalRateLimiter metadata: name: global-test namespace: istio-system spec: workloadSelector: labels: app: istio-ingressgateway rateLimitService: host: ratelimit.default.svc.cluster.local port: 8081 timeout: seconds: 5 isGateway: true configs: - name: productpage limit: unit: SECOND quota: 100000 target_services: - name: bookinfo namespace: default kind: VirtualService port: 80 section_name: productpage-route-name1 limit_overrides: - request_match: remote_address: distinct: true # Menentukan bahwa alamat IP klien yang berbeda dibatasi secara terpisah. limit: unit: MINUTE quota: 1Tabel berikut menjelaskan beberapa field tersebut. Untuk informasi selengkapnya tentang field-field tersebut, lihat Deskripsi CRD ASMGlobalRateLimiter.
Field
Deskripsi
workloadSelectorWorkload tempat aturan pembatasan laju berlaku. Dalam contoh ini, pembatasan laju global berlaku pada gerbang masuk ingressgateway. Atur parameter ini menjadi
istio: ingressgateway.isGatewayMenentukan apakah aturan berlaku untuk gerbang. Dalam contoh ini, parameter ini diatur ke
true.rateLimitServiceNama domain, port, dan timeout koneksi layanan pembatasan laju. Berdasarkan layanan pembatasan laju yang di-deploy di bagian Persiapan, konfigurasinya sebagai berikut:
host: ratelimit.default.svc.cluster.local port: 8081 timeout: seconds: 5limitParameter konfigurasi pembatasan laju yang berlaku pada rute layanan virtual. Dalam parameter ini:
unitmenentukan satuan waktu untuk deteksi pembatasan laju.quotamenentukan jumlah total permintaan yang diizinkan per satuan waktu.
Dalam contoh ini,
unitdiatur keSECONDdanquotadiatur ke100000. Ini berarti 100.000 permintaan diizinkan per detik pada rute yang cocok. Pengaturan ini kira-kira setara dengan tidak ada pembatasan laju yang dikonfigurasi. Tujuannya adalah hanya permintaan yang memenuhi kondisi tertentu yang dibatasi, sedangkan permintaan lain tidak perlu memicu pembatasan laju.limit_overridesKonfigurasi penggantian ambang batas pembatasan laju. Anda dapat menggunakan field ini untuk menentukan ambang batas pembatasan laju terpisah untuk permintaan tertentu. Dalam contoh ini:
Di field
request_match:remote_address.addressdigunakan untuk mencocokkan alamat IP sumber permintaan klien.remote_address.address.distinctdiatur ketrueuntuk mengaktifkan pembatasan laju terpisah untuk alamat IP klien yang berbeda.remote_addess.v4_prefix_mask_lenmencocokkan masker subnet rentang alamat IP sumber klien (opsional).
Di field
limitdari fieldlimit_overrides,unitdiatur keMINUTEdanquotadiatur ke1. Ini berarti untuk permintaan yang memenuhi kondisi yang ditentukan olehrequest_match, hanya satu permintaan yang diizinkan per menit.
target_servicesKonfigurasi rute layanan virtual yang dicocokkan oleh item pembatasan laju. Dalam parameter ini:
kindmenentukan bahwa aturan pembatasan laju berlaku pada rute layanan virtual.namespacedannamemenentukan namespace dan nama layanan virtual.portmenentukan bahwa aturan pembatasan laju hanya berlaku pada rute trafik di port 80.section_namemenentukan bahwa aturan pembatasan laju berlaku pada item rute bernamaproductpage-route-name1di layanan virtual.
Deploy aturan pembatasan laju global.
kubectl apply -f global-ratelimit-gw.yamlDapatkan konfigurasi aturan pembatasan laju global yang telah direkonsiliasi.
kubectl get asmglobalratelimiter global-test -n istio-system -o yaml |grep status: -A 50Output yang diharapkan:
status: config.yaml: | descriptors: - descriptors: - key: remote_address rate_limit: requests_per_unit: 1 unit: MINUTE key: generic_key rate_limit: requests_per_unit: 100000 unit: SECOND value: RateLimit[global-test.istio-system]-Id[537612397] domain: ratelimit.default.svc.cluster.local message: ok status: successfulPerbarui field
config.yamldi bagiandataConfigMap dari bagian Persiapan dengan output dari langkah sebelumnya.kubectl edit ConfigMap ratelimit-configKonten yang diperbarui:
apiVersion: v1 kind: ConfigMap metadata: name: ratelimit-config data: config.yaml: | descriptors: - descriptors: - key: remote_address rate_limit: requests_per_unit: 1 unit: MINUTE key: generic_key rate_limit: requests_per_unit: 100000 unit: SECOND value: RateLimit[global-test.istio-system]-Id[537612397] domain: ratelimit.default.svc.cluster.localAkses aplikasi Bookinfo dua kali berturut-turut dari klien yang berbeda.
export GATEWAY_URL=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].ip}') curl -H 'host: bf2.example.com' http://$GATEWAY_URL:80/productpage -v curl -H 'host: bf2.example.com' http://$GATEWAY_URL:80/productpage -vOutput yang diharapkan untuk akses kedua:
< HTTP/1.1 429 Too Many Requests < x-envoy-ratelimited: true < x-ratelimit-limit: 1, 1;w=60 < x-ratelimit-remaining: 0 < x-ratelimit-reset: 48 < date: Thu, 26 Jul 2025 04:10:11 GMT < server: istio-envoy < content-length: 0 < * Connection #0 to host 116.62.XXX.XXX left intactPermintaan kedua dibatasi, yang menunjukkan bahwa konfigurasi pembatasan laju global untuk gerbang masuk berhasil.
Referensi
Jika Anda ingin menerapkan throttling tanpa menggunakan layanan throttling atau dengan metode yang mengonsumsi lebih sedikit sumber daya, Anda dapat mengonfigurasi throttling lokal di ASM. Untuk informasi lebih lanjut, lihat Konfigurasikan throttling lokal di Pusat Manajemen Trafik.
Jika Anda ingin mengontrol dan membatasi trafik masuk yang diarahkan ke layanan tempat proxy sidecar disuntikkan, Anda dapat mengonfigurasi throttling global. Untuk informasi lebih lanjut, lihat Gunakan ASMGlobalRateLimiter untuk mengonfigurasi throttling global untuk gateway ingress dan trafik masuk yang diarahkan ke layanan.