全部產品
Search
文件中心

Alibaba Cloud Service Mesh:ASMCircuitBreaker CRD說明

更新時間:Nov 08, 2025

ASM通過ASMCircuitBreaker CRD實現熔斷的聲明式配置。本文介紹ASMCircuitBreaker的欄位說明。

配置樣本

樣本一:用戶端熔斷

說明

本樣本需要執行個體版本≥1.25.6.74。

以下樣本配置當 sleep 應用訪問 httpbin 應用在 10 秒內有 60% 以上的請求發生錯誤,或是超過 10 個慢請求時,對用戶端進行熔斷,返回 499 狀態代碼。

展開查看YAML內容

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 # 請求的統計視窗為10s
        max_slow_requests: 10 # 最大慢請求數量為10個
        min_request_amount: 3 # 從3個請求起開始統計錯誤率
        error_percent:
          value: 60 # 60%以上的請求發生錯誤
        custom_response:
          header_to_add:
            x-envoy-circuitbreak: "true"
          body: "hello, break!"
          status_code: 499

樣本二:waypoint 熔斷

本樣本僅適用於Ambient模式,且需要執行個體版本≥1.25.6.74

該樣本配置了應用在名為default的 waypoint 的熔斷規則,熔斷規則與樣本一相同。

展開查看YAML內容

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

apiVersion

  • 若ASM執行個體版本為1.15.3.105及以上,支援使用apiVersion: istio.alibabacloud.com/v1。若您在ACK叢集進行了相關配置,請將對應的ASMCircuitBreaker CRD中的apiVersion: istio.alibabacloud.com/v1beta1修改為apiVersion: istio.alibabacloud.com/v1,再重新進行部署。

  • 若ASM執行個體版本為1.15.3.105以下,支援使用apiVersion: istio.alibabacloud.com/v1beta1

spec

spec欄位配置說明如下。關於ASMCircuitBreaker的功能介紹和使用樣本,請參見使用ASM路由級熔斷功能

欄位

類型

是否必須

說明

applyToTraffic

string

熔斷策略應用的流量類型。選擇性參數:

  • sidecar_inbound:sidecar 入向流量,即掛載了 sidecar 的應用作為服務端接收的流量。

  • sidecar_outbound:sidecar 出向流量,即掛載了 sidecar 的應用作為用戶端發送的流量。

  • waypoint:ambient 模式下,通過 waypoint 處理的流量。

  • gateway:網關流量。

預設為sidecar_outbound

說明

該欄位僅支援ASM 1.25及以上版本。

ASMCircuitBreakerSpec

欄位

類型

是否必須

說明

workloadSelector

map<string, string>

通過一個或多個標籤,指明熔斷配置生效的一組特定的Pod或VM。標籤搜尋的範圍限制在資源所在的配置命名空間。更多資訊,請參見WorkloadSelector

isGateway

bool

配置為true,表示配置作用於網關。預設為false。

configs

CircuitBreakerConfig[]

熔斷配置,可配置多條。

CircuitBreakerConfig

欄位

類型

是否必須

說明

name

string

單條熔斷配置的名稱。

match

CircuitBreakerMatch

匹配條件。

breaker_config

BreakerConfig

路由級熔斷配置。

target_services

TargetServiceRef[]

熔斷策略作用的服務。

說明

該欄位僅支援ASM 1.25及以上版本。

TargetServiceRef

說明

此類型欄位僅支援ASM 1.25及以上版本。

欄位

類型

是否必須

說明

kind

string

熔斷策略作用的服務 kind。可選值:

  • Service

  • ServiceEntry

  • VirtualService

預設為Service

name

string

熔斷策略作用的服務名稱。

namespace

string

熔斷策略作用的服務所處的命名空間。預設為您定義的熔斷策略所處命名空間。

port

int32

熔斷策略作用的服務連接埠。

section_name

string

服務的額外屬性,當前只對VirtualService生效。

  • VirtualService:取值為VirtualService中定義的 route 名稱。

樣本一

以下樣本定義了 default 命名空間的 httpbin Service 的 8000 連接埠上。

target_services:
- kind: Service
  namespace: default
  name: httpbin
  port: 8000

樣本二

當前執行個體中存在如下 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

以下策略將生效於該 ServiceEntry 的 80 連接埠上。

target_services:
- kind: ServiceEntry
  namespace: default
  name: se-httpbin-external
  port: 80

樣本三

當前執行個體中存在以下 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

以下策略將生效於 VirtualService 中定義的 http 名為 default 的路由規則上。

target_services:
- kind: VirtualService
  namespace: default
  name: vs-httpbin
  section_name: default

CircuitBreakerMatch

欄位

類型

是否必須

說明

vhost

VirtualHostMatch

VirtualHost匹配條件。

BreakerConfig

欄位

類型

是否必須

說明

window_size

Duration

統計時間視窗,預設10s,最大不能超過12s。

break_duration

Duration

熔斷時間長度,預設30s。

slow_request_rt

Duration

定義慢請求的響應延遲時間,超過該響應時間長度的請求則被認定為慢請求。

average_request_rt

Duration

  • ASM執行個體版本為1.14以下:是

  • ASM執行個體版本為1.14及以上:否

定義業務的平均回應時間,例如0.01s。

max_slow_requests

uint32

最大慢請求次數,必須為整數,例如:1000。超過該次數的新請求會被熔斷。

error_percent

Percent

錯誤百分比,時間視窗內錯誤請求(5XX)比例超過該值,則新的請求會被熔斷。

gateway_error_percent

Percent

網關錯誤百分比,時間視窗內網關錯誤請求(502,503,504)比例超過該值,則新的請求會被熔斷。(ASM執行個體版本>= 1.24.6.54時有效)

min_request_amount

uint32

最少請求次數,對應error_percent條件,預設為0。為了防止誤判定被熔斷,可配置請求最少次數。

custom_response

CustomResponse

當請求被熔斷時,自訂返回內容。

CustomResponse

欄位

類型

是否必須

說明

status_code

int32

HTTP響應狀態代碼。

header_to_add

map[string]string

自訂響應添加的Headers。

body

string

自訂響應Body內容。

VirtualHostMatch

欄位

類型

是否必須

說明

name

string

匹配的VirtualHost名稱。

port

int

匹配的請求連接埠。

route

RouteMatch

匹配的介面路由規則名稱。

RouteMatch

欄位

類型

是否必須

說明

name_match

string

  • 網關:是

  • Sidecar:否

匹配的路由名稱,對應VirtualService下的單條路由名稱。

header_match

HeaderMatcher[]

匹配服務要求的Header,支援配置多個。

重要

使用該欄位需ASM執行個體為1.16及以上版本,且對應的網關執行個體和Sidecar都為最新版。關於如何升級ASM執行個體和網關執行個體,請參見升級ASM執行個體;關於如何升級Sidecar,請參見升級Sidecar代理

HeaderMatcher

欄位

類型

是否必須

說明

name

string

Header名稱。

任選其一

regex_match

string

Regex匹配。

exact_match

string

精確匹配。

prefix_match

string

首碼匹配,以什麼開頭進行匹配。

suffix_match

string

尾碼匹配,以什麼結尾進行匹配。

present_match

bool

  • 配置為true,表示存在Header即可,無需關注Header Value的取值。

  • 配置為false,表示不存在Header。

invert_match

bool

預設為false

  • 配置為true,表示上述匹配結果取反。

  • 配置為false,表示遵循上述匹配結果。