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.
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.
-
Ter criado um gateway e um virtual service. Para obter mais informações, consulte gerencie gateways e gerencie virtual services.
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.
-
Crie uma regra de limitação de taxa local.
Acesse o console do ASM. No painel de navegação à esquerda, escolha .
Na página Mesh Management, clique em o nome da instância do ASM. No painel de navegação à esquerda, escolha . Na página exibida, clique em Create.
-
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.
-
Se você configurar as opções avançadas, o sistema retornará uma resposta personalizada quando a limitação de taxa for acionada.
-
-
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}/productpagehey -host bf2.example.com -c 10 -n 100000 http://${ASM_GATEWAY_IP}/nginx -
Execute o seguinte comando para acessar o caminho /productpage do gateway.
curl -H 'host: bf2.example.com' http://${ASM_GATEWAY_IP}/productpage -vSaí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_limitedA saída indica que o acesso ao service bookinfo está limitado.
-
Execute o seguinte comando para acessar o caminho /nginx do gateway.
curl -H 'host: bf2.example.com' http://${ASM_GATEWAY_IP}/nginx -vA 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.
-
configure uma regra de limitação de taxa.
Acesse o console do ASM. No painel de navegação à esquerda, escolha .
Na página Mesh Management, clique em o nome da instância do ASM. No painel de navegação à esquerda, escolha . Na página exibida, clique em Create.
-
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.
-
-
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 -
Execute o seguinte comando para acessar o caminho /nginx do gateway.
curl -H 'host: bf2.example.com' http://${ASM_GATEWAY_IP}/nginx -vA 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.
-
configure uma regra de limitação de taxa.
Acesse o console do ASM. No painel de navegação à esquerda, escolha .
Na página Mesh Management, clique em o nome da instância do ASM. No painel de navegação à esquerda, escolha . Na página exibida, clique em Create.
-
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.
-
-
Execute o seguinte comando na ferramenta hey para gerar tráfego de estresse continuamente. As requisições incluem o cabeçalho
ratelimit: truepara acionar a limitação de taxa.hey -host bf2.example.com -H 'ratelimit: true' -c 10 -n 10000 http://${ASM_GATEWAY_IP}/nginx -
Execute o seguinte comando para acessar o caminho
/nginxdo gateway.curl -H 'host: bf2.example.com' -H 'ratelimit: true' http://${ASM_GATEWAY_IP}/nginx -vA resposta retorna
HTTP/1.1 429 Too Many Requests, indicando que as requisições para o caminho/nginxdo gateway com o cabeçalhoratelimit: trueestão limitadas. -
Execute o seguinte comando para acessar o caminho
/nginxdo gateway, mas sem o cabeçalhoratelimit: true.curl -H 'host: bf2.example.com' http://${ASM_GATEWAY_IP}/nginx -vA resposta não inclui o código de status 429, indicando que as requisições sem o cabeçalho
ratelimit: truenão estão limitadas.
Operações relacionadas
exclua a regra de limitação de taxa
-
exclua a regra de limitação de taxa.
Acesse o console do ASM. No painel de navegação à esquerda, escolha .
Na página Mesh Management, clique em o nome da instância do ASM. No painel de navegação à esquerda, escolha .
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.
-
Execute o seguinte comando para acessar o caminho
/nginxdo gateway.curl -H 'host: bf2.example.com' http://${ASM_GATEWAY_IP}/nginx -vA resposta não inclui o código de status 429, indicando que o acesso não está limitado.