Helm install istio

Here we use helm to install istio (istio-base, istiod, istia gateway), then deploy a sample online book store microservice “bookinfo”, practise istio tasks include Traffic Management, Observability, Security.

Bookinfo Topology:

image tooltip here

  • Helm install istio (istiod, istio-ingress)
kubectl create namespace istio-system
helm pull istio/base
helm install istio-base . -n istio-system --set defaultRevision=default

helm pull istio/istiod
helm install istiod . -n istio-system 

kubectl create namespace istio-ingress
helm pull istio/gateway
helm install istio-ingress . -n istio-ingress

helm ls -n istio-system
NAME      	NAMESPACE   	REVISION	UPDATED                                	STATUS  	CHART        	APP VERSION
istio-base	istio-system	1       	2023-12-17 08:14:06.943276388 +0800 CST	deployed	base-1.20.1  	1.20.1     
istiod    	istio-system	1       	2023-12-17 08:15:40.370551503 +0800 CST	deployed	istiod-1.20.1	1.20.1 

helm ls -n istio-ingress
NAME         	NAMESPACE    	REVISION	UPDATED                                	STATUS  	CHART         	APP VERSION
istio-ingress	istio-ingress	1       	2023-12-17 08:25:07.111999373 +0800 CST	deployed	gateway-1.20.1	1.20.1
  • Deploy bookinfo microservice and istio ingressgateway and virtualservice
kubectl label namespace istio-system istio-injection=enabled

kubectl apply -f https://github.com/istio/istio/blob/master/samples/bookinfo/platform/kube/bookinfo.yaml -oyaml > bookinfo.yaml
kubectl apply -f bookinfo.yaml

kubectl get po
NAME                                                     READY   STATUS    RESTARTS       AGE
details-v1-698d88b-wmfcb                                 2/2     Running   0              21m
ratings-v1-6484c4d9bb-cb6gx                              2/2     Running   0              21m
reviews-v1-5b5d6494f4-jrsvc                              2/2     Running   0              21m
reviews-v2-5b667bcbf8-jgfzj                              2/2     Running   0              21m
reviews-v3-5b9bd44f4-tmmfz                               2/2     Running   0              21m

kubectl apply -f https://github.com/istio/istio/blob/master/samples/bookinfo/networking/bookinfo-gateway.yaml -oyaml > bookinfo-gateway.yaml
kubectl apply -f bookinfo-gateway.yaml
  • Deploy Kiali, jaeger, grafana, prometheus
wget https://raw.githubusercontent.com/istio/istio/release-1.20/samples/addons/prometheus.yaml
wget https://raw.githubusercontent.com/istio/istio/release-1.20/samples/addons/jaeger.yaml
wget https://raw.githubusercontent.com/istio/istio/release-1.20/samples/addons/grafana.yaml
kubectl create -f prometheus.yaml -f jaeger.yaml -f grafana.yaml
  • visit http://book.istio:31000/productpage, with review (v1, v2, v3) image tooltip here

  • define destination rules and virtual service for reviews

wget https://raw.githubusercontent.com/istio/istio/master/samples/bookinfo/networking/destination-rule-all.yaml
wget https://raw.githubusercontent.com/istio/istio/master/samples/bookinfo/networking/virtual-service-reviews-90-10.yaml

kubectl create -f destination-rule-all.yaml -f virtual-service-reviews-90-10.yaml   # route v1 10% and v3 90%
kubectl scale deployment reviews-v2 -n istio-system --replicas=0 # scale down v2 to 0

kubectl get dr -A
NAMESPACE      NAME          HOST          AGE
istio-system   details       details       6m56s
istio-system   productpage   productpage   6m56s
istio-system   ratings       ratings       6m56s
istio-system   reviews       reviews       6m56s
kubectl get vs -A
NAMESPACE      NAME       GATEWAYS               HOSTS            AGE
istio-system   bookinfo   ["bookinfo-gateway"]   ["book.istio"]   19h
istio-system   reviews                           ["reviews"]      5m26s

Spec:
  Hosts:
    reviews
  Http:
    Route:
      Destination:
        Host:    reviews
        Subset:  v1
      Weight:    10
      Destination:
        Host:    reviews
        Subset:  v3
      Weight:    90

refresh bookinfo webpage, test Traffic route weight as bellow

90% traffic for reviews v3 vs 10% traffic for review v1

image tooltip here