# Istio - Weight-based routing
In Canary Deployments, newer versions of services are incrementally rolled out to users to minimize the risk and impact of any bugs introduced by the newer version.
Route a percentage of traffic to one service or another - send %50
of traffic to reviews:v1
and %50 to reviews:v3
and finally complete
the migration by sending %100 of traffic to reviews:v3
.
Route all traffic to the reviews:v1
version of each microservice:
kubectl apply -f samples/bookinfo/networking/virtual-service-all-v1.yaml
Transfer 50% of the traffic from reviews:v1
to reviews:v3
:
kubectl apply -f samples/bookinfo/networking/virtual-service-reviews-50-v3.yaml
kubectl get virtualservice reviews -o yaml
Output:
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: reviews
...
spec:
hosts:
- reviews
http:
- route:
- destination:
host: reviews
subset: v1
weight: 50
- destination:
host: reviews
subset: v3
weight: 50
Refresh the /productpage
in your browser and you now see
red colored star ratings approximately 50% of the time.
Check the flows in Kiali graph, where only reviews:{v1,v2}
are used:
Assuming you decide that the reviews:v3
microservice is stable, you can
route 100% of the traffic to reviews:v3
by applying this virtual service.
kubectl apply -f samples/bookinfo/networking/virtual-service-reviews-v3.yaml
kubectl get virtualservice reviews -o yaml
Output:
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
...
spec:
hosts:
- reviews
http:
- route:
- destination:
host: reviews
subset: v3
When you refresh the /productpage
you will always see book reviews
with red colored star ratings for each review.
Kiali graph: