最近在研究Istio,流量治理这块是一个大头,有好多内容。后期我应该会单独搞一个小课程出来。这块儿内容有两个非常核心的概念--VirtualService和DestinationRule。
1)VirtualService:
定义对特定目标服务的一组流量规则,它将满足条件的流量转发到对应的服务后端,这个服务后端可以是一个或多个服务,也可以是DestinationRule定义的服务子集(subset)。
示例:
apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: forecast-route spec: hosts: ##定义流量发送的目标地址,可以是service名字也可以是具体的IP地址,通常是service的名字。 - forecast http: ##这个字段可以是http、tcp或者tls(https) - match: ##定义匹配规则 - headers: ##匹配header中location取值为north的请求 location: exact: north route: ##定义具体的路由规则,这里指的是当请求符合匹配规则时,走该规则 - destination: ##定义流量被转发到哪里去 host: forecast ##这个host跟上面的host类似,通常也是用service名字定义 subset: v2 ##具体规则需要在DestinationRule中定义,这里只是指定一个名字v2 - route: - destination: host: forecast subset: v1
说明:这个小例子定义了两条规则,1)如果过来的请求header中,location匹配了north关键词,则会访问forecast这个service的v2版本;2)否则会访问到forecast服务的v1版本。其中v1和v2的具体流量走向还得看DestinationRule如何定义。
2)DestinationRule:
它用来定义流量路由之后的去处,和VirtualService配合使用,在VirtualService中定义了subsets的名字,那么在DestinationRule中定义subsets具体的内容,而且在DestinationRule里还提供了具体的流量策略。
示例:
apiVersion: networking.istio.io/v1alpha3 kind: DestinationRule metadata: name: forecast-dr ##定义DestinationRule的名字 spec: host: forecast ##定义流量发送的目标地址,和VirtualService中的该字段含义一样 subsets: ##定义subsets规则 - name: v2 ##名字是v2,和VirtualService里定义的要保持一致 labels: version: v2 trafficPolicy: ##定义流量策略,可选字段trafficPolicy、connectionPool(连接池设置,可以实现限速或限流的效果)、outlierDetection(异常点检查,可以做熔断效果)、tls loadBalancer: ##定义负载均衡算法,可选字段simple、consistentHash(一致性hash)、localityLbSetting(位置负载均衡) simple: ROUND_ROBIN ##simple指的是标准负载均衡算法,可以是ROUND_ROBIN、LEAST_CONN(最少连接)、RANDOM(随机)、PASSTHROUGH(直接转发到客户端连接的目标地址,即没有做负载均衡) - name: v1 labels: version: v1
说明:主要定义v1和v2的流量策略,其中v2会走ROUND_ROBIN的负载均衡算法,而v1没有特殊的流量策略。
可以毫不夸张地讲,Istio的流量治理离不开VirtualService和DestinationRule的配置,上面的两个示例仅仅是一丢丢皮毛,还有好多参数可以配置。比如,限流、熔断、灰度发布等等。
审核编辑:刘清
全部0条评论
快来发表一下你的评论吧 !