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: default
CircuitBreakerMatch
字段 | 类型 | 是否必须 | 说明 |
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 | 否 | 正则表达式匹配。 |
exact_match | string | 否 | 精确匹配。 | |
prefix_match | string | 否 | 前缀匹配,以什么开头进行匹配。 | |
suffix_match | string | 否 | 后缀匹配,以什么结尾进行匹配。 | |
present_match | bool | 否 |
| |
invert_match | bool | 否 | 默认为false。
|