ASMCircuitBreaker CRD说明

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_inbound

说明

该字段仅支持ASM 1.25及以上版本。

ASMCircuitBreakerSpec

字段

类型

是否必须

说明

workloadSelector

map<string, string>

通过一个或多个标签,指明限流配置生效的一组特定的PodVM。标签搜索的范围限制在资源所在的配置命名空间。更多信息,请参见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

正则表达式匹配。

exact_match

string

精确匹配。

prefix_match

string

前缀匹配,以什么开头进行匹配。

suffix_match

string

后缀匹配,以什么结尾进行匹配。

present_match

bool

  • 配置为true,表示存在Header即可,无需关注Header Value的取值。

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

invert_match

bool

默认为false

  • 配置为true,表示上述匹配结果取反。

  • 配置为false,表示遵循上述匹配结果。