在此之前,我们以及成功部署了Istio官方的bookinfo微服务。在做请求路由的示例之前,我们先来看一个名词-DestinationRule。

概念

DestinationRule是Istio流量路由功能的关键部分,DestinationRule规定了流量如何路由到目标地址,你可以这么理解它,比如你现在在家,一会需要出发去公司,你使用百度导航查看从家如何去公司,结果百度导航搜索出来三条线路,也就是说从家到公司可以有3种路线,其实DestinationRule也一样,他就是定义了流量到达目标地址的路线,这么比喻是不是觉得可以理解DestinationRule了。

示例1

我们先拿出一个DestionationRule的资源文件看一下:

apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: reviews
spec:
host: reviews
subsets:
- name: v1
labels:
version: v1
- name: v2
labels:
version: v2
- name: v3
labels:
version: v3
  • host字段

使用Kubernetes service的短名称,上面reviews,将会被reviews.default.svc.cluster.local代替,如果你需要使用其他名称空间下的svc,你可以 ..svc.cluster.local 配置,当然service一定要存在名称空间下,否则将被忽略

  • subsets字段

subsets是服务端的集合,每个子集都必须是在host对应服务的基础上的,说的简单点也就是subsets子集是kubernetes的svc关联的pods,subsets的labels可以关联到svc下pods的labels

示例2

DestinationRule还允许你调整特定服务子集的Envoy流量策略。

再来看一个示例:

apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: my-destination-rule
spec:
host: my-svc
trafficPolicy:
loadBalancer:
simple: ROUND_ROBIN
subsets:
- name: v1
labels:
version: v1
- name: v2
labels:
version: v2
trafficPolicy:
loadBalancer:
simple: LEAST_CONN
- name: v3
labels:
version: v3
  • trafficPolicy

流量策略,主要包含负载均衡、连接池策略、异常检查等

为子集指定的策略只有在路由规则明确向该子集发送流量后才会生效。

具体可以查阅相关文档 https://www.bookstack.cn/read/istio-1.4-zh/46098cf8d0d7f17d.md