# Istio - Weight-based routing
TIP
Screencast: https://asciinema.org/a/229605?t=470 (opens new window)
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
Confirm the rule was replaced:
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
When you refresh the /productpage
you will always see book reviews
with red colored star ratings for each review.
Kiali graph: