Todos os produtos
Search
Central de documentação

Alibaba Cloud Service Mesh:configure a limitação de taxa local para um ingress gateway

Última atualização: Sep 29, 2026

Durante eventos de alto tráfego, como promoções relâmpago, picos repentinos de tráfego podem sobrecarregar seu sistema, causando acúmulo de requisições e falhas nos services. O ASM fornece um recurso de limitação de taxa local para controlar o tráfego no ingress gateway e proteger seus services de backend. Este tópico ensina a configurar esse recurso.

Pré-requisitos

  • Você deve ter uma instância do ASM que atenda aos seguintes requisitos:

    • ASM Enterprise Edition ou Ultimate Edition: versão 1.11.5.30 ou posterior. Para obter mais informações sobre como atualizar uma instância do ASM, consulte Upgrade an ASM instance.

    • ASM Standard Edition: versão 1,9 ou posterior. Esta edição oferece suporte à limitação de taxa local apenas por meio do método nativo do Istio. Para outras versões do Istio, consulte a documentação da versão correspondente. Para a versão mais recente do Istio, consulte Enabling Rate Limits using Envoy.

  • O cluster está adicionado à instância do ASM.

  • Um ingress gateway implantado. Para obter mais informações, consulte crie an ingress gateway.

  • Ter criado os services bookinfo e nginx. Neste tópico, o service bookinfo está implantado no namespace padrão, e o service nginx está implantado no namespace foo. Para obter mais informações sobre como criar o service bookinfo, consulte Deploy an application in a cluster associated with an ASM instance.

    Criar o service nginx

    1. crie um arquivo nginx.yaml com o seguinte conteúdo.

      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. Execute o seguinte comando para implantar o service nginx no namespace foo:

      kubectl apply -f nginx.yaml -n foo 
  • Ter criado um gateway e um virtual service. Para obter mais informações, consulte gerencie gateways e gerencie virtual services.

    YAML do Gateway

    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

    YAML do VirtualService

    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
  • Ter instalado uma ferramenta de teste de carga. Para obter mais informações, consulte hey.

Aplicabilidade

O recurso de limitação de taxa local no ASM aplica-se a gateways do ASM e a services de aplicações com sidecar injetado.

Casos de uso

Este tópico utiliza os services bookinfo e nginx para demonstrar o uso da limitação de taxa em gateways e services. O service nginx é implantado no namespace foo para verifique o escopo da limitação de taxa.场景示例

Cenário 1: Limitar a taxa de uma rota de virtual service

configure uma regra de limitação de taxa para a rota productpage-route-name1 na combinação de domínio e porta bf2.example.com:80. A productpage-route-name1 é uma rota no virtual service bookinfo criado na seção Prerequisites. Ela corresponde a requisições para caminhos como /productpage, /static, /login e /logout, encaminhando-as para o service productpage. Após a configuração, a regra limita a taxa de tráfego das requisições para esses caminhos.

  1. Crie uma regra de limitação de taxa local.

    1. Acesse o console do ASM. No painel de navegação à esquerda, escolha Service Mesh > Mesh Management.

    2. Na página Mesh Management, clique em o nome da instância do ASM. No painel de navegação à esquerda, escolha Traffic Management Center > Traffic Protection and Scheduling. Na página exibida, clique em Create.

    3. Na página Create, configure os parâmetros conforme a descrição a seguir e clique em OK.

      Para obter mais informações sobre os parâmetros, consulte ASMLocalRateLimiter CRD reference.

      Seção

      Parâmetro

      Descrição

      Basic Information About Throttling

      Namespaces

      O namespace da regra de limitação de taxa local. Deve ser o mesmo namespace do workload limitado. Neste exemplo, selecione istio-system, pois todos os gateways do ASM estão implantados nesse namespace.

      Name

      Um nome personalizado para a configuração de limitação de taxa local. Neste exemplo, use ingressgateway.

      Type of Effective Workload

      O tipo de workload ao qual a limitação de taxa se aplica. Os valores aceitos são Applicable Service e Applicable Gateway. Neste exemplo, use Applicable Gateway.

      Relevant Workload

      Se você selecionar Applicable Gateway, também deverá selecionar um Select Istio Gateway. A regra se aplica ao workload associado ao gateway selecionado. Neste exemplo, use bookinfo-gateway.

      List of Throttling Rules

      Gateway Domain Name

      Selecione um domínio declarado no gateway. A regra de limitação de taxa entra em vigor para a combinação de porta e domínio especificada. Neste exemplo, use bf2.example.com.

      Gateway Port

      Selecione uma porta declarada no gateway. A regra de limitação de taxa entra em vigor para a combinação de porta e domínio especificada. Neste exemplo, use 80.

      Match Routes of Virtual Service

      Selecione uma rota declarada no virtual service associado ao gateway. A regra de limitação de taxa entra em vigor para a rota especificada. Neste exemplo, use productpage-route-name1.

      Throttling Configuration

      especifique a janela de detecção e o número de requisições permitidas para o algoritmo de token bucket da limitação de taxa local. As requisições que excederem o limite dentro da janela de detecção serão limitadas. Neste exemplo, use as seguintes configurações:

      • defina Time Window for Throttling Detection como 1s.

      • defina Number of Requests Allowed in Time Window como 10.

      Essas configurações limitam as requisições ao workload do service a 10 por segundo.

      advanced config

      clique em Show Advanced Settings para especifique comportamentos avançados para quando a limitação de taxa ocorrer. configure as opções avançadas conforme necessário. Neste exemplo, defina Custom Throttling Response Body como {"ret_code": xxx,"message": "Your request be limited"}.

      O código a seguir mostra o arquivo YAML da configuração de limitação de taxa local.

      • Se você não configurar as opções avançadas, o sistema retornará a resposta padrão quando a limitação de taxa for acionada.

        YAML sem configurações avançadas

        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
      • Se você configurar as opções avançadas, o sistema retornará uma resposta personalizada quando a limitação de taxa for acionada.

        YAML com configurações avançadas

        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. Execute os seguintes comandos na ferramenta hey para gerar tráfego de estresse de forma contínua.

    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. Execute o seguinte comando para acessar o caminho /productpage do gateway.

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

    Saída esperada:

    < 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

    A saída indica que o acesso ao service bookinfo está limitado.

  4. Execute o seguinte comando para acessar o caminho /nginx do gateway.

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

    A resposta não inclui o código de status 429, indicando que o acesso não está limitado.

Cenário 2: Limitar a taxa de um domínio e porta do gateway

configure uma regra de limitação de taxa para a combinação de domínio e porta bf2.example.com:80 a fim de limitar o tráfego para todos os caminhos nessa combinação.

  1. configure uma regra de limitação de taxa.

    1. Acesse o console do ASM. No painel de navegação à esquerda, escolha Service Mesh > Mesh Management.

    2. Na página Mesh Management, clique em o nome da instância do ASM. No painel de navegação à esquerda, escolha Traffic Management Center > Traffic Protection and Scheduling. Na página exibida, clique em Create.

    3. Na página Create, configure os parâmetros conforme a descrição a seguir e clique em OK.

      Para obter mais informações sobre os parâmetros, consulte ASMLocalRateLimiter CRD reference.

      Seção

      Parâmetro

      Descrição

      Basic Information About Throttling

      Namespaces

      O namespace da regra de limitação de taxa local. Deve ser o mesmo namespace do workload limitado. Neste exemplo, selecione istio-system, pois todos os gateways do ASM estão implantados nesse namespace.

      Name

      Um nome personalizado para a configuração de limitação de taxa local. Neste exemplo, use ingressgateway.

      Type of Effective Workload

      O tipo de workload ao qual a limitação de taxa se aplica. Os valores aceitos são Applicable Service e Applicable Gateway. Neste exemplo, use Applicable Gateway.

      Relevant Workload

      Se você selecionar Applicable Gateway, também deverá selecionar um Select Istio Gateway. A regra se aplica ao workload associado ao gateway selecionado. Neste exemplo, use bookinfo-gateway.

      List of Throttling Rules

      Gateway Domain Name

      Selecione um domínio declarado no gateway. A regra de limitação de taxa entra em vigor para a combinação de porta e domínio especificada. Neste exemplo, use bf2.example.com.

      Gateway Port

      Selecione uma porta declarada no gateway. A regra de limitação de taxa entra em vigor para a combinação de porta e domínio especificada. Neste exemplo, use 80.

      Match Routes of Virtual Service

      Não selecione uma rota neste exemplo. Isso aplica a regra de limitação de taxa a todas as rotas do domínio e porta especificados.

      Throttling Configuration

      especifique a janela de detecção e o número de requisições permitidas para o algoritmo de token bucket da limitação de taxa local. As requisições que excederem o limite dentro da janela de detecção serão limitadas. Neste exemplo, use as seguintes configurações:

      • defina Time Window for Throttling Detection como 1s.

      • defina Number of Requests Allowed in Time Window como 10.

      Essas configurações limitam as requisições ao workload do service a 10 por segundo.

      O código a seguir mostra o arquivo YAML da configuração de limitação de taxa local.

      YAML de limitação de taxa local

      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. Execute o seguinte comando na ferramenta hey para gerar tráfego de estresse continuamente.

    hey -host bf2.example.com -c 10 -n 100000 http://${ASM_GATEWAY_IP}/nginx
  3. Execute o seguinte comando para acessar o caminho /nginx do gateway.

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

    A resposta retorna HTTP/1.1 429 Too Many Requests, indicando que o acesso ao caminho /nginx no gateway está limitado.

Cenário 3: Limitar a taxa por cabeçalho de requisição

configure uma regra de limitação de taxa para a rota nginx-route-name1 na combinação de domínio e porta bf2.example.com:80. Você pode especificar que a regra entre em vigor apenas para requisições com o cabeçalho ratelimit: "true". Essa regra não afeta outras requisições para a rota. A nginx-route-name1 é uma rota no virtual service bookinfo criado na seção Prerequisites. Ela corresponde a requisições para o caminho /nginx, encaminhando-as para o service nginx.

  1. configure uma regra de limitação de taxa.

    1. Acesse o console do ASM. No painel de navegação à esquerda, escolha Service Mesh > Mesh Management.

    2. Na página Mesh Management, clique em o nome da instância do ASM. No painel de navegação à esquerda, escolha Traffic Management Center > Traffic Protection and Scheduling. Na página exibida, clique em Create.

    3. Na página Create, configure os parâmetros conforme a descrição a seguir e clique em OK.

      Para obter mais informações sobre os parâmetros, consulte ASMLocalRateLimiter CRD reference.

      Seção

      Parâmetro

      Descrição

      Basic Information About Throttling

      Namespaces

      O namespace da regra de limitação de taxa local. Deve ser o mesmo namespace do workload limitado. Neste exemplo, selecione istio-system, pois todos os gateways do ASM estão implantados nesse namespace.

      Name

      Um nome personalizado para a configuração de limitação de taxa local. Neste exemplo, use ingressgateway.

      Type of Effective Workload

      O tipo de workload ao qual a limitação de taxa se aplica. Os valores aceitos são Applicable Service e Applicable Gateway. Neste exemplo, use Applicable Gateway.

      Relevant Workload

      Se você selecionar Applicable Gateway, também deverá selecionar um Select Istio Gateway. A regra se aplica ao workload associado ao gateway selecionado. Neste exemplo, use bookinfo-gateway.

      List of Throttling Rules

      Gateway Domain Name

      Selecione um domínio declarado no gateway. A regra de limitação de taxa entra em vigor para a combinação de porta e domínio especificada. Neste exemplo, use bf2.example.com.

      Gateway Port

      Selecione uma porta declarada no gateway. A regra de limitação de taxa entra em vigor para a combinação de porta e domínio especificada. Neste exemplo, use 80.

      Match Routes of Virtual Service

      Selecione uma rota declarada no virtual service associado ao gateway. A regra de limitação de taxa entra em vigor para a rota especificada. Neste exemplo, use nginx-route-name1.

      Match Request Attributes

      especifique uma condição de correspondência de requisição para acionar a regra de limitação de taxa. Neste exemplo, use as seguintes configurações:

      • defina Matched Attributes como Specific Request Header.

      • defina Request Header como ratelimit.

      • defina Matching Method como Exact Match.

      • defina Matched Content como true.

      Throttling Configuration

      especifique a janela de detecção e o número de requisições permitidas para o algoritmo de token bucket da limitação de taxa local. As requisições que excederem o limite dentro da janela de detecção serão limitadas. Neste exemplo, use as seguintes configurações:

      • defina Time Window for Throttling Detection como 1s.

      • defina Number of Requests Allowed in Time Window como 10.

      Essas configurações limitam as requisições ao workload do service a 10 por segundo.

      O código a seguir mostra o arquivo YAML da configuração de limitação de taxa local.

      YAML de limitação de taxa local

      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. Execute o seguinte comando na ferramenta hey para gerar tráfego de estresse continuamente. As requisições incluem o cabeçalho ratelimit: true para acionar a limitação de taxa.

    hey -host bf2.example.com -H 'ratelimit: true' -c 10 -n 10000 http://${ASM_GATEWAY_IP}/nginx
  3. Execute o seguinte comando para acessar o caminho /nginx do gateway.

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

    A resposta retorna HTTP/1.1 429 Too Many Requests, indicando que as requisições para o caminho /nginx do gateway com o cabeçalho ratelimit: true estão limitadas.

  4. Execute o seguinte comando para acessar o caminho /nginx do gateway, mas sem o cabeçalho ratelimit: true.

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

    A resposta não inclui o código de status 429, indicando que as requisições sem o cabeçalho ratelimit: true não estão limitadas.

Operações relacionadas

exclua a regra de limitação de taxa

  1. exclua a regra de limitação de taxa.

    1. Acesse o console do ASM. No painel de navegação à esquerda, escolha Service Mesh > Mesh Management.

    2. Na página Mesh Management, clique em o nome da instância do ASM. No painel de navegação à esquerda, escolha Traffic Management Center > Traffic Protection and Scheduling.

    3. Na página Rate Limiting, localize a regra de limitação de taxa desejada, clique em Delete na coluna Actions e, em seguida, clique em OK na caixa de diálogo Submit.

  2. Execute o seguinte comando para acessar o caminho /nginx do gateway.

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

    A resposta não inclui o código de status 429, indicando que o acesso não está limitado.

Documentação relacionada