O Service Mesh (ASM) oferece circuit breaking declarativo por meio da Custom Resource Definition (CRD) ASMCircuitBreaker. Esta referência detalha todos os campos da especificação do ASMCircuitBreaker e inclui exemplos de configuração.
Para obter um guia de configuração passo a passo, consulte Usar circuit breaking no nível de rota no ASM.
Visão geral completa do esquema
O YAML a seguir apresenta todos os campos disponíveis e sua hierarquia de aninhamento:
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
|
Versão do ASM |
apiVersion |
|
1.15.3.105 ou posterior |
|
|
Anterior a 1.15.3.105 |
|
Se você implantou anteriormente um ASMCircuitBreaker em um cluster do Container Service for Kubernetes (ACK) com v1beta1, atualize o campo apiVersion para istio.alibabacloud.com/v1 e implante novamente.
spec
applyToTraffic
Este campo exige o ASM 1.25 ou posterior.
|
Campo |
Tipo |
Obrigatório |
Padrão |
Descrição |
|
applyToTraffic |
string |
Não |
|
Direção do tráfego para a política de circuit breaking. |
Valores válidos:
|
Valor |
Descrição |
|
|
Tráfego de entrada para um proxy sidecar. A aplicação com o sidecar atua como servidor. |
|
|
Tráfego de saída de um proxy sidecar. A aplicação com o sidecar atua como cliente. |
|
|
Tráfego processado por um proxy waypoint no modo Ambient. |
|
|
Tráfego de gateway. |
ASMCircuitBreakerSpec
|
Campo |
Tipo |
Obrigatório |
Padrão |
Descrição |
|
workloadSelector |
map |
Sim |
-- |
Rótulos para selecionar pods ou VMs. O escopo limita-se ao namespace do recurso. Consulte WorkloadSelector. |
|
isGateway |
bool |
Não |
|
Quando definido como |
|
configs |
CircuitBreakerConfig[] |
Sim |
-- |
Uma ou mais configurações de circuit breaking. |
CircuitBreakerConfig
|
Campo |
Tipo |
Obrigatório |
Padrão |
Descrição |
|
name |
string |
Não |
-- |
Nome desta configuração de circuit breaking. |
|
match |
CircuitBreakerMatch |
Não |
-- |
Condições de correspondência no nível de rota. Consulte CircuitBreakerMatch. |
|
breaker_config |
BreakerConfig |
Não |
-- |
Limiares de circuit breaking. Consulte BreakerConfig. |
|
target_services |
TargetServiceRef[] |
Não |
-- |
Serviços-alvo da política. Disponível apenas no ASM 1.25+. Consulte TargetServiceRef. |
TargetServiceRef
Estes campos exigem o ASM 1.25 ou posterior.
|
Campo |
Tipo |
Obrigatório |
Padrão |
Descrição |
|
kind |
string |
Não |
|
Tipo de recurso. Valores válidos: |
|
name |
string |
Sim |
-- |
Nome do serviço-alvo. |
|
namespace |
string |
Não |
Mesmo do recurso ASMCircuitBreaker |
Namespace do serviço-alvo. |
|
port |
int32 |
Não |
-- |
Porta do serviço-alvo. |
|
section_name |
string |
Não |
-- |
Nome de uma rota definida no VirtualService. Válido apenas quando |
Exemplos de TargetServiceRef
Direcionar um Service
Aplique circuit breaking à porta 8000 do Service httpbin no namespace default:
target_services:
- kind: Service
namespace: default
name: httpbin
port: 8000
Direcionar um ServiceEntry
Considere o seguinte ServiceEntry:
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
Aplique circuit breaking à porta 80 deste ServiceEntry:
target_services:
- kind: ServiceEntry
namespace: default
name: se-httpbin-external
port: 80
Direcionar uma rota do VirtualService
Considere o seguinte VirtualService:
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
Aplique circuit breaking à rota HTTP chamada default:
target_services:
- kind: VirtualService
namespace: default
name: vs-httpbin
section_name: default
BreakerConfig
Os limiares de circuit breaking dividem-se em duas categorias:
Detecção de requisições lentas: Os campos
slow_request_rt,max_slow_requestseaverage_request_rtdefinem quando ocorre a abertura do circuito baseada em latência.Detecção de taxa de erros: Os campos
error_percentegateway_error_percentdeterminam quando a abertura do circuito ocorre devido a erros.
Ambas as categorias compartilham os campos window_size, break_duration e min_request_amount.
| Campo | Tipo | Obrigatório | Padrão | Descrição |
|---|---|---|---|---|
| window_size | Duration | Não | 10s | Janela de tempo para coleta de estatísticas de requisições. Máximo: 12s. |
| break_duration | Duration | Não | 30s | Tempo durante o qual o circuit breaker permanece aberto após o acionamento. |
| slow_request_rt | Duration | Não | -- | Limiar de latência para requisições lentas. Requisições que excederem esse tempo de resposta são contabilizadas como lentas. |
| average_request_rt | Duration | Não (obrigatório antes do ASM 1.14) | -- | Tempo médio de resposta do serviço. Exemplo: 0.01s. |
| max_slow_requests | uint32 | Não | -- | Número máximo de requisições lentas permitidas na janela de tempo. Deve ser um número inteiro, por exemplo, 1000. O circuit breaker é acionado quando essa contagem é ultrapassada. |
| error_percent | Percent | Não | -- | Limiar de taxa de erros 5xx. O circuit breaker é acionado quando a porcentagem de erros 5xx na janela de tempo excede este valor. |
| gateway_error_percent | Percent | Não | -- | Limiar de taxa de erros de gateway (apenas 502, 503, 504). Disponível apenas no ASM 1.24.6.54+. |
| min_request_amount | uint32 | Não | 0 | Quantidade mínima de requisições necessária antes da avaliação de error_percent. Evita o acionamento do circuito com base em uma amostra pequena. |
| custom_response | CustomResponse | Não | -- | Resposta personalizada retornada aos clientes quando o circuit breaker está aberto. Consulte CustomResponse. |
CustomResponse
Define a resposta retornada aos clientes quando o circuit breaker rejeita uma requisição.
|
Campo |
Tipo |
Obrigatório |
Padrão |
Descrição |
|
status_code |
int32 |
Não |
-- |
Código de status HTTP da resposta. |
|
header_to_add |
map\[string\]string |
Não |
-- |
Headers a incluir na resposta. |
|
body |
string |
Não |
-- |
Corpo da resposta. |
CircuitBreakerMatch
|
Campo |
Tipo |
Obrigatório |
Padrão |
Descrição |
|
vhost |
VirtualHostMatch |
Não |
-- |
Condições de correspondência de host virtual. Consulte VirtualHostMatch. |
VirtualHostMatch
|
Campo |
Tipo |
Obrigatório |
Padrão |
Descrição |
|
name |
string |
Não |
-- |
Nome do host virtual para correspondência. |
|
port |
int |
Não |
-- |
Porta da requisição para correspondência. |
|
route |
RouteMatch |
Sim |
-- |
Regra de roteamento para correspondência. Consulte RouteMatch. |
RouteMatch
|
Campo |
Tipo |
Obrigatório |
Padrão |
Descrição |
|
name_match |
string |
Sim (gateway) / Não (sidecar) |
-- |
Nome da rota para correspondência. Corresponde a um nome de rota definido em um VirtualService. |
|
header_match |
HeaderMatcher[] |
Não |
-- |
Condições de headers de requisição. Suporta múltiplos headers. Disponível apenas no ASM 1.16+. Exige as versões mais recentes de gateway e proxy sidecar. Consulte Atualizar uma instância do ASM e Atualizar um proxy sidecar. |
HeaderMatcher
Especifique exatamente um tipo de correspondência por entrada (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 |
-- |
Compara o valor do header com uma expressão regular. |
|
exact_match |
string |
Não |
-- |
Corresponde exatamente ao valor do header. |
|
prefix_match |
string |
Não |
-- |
Corresponde a valores de header que começam com a string especificada. |
|
suffix_match |
string |
Não |
-- |
Corresponde a valores de header que terminam com a string especificada. |
|
present_match |
bool |
Não |
-- |
|
|
invert_match |
bool |
Não |
|
|
Exemplos de configuração
Todos os exemplos usam o campo applyToTraffic para especificar a direção do tráfego e breaker_config para definir os limiares de circuit breaking.
Circuit breaking no lado do cliente
Requer o ASM 1.25.6.74 ou posterior.
Esta configuração aplica-se ao tráfego de saída da aplicação sleep para httpbin na porta 8000. O circuit breaker é acionado quando qualquer uma das condições abaixo é atendida dentro de uma janela de 10 segundos:
Mais de 60% das requisições retornam erros 5xx.
Mais de 10 requisições excedem o limiar de tempo de resposta de 100 ms.
Quando o circuit breaker está aberto, os clientes recebem um código de status 499 com um corpo de resposta e um header personalizados.
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
Circuit breaking no Waypoint
Requer o ASM 1.25.6.74 ou posterior. Aplica-se apenas ao modo Ambient.
Esta configuração aplica os mesmos limiares de circuit breaking por meio de um proxy waypoint chamado 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
Próximos passos
Usar circuit breaking no nível de rota no ASM: Guia passo a passo com implantação e verificação.
Atualizar uma instância do ASM: Necessário para recursos que dependem de versões específicas do ASM.
Atualizar um proxy sidecar: Mantenha os proxies sidecar atualizados para usar as capacidades mais recentes de circuit breaking.