Service Mesh (ASM) propose un mécanisme de disjoncteur déclaratif via la définition de ressource personnalisée (CRD) ASMCircuitBreaker. Cette rubrique détaille tous les champs de la spécification ASMCircuitBreaker et fournit des exemples de configuration.
Pour un guide de configuration pas à pas, consultez la rubrique Utiliser le disjoncteur au niveau des routes dans ASM.
Aperçu complet du schéma
Le fichier YAML suivant présente l'ensemble des champs disponibles ainsi que leur hiérarchie d'imbrication :
apiVersion: istio.alibabacloud.com/v1 # v1beta1 for ASM < 1.15.3.105
kind: ASMCircuitBreaker
metadata:
name: <circuit-breaker-name>
spec:
workloadSelector: # Required. Labels to select target pods/VMs.
labels:
<label-key>: <label-value>
isGateway: false # Whether this applies to a gateway.
applyToTraffic: sidecar_outbound # ASM 1.25+. Traffic direction.
configs: # Required. One or more circuit breaking rules.
- name: <config-name>
target_services: # ASM 1.25+. Services to protect.
- kind: Service # Service | ServiceEntry | VirtualService
namespace: <namespace>
name: <service-name>
port: <port-number>
section_name: <route-name> # VirtualService only.
match: # Route-level match conditions.
vhost:
name: <virtual-host-name>
port: <port>
route:
name_match: <route-name>
header_match: # ASM 1.16+.
- name: <header-name>
exact_match: <value> # Choose one match type.
regex_match: <pattern>
prefix_match: <prefix>
suffix_match: <suffix>
present_match: true
invert_match: false
breaker_config: # Circuit breaking thresholds.
window_size: 10s # Statistics time window (max 12s).
break_duration: 30s # How long the circuit stays open.
slow_request_rt: <duration> # Slow request latency threshold.
average_request_rt: <duration> # Average response time.
max_slow_requests: <count> # Max slow requests before tripping.
error_percent: # 5xx error percentage threshold.
value: <0-100>
gateway_error_percent: # 502/503/504 error threshold. ASM 1.24.6.54+.
value: <0-100>
min_request_amount: 0 # Min requests before evaluating error_percent.
custom_response: # Response returned when circuit is open.
status_code: <http-status-code>
header_to_add:
<header-name>: <header-value>
body: <response-body>
apiVersion
| Version d'ASM | apiVersion |
|---|---|
| 1.15.3.105 ou ultérieure | istio.alibabacloud.com/v1 |
| Antérieure à 1.15.3.105 | istio.alibabacloud.com/v1beta1 |
Si vous avez précédemment déployé une ressource ASMCircuitBreaker dans un cluster Container Service for Kubernetes (ACK) en utilisant v1beta1, mettez à jour le champ apiVersion avec la valeur istio.alibabacloud.com/v1 et redéployez la ressource.
spec
applyToTraffic
Ce champ nécessite ASM 1.25 ou une version ultérieure.
| Champ | Type | Obligatoire | Valeur par défaut | Description |
|---|---|---|---|---|
| applyToTraffic | string | Non | sidecar_outbound |
Direction du trafic pour la politique de disjoncteur. |
Valeurs valides :
| Valeur | Description |
|---|---|
sidecar_inbound |
Trafic entrant vers un proxy sidecar. L'application associée au sidecar agit en tant que serveur. |
sidecar_outbound |
Trafic sortant depuis un proxy sidecar. L'application associée au sidecar agit en tant que client. |
waypoint |
Trafic traité par un proxy waypoint en mode Ambient. |
gateway |
Trafic de passerelle. |
ASMCircuitBreakerSpec
| Champ | Type | Obligatoire | Valeur par défaut | Description |
|---|---|---|---|---|
| workloadSelector | map |
Oui | -- | Libellés permettant de sélectionner des pods ou des VM. La portée est limitée au namespace de la ressource. Consultez la documentation WorkloadSelector. |
| isGateway | bool | Non | false |
Si la valeur est true, la configuration s'applique à une passerelle. |
| configs | CircuitBreakerConfig[] | Oui | -- | Une ou plusieurs configurations de disjoncteur. |
CircuitBreakerConfig
| Champ | Type | Obligatoire | Valeur par défaut | Description |
|---|---|---|---|---|
| name | string | Non | -- | Nom de cette configuration de disjoncteur. |
| match | CircuitBreakerMatch | Non | -- | Conditions de correspondance au niveau de la route. Consultez la section CircuitBreakerMatch. |
| breaker_config | BreakerConfig | Non | -- | Seuils du disjoncteur. Consultez la section BreakerConfig. |
| target_services | TargetServiceRef[] | Non | -- | Services cibles pour la politique. Disponible uniquement sur ASM 1.25+. Consultez la section TargetServiceRef. |
TargetServiceRef
Ces champs nécessitent ASM 1.25 ou une version ultérieure.
| Champ | Type | Obligatoire | Valeur par défaut | Description |
|---|---|---|---|---|
| kind | string | Non | Service |
Type de ressource. Valeurs valides : Service, ServiceEntry, VirtualService. |
| name | string | Oui | -- | Nom du service cible. |
| namespace | string | Non | Identique à celui de la ressource ASMCircuitBreaker | Namespace du service cible. |
| port | int32 | Non | -- | Port du service cible. |
| section_name | string | Non | -- | Nom d'une route définie dans le VirtualService. Valide uniquement lorsque kind a la valeur VirtualService. |
Exemples TargetServiceRef
Cibler un Service
Appliquez le disjoncteur au port 8000 du Service httpbin dans le namespace default :
target_services:
- kind: Service
namespace: default
name: httpbin
port: 8000
Cibler un ServiceEntry
Compte tenu du ServiceEntry suivant :
apiVersion: networking.istio.io/v1
kind: ServiceEntry
metadata:
name: se-httpbin-external
spec:
hosts:
- httpbin.test.com
location: MESH_EXTERNAL
ports:
- name: http
number: 80
protocol: HTTP
- name: https
number: 443
protocol: HTTPS
resolution: DNS
Appliquez le disjoncteur au port 80 de ce ServiceEntry :
target_services:
- kind: ServiceEntry
namespace: default
name: se-httpbin-external
port: 80
Cibler une route VirtualService
Compte tenu du VirtualService suivant :
apiVersion: networking.istio.io/v1
kind: VirtualService
metadata:
name: vs-httpbin
spec:
hosts:
- httpbin.test.com
http:
- name: default
route:
- destination:
host: httpbin
port:
number: 8000
Appliquez le disjoncteur à la route HTTP nommée default :
target_services:
- kind: VirtualService
namespace: default
name: vs-httpbin
section_name: default
BreakerConfig
Les seuils du disjoncteur se répartissent en deux catégories :
Détection des requêtes lentes : les champs
slow_request_rt,max_slow_requestsetaverage_request_rtdéfinissent les conditions de déclenchement basées sur la latence.Détection du taux d'erreur : les champs
error_percentetgateway_error_percentdéfinissent les conditions de déclenchement basées sur les erreurs.
Ces deux catégories partagent les champs window_size, break_duration et min_request_amount.
| Champ | Type | Obligatoire | Valeur par défaut | Description |
|---|---|---|---|---|
| window_size | Duration | Non | 10s | Fenêtre temporelle de collecte des statistiques de requêtes. Maximum : 12s. |
| break_duration | Duration | Non | 30s | Durée pendant laquelle le disjoncteur reste ouvert après déclenchement. |
| slow_request_rt | Duration | Non | -- | Seuil de latence pour les requêtes lentes. Les requêtes dont le temps de réponse dépasse cette valeur sont considérées comme lentes. |
| average_request_rt | Duration | Non (obligatoire avant ASM 1.14) | -- | Temps de réponse moyen du service. Exemple : 0.01s. |
| max_slow_requests | uint32 | Non | -- | Nombre maximal de requêtes lentes autorisées dans la fenêtre temporelle. Cette valeur doit être un entier, par exemple 1000. Le disjoncteur se déclenche lorsque ce nombre est dépassé. |
| error_percent | Percent | Non | -- | Seuil de taux d'erreur 5xx. Le disjoncteur se déclenche lorsque le pourcentage d'erreurs 5xx dans la fenêtre temporelle dépasse cette valeur. |
| gateway_error_percent | Percent | Non | -- | Seuil de taux d'erreur de passerelle (uniquement 502, 503, 504). Disponible uniquement sur ASM 1.24.6.54+. |
| min_request_amount | uint32 | Non | 0 | Nombre minimal de requêtes requis avant l'évaluation de error_percent. Évite un déclenchement prématuré sur un échantillon trop faible. |
| custom_response | CustomResponse | Non | -- | Réponse personnalisée renvoyée aux clients lorsque le disjoncteur est ouvert. Consultez la section CustomResponse. |
CustomResponse
Définit la réponse renvoyée aux clients lorsque le disjoncteur rejette une requête.
| Champ | Type | Obligatoire | Valeur par défaut | Description |
|---|---|---|---|---|
| status_code | int32 | Non | -- | Code d'état HTTP de la réponse. |
| header_to_add | map\[string\]string | Non | -- | En-têtes à inclure dans la réponse. |
| body | string | Non | -- | Corps de la réponse. |
CircuitBreakerMatch
| Champ | Type | Obligatoire | Valeur par défaut | Description |
|---|---|---|---|---|
| vhost | VirtualHostMatch | Non | -- | Conditions de correspondance de l'hôte virtuel. Consultez la section VirtualHostMatch. |
VirtualHostMatch
| Champ | Type | Obligatoire | Valeur par défaut | Description |
|---|---|---|---|---|
| name | string | Non | -- | Nom de l'hôte virtuel à faire correspondre. |
| port | int | Non | -- | Port de la requête à faire correspondre. |
| route | RouteMatch | Oui | -- | Règle de routage à faire correspondre. Consultez la section RouteMatch. |
RouteMatch
| Champ | Type | Obligatoire | Valeur par défaut | Description |
|---|---|---|---|---|
| name_match | string | Oui (passerelle) / Non (sidecar) | -- | Nom de la route à faire correspondre. Correspond au nom d'une route définie dans un VirtualService. |
| header_match | HeaderMatcher[] | Non | -- | Conditions sur les en-têtes de requête. Plusieurs en-têtes sont pris en charge. Disponible uniquement sur ASM 1.16+. Nécessite les dernières versions du proxy de passerelle et du proxy sidecar. Consultez les rubriques Mettre à niveau une instance ASM et Mettre à niveau un proxy sidecar. |
HeaderMatcher
Spécifiez exactement un type de correspondance par entrée (regex_match, exact_match, prefix_match, suffix_match ou present_match).
| Champ | Type | Obligatoire | Valeur par défaut | Description |
|---|---|---|---|---|
| name | string | Non | -- | Nom de l'en-tête. |
| regex_match | string | Non | -- | Fait correspondre la valeur de l'en-tête à une expression régulière. |
| exact_match | string | Non | -- | Fait correspondre la valeur de l'en-tête exactement. |
| prefix_match | string | Non | -- | Fait correspondre les valeurs d'en-tête commençant par la chaîne spécifiée. |
| suffix_match | string | Non | -- | Fait correspondre les valeurs d'en-tête se terminant par la chaîne spécifiée. |
| present_match | bool | Non | -- | true : l'en-tête doit être présent (quelle que soit sa valeur). false : l'en-tête ne doit pas être présent. |
| invert_match | bool | Non | false |
true : inverse le résultat de la correspondance. false : utilise le résultat original de la correspondance. |
Exemples de configuration
Tous les exemples utilisent le champ applyToTraffic pour spécifier la direction du trafic et le champ breaker_config pour définir les seuils du disjoncteur.
Disjoncteur côté client
Nécessite ASM 1.25.6.74 ou une version ultérieure.
Cette configuration s'applique au trafic sortant de l'application sleep vers httpbin sur le port 8000. Le disjoncteur se déclenche lorsqu'une des conditions suivantes est remplie dans une fenêtre de 10 secondes :
Plus de 60 % des requêtes renvoient des erreurs 5xx.
Plus de 10 requêtes dépassent le seuil de temps de réponse de 100 ms.
Lorsque le disjoncteur est ouvert, les clients reçoivent un code d'état 499 accompagné d'un corps de réponse et d'un en-tête personnalisés.
apiVersion: istio.alibabacloud.com/v1
kind: ASMCircuitBreaker
metadata:
name: client-break
spec:
workloadSelector:
labels:
app: sleep
applyToTraffic: sidecar_outbound
configs:
- target_services:
- name: httpbin
port: 8000
breaker_config:
slow_request_rt: 0.1s
break_duration: 90s
window_size: 10s
max_slow_requests: 10
min_request_amount: 3
error_percent:
value: 60
custom_response:
header_to_add:
x-envoy-circuitbreak: "true"
body: "hello, break!"
status_code: 499
Disjoncteur Waypoint
Nécessite ASM 1.25.6.74 ou une version ultérieure. S'applique uniquement au mode Ambient.
Cette configuration applique les mêmes seuils de disjoncteur via un proxy waypoint nommé default :
apiVersion: istio.alibabacloud.com/v1
kind: ASMCircuitBreaker
metadata:
name: test
spec:
workloadSelector:
labels:
gateway.networking.k8s.io/gateway-name: default
applyToTraffic: waypoint
configs:
- target_services:
- name: httpbin
port: 8000
breaker_config:
slow_request_rt: 0.1s
break_duration: 90s
window_size: 10s
max_slow_requests: 10
min_request_amount: 3
error_percent:
value: 60
custom_response:
header_to_add:
x-envoy-circuitbreak: "true"
body: "hello, break!"
status_code: 499
Étapes suivantes
Utiliser le disjoncteur au niveau des routes dans ASM : Guide pas à pas incluant le déploiement et la vérification.
Mettre à niveau une instance ASM : Requis pour les fonctionnalités dépendant de versions spécifiques d'ASM.
Mettre à niveau un proxy sidecar : Maintenez les proxies sidecar à jour pour bénéficier des dernières capacités de disjoncteur.