Setting Up Vistio for Your Istio Mesh

Requirements

Prometheus

Istio => 0.7

Assumptions

The following demo makes these assumptions for an easier deployment. If your environment is setup differently, you may need to checkout the code locally and edit some files.

Prometheus is running in the istio-system namespace and is accessible via http://prometheus.istio-system:9090

Istio mixer has istio_request_count metric enabled

Your kubernetes cluster has a ‘standard’ StorageClass

Helm installed for easy deployment (Optional)

Preface

If your mesh is not currently deployed you can follow the directions here [Istio Bookinfo Demo] to deploy Istio and its sample application. You will need to be able to generate traffic between the applications. To test that metrics are being sent correctly to Prometheus from mixer you can run the following Prometheus query “istio_request_count” and should see multiple entries.

Prometheus query istio_request_count

Deploy Vistio

You can choose to deploy Vistio via kubectl or Helm, the directions will cover both. Some values may need to be modified depending on your environment.

Checkout Vistio (Optional)

If you would like to deploy Vistio via Helm you will need to checkout the project to get its Helm templates. Also if one of the above assumptions does not meet your needs(Ex. prometheus url is different), you should checkout and edit the files manually.

Deploy Via kubectl

kubectl apply -f https://raw.githubusercontent.com/nmnellis/vistio/v0.1.2/vistio-mesh-only.yaml -n default

Deploy Via Helm

cd into the root of Vistio project and run a “helm install”

helm install helm/vistio -f helm/vistio/values-mesh-only.yaml --name vistio --namespace default

Verify and Expose Vistio Web/API

Verify that the applications are up and running. We expose the applications via “kubectl port-forward”.

Verify vistio-api

kubectl describe statefulset vistio-api -n default

Optional check logs

You should be able to see if there are connection/query errors to Prometheus from the vistio-api in the logs.

kubectl logs -n default -c vistio-api $(kubectl -n default get pod -l app=vistio-api -o jsonpath='{.items[0].metadata.name}')

Verify vistio-web

kubectl describe deployment vistio-web -n default

Expose vistio-api

We will use “kubectl port-forward” to expose the vistio-api to http://localhost:9091

kubectl -n default port-forward $(kubectl -n default get pod -l app=vistio-api -o jsonpath='{.items[0].metadata.name}') 9091:9091 &

Verify vistio-api

The vistio-api is called by vistio-web to render your mesh. You should see something similar to the output below

Expected vistio-api Output

Expose Vistio

In another terminal window, expose the Vizceral UI on http://localhost:8080.

kubectl -n default port-forward $(kubectl -n default get pod -l app=vistio-web -o jsonpath='{.items[0].metadata.name}') 8080:8080 &

Open Vistio

If everything up until now is working you should be able to load the Vistio UI and begin exploring your mesh network. You should see something similar to the image below.