ASM通過ASMCircuitBreaker CRD實現熔斷的聲明式配置。本文介紹ASMCircuitBreaker的欄位說明。
配置樣本
樣本一:用戶端熔斷
本樣本需要執行個體版本≥1.25.6.74。
以下樣本配置當 sleep 應用訪問 httpbin 應用在 10 秒內有 60% 以上的請求發生錯誤,或是超過 10 個慢請求時,對用戶端進行熔斷,返回 499 狀態代碼。
樣本二:waypoint 熔斷
本樣本僅適用於Ambient模式,且需要執行個體版本≥1.25.6.74。
該樣本配置了應用在名為default的 waypoint 的熔斷規則,熔斷規則與樣本一相同。
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 | 否 | 熔斷策略應用的流量類型。選擇性參數:
預設為 說明 該欄位僅支援ASM 1.25及以上版本。 |
ASMCircuitBreakerSpec
欄位 | 類型 | 是否必須 | 說明 |
workloadSelector | map<string, string> | 是 | 通過一個或多個標籤,指明熔斷配置生效的一組特定的Pod或VM。標籤搜尋的範圍限制在資源所在的配置命名空間。更多資訊,請參見WorkloadSelector。 |
isGateway | bool | 否 | 配置為true,表示配置作用於網關。預設為false。 |
configs | 是 | 熔斷配置,可配置多條。 |
CircuitBreakerConfig
欄位 | 類型 | 是否必須 | 說明 |
name | string | 否 | 單條熔斷配置的名稱。 |
match | 否 | 匹配條件。 | |
breaker_config | 否 | 路由級熔斷配置。 | |
target_services | 否 | 熔斷策略作用的服務。 說明 該欄位僅支援ASM 1.25及以上版本。 |
TargetServiceRef
此類型欄位僅支援ASM 1.25及以上版本。
欄位 | 類型 | 是否必須 | 說明 |
kind | string | 否 | 熔斷策略作用的服務 kind。可選值:
預設為 |
name | string | 是 | 熔斷策略作用的服務名稱。 |
namespace | string | 否 | 熔斷策略作用的服務所處的命名空間。預設為您定義的熔斷策略所處命名空間。 |
port | int32 | 否 | 熔斷策略作用的服務連接埠。 |
section_name | string | 否 | 服務的額外屬性,當前只對
|
樣本一
以下樣本定義了 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: defaultCircuitBreakerMatch
欄位 | 類型 | 是否必須 | 說明 |
vhost | 否 | VirtualHost匹配條件。 |
BreakerConfig
欄位 | 類型 | 是否必須 | 說明 |
window_size | Duration | 否 | 統計時間視窗,預設10s,最大不能超過12s。 |
break_duration | Duration | 否 | 熔斷時間長度,預設30s。 |
slow_request_rt | Duration | 否 | 定義慢請求的響應延遲時間,超過該響應時間長度的請求則被認定為慢請求。 |
average_request_rt | Duration |
| 定義業務的平均回應時間,例如0.01s。 |
max_slow_requests | uint32 | 否 | 最大慢請求次數,必須為整數,例如:1000。超過該次數的新請求會被熔斷。 |
error_percent | 否 | 錯誤百分比,時間視窗內錯誤請求(5XX)比例超過該值,則新的請求會被熔斷。 | |
gateway_error_percent | 否 | 網關錯誤百分比,時間視窗內網關錯誤請求(502,503,504)比例超過該值,則新的請求會被熔斷。(ASM執行個體版本>= 1.24.6.54時有效) | |
min_request_amount | uint32 | 否 | 最少請求次數,對應error_percent條件,預設為0。為了防止誤判定被熔斷,可配置請求最少次數。 |
custom_response | 否 | 當請求被熔斷時,自訂返回內容。 |
CustomResponse
欄位 | 類型 | 是否必須 | 說明 |
status_code | int32 | 否 | HTTP響應狀態代碼。 |
header_to_add | map[string]string | 否 | 自訂響應添加的Headers。 |
body | string | 否 | 自訂響應Body內容。 |
VirtualHostMatch
欄位 | 類型 | 是否必須 | 說明 |
name | string | 否 | 匹配的VirtualHost名稱。 |
port | int | 否 | 匹配的請求連接埠。 |
route | 是 | 匹配的介面路由規則名稱。 |
RouteMatch
欄位 | 類型 | 是否必須 | 說明 |
name_match | string |
| 匹配的路由名稱,對應VirtualService下的單條路由名稱。 |
header_match | 否 | 匹配服務要求的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 | 否 |
| |
invert_match | bool | 否 | 預設為false。
| |