Para gerenciar picos de tráfego, sobrecarga de service, exaustão de recursos ou ataques maliciosos, configure a limitação de taxa global em rotas específicas do gateway. Isso permite controle preciso do tráfego para proteger os services de backend, reduzir custos e melhorar a experiência do usuário.
Pré-requisitos
Adicione um cluster gerenciado ACK a uma instância do ASM versão 1.18.0.131 ou posterior. Para mais informações, consulte Add a cluster to an ASM instance.
Ative a injeção automática para o namespace
defaultno cluster Kubernetes. Para mais informações, consulte Enable automatic sidecar proxy injection.Crie um gateway de entrada chamado
ingressgateway, com a porta 80 habilitada. Para mais informações, consulte Create an ingress gateway.
Antes de começar
Implantar o service de limitação de taxa
-
Crie um arquivo chamado ratelimit-svc.yaml com o seguinte conteúdo.
-
No ambiente kubeconfig do cluster ACK, execute o comando a seguir para criar o service de limitação de taxa e o service Redis necessário.
Para saber como se conectar a um cluster usando kubectl, consulte Obtain the kubeconfig of a cluster and use kubectl to connect to the cluster.
kubectl apply -f ratelimit-svc.yaml
Implantar a aplicação de exemplo Bookinfo
Baixe o manifesto YAML da aplicação Bookinfo (bookinfo.yaml) no repositório do projeto Istio no GitHub.
-
No ambiente kubeconfig do cluster ACK, execute o comando a seguir para implantar a aplicação Bookinfo no cluster associado à instância do ASM.
kubectl apply -f bookinfo.yaml -
Crie o arquivo bookinfo-gateway.yaml com o seguinte conteúdo.
-
No ambiente kubeconfig da instância do ASM, execute o comando a seguir para criar uma regra de rota para a aplicação Bookinfo no gateway de entrada.
A regra de rota chama-se
productpage-route-name1e corresponde a solicitações para o domíniobf2.example.com. Para saber como se conectar a uma instância do ASM usando kubectl, consulte Access Istio resources by using control plane kubectl.kubectl apply -f bookinfo-gateway.yaml
Cenário 1: Configurar um limite de taxa global em uma rota do gateway
Este cenário demonstra como configurar uma regra de limitação de taxa para a rota productpage-route-name1, aplicável à combinação de nome de domínio e porta bf2.example.com:80. A rota productpage-route-name1 é uma entrada no VirtualService bookinfo criado na seção Before you begin. Essa rota corresponde a solicitações para caminhos como /productpage, /static, /login e /logout, encaminhando-as para o service productpage. Após a configuração da regra, o limite de taxa especificado aplica-se a todas as solicitações para esses caminhos.
-
Crie um arquivo chamado global-ratelimit-gw.yaml com o seguinte conteúdo.
A tabela a seguir descreve os campos principais. Para obter detalhes, consulte ASMGlobalRateLimiter CRD reference.
Parâmetro
Descrição
workloadSelectorSeleciona a carga de trabalho para a limitação de taxa. Neste exemplo, o limite global aplica-se à carga de trabalho do gateway de entrada, selecionada pelo rótulo
istio: ingressgateway.isGatewayIndica se a regra se aplica a um gateway. Defina como
truepara este exemplo.rateLimitServiceEspecifica o nome de domínio, a porta e o tempo limite de conexão para o service de limitação de taxa. Com base no service implantado na seção Before you begin, a configuração é a seguinte:
host: ratelimit.default.svc.cluster.local port: 8081 timeout: seconds: 5limitOs parâmetros de limitação de taxa. O campo
unitdefine o intervalo de tempo, equotadefine o número de solicitações permitidas por intervalo.Neste exemplo,
unitestá definido comoMINUTEequotacomo1. Isso permite apenas uma solicitação por minuto para a rota correspondente. O sistema rejeita as solicitações subsequentes.vhostAs condições de correspondência para o nome de domínio e a rota. O campo
namedeve corresponder ao nome de domínio no VirtualService, e o campoportdeve corresponder à porta do gateway de entrada. O nome da rota especificado emroute.name_matchdeve corresponder ao nome da entrada de rota no VirtualService. -
No ambiente kubeconfig da instância do ASM, execute o comando a seguir para criar a regra de limitação de taxa global para a rota
productpage-route-name1no gateway.kubectl apply -f global-ratelimit-gw.yaml -
Execute o comando a seguir para obter a configuração da regra de limitação de taxa global reconciliada.
kubectl get asmglobalratelimiter global-test -n istio-system -o yaml -
Cole o conteúdo de
config.yamldo campostatusda saída do recurso ASMGlobalRateLimiter da etapa anterior no arquivo ratelimit-config.yaml para gerar a configuração do service de limitação de taxa global.O conteúdo da string do campo
config.yamldentro do campostatusdo ASMGlobalRateLimiter deve ser colado exatamente como está no campoconfig.yamldentro do campodatado ConfigMap. -
No ambiente kubeconfig do cluster ACK, execute o comando a seguir para aplicar a nova configuração ao service de limitação de taxa global.
kubectl apply -f ratelimit-config.yaml -
Execute o comando a seguir duas vezes consecutivas para acessar a aplicação Bookinfo.
Substitua
<ASM_GATEWAY_IP>pelo endereço IP do gateway ASM. Para obter informações sobre como obter o endereço IP do gateway, consulte Obtain the IP address of an ingress gateway.curl -H 'host: bf2.example.com' http://<ASM_GATEWAY_IP>/productpage -v curl -H 'host: bf2.example.com' http://<ASM_GATEWAY_IP>/productpage -vA saída esperada para a segunda solicitação é a seguinte:
< 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 intactA limitação de taxa global está configurada para permitir apenas uma solicitação por minuto. Ao enviar duas solicitações consecutivas, a primeira tem sucesso, mas o gateway rejeita a segunda com o status
429 Too Many Requests. Isso confirma que a limitação de taxa global para a rota está efetiva.
Cenário 2: Limitação de taxa global em um gateway de entrada
Este cenário mostra como configurar uma regra de limitação de taxa global para a combinação de domínio e porta bf2.example.com:80. Após aplicar a regra, todas as solicitações enviadas para essa combinação de domínio e porta estarão sujeitas ao limite de taxa especificado.
-
Crie um arquivo chamado global-ratelimit-gw.yaml com o seguinte conteúdo.
A tabela a seguir descreve os campos principais. Para mais informações, consulte ASMGlobalRateLimiter CRD reference.
Parâmetro
Descrição
workloadSelectorEspecifica a carga de trabalho alvo para a regra de limitação de taxa. Neste exemplo, a regra visa a carga de trabalho do gateway de entrada, identificada pelo rótulo
istio: ingressgateway.isGatewayIndica se a regra se aplica a um gateway. Defina como
truepara este exemplo.rateLimitServiceEspecifica o domínio, a porta e o tempo limite de conexão para o service de limitação de taxa. Com base no service implantado na etapa Preparation, a configuração é a seguinte:
host: ratelimit.default.svc.cluster.local port: 8081 timeout: seconds: 5limitDefine a limitação de taxa. O campo
unitespecifica o intervalo de tempo, e o campoquotaespecifica o número de solicitações permitidas por intervalo.Neste exemplo,
unitestá definido comoMINUTEequotacomo1. Essa configuração permite apenas uma solicitação por minuto para a rota correspondente. Solicitações subsequentes dentro desse minuto são rejeitadas.vhostEspecifica o domínio e a rota para correspondência. Os campos
nameeportdevem corresponder ao domínio do VirtualService e à porta do gateway de entrada, respectivamente. -
No ambiente kubeconfig da instância do ASM, execute o comando a seguir para aplicar a regra de limitação de taxa global para a rota
productpageno gateway.kubectl apply -f global-ratelimit-gw.yaml -
Execute o comando a seguir para obter a configuração da regra de limitação de taxa global reconciliada.
kubectl get asmglobalratelimiter global-test -n istio-system -o yaml -
Copie o conteúdo da chave
config.yamldo campostatusna saída anterior e cole-o em um arquivo chamadoratelimit-config.yamlpara configurar o service de limitação de taxa global.O conteúdo da string do campo
config.yamldentro do campostatusdo ASMGlobalRateLimiter deve ser colado exatamente como está no campoconfig.yamlde mesmo nome dentro do campodatado ConfigMap. -
No ambiente kubeconfig do cluster ACK, execute o comando a seguir para atualizar a configuração do service de limitação de taxa global.
kubectl apply -f ratelimit-config.yaml -
Execute o comando a seguir duas vezes consecutivas para acessar a aplicação Bookinfo.
Substitua
<ASM_GATEWAY_IP>pelo endereço IP do gateway ASM. Para mais informações sobre como obter o endereço IP do gateway, consulte Obtain the IP address of an ingress gateway.curl -H 'host: bf2.example.com' http://<ASM_GATEWAY_IP>/productpage -v curl -H 'host: bf2.example.com' http://<ASM_GATEWAY_IP>/productpage -vA saída esperada para a segunda solicitação é a seguinte:
< 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 intactA regra de limitação de taxa global restringe o acesso à combinação de domínio e porta
bf2.example.com:80a uma solicitação por minuto. Ao enviar duas solicitações consecutivas, a primeira tem sucesso, mas a segunda é rejeitada. Isso confirma que a regra de limitação de taxa no gateway de entrada está funcionando corretamente.
Caso de uso 3: Limitação de taxa condicional em uma rota do gateway
Este caso de uso requer uma instância do ASM versão 1.19.0 ou posterior. Para instruções de atualização, consulte Update an ASM instance.
Configure uma regra de limitação de taxa para a rota productpage-route-name1 no domínio e porta bf2.example.com:80. A regra aplica-se apenas a solicitações que contêm o cabeçalho de solicitação ratelimit: "true" e o parâmetro de consulta ratelimit=enabled. Outras solicitações nesta rota não são afetadas pela regra de limitação de taxa. A rota corresponde a solicitações para caminhos como /productpage, /static, /login e /logout, e encaminha as solicitações correspondentes para o service productpage. Após a configuração da regra de limitação de taxa, as solicitações enviadas para esses caminhos que atendem às condições especificadas serão limitadas.
-
Crie um arquivo chamado
global-ratelimit-gw.yamlcom o seguinte conteúdo.A tabela a seguir descreve os campos principais. Para mais informações, consulte ASMGlobalRateLimiter CRD reference.
Parâmetro
Descrição
workloadSelectorEspecifica as cargas de trabalho sujeitas à limitação de taxa. Neste exemplo, a limitação global aplica-se ao gateway de entrada e está definida como
istio: ingressgateway.isGatewayIndica se isso se aplica ao gateway. Neste exemplo, está definido como
true.rateLimitServiceEspecifica o nome de domínio, a porta e o tempo limite de conexão para o service de limitação de taxa. Com base no service implantado na etapa Preparation, a configuração é a seguinte:
host: ratelimit.default.svc.cluster.local port: 8081 timeout: seconds: 5limitDefine os parâmetros básicos de limitação de taxa para a rota do VirtualService. O campo
unitespecifica o intervalo de tempo, equotaespecifica o número de solicitações permitidas por intervalo. Este exemplo defineunitcomoSECONDequotacomo100000, o que permite 100.000 solicitações por segundo. Esse limite alto desativa efetivamente a limitação de taxa para solicitações que não correspondem a uma substituição mais específica, garantindo que elas não sejam limitadas.vhostEspecifica as condições de correspondência para o domínio e a rota. Os campos
nameeportdevem corresponder ao domínio do VirtualService e à porta do gateway de entrada, respectivamente. O nome da rota emroute.name_matchdeve corresponder ao nome da rota no VirtualService.limit_overridesSubstitui o limite de taxa padrão. Use este campo para aplicar uma limitação de taxa mais específica a certas solicitações. Neste exemplo:
-
Em
limit_overrides, o camporequest_matchcorresponde a solicitações que contêm tanto o cabeçalho de solicitaçãoratelimit: "true"quanto o parâmetro de consultaratelimit=enabled. -
No campo
limitdelimit_overrides, definirunitcomoMINUTEequotacomo1restringe as solicitações que atendem às condições especificadas porrequest_matcha uma por minuto.
-
-
No ambiente kubeconfig da instância ASM correspondente, execute o comando a seguir para criar uma regra de limitação de taxa global para a rota
productpage-route-name1no gateway.kubectl apply -f global-ratelimit-gw.yaml -
Execute o comando a seguir para obter a configuração reconciliada da regra de limitação de taxa global.
kubectl get asmglobalratelimiter global-test -n istio-system -o yaml -
Cole o conteúdo de
config.yamldo campostatusdo recurso ASMGlobalRateLimiter (da saída esperada da etapa anterior) no arquivo ratelimit-config.yaml para gerar a configuração do service de limitação de taxa global.O conteúdo da string do campo
statusdentro do campoconfig.yamldoASMGlobalRateLimiterdeve ser colado exatamente como está no campoconfig.yamlde mesmo nome dentro do campodatadoConfigMap. -
No ambiente kubeconfig do cluster ACK, execute o comando a seguir para atualizar a configuração do service de limitação de taxa global no cluster.
kubectl apply -f ratelimit-config.yaml -
Execute o comando a seguir duas vezes consecutivas para acessar a aplicação Bookinfo.
Substitua
<ASM_GATEWAY_IP>pelo IP do gateway. Para obter informações sobre como obter o IP do gateway, consulte Obtain the IP address of an ingress gateway.curl -H 'host: bf2.example.com' http://<ASM_GATEWAY_IP>/productpage -v curl -H 'host: bf2.example.com' http://<ASM_GATEWAY_IP>/productpage -vA saída esperada para a segunda solicitação à aplicação Bookinfo é a seguinte:
< 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 intactNa configuração de limitação de taxa global, as solicitações para a aplicação Bookinfo são limitadas a uma por minuto se contiverem o cabeçalho de solicitação
ratelimit: "true"e o parâmetro de consultaratelimit=enabled. Ao fazer duas solicitações consecutivas para a aplicação Bookinfo com esse cabeçalho e parâmetro de consulta, você pode ver que a primeira solicitação tem sucesso e a segunda é limitada, o que indica que a configuração de limitação de taxa global para correspondência de solicitações específicas no gateway de entrada foi bem-sucedida. -
Execute o comando a seguir para acessar a aplicação Bookinfo novamente sem o cabeçalho de solicitação
ratelimit: "true"ou o parâmetro de consultaratelimit=enabled.curl -H 'host: bf2.example.com' http://<ASM_GATEWAY_IP>/productpage -vA saída mostra que a aplicação Bookinfo é acessada com sucesso e nenhum código de status 429 é retornado. Isso confirma que a regra de limitação de taxa não afeta outras solicitações na rota.
Cenário 4: Configurar limitação baseada em IP para uma rota de VirtualService
Este cenário requer uma instância do ASM versão 1.19.0 ou posterior. Para instruções de atualização, consulte Update an ASM instance.
Para configurar a limitação para endereços IP de cliente específicos em um gateway de entrada ASM, você deve primeiro garantir que a política de tráfego externo do gateway de entrada esteja definida como Local. Para saber como criar um gateway de entrada e suas opções de configuração, consulte Create an ingress gateway.
Você pode encontrar o endereço IP do cliente para solicitações ao gateway no campo
downstream_remote_addressdo log de acesso do gateway. Neste exemplo, configure a regra usando o endereço IP do cliente que você deseja limitar.
Este cenário mostra como configurar uma regra de limitação para a rota de VirtualService productpage-route-name1, associada à combinação de domínio e porta bf2.example.com:80. A regra foi projetada para aplicar-se apenas a solicitações de endereços IP de cliente específicos, deixando outras solicitações na mesma rota inalteradas.
-
Crie um arquivo chamado
global-ratelimit-gw.yamlcom o seguinte conteúdo.A tabela a seguir descreve os campos principais. Para obter detalhes sobre esses campos, consulte ASMGlobalRateLimiter CRD reference.
Parâmetro
Descrição
workloadSelectorSeleciona a carga de trabalho à qual a limitação se aplica. Este exemplo aplica a limitação global à carga de trabalho do gateway de entrada, selecionada usando o rótulo
app: istio-ingressgateway.isGatewayIndica se a regra se aplica a um gateway. Neste exemplo, está definido como
true.rateLimitServiceO domínio, a porta e o tempo limite de conexão para o service de limitação. Com base no service de limitação implantado nos prerequisites, a configuração é a seguinte:
host: ratelimit.default.svc.cluster.local port: 8081 timeout: seconds: 5limitOs parâmetros básicos de limitação para a rota do VirtualService. O campo
unitespecifica o intervalo de tempo, equotaespecifica o número de solicitações permitidas por intervalo.Este exemplo define
unitcomoSECONDequotacomo100000, o que permite 100.000 solicitações por segundo. Esse limite alto desativa efetivamente a limitação para solicitações que não correspondem a uma substituição específica.vhostAs condições de correspondência para o domínio e a rota. Os campos
nameeportdevem corresponder ao domínio do VirtualService e à porta do gateway de entrada, respectivamente. O nome da rota especificado emroute.name_matchdeve corresponder ao nome da rota no VirtualService.limit_overridesDefine um limiar de limitação mais específico para certas solicitações. Neste exemplo:
-
O campo
request_matchcorresponde a solicitações com base no endereço IP de source do cliente usandoremote_address.address. Você também pode especificar um intervalo opcional de endereços IP definindo um comprimento de máscara de sub-rede no camporemote_address.v4_prefix_mask_len. -
No campo
limit_overrides, o campolimité configurado comunitdefinido comoMINUTEequotadefinido como1, o que significa que, para solicitações que correspondem às condições especificadas porrequest_match, apenas uma solicitação é permitida por minuto.
-
-
Usando o kubeconfig da instância do ASM, execute o comando a seguir para criar a regra de limitação global para a rota
productpage-route-name1no gateway de entrada.kubectl apply -f global-ratelimit-gw.yaml -
Execute o comando a seguir para recuperar a configuração reconciliada da regra de limitação global.
kubectl get asmglobalratelimiter global-test -n istio-system -o yaml -
Copie o conteúdo de
config.yamldo campostatusda saída do recurso ASMGlobalRateLimiter da etapa anterior e cole-o emratelimit-config.yamlpara configurar o service de limitação global.O conteúdo da string do campo
config.yaml, que está dentro do campostatusdo recurso ASMGlobalRateLimiter, deve ser colado literalmente no campoconfig.yamldentro do campodatado ConfigMap. -
Usando o kubeconfig do cluster ACK, execute o comando a seguir para atualizar a configuração do service de limitação global.
kubectl apply -f ratelimit-config.yaml -
De um cliente com o endereço IP especificado, execute os comandos a seguir duas vezes consecutivas para acessar a aplicação Bookinfo.
Substitua
<ASM_GATEWAY_IP>pelo endereço IP real do gateway. Para saber como obter o endereço IP do gateway, consulte Obtain the IP address of an ingress gateway.curl -H 'host: bf2.example.com' http://<ASM_GATEWAY_IP>/productpage -v curl -H 'host: bf2.example.com' http://<ASM_GATEWAY_IP>/productpage -vA saída esperada para a segunda solicitação é a seguinte:
< 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 intactA configuração de limitação global limita as solicitações do endereço IP especificado (ou intervalo) a uma solicitação por minuto. Ao enviar duas solicitações consecutivas de um cliente com esse endereço IP, a primeira tem sucesso, mas a segunda é limitada. Isso confirma que a regra de limitação global para o gateway de entrada está funcionando conforme o esperado.
-
De um cliente com um endereço IP diferente, execute o comando a seguir para acessar a aplicação Bookinfo novamente.
curl -H 'host: bf2.example.com' http://<ASM_GATEWAY_IP>/productpage -vA solicitação tem sucesso e nenhum código de status HTTP
429é retornado. Isso indica que outras solicitações na rota não são afetadas pela regra de limitação global.
Cenário 5: Configurar limitação de taxa por IP de cliente em uma rota
Este cenário requer uma instância do ASM versão 1.25.0 ou posterior. Para instruções de atualização, consulte Upgrade an ASM instance.
Neste cenário, você deve definir a política de tráfego externo do gateway de entrada ASM como
Local. Isso preserva o endereço IP original do cliente. Para mais informações sobre como criar um gateway de entrada e suas opções de configuração, consulte Create an ingress gateway.Você pode encontrar o endereço IP do cliente de uma solicitação ao gateway no campo
downstream_remote_addressdo log de acesso. Neste exemplo, a regra de limitação de taxa é configurada com base no endereço IP real do cliente.
Neste cenário, você configurará uma regra de limitação de taxa para a rota de VirtualService productpage-route-name1 em bf2.example.com:80 para limitar cada endereço IP de cliente exclusivo a uma solicitação por minuto.
-
Crie um arquivo chamado
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 # Apply rate limiting to each client IP address individually. limit: unit: MINUTE quota: 1A tabela a seguir descreve os campos principais. Para mais informações sobre os campos, consulte ASMGlobalRateLimiter CRD reference.
Parâmetro
Descrição
workloadSelectorSeleciona a carga de trabalho à qual a regra de limitação de taxa se aplica. Neste exemplo, a limitação de taxa global é aplicada ao gateway de entrada, selecionado pelo rótulo
app: istio-ingressgateway.isGatewayIndica se a regra se aplica a um gateway. Neste exemplo, está definido como
true.rateLimitServiceAs configurações de domínio, porta e tempo limite de conexão para o service de limitação de taxa. Com base no service de limitação de taxa implantado na seção Prerequisites, a configuração é a seguinte:
host: ratelimit.default.svc.cluster.local port: 8081 timeout: seconds: 5limitOs parâmetros de limitação de taxa que se aplicam à rota do VirtualService. Inclui os seguintes campos:
-
unit: O intervalo de tempo para verificações de limite de taxa. -
quota: O número de solicitações permitidas por intervalo de tempo.
Neste exemplo,
unitestá definido comoSECONDequotacomo100000. Esse limite alto desativa efetivamente a limitação de taxa para solicitações não cobertas por uma substituição específica, garantindo que outro tráfego permaneça inalterado.limit_overridesSubstitui o limite de taxa padrão para solicitações específicas. Neste exemplo:
-
O campo
request_matchespecifica condições para a substituição:-
O campo
remote_addresscorresponde a solicitações pelo endereço IP do cliente. -
Definir o parâmetro
distinctcomotrueaplica esse limite a cada cliente individualmente. -
remote_addess.v4_prefix_mask_lencorresponde à máscara de sub-rede para o intervalo de endereços IP de source do cliente (opcional).
-
-
O campo
limitdentro delimit_overridesdefineunitcomoMINUTEequotacomo1. Isso limita as solicitações que correspondem às condições derequest_matcha uma por minuto.
target_servicesEspecifica a rota do VirtualService à qual a regra de limitação de taxa se aplica.
-
kindespecifica que a regra visa um VirtualService. -
namespaceenameespecificam o namespace e o nome do VirtualService. -
portrestringe a regra ao tráfego na porta 80. -
section_nameespecifica que a regra se aplica à rota chamadaproductpage-route-name1dentro do VirtualService.
-
-
Aplique a regra de limitação de taxa global.
kubectl apply -f global-ratelimit-gw.yaml -
Visualize a configuração reconciliada da regra de limitação de taxa global.
kubectl get asmglobalratelimiter global-test -n istio-system -o yaml |grep status: -A 50Saída esperada:
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: successful -
Edite o ConfigMap
ratelimit-configda seção Prerequisites, substituindo o valor da chaveconfig.yamlpela saída de status da etapa anterior.kubectl edit ConfigMap ratelimit-configConteúdo atualizado:
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.local -
De um cliente, acesse a aplicação Bookinfo duas vezes consecutivamente.
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 -vSaída esperada para a segunda solicitação:
< 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 intactA saída mostra que a segunda solicitação teve a taxa limitada, confirmando que a regra de limitação de taxa global para o gateway de entrada está configurada corretamente.
Documentos relacionados
Use a limitação local do ASM para um método eficiente em termos de recursos que não depende de um service de limitação de taxa. Para instruções, consulte Configure local throttling in ASM.
Use a limitação global para limitar o tráfego de entrada de um service de aplicação com um sidecar injetado. Para instruções, consulte Configure global throttling for the inbound traffic of an application service.