 Hello everyone! My name is Tom Alange. I'm a developer at IBM Research Israel. In this tutorial I'm going to show you how Skydive, an open source network topology and protocol analyzer, can help you debug an application that is running with Kubernetes and Istio. For this demonstration we are going to use an application called Book Info, which displays information about books, similar to an online bookstore. Book Info consists of four microservices. The first one is the product page, which generates the page we see now. The second one is the detail service, which contains the book information, as we see on the left side. The third one is the review service, which contains the reviews of the book, as we see on the right side. And the last one is the rating service, which contains one to five rating stars below each review. This section is not shown here, because the current version of the review service does not communicate with the rating service. Now, suppose that we want to upgrade our application, such that every review will also include one to five rating stars. For this purpose we create another version of our application, in which the review service does communicate with the rating service. Here is how our application looks in the new version. Now, suppose that while the first version is stable, the second one is still under development. For this reason, we want only one of ten visitors to see the new version. Let's check whether this is the case. We are going to refresh the page multiple times, to get a clue of the ratio by which the versions are split. As you can see, about half of the times the new version is being shown. That means the traffic rules are wrong somewhere, and we are going to use Skydive for the purpose of easily finding where. In general, Skydive is a tool that collects topology information and flows, which provides a comprehensive way of understanding what is happening in a network infrastructure. Recently, we added a Kubernetes probe and then Istio probe to Skydive. These probes give the ability to track Kubernetes entities such as pods and services, together with Istio traffic management configuration resources such as virtual services and gateways. Here we see a book info application visualized by Skydive. The current view includes pods marked by blue squares, virtual services marked by computers, a gateway marked by a gate, and the connections between them. We can see that the application is implemented by 5 pods. Product page, details, ratings, reviews version 1 and reviews version 2. When we refresh the web page, we can think of the following sequence. Our requests enter the mesh through book info gateway and are then routed by the book info virtual service to the product page pod, which generates the page we just saw. If we double click on a pod, we can see the containers it includes. For example, product page pod consisting of two containers, one named product page implementing the service, and one named Istio proxy, which is the sidecar injected to the pod by Istio automatically. Here we can see a virtual service named reviews. We can observe that the traffic to reviews version 1 and reviews version 2 is split equally by this virtual service. This can explain the fact that we got each separate version about 50% of the time. Thus we can conclude that the problem arises from a wrong configuration of the virtual service. Now, by executing the appropriate kubectl command, we created a new virtual service that splits the traffic between reviews version 1 and reviews version 2 in the correct ratio of 1 to 9. Let's verify that what we see in Skydive actually reflects the real state of our application. We refreshed the page several times. We can see that indeed most of the times we get the first version without rating stars. Book info application is now working as desired. So, in this demo, we showed how Skydive can be used to debug and to fix an unwanted behavior of a network that runs with Kubernetes and Istio. Thank you for watching.