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 | 否 | 正则表达式匹配。 | 
| exact_match | string | 否 | 精确匹配。 | |
| prefix_match | string | 否 | 前缀匹配,以什么开头进行匹配。 | |
| suffix_match | string | 否 | 后缀匹配,以什么结尾进行匹配。 | |
| present_match | bool | 否 | 
 | |
| invert_match | bool | 否 | 默认为false。 
 | |