O ASMGlobalRateLimiter é uma CustomResourceDefinition (CRD) que configura a limitação de taxa global no service mesh (ASM). selecione as workloads de destino, conecte-se a um service de limitação de taxa global e defina regras de limitação.
Visão geral da estrutura
A estrutura 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 selecione as workloads às quais essa regra de limitação se aplica. O escopo é restrito 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 para o service de limitação de taxa global. |
|
|
configs |
Sim |
- |
Regras de limitação de taxa a aplicar. |
RateLimitServiceConfig
|
Campo |
Tipo |
Obrigatório |
Padrão |
Descrição |
|
host |
string |
Sim |
- |
Nome de domínio do cluster que hospeda o service de limitação de taxa global. |
|
port |
int |
Sim |
- |
Porta grpc do service de limitação de taxa global. |
|
timeout |
Duration |
Não |
- |
Tempo limite para o proxy do mesh se conectar ao service de limitação de taxa global. especifique no formato |
GlobalRateLimiterConfig
|
Campo |
Tipo |
Obrigatório |
Padrão |
Descrição |
|
name |
string |
Sim |
- |
Nome da regra de limitação de taxa. |
|
match |
Sim |
- |
Critérios que as requisições de entrada devem atender para que essa regra seja aplicada. |
|
|
limit |
Sim |
- |
Limiar de limitação de taxa para as requisições compatíveis. |
|
|
limit_overrides |
Não |
- |
Substituições do limiar de limitação de taxa por requisição. defina limites diferentes para subconjuntos específicos de requisições compatíveis. Há suporte a várias substituições. Requer o 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 para a 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 que você selecione as requisições que recebem o limiar substituído. |
|
|
limit |
Sim |
- |
Limiar de limitação de taxa para as requisições compatíveis. |
VirtualHostMatch
|
Campo |
Tipo |
Obrigatório |
Padrão |
Descrição |
|
name |
string |
Sim |
- |
Nome do host virtual para correspondência. |
|
port |
int |
Não |
- |
Porta para correspondência. |
|
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 service virtual para correspondência. |
|
header_match |
Não |
- |
Headers para correspondência nas requisições de entrada. Há suporte a múltiplos headers. Descontinuado no ASM V1.19.0 e posteriores. Use GlobalRateLimitOverrideConfig como alternativa. |
RequestMatcher
Ao especificar vários campos, uma requisição deve atender a todos os critérios para que haja correspondência (lógica AND).
|
Campo |
Tipo |
Obrigatório |
Padrão |
Descrição |
|
header_match |
Não |
- |
Corresponde às requisições com base nos headers HTTP. Há suporte a múltiplos headers. |
|
|
remote_address |
Não |
- |
Avalia as requisições com base no endereço IP de source. |
|
|
query_match |
Não |
- |
Corresponde às requisições com base nos parâmetros de consulta. Há suporte a múltiplos parâmetros. |
RemoteAddressMatcher
|
Campo |
Tipo |
Obrigatório |
Padrão |
Descrição |
|
address |
string |
Sim |
- |
Endereço IP de source para correspondência. |
|
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 |
- |
Corresponde se o valor do header atender a essa expressão regular. |
|
exact_match |
string |
Não |
- |
Há correspondência se o valor do header for exatamente igual a essa string. |
|
prefix_match |
string |
Não |
- |
Corresponde quando o valor do header começa com essa string. |
|
suffix_match |
string |
Não |
- |
Há correspondência caso o valor do header termine com essa 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 |
- |
Corresponde se o valor do parâmetro for exatamente igual a essa string. |
|
prefix_match |
string |
Não |
- |
Há correspondência quando o valor do parâmetro começa com essa string. |
|
suffix_match |
string |
Não |
- |
Corresponde caso o valor do parâmetro termine com essa string. |
|
regex_match |
string |
Não |
- |
Há correspondência se o valor do parâmetro atender a essa expressão regular. |
|
contains_match |
string |
Não |
- |
Corresponde se o valor do parâmetro contiver essa string. |
|
present_match |
bool |
Não |
- |
|
|
ignore_case |
bool |
Não |
- |
|
Exemplo
Este exemplo limita a taxa de tráfego de entrada para workloads com o rótulo app: httpbin. As requisições para o host virtual httpbin.example.com na porta 80 têm o limite de 10 por segundo, enquanto as requisições com o header x-plan: premium tê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