前言已经部署好了微服务bookinfo,下面开始配置请求路由。
请求路由
首先一共4个微服务,分别是productpage(version=v1)、ratings(version=v1)、reviews(version=v1 v2 v3)、details(version=v1),我们需要先应用一个默认的目标规则。

定义DestinationRule
apiVersion: networking.istio.io/v1alpha3 kind: DestinationRule metadata: name: productpage spec: host: productpage subsets: - name: v1 labels: version: v1 --- apiVersion: networking.istio.io/v1alpha3 kind: DestinationRule metadata: name: details spec: host: details subsets: - name: v1 labels: version: v1 --- 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 --- apiVersion: networking.istio.io/v1alpha3 kind: DestinationRule metadata: name: ratings spec: host: ratings subsets: - name: v1 labels: version: v1
|
我们在应用一个流量策略,控制所有的流量走v1版本的reviews
定义VirtualService
kind: VirtualService metadata: name: details spec: hosts: - details http: - route: - destination: host: details subset: v1 --- apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: ratings spec: hosts: - ratings http: - route: - destination: host: ratings subset: v1 --- apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: reviews spec: hosts: - reviews http: - route: - destination: host: reviews subset: v1
|
浏览器访问http://192.168.1.110:31514/productpage,多次刷新页面,可以发现,reviews都是显示的v1版本

基于用户身份的路由
productpage服务请求reviews服务时,会在请求中自定义一个end-user,可以模拟下面这个场景的实验
我们模拟一个场景,当jason用户访问,将所有流量路由到v2版本的reviews,其他路由到v1版本的reviews
定义VirtualService
apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: reviews spec: hosts: - reviews http: - match: - headers: end-user: exact: jason route: - destination: host: reviews subset: v2 - route: - destination: host: reviews subset: v1
|
我们验证一下,当不登陆的时候,始终请求的是v1版本的reviews

点击右上角Sign in,username填jason,password可以不填,右上角显示jason后,一直刷新页面,发现一直请求的确实是v2版本的reviews
