La ressource personnalisée (CRD) ASMGlobalRateLimiter configure la limitation globale du débit dans Service Mesh (ASM). Utilisez-la pour cibler des charges de travail spécifiques, vous connecter à un service global de limitation de débit et définir les règles applicables.
Vue d'ensemble de la structure
Le squelette suivant illustre l'imbrication des champs de la ressource ASMGlobalRateLimiter. Les champs obligatoires sont indiqués par un astérisque *.
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
| Champ | Type | Obligatoire | Par défaut | Description |
|---|---|---|---|---|
| workloadSelector | map |
Oui | - | Libellés permettant de sélectionner les charges de travail auxquelles s'applique cette règle de limitation. La portée est limitée au namespace de la ressource. Pour plus d'informations, consultez la documentation Workload Selector. |
| isGateway | bool | Non | false | Définissez ce champ sur true pour appliquer la règle de limitation à une passerelle. |
| rateLimitService | RateLimitServiceConfig | Oui | - | Paramètres de connexion au service global de limitation de débit. |
| configs | GlobalRateLimiterConfig[] | Oui | - | Règles de limitation de débit à appliquer. |
RateLimitServiceConfig
| Champ | Type | Obligatoire | Par défaut | Description |
|---|---|---|---|---|
| host | string | Oui | - | Nom de domaine du cluster hébergeant le service global de limitation de débit. |
| port | int | Oui | - | Port gRPC du service global de limitation de débit. |
| timeout | Duration | Non | - | Délai d'expiration pour la connexion du proxy mesh au service global de limitation. Spécifiez la valeur sous la forme seconds: <value> et nanos: <value>, où nanos représente les nanosecondes. |
GlobalRateLimiterConfig
| Champ | Type | Obligatoire | Par défaut | Description |
|---|---|---|---|---|
| name | string | Oui | - | Nom de la règle de limitation. |
| match | RatelimitMatch | Oui | - | Critères que les requêtes entrantes doivent satisfaire pour que cette règle s'applique. |
| limit | GlobalServiceLimitConfig | Oui | - | Seuil de limitation appliqué aux requêtes correspondantes. |
| limit_overrides | GlobalRateLimitOverrideConfig[] | Non | - | Remplacements du seuil de limitation appliqués par requête. Cette fonctionnalité permet de définir des limites distinctes pour des sous-ensembles spécifiques de requêtes correspondantes. Plusieurs remplacements sont pris en charge. Requiert ASM V1.19.0 ou version ultérieure. |
RatelimitMatch
| Champ | Type | Obligatoire | Par défaut | Description |
|---|---|---|---|---|
| vhost | VirtualHostMatch | Oui | - | Critères de correspondance pour l'hôte virtuel. |
GlobalServiceLimitConfig
| Champ | Type | Obligatoire | Par défaut | Description |
|---|---|---|---|---|
| unit | string | Oui | - | Unité de temps définissant la fenêtre de limitation. Valeurs valides : SECOND, MINUTE. |
| quota | int | Oui | - | Nombre maximal de requêtes autorisées par unité de temps. |
GlobalRateLimitOverrideConfig
| Champ | Type | Obligatoire | Par défaut | Description |
|---|---|---|---|---|
| request_match | RequestMatcher | Oui | - | Critères de sélection des requêtes auxquelles s'applique le seuil remplacé. |
| limit | GlobalServiceLimitConfig | Oui | - | Seuil de limitation appliqué aux requêtes correspondantes. |
VirtualHostMatch
| Champ | Type | Obligatoire | Par défaut | Description |
|---|---|---|---|---|
| name | string | Oui | - | Nom de l'hôte virtuel à faire correspondre. |
| port | int | Non | - | Port à faire correspondre. |
| route | RouteMatch | Non | - | Critères de correspondance de route pour le port spécifié. |
RouteMatch
| Champ | Type | Obligatoire | Par défaut | Description |
|---|---|---|---|---|
| name_match | string | Non | - | Nom d'une route spécifique dans un service virtuel à faire correspondre. |
| header_match | HeaderMatcher[] | Non | - | En-têtes HTTP à comparer avec les requêtes entrantes. Plusieurs en-têtes sont pris en charge. Obsolète depuis ASM V1.19.0. Utilisez plutôt GlobalRateLimitOverrideConfig. |
RequestMatcher
Lorsque plusieurs champs sont spécifiés, la requête doit satisfaire tous les critères pour être considérée comme correspondante (logique ET).
| Champ | Type | Obligatoire | Par défaut | Description |
|---|---|---|---|---|
| header_match | HeaderMatcher[] | Non | - | Correspondance basée sur les en-têtes HTTP. Plusieurs en-têtes sont pris en charge. |
| remote_address | RemoteAddressMatcher | Non | - | Correspondance basée sur l'adresse IP source. |
| query_match | QueryParameterMatcher[] | Non | - | Correspondance basée sur les paramètres de requête. Plusieurs paramètres sont pris en charge. |
RemoteAddressMatcher
| Champ | Type | Obligatoire | Par défaut | Description |
|---|---|---|---|---|
| address | string | Oui | - | Adresse IP source à faire correspondre. |
| v4_prefix_mask_len | uint32 | Non | - | Longueur du préfixe pour la correspondance de plage CIDR IPv4. Définissez le champ address avec une adresse IPv4 et ce champ avec la longueur du préfixe (par exemple, 24 pour un sous-réseau /24). |
| v6_prefix_mask_len | uint32 | Non | - | Longueur du préfixe pour la correspondance de plage CIDR IPv6. Définissez le champ address avec une adresse IPv6 et ce champ avec la longueur du préfixe. |
HeaderMatcher
Chaque objet HeaderMatcher doit spécifier exactement un mode de correspondance parmi les suivants : regex_match, exact_match, prefix_match, suffix_match ou present_match.
| Champ | Type | Obligatoire | Par défaut | Description |
|---|---|---|---|---|
| name | string | Non | - | Nom de l'en-tête. |
| regex_match | string | Non | - | Correspond si la valeur de l'en-tête satisfait cette expression régulière. |
| exact_match | string | Non | - | Correspond si la valeur de l'en-tête est strictement égale à cette chaîne. |
| prefix_match | string | Non | - | Correspond si la valeur de l'en-tête commence par cette chaîne. |
| suffix_match | string | Non | - | Correspond si la valeur de l'en-tête se termine par cette chaîne. |
| present_match | bool | Non | - | true : correspond si l'en-tête existe. false : correspond si l'en-tête n'existe pas. |
| invert_match | bool | Non | false | true : inverse le résultat de la correspondance (une requête non correspondante est traitée comme correspondante). false : comportement de correspondance standard. |
QueryParameterMatcher
Chaque objet QueryParameterMatcher requiert un champ name et exactement un mode de correspondance parmi les suivants : exact_match, prefix_match, suffix_match, regex_match, contains_match ou present_match.
| Champ | Type | Obligatoire | Par défaut | Description |
|---|---|---|---|---|
| name | string | Oui | - | Nom du paramètre de requête. |
| exact_match | string | Non | - | Correspond si la valeur du paramètre est strictement égale à cette chaîne. |
| prefix_match | string | Non | - | Correspond si la valeur du paramètre commence par cette chaîne. |
| suffix_match | string | Non | - | Correspond si la valeur du paramètre se termine par cette chaîne. |
| regex_match | string | Non | - | Correspond si la valeur du paramètre satisfait cette expression régulière. |
| contains_match | string | Non | - | Correspond si la valeur du paramètre contient cette chaîne. |
| present_match | bool | Non | - | true : correspond si le paramètre existe. Ne peut pas être défini sur false ; utilisez un autre mode de correspondance dans ce cas. |
| ignore_case | bool | Non | - | true : ignore la casse lors de la comparaison de la valeur du paramètre. |
Exemple
Cet exemple limite le trafic entrant vers les charges de travail portant le libellé app: httpbin. Les requêtes adressées à l'hôte virtuel httpbin.example.com sur le port 80 sont limitées à 10 requêtes par seconde, tandis que les requêtes contenant l'en-tête x-plan: premium bénéficient d'une limite plus élevée de 100 requêtes par seconde.
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