O ASMGlobalRateLimiter é uma CustomResourceDefinition (CRD) que configura a limitação de taxa global no Service Mesh (ASM). Use este recurso para selecionar cargas de trabalho de destino, conectar-se a um serviço de limitação de taxa global e definir regras de limitação.
Visão geral da estrutura
O esqueleto a seguir mostra como os campos do ASMGlobalRateLimiter se aninham. Os campos obrigatórios estão marcados com *.
apiVersion: istio.alibabacloud.com/v1beta1
kind: ASMGlobalRateLimiter
metadata:
name: <name>
namespace: <namespace>
spec:
workloadSelector: * # map<string, string>
<label-key>: <label-value>
isGateway: # bool (default: false)
rateLimitService: * # RateLimitServiceConfig
host: * # string
port: * # int
timeout: # Duration
seconds: # int
nanos: # int
configs: * # GlobalRateLimiterConfig[]
- name: * # string
match: * # RatelimitMatch
vhost: * # VirtualHostMatch
name: * # string
port: # int
route: # RouteMatch
name_match: # string
header_match: # HeaderMatcher[] (deprecated in V1.19.0+)
limit: * # GlobalServiceLimitConfig
unit: * # string (SECOND | MINUTE)
quota: * # int
limit_overrides: # GlobalRateLimitOverrideConfig[] (V1.19.0+)
- request_match: * # RequestMatcher
header_match: # HeaderMatcher[]
remote_address: # RemoteAddressMatcher
query_match: # QueryParameterMatcher[]
limit: * # GlobalServiceLimitConfig
unit: * # string
quota: * # int
spec
|
Campo |
Tipo |
Obrigatório |
Padrão |
Descrição |
|
workloadSelector |
map |
Sim |
- |
Rótulos que selecionam as cargas de trabalho às quais esta regra de limitação se aplica. O escopo restringe-se ao namespace do recurso. Para mais informações, consulte Workload Selector. |
|
isGateway |
bool |
Não |
false |
Defina como |
|
rateLimitService |
Sim |
- |
Configurações de conexão com o serviço de limitação de taxa global. |
|
|
configs |
Sim |
- |
Regras de limitação a aplicar. |
RateLimitServiceConfig
|
Campo |
Tipo |
Obrigatório |
Padrão |
Descrição |
|
host |
string |
Sim |
- |
Nome de domínio do cluster que hospeda o serviço de limitação de taxa global. |
|
port |
int |
Sim |
- |
Porta gRPC do serviço de limitação de taxa global. |
|
timeout |
Duration |
Não |
- |
Tempo limite para o proxy do mesh se conectar ao serviço de limitação de taxa global. Especifique como |
GlobalRateLimiterConfig
|
Campo |
Tipo |
Obrigatório |
Padrão |
Descrição |
|
name |
string |
Sim |
- |
Nome da regra de limitação. |
|
match |
Sim |
- |
Critérios aos quais as requisições recebidas devem corresponder para aplicar esta regra. |
|
|
limit |
Sim |
- |
Limiar de limitação para requisições correspondentes. |
|
|
limit_overrides |
Não |
- |
Substituições de limiar de limitação por requisição. Use este campo para definir limites diferentes para subconjuntos específicos de requisições correspondentes. Há suporte para múltiplas substituições. Requer ASM V1.19.0 ou posterior. |
RatelimitMatch
|
Campo |
Tipo |
Obrigatório |
Padrão |
Descrição |
|
vhost |
Sim |
- |
Critérios de correspondência de host virtual. |
GlobalServiceLimitConfig
|
Campo |
Tipo |
Obrigatório |
Padrão |
Descrição |
|
unit |
string |
Sim |
- |
Unidade de tempo da janela de limitação. Valores válidos: |
|
quota |
int |
Sim |
- |
Número máximo de requisições permitidas por unidade de tempo. |
GlobalRateLimitOverrideConfig
|
Campo |
Tipo |
Obrigatório |
Padrão |
Descrição |
|
request_match |
Sim |
- |
Critérios para selecionar requisições sujeitas ao limiar substituído. |
|
|
limit |
Sim |
- |
Limiar de limitação para requisições correspondentes. |
VirtualHostMatch
|
Campo |
Tipo |
Obrigatório |
Padrão |
Descrição |
|
name |
string |
Sim |
- |
Nome do host virtual a corresponder. |
|
port |
int |
Não |
- |
Porta a corresponder. |
|
route |
Não |
- |
Critérios de correspondência de rota para a porta especificada. |
RouteMatch
|
Campo |
Tipo |
Obrigatório |
Padrão |
Descrição |
|
name_match |
string |
Não |
- |
Nome de uma rota específica em um serviço virtual a corresponder. |
|
header_match |
Não |
- |
Headers para correspondência com requisições recebidas. Há suporte para múltiplos headers. Obsoleto no ASM V1.19.0 e posteriores. Use GlobalRateLimitOverrideConfig em seu lugar. |
RequestMatcher
Ao especificar vários campos, uma requisição deve satisfazer todos os critérios para haver correspondência (lógica AND).
|
Campo |
Tipo |
Obrigatório |
Padrão |
Descrição |
|
header_match |
Não |
- |
Corresponde a requisições por headers HTTP. Há suporte para múltiplos headers. |
|
|
remote_address |
Não |
- |
Corresponde a requisições pelo endereço IP de origem. |
|
|
query_match |
Não |
- |
Corresponde a requisições por parâmetros de consulta. Há suporte para múltiplos parâmetros. |
RemoteAddressMatcher
|
Campo |
Tipo |
Obrigatório |
Padrão |
Descrição |
|
address |
string |
Sim |
- |
Endereço IP de origem a corresponder. |
|
v4_prefix_mask_len |
uint32 |
Não |
- |
Comprimento do prefixo para correspondência de intervalo CIDR IPv4. Defina |
|
v6_prefix_mask_len |
uint32 |
Não |
- |
Comprimento do prefixo para correspondência de intervalo CIDR IPv6. Defina |
HeaderMatcher
Cada HeaderMatcher especifica exatamente um campo de modo de correspondência (regex_match, exact_match, prefix_match, suffix_match ou present_match).
|
Campo |
Tipo |
Obrigatório |
Padrão |
Descrição |
|
name |
string |
Não |
- |
Nome do header. |
|
regex_match |
string |
Não |
- |
Correspondência se o valor do header atender a esta expressão regular. |
|
exact_match |
string |
Não |
- |
Correspondência se o valor do header for exatamente igual a esta string. |
|
prefix_match |
string |
Não |
- |
Correspondência se o valor do header começar com esta string. |
|
suffix_match |
string |
Não |
- |
Correspondência se o valor do header terminar com esta string. |
|
present_match |
bool |
Não |
- |
|
|
invert_match |
bool |
Não |
false |
|
QueryParameterMatcher
Cada QueryParameterMatcher requer um name e exatamente um campo de modo de correspondência (exact_match, prefix_match, suffix_match, regex_match, contains_match ou present_match).
|
Campo |
Tipo |
Obrigatório |
Padrão |
Descrição |
|
name |
string |
Sim |
- |
Nome do parâmetro de consulta. |
|
exact_match |
string |
Não |
- |
Correspondência se o valor do parâmetro for exatamente igual a esta string. |
|
prefix_match |
string |
Não |
- |
Correspondência se o valor do parâmetro começar com esta string. |
|
suffix_match |
string |
Não |
- |
Correspondência se o valor do parâmetro terminar com esta string. |
|
regex_match |
string |
Não |
- |
Correspondência se o valor do parâmetro atender a esta expressão regular. |
|
contains_match |
string |
Não |
- |
Correspondência se o valor do parâmetro contiver esta string. |
|
present_match |
bool |
Não |
- |
|
|
ignore_case |
bool |
Não |
- |
|
Exemplo
Este exemplo limita o tráfego de entrada para cargas de trabalho rotuladas com app: httpbin. As requisições para o host virtual httpbin.example.com na porta 80 têm limite de 10 por segundo, enquanto requisições com o header x-plan: premium obtêm um limite maior, de 100 por segundo.
apiVersion: istio.alibabacloud.com/v1beta1
kind: ASMGlobalRateLimiter
metadata:
name: httpbin-global-ratelimit
namespace: default
spec:
workloadSelector:
app: httpbin
rateLimitService:
host: ratelimit.default.svc.cluster.local
port: 8081
timeout:
seconds: 1
configs:
- name: httpbin-ratelimit
match:
vhost:
name: httpbin.example.com
port: 80
limit:
unit: SECOND
quota: 10
limit_overrides: # Requires ASM V1.19.0+
- request_match:
header_match:
- name: x-plan
exact_match: premium
limit:
unit: SECOND
quota: 100