路由级熔断 本文档介绍路由级熔断功能的背景,生效方式以及验证效果。 背景信息 社区Istio提供DestinationRule进行熔断配置,以官方的一个demo为例 yaml apiVersion: networking.istio.io/v1 kind: DestinationRule metadata: name: reviewscbpolicy spec: host: reviews.prod.svc.cluster.local trafficPolicy: connectionPool: tcp: maxConnections: 100 http: http2MaxRequests: 1000 maxRequestsPerConnection: 10 outlierDetection: consecutive5xxErrors: 7 interval: 5m baseEjectionTime: 15m 可以看出DestinationRule提供的熔断功能,通过Envoy连接池实现对上游集群的限流熔断,并周期性检查一些异常指标,例如5xx错误,达到一定累积量则将该主机从连接池中隔离出去,从而实现熔断效果。显然,社区的熔断功能仅支持服务级别熔断,无法细化到路由级,熔断的情况下影响面比较大。 因此,CSM提供一种新的CRD CTGCircuitBreaker,可以限定仅作用于特定的路由,提供更细粒度的熔断控制。 本文以Bookinfo和Httpbin为例,模拟熔断效果。其中httpbin的熔断不会对bookinfo产生影响。 验证准备 部署网关 网关安装可以参考 应用服务网格入口网关。bookinfo的安装可以参考部署bookinfo应用到CSM实例。 网关deployment部署后,按以下规则配置VirtualService。这条规则表示网关后端分别路由到productpage和httpbin,分别按不同的url路由,两者互相独立,为了后续可以验证路由级的熔断,httpbin不会影响productpage的业务。 apiVersion: networking.istio.io/v1beta1 kind: VirtualService metadata: name: bookinfo namespace: default spec: gateways: bookinfogateway hosts: bookinfo.com http: match: uri: exact: /productpage uri: prefix: /static uri: exact: /login uri: exact: /logout uri: prefix: /api/v1/products name: bookinfovs route: destination: host: productpage.default.svc.cluster.local port: number: 9080 match: uri: prefix: /httpbin name: httpbinroutename1 rewrite: uri: / route: destination: host: httpbin.foo.svc.cluster.local port: number: 8000