实验概述
- 这个实验将流量从微服务reviews的V1版本逐步迁移到V3版本。首先将50%的流量发送到reviews:v1,另外,50%的流量发送到reviews:v3。接着,再把 100%的流量发送到reviews:v3来完成迁移
环境准备
- 首先,运行此命令将所有流量路由到各个微服务的 v1 版本
- 确保环境中只有这一个VS
kubectl apply -f /root/istio-1.24.3/samples/bookinfo/networking/virtual-service-all-v1.yaml
virtual-service-all-v1.yaml
apiVersion: networking.istio.io/v1
kind: VirtualService
metadata:
name: productpage
spec:
hosts:
- productpage
http:
- route:
- destination:
host: productpage
subset: v1
---
apiVersion: networking.istio.io/v1
kind: VirtualService
metadata:
name: reviews
spec:
hosts:
- reviews
http:
- route:
- destination:
host: reviews
subset: v1
---
apiVersion: networking.istio.io/v1
kind: VirtualService
metadata:
name: ratings
spec:
hosts:
- ratings
http:
- route:
- destination:
host: ratings
subset: v1
---
apiVersion: networking.istio.io/v1
kind: VirtualService
metadata:
name: details
spec:
hosts:
- details
http:
- route:
- destination:
host: details
subset: v1
---
![image]()
把50%的流量转移至V3
- 把 50% 的流量从 reviews:v1 转移到 reviews:v3
kubectl apply -f /root/istio-1.24.3/samples/bookinfo/networking/virtual-service-reviews-50-v3.yaml
virtual-service-reviews-50-v3.yaml
apiVersion: networking.istio.io/v1
kind: VirtualService
metadata:
name: reviews
spec:
hosts:
- reviews
http:
- route:
- destination:
host: reviews
subset: v1
weight: 50
- destination:
host: reviews
subset: v3
weight: 50
- Istio的流量分发策略是基于Envoy的随机负载算法的近似概率分布,不是严格轮询,所以图中看到的不是50/50。
- 如果请求的数量更多,统计的时间更长,这个概率会更接近50/50
- 访问浏览器中的 /productpage 页面,大约有 50% 的几率会看到页面中有V3版本
![image]()
把100%的流量转移至V3
- 如果认为 reviews:v3 微服务已经稳定,可以通过应用 Virtual Service 规则将 100% 的流量路由 reviews:v3
kubectl apply -f /root/istio-1.24.3/samples/bookinfo/networking/virtual-service-reviews-v3.yaml
virtual-service-reviews-v3.yaml
apiVersion: networking.istio.io/v1
kind: VirtualService
metadata:
name: reviews
spec:
hosts:
- reviews
http:
- route:
- destination:
host: reviews
subset: v3
![image]()
![image]()