All Products
Search
Document Center

Alibaba Cloud Service Mesh:Konfigurasikan pembatasan laju lokal untuk gerbang masuk

Last Updated:Sep 26, 2026

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.

  • Kluster telah ditambahkan ke instans ASM.

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

    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 layanan nginx di namespace foo:

      kubectl apply -f nginx.yaml -n foo 
  • Anda telah membuat gateway dan layanan virtual. Untuk informasi selengkapnya, lihat Manage gateways dan Manage virtual services.

    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

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

  1. Buat aturan pembatasan laju lokal.

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

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

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

        YAML without advanced settings

        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 pengaturan lanjutan, sistem akan mengembalikan respons kustom saat pembatasan laju dipicu.

        YAML with advanced settings

        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. 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}/productpage
    hey -host bf2.example.com -c 10 -n 100000 http://${ASM_GATEWAY_IP}/nginx
  3. Jalankan perintah berikut untuk mengakses path /productpage gateway.

    curl -H 'host: bf2.example.com'  http://${ASM_GATEWAY_IP}/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, 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.

  1. Konfigurasikan aturan pembatasan laju.

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

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

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

      Local rate limiting 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. 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
  3. Jalankan perintah berikut untuk mengakses path /nginx gateway.

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

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

  1. Konfigurasikan aturan pembatasan laju.

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

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

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

      Local rate limiting 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:
                  header_match:
                    - exact_match: 'true'
                      invert_match: false
                      name: ratelimit
                  name_match: nginx-route-name1
        isGateway: true
        workloadSelector:
          labels:
            istio: ingressgateway
  2. Jalankan perintah berikut di tool hey untuk terus-menerus menghasilkan trafik stres. Semua permintaan membawa header permintaan ratelimit: true guna memicu pembatasan laju.

    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 mengembalikan HTTP/1.1 429 Too Many Requests, yang menunjukkan bahwa permintaan ke path /nginx gateway dengan header permintaan ratelimit: true dibatasi.

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

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

    Respons tidak menyertakan kode status 429, yang menunjukkan bahwa permintaan tanpa header permintaan ratelimit: true tidak dibatasi.

Operasi terkait

Hapus aturan pembatasan laju

  1. Hapus aturan pembatasan laju.

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

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

    3. Pada halaman Rate Limiting, temukan aturan pembatasan laju yang dituju, klik Delete di kolom Actions, lalu klik OK di kotak dialog Submit.

  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, yang menunjukkan bahwa akses tidak dibatasi.

Dokumentasi terkait