全部产品
Search
文档中心

Alibaba Cloud Service Mesh:Konfigurasikan pembatasan lokal untuk gerbang masuk

更新时间:Jan 05, 2026

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.

  • Kluster telah ditambahkan ke instans ASM.

  • 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.

    Expand to view how to create the nginx service

    1. Buat file nginx.yaml dengan konten berikut.

      apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
      kind: Deployment
      metadata:
        name: nginx
      spec:
        selector:
          matchLabels:
            app: nginx
        replicas: 1
        template:
          metadata:
            labels:
              app: nginx
              sidecarset-injected: "true"
          spec:
            containers:
            - name: nginx
              image: nginx:1.14.2
              ports:
              - containerPort: 80
      ---
      apiVersion: v1
      kind: Service
      metadata:
        name: nginx
      spec:
        ports:
          - name: http
            port: 80
            protocol: TCP
            targetPort: 80
        selector:
          app: nginx
        type: ClusterIP
    2. Jalankan perintah berikut untuk mendeploy Nginx di namespace foo.

      kubectl apply -f nginx.yaml -n foo 
  • Aturan gateway dan layanan virtual telah dibuat. Untuk informasi selengkapnya, lihat Manage gateway rules dan Manage virtual services.

    Expand to view the Gateway YAML

    apiVersion: networking.istio.io/v1beta1
    kind: Gateway
    metadata:
      name: bookinfo-gateway
      namespace: default
    spec:
      selector:
        istio: ingressgateway
      servers:
      - hosts:
        - bf2.example.com
        port:
          name: http
          number: 80
          protocol: http

    Expand to view the VirtualService YAML

    apiVersion: networking.istio.io/v1beta1
    kind: VirtualService
    metadata:
      name: bookinfo
      namespace: default
    spec:
      gateways:
      - bookinfo-gateway
      hosts:
      - bf2.example.com
      http:
      - match:
        - uri:
            exact: /productpage
        - uri:
            prefix: /static
        - uri:
            exact: /login
        - uri:
            exact: /logout
        - uri:
            prefix: /api/v1/products
        name: productpage-route-name1
        route:
        - destination:
            host: productpage
            port:
              number: 9080
      - match:
        - uri:
            prefix: /nginx
        name: nginx-route-name1
        rewrite:
          uri: /
        route:
        - destination:
            host: nginx.foo.svc.cluster.local
            port:
              number: 80
  • 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.

  1. Buat aturan pembatasan lokal.

    1. Masuk ke Konsol ASM. Di panel navigasi sebelah kiri, pilih Service Mesh > Mesh Management.

    2. Pada halaman Mesh Management, klik nama instans ASM. Di panel navigasi sebelah kiri, pilih Traffic Management Center > Traffic Protection and Scheduling. Pada halaman yang muncul, klik Create.

    3. 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.

        Expand to view the local throttling YAML without advanced options

        apiVersion: istio.alibabacloud.com/v1beta1
        kind: ASMLocalRateLimiter
        metadata:
          name: ingressgateway
          namespace: istio-system
        spec:
          configs:
            - limit:
                fill_interval:
                  seconds: 1
                quota: 10
              match:
                vhost:
                  name: bf2.example.com
                  port: 80
                  route:
                    name_match: productpage-route-name1
          isGateway: true
          workloadSelector:
            labels:
              istio: ingressgateway
      • Jika Anda mengonfigurasi opsi lanjutan, respons kustom akan dikembalikan saat pembatasan dipicu.

        Expand to view the local throttling YAML with advanced options

        apiVersion: istio.alibabacloud.com/v1beta1
        kind: ASMLocalRateLimiter
        metadata:
          name: ingressgateway
          namespace: istio-system
        spec:
          configs:
            - limit:
                custom_response_body: '{"ret_code": xxx, "message": "Your request be limited" }'
                fill_interval:
                  seconds: 1
                quota: 10
              match:
                vhost:
                  name: bf2.example.com
                  port: 80
                  route:
                    name_match: productpage-route-name1
          isGateway: true
          workloadSelector:
            labels:
              istio: ingressgateway
  2. 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>/productpage
    hey -host bf2.example.com -c 10 -n 100000 http://<ASM gateway IP address>/nginx
  3. Jalankan perintah berikut untuk mengakses path /productpage gateway.

    curl -H 'host: bf2.example.com'  http://<ASM gateway IP address>/productpage -v

    Output 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_limited

    Output tersebut menunjukkan bahwa akses ke layanan bookinfo dibatasi.

  4. Jalankan perintah berikut untuk mengakses path /nginx gateway.

    curl -H 'host: bf2.example.com'  http://${ASM_GATEWAY_IP}/nginx  -v

    Respons 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.

  1. Konfigurasikan aturan pembatasan.

    1. Masuk ke Konsol ASM. Di panel navigasi sebelah kiri, pilih Service Mesh > Mesh Management.

    2. Pada halaman Mesh Management, klik nama instans ASM. Di panel navigasi sebelah kiri, pilih Traffic Management Center > Traffic Protection and Scheduling. Pada halaman yang muncul, klik Create.

    3. 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.

      Expand to view the local throttling YAML

      apiVersion: istio.alibabacloud.com/v1beta1
      kind: ASMLocalRateLimiter
      metadata:
        name: ingressgateway
        namespace: istio-system
      spec:
        configs:
          - limit:
              fill_interval:
                seconds: 1
              quota: 10
            match:
              vhost:
                name: bf2.example.com
                port: 80
                route: {}
        isGateway: true
        workloadSelector:
          labels:
            istio: ingressgateway
  2. 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}/nginx
  3. Jalankan perintah berikut untuk mengakses path /nginx gateway.

    curl -H 'host: bf2.example.com'  http://${ASM_GATEWAY_IP}/nginx -v

    Respons HTTP/1.1 429 Too Many Requests menunjukkan 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.

  1. Konfigurasikan aturan pembatasan.

    1. Masuk ke Konsol ASM. Di panel navigasi sebelah kiri, pilih Service Mesh > Mesh Management.

    2. Pada halaman Mesh Management, klik nama instans ASM. Di panel navigasi sebelah kiri, pilih Traffic Management Center > Traffic Protection and Scheduling. Pada halaman yang muncul, klik Create.

    3. 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.

      Expand to view the local throttling YAML

      apiVersion: istio.alibabacloud.com/v1
      kind: ASMLocalRateLimiter
      metadata:
        name: ingressgateway
        namespace: istio-system
      spec:
        configs:
          - limit:
              fill_interval:
                seconds: 1
              quota: 10
            match:
              vhost:
                name: bf2.example.com
                port: 80
                route:
                  header_match:
                    - exact_match: 'true'
                      invert_match: false
                      name: ratelimit
                  name_match: nginx-route-name1
        isGateway: true
        workloadSelector:
          labels:
            istio: ingressgateway
  2. Di tool hey, jalankan perintah berikut untuk terus-menerus menghasilkan volume traffic tinggi. Semua permintaan membawa header ratelimit: true untuk memicu pembatasan.

    hey -host bf2.example.com -H 'ratelimit: true' -c 10 -n 10000 http://${ASM_GATEWAY_IP}/nginx
  3. Jalankan perintah berikut untuk mengakses path /nginx gateway.

    curl -H 'host: bf2.example.com' -H 'ratelimit: true'  http://${ASM_GATEWAY_IP}/nginx -v

    Respons HTTP/1.1 429 Too Many Requests menunjukkan bahwa permintaan ke path /nginx gateway yang membawa header ratelimit: true dibatasi.

  4. Jalankan perintah berikut untuk mengakses path /nginx gateway, tetapi tanpa header ratelimit: true.

    curl -H 'host: bf2.example.com' http://${ASM_GATEWAY_IP}/nginx -v

    Respons tidak menyertakan kode status 429. Hal ini menunjukkan bahwa permintaan tanpa header ratelimit: true tidak terpengaruh oleh pembatasan.

Operasi Terkait

Hapus konfigurasi pembatasan dan lanjutkan akses

  1. Hapus aturan pembatasan.

    1. Masuk ke Konsol ASM. Di panel navigasi sebelah kiri, pilih Service Mesh > Mesh Management.

    2. Pada halaman Mesh Management, klik nama instans ASM. Di panel navigasi sebelah kiri, pilih Traffic Management Center > Traffic Protection and Scheduling.

    3. Pada halaman Traffic Protection and Scheduling, temukan aturan pembatasan yang ingin dihapus lalu klik Delete di kolom Actions. Pada kotak dialog Confirm, klik OK.

  2. Jalankan perintah berikut untuk mengakses path /nginx gateway.

    curl -H 'host: bf2.example.com'  http://${ASM_GATEWAY_IP}/nginx -v

    Respons tidak menyertakan kode status 429. Hal ini menunjukkan bahwa akses tidak dibatasi.

Referensi