All about Istio (Service Mesh) : Part 1

Check out this blog as a pre-requisite

Visualize service mesh with KIALI

KIALI is used for observing connections and micro services of istio service mesh, defining and validating them. It visualizes the service mesh topology and provides visibility into fearures like request routing, circuit breakers, request rates, latency etc. It also provides wizards to apply common traffic patterns and automatically generates istio configuration.

Install Kiali to visualize service mesh

from your istio-<version folder> apply this code

Note: Follow this instruction to install istio-<version> folder

kubectl apply -f samples/addons

KIALI will also get installed as an addon

You may see something like this in the output
serviceaccount/kiali createdconfigmap/kiali created

clusterrole.rbac.authorization.k8s.io/kiali created

clusterrolebinding.rbac.authorization.k8s.io/kiali created

service/kiali createddeployment.apps/kiali created

Check if the kiali deployment is running on istio-system namespace

kubectl rollout status deployment/kiali -n istio-system kubectl -n istio-system get svc kiali

Then run the KIALI daskboard

istioctl dashboard kiali

We can check updates for last 1 hour or else. We can set the time, we can set when it should refresh. We can also see all applications running on the istio-system namespace

From mesh, we can see

Let’s add some applications and test kiali. For that, we have already got some samples

Follow this one to create your folder and find them. Once done, enable istio-injection on the default namespace

kubectl label namespace default istio-injection=enabled

Then install files from samples/bookinfo/platform/kube/bookinfo.yaml

kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml

now it looks something like this

We can now check that istioctl is working fine in our default namespace

we can check the pods here

If you check KIALI, you can see Data plane is added with 4 applications

If we check Data Plane

These are the 4 applications we have

basically reviews have 3 versions of it. So, we have 4 different applications with reviews having 3 application right now

But we have no traffic yet

Let’s generate some by creating a gateway which will allow traffic from outside the cluster

Let’s use this yaml file

kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml

Let’s check if things are fine using istioctl analyze

Now we need to find the IP through which we can access our local cluster

We can save this ip in a variable (INGRESS_HOST) to use properly

export INGRESS_HOST=$(minikube ip)

We also need to get the proper port number using this command

INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].nodePort}')

echo $INGRESS_PORT

Here the port is 30093

http://$INGRESS_HOST:$INGRESS_PORT/productpage

Go to your browser and paste this

http://$INGRESS_HOST:$INGRESS_PORT/productpage

Then replace the value for the variable

http://192.168.49.2:30093/productpage

If you reload the page, you will see the colour of the review start changes meaning we have 3 versions of the reviews

Now if we check the graph page, we can see the traffic passed though which applications

In the Istio config page, we can also see the virtualservice and gateway we created earlier.

Now, if we delete the productpage, what will happen? Will kiali receive any traffic, healthchecks?

Let’s delete first

kubectl delete deployments/productpage-v1

from kiali, we can see the productpage-v1 is totally gone

We can see the services have no health checks