<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Kiali – Travels Demo Tutorial</title>
    <link>https://v2-24.kiali.io/docs/tutorials/travels/</link>
    <description>Recent content in Travels Demo Tutorial on Kiali</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en</language>
    
	  <atom:link href="https://v2-24.kiali.io/docs/tutorials/travels/index.xml" rel="self" type="application/rss+xml" />
    
    
      
        
      
    
    
    <item>
      <title>Docs: Prerequisites</title>
      <link>https://v2-24.kiali.io/docs/tutorials/travels/01-prerequisites/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://v2-24.kiali.io/docs/tutorials/travels/01-prerequisites/</guid>
      <description>
        
        
        &lt;h2 id=&#34;platform-setup&#34;&gt;Platform Setup&lt;/h2&gt;
&lt;p&gt;This tutorial assumes you will have access to a Kubernetes cluster with Istio installed.&lt;/p&gt;
&lt;p&gt;This tutorial has been tested using:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;a &lt;a href=&#34;https://istio.io/latest/docs/setup/platform-setup/minikube/&#34;&gt;Minikube&lt;/a&gt; installation.&lt;/li&gt;
&lt;li&gt;an &lt;a href=&#34;https://istio.io/latest/docs/setup/platform-setup/openshift/&#34;&gt;OpenShift&lt;/a&gt; installation.&lt;/li&gt;
&lt;/ul&gt;


&lt;div class=&#34;alert alert-warning&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;alert-heading&#34;&gt;Tip&lt;/h4&gt;

    Platform dependent tasks will be indicated with a special note like this.

&lt;/div&gt;



&lt;div class=&#34;alert alert-warning&#34; role=&#34;alert&#34;&gt;


    &lt;p&gt;This tutorial has been tested using:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;minikube v1.16.0&lt;/strong&gt;, &lt;strong&gt;istio 1.8.1&lt;/strong&gt; and &lt;strong&gt;kiali v1.28.0&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;openshift v4.8.3&lt;/strong&gt;, &lt;strong&gt;istio 1.11.0&lt;/strong&gt; and &lt;strong&gt;kiali v1.39.0&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;

&lt;h2 id=&#34;install-istio&#34;&gt;Install Istio&lt;/h2&gt;
&lt;p&gt;Once you have your Kubernetes cluster ready, follow the &lt;a href=&#34;https://istio.io/latest/docs/setup/getting-started/&#34;&gt;Istio Getting Started&lt;/a&gt; to install and setup a demo profile that will be used in this tutorial.&lt;/p&gt;


&lt;div class=&#34;alert alert-warning&#34; role=&#34;alert&#34;&gt;


    Determining ingress IP and ports and creating DNS entries will be necessary in the following steps.

&lt;/div&gt;

&lt;p&gt;DNS entries can be added in a basic way to the &lt;code&gt;/etc/hosts&lt;/code&gt; file but you can use any other DNS service that allows to resolve a domain with the external Ingress IP.&lt;/p&gt;


&lt;div class=&#34;alert alert-warning&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;alert-heading&#34;&gt;Minikube&lt;/h4&gt;

    This tutorial uses &lt;a href=&#34;https://istio.io/latest/docs/setup/platform-setup/minikube/&#34;&gt;Minikube tunnel&lt;/a&gt; feature for external Ingress IP.

&lt;/div&gt;



&lt;div class=&#34;alert alert-warning&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;alert-heading&#34;&gt;OpenShift&lt;/h4&gt;

    This tutorial uses a route for external Ingress IP.

&lt;/div&gt;

&lt;h2 id=&#34;update-kiali&#34;&gt;Update Kiali&lt;/h2&gt;
&lt;p&gt;Istio defines a specific Kiali version as an addon.&lt;/p&gt;
&lt;p&gt;In this tutorial we are going to update Kiali to the latest release version.&lt;/p&gt;
&lt;p&gt;Assuming you have installed the addons following the &lt;a href=&#34;https://istio.io/latest/docs/setup/getting-started/&#34;&gt;Istio Getting Started&lt;/a&gt; guide, you can uninstall Kiali with the command:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;kubectl delete -f ${ISTIO_HOME}/samples/addons/kiali.yaml --ignore-not-found&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;There are multiple ways to install a recent version of Kiali, this tutorial follows the &lt;a href=&#34;https://v2-24.kiali.io/docs/installation/quick-start/#install-via-helm&#34;&gt;Quick Start using Helm Chart&lt;/a&gt;.&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;helm install \
  --namespace istio-system \
  --set auth.strategy=&amp;#34;anonymous&amp;#34; \
  --repo https://kiali.org/helm-charts \
  kiali-server \
  kiali-server
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;access-the-kiali-ui&#34;&gt;Access the Kiali UI&lt;/h2&gt;
&lt;p&gt;The Istio &lt;code&gt;istioctl&lt;/code&gt; client has an easy method to expose and access Kiali:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;${ISTIO_HOME}/bin/istioctl dashboard kiali&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;There are other alternatives to expose Kiali or other Addons in Istio. Check &lt;a href=&#34;https://istio.io/latest/docs/tasks/observability/gateways/&#34;&gt;Remotely Accessing Telemetry Addons&lt;/a&gt; for more information.&lt;/p&gt;
&lt;p&gt;After the &lt;em&gt;Prerequisites&lt;/em&gt; you should be able to access Kiali. Verify its version by clicking the &amp;ldquo;?&amp;rdquo; icon and selecting &amp;ldquo;About&amp;rdquo;:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/tutorial/01-04-access-kiali-v1.39.0.png&#34; alt=&#34;Verify Kiali Access&#34; title=&#34;Verify Kiali Access&#34;&gt;&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Install Travel Demo</title>
      <link>https://v2-24.kiali.io/docs/tutorials/travels/02-install-travel-demo/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://v2-24.kiali.io/docs/tutorials/travels/02-install-travel-demo/</guid>
      <description>
        
        
        &lt;h2 id=&#34;deploy-the-travel-demo&#34;&gt;Deploy the Travel Demo&lt;/h2&gt;
&lt;p&gt;This demo application will deploy several services grouped into three namespaces.&lt;/p&gt;
&lt;p&gt;Note that at this step we are going to deploy the application without any reference to Istio.&lt;/p&gt;
&lt;p&gt;We will join services to the ServiceMesh in a following step.&lt;/p&gt;
&lt;p&gt;To create and deploy the namespaces perform the following commands:&lt;/p&gt;


&lt;div class=&#34;alert alert-warning&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;alert-heading&#34;&gt;OpenShift&lt;/h4&gt;

    OpenShift users can substitute &lt;code&gt;oc&lt;/code&gt; for &lt;code&gt;kubectl&lt;/code&gt;. OpenShift users will need
to add the necessary NetworkAttachmentDefinition to each namespace.  Also, the necessary SecurityContextConstraints
for the service accounts defined in the namespace (minimally, default).

&lt;/div&gt;

&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;kubectl create namespace travel-agency
kubectl create namespace travel-portal
kubectl create namespace travel-control

kubectl apply -f &amp;lt;(curl -L https://raw.githubusercontent.com/kiali/demos/master/travels/travel_agency.yaml) -n travel-agency
kubectl apply -f &amp;lt;(curl -L https://raw.githubusercontent.com/kiali/demos/master/travels/travel_portal.yaml) -n travel-portal
kubectl apply -f &amp;lt;(curl -L https://raw.githubusercontent.com/kiali/demos/master/travels/travel_control.yaml) -n travel-control
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Check that all deployments rolled out as expected:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ kubectl get deployments -n travel-control
NAME      READY   UP-TO-DATE   AVAILABLE   AGE
control   1/1     1            1           85s

$ kubectl get deployments -n travel-portal
NAME      READY   UP-TO-DATE   AVAILABLE   AGE
travels   1/1     1            1           91s
viaggi    1/1     1            1           91s
voyages   1/1     1            1           91s

$ kubectl get deployments -n travel-agency
NAME            READY   UP-TO-DATE   AVAILABLE   AGE
cars-v1         1/1     1            1           96s
discounts-v1    1/1     1            1           96s
flights-v1      1/1     1            1           96s
hotels-v1       1/1     1            1           96s
insurances-v1   1/1     1            1           96s
mysqldb-v1      1/1     1            1           96s
travels-v1      1/1     1            1           96s
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;understanding-the-demo-application&#34;&gt;Understanding the demo application&lt;/h2&gt;
&lt;h3 id=&#34;travel-portal-namespace&#34;&gt;Travel Portal namespace&lt;/h3&gt;
&lt;p&gt;The Travel Demo application simulates two business domains organized in different namespaces.&lt;/p&gt;
&lt;p&gt;In a first namespace called &lt;em&gt;travel-portal&lt;/em&gt; there will be deployed several travel shops, where users can search for and book flights, hotels, cars or insurance.&lt;/p&gt;
&lt;p&gt;The shop applications can behave differently based on request characteristics like channel (web or mobile) or user (new or existing).&lt;/p&gt;
&lt;p&gt;These workloads may generate different types of traffic to imitate different real scenarios.&lt;/p&gt;
&lt;p&gt;All the portals consume a service called &lt;em&gt;travels&lt;/em&gt; deployed in the &lt;em&gt;travel-agency&lt;/em&gt; namespace.&lt;/p&gt;
&lt;h3 id=&#34;travel-agency-namespace&#34;&gt;Travel Agency namespace&lt;/h3&gt;
&lt;p&gt;A second namespace called &lt;em&gt;travel-agency&lt;/em&gt; will host a set of services created to provide quotes for travel.&lt;/p&gt;
&lt;p&gt;A main &lt;em&gt;travels&lt;/em&gt; service will be the business entry point for the travel agency. It receives a destination city and a user as parameters and it calculates all elements that compose a travel budget: airfare, lodging, car reservation and travel insurance.&lt;/p&gt;
&lt;p&gt;Each service can provide an independent quote and the &lt;em&gt;travels&lt;/em&gt; service must then aggregate them into a single response.&lt;/p&gt;
&lt;p&gt;Additionally, some users, like &lt;em&gt;registered&lt;/em&gt; users, can have access to special discounts, managed as well by an external service.&lt;/p&gt;
&lt;p&gt;Service relations between namespaces can be described in the following diagram:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/tutorial/02-02-travels-demo-design.png&#34; alt=&#34;Travel Demo Design&#34; title=&#34;Travel Demo Design&#34;&gt;&lt;/p&gt;
&lt;h4 id=&#34;travel-portal-and-travel-agency-flow&#34;&gt;Travel Portal and Travel Agency flow&lt;/h4&gt;
&lt;p&gt;A typical flow consists of the following steps:&lt;/p&gt;
&lt;p&gt;. A portal queries the &lt;em&gt;travels&lt;/em&gt; service for available destinations.
. &lt;em&gt;Travels&lt;/em&gt; service queries the available hotels and returns to the portal shop.
. A user selects a destination and a type of travel, which may include a &lt;em&gt;flight&lt;/em&gt; and/or a &lt;em&gt;car&lt;/em&gt;, &lt;em&gt;hotel&lt;/em&gt; and &lt;em&gt;insurance&lt;/em&gt;.
. &lt;em&gt;Cars&lt;/em&gt;, &lt;em&gt;Hotels&lt;/em&gt; and &lt;em&gt;Flights&lt;/em&gt; may have available discounts depending on user type.&lt;/p&gt;
&lt;h3 id=&#34;travel-control-namespace&#34;&gt;Travel Control namespace&lt;/h3&gt;
&lt;p&gt;The &lt;em&gt;travel-control&lt;/em&gt; namespace runs a &lt;em&gt;business dashboard&lt;/em&gt; with two key features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Allow setting changes for every travel shop simulator (traffic ratio, device, user and type of travel).&lt;/li&gt;
&lt;li&gt;Provide a &lt;em&gt;business&lt;/em&gt; view of the total requests generated from the &lt;em&gt;travel-portal&lt;/em&gt; namespace to the &lt;em&gt;travel-agency&lt;/em&gt; services, organized by business criteria as grouped per shop, per type of traffic and per city.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/tutorial/02-02-travels-dashboard.png&#34; alt=&#34;Travel Dashboard&#34; title=&#34;Travel Dashboard&#34;&gt;&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: First Steps</title>
      <link>https://v2-24.kiali.io/docs/tutorials/travels/03-first-steps/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://v2-24.kiali.io/docs/tutorials/travels/03-first-steps/</guid>
      <description>
        
        
        &lt;h2 id=&#34;missing-sidecars&#34;&gt;Missing Sidecars&lt;/h2&gt;
&lt;p&gt;The Travel Demo has been deployed in the previous step but without installing any Istio sidecar proxy.&lt;/p&gt;
&lt;p&gt;In that case, the application won&amp;rsquo;t connect to the control plane and won&amp;rsquo;t take advantage of Istio&amp;rsquo;s features.&lt;/p&gt;
&lt;p&gt;In Kiali, we will see the new namespaces in the overview page:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/tutorial/03-01-overview.png&#34; alt=&#34;Overview&#34; title=&#34;Overview&#34;&gt;&lt;/p&gt;
&lt;p&gt;But we won&amp;rsquo;t see any traffic in the graph page for any of these new namespaces:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/tutorial/03-01-empty-graph.png&#34; alt=&#34;Empty Graph&#34; title=&#34;Empty Graph&#34;&gt;&lt;/p&gt;
&lt;p&gt;If we examine the Applications, Workloads or Services page, it will confirm that there are missing sidecars:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/tutorial/03-01-missing-sidecar.png&#34; alt=&#34;Missing Sidecar&#34; title=&#34;Missing Sidecar&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;enable-sidecars&#34;&gt;Enable Sidecars&lt;/h2&gt;
&lt;p&gt;In this tutorial, we will add namespaces and workloads into the ServiceMesh individually step by step.&lt;/p&gt;
&lt;p&gt;This will help you to understand how Istio sidecar proxies work and how applications can use Istio&amp;rsquo;s features.&lt;/p&gt;
&lt;p&gt;We are going to start with the &lt;em&gt;control&lt;/em&gt; workload deployed into the &lt;em&gt;travel-control&lt;/em&gt; namespace:&lt;/p&gt;


&lt;div class=&#34;alert alert-success&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;alert-heading&#34;&gt;Step 1&lt;/h4&gt;

    Enable Auto Injection on the &lt;em&gt;travel-control&lt;/em&gt; namespace

&lt;/div&gt;

&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/tutorial/03-02-travel-control-namespace.png&#34; alt=&#34;Enable Auto Injection per Namespace&#34; title=&#34;Enable Auto Injection per Namespace&#34;&gt;&lt;/p&gt;


&lt;div class=&#34;alert alert-success&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;alert-heading&#34;&gt;Step 2&lt;/h4&gt;

    Enable Auto Injection for &lt;em&gt;control&lt;/em&gt; workload

&lt;/div&gt;

&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/tutorial/03-02-control-workload.png&#34; alt=&#34;Enable Auto Injection per Workkload&#34; title=&#34;Enable Auto Injection per Workkload&#34;&gt;&lt;/p&gt;
&lt;p&gt;Understanding what happened:&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://istio.io/latest/docs/setup/additional-setup/sidecar-injection/&#34;&gt;(i) Sidecar Injection&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://istio.io/latest/docs/setup/additional-setup/sidecar-injection/#automatic-sidecar-injection&#34;&gt;(ii) Automatic Sidecar Injection&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;open-travel-demo-to-outside-traffic&#34;&gt;Open Travel Demo to Outside Traffic&lt;/h2&gt;
&lt;p&gt;The &lt;em&gt;control&lt;/em&gt; workload now has an Istio sidecar proxy injected but this application is not accessible from the outside.&lt;/p&gt;
&lt;p&gt;In this step we are going to expose the &lt;em&gt;control&lt;/em&gt; service using an Istio Ingress Gateway which will map a path to a route at the edge of the mesh.&lt;/p&gt;


&lt;div class=&#34;alert alert-success&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;alert-heading&#34;&gt;Step 1&lt;/h4&gt;

    Create a DNS entry for the &lt;em&gt;control&lt;/em&gt; service associated with the External IP of the Istio Ingress

&lt;/div&gt;



&lt;div class=&#34;alert alert-warning&#34; role=&#34;alert&#34;&gt;


    There are multiple ways to create a DNS entry depending of the platform, servers or services that you are using.
This step depends on the platform you have chosen, please review &lt;a href=&#34;https://istio.io/latest/docs/setup/getting-started/#determining-the-ingress-ip-and-ports&#34;&gt;Determining the Ingress IP and Ports&lt;/a&gt; for more details.

&lt;/div&gt;



&lt;div class=&#34;alert alert-warning&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;alert-heading&#34;&gt;Minikube&lt;/h4&gt;

    Kubernetes Service EXTERNAL-IP for &amp;ldquo;LoadBalancer&amp;rdquo; TYPE is provided in minikube plaform using the &lt;a href=&#34;https://minikube.sigs.k8s.io/docs/handbook/accessing/#using-minikube-tunnel&#34;&gt;minikube tunnel&lt;/a&gt; tool.

&lt;/div&gt;

&lt;p&gt;For minikube we will check the External IP of the Ingress gateway:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ kubectl get services/istio-ingressgateway -n istio-system
NAME                   TYPE           CLUSTER-IP     EXTERNAL-IP    PORT(S)                                                                      AGE
istio-ingressgateway   LoadBalancer   10.101.6.144   10.101.6.144   15021:30757/TCP,80:32647/TCP,443:30900/TCP,31400:30427/TCP,15443:31072/TCP   19h
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;And we will add a simple entry to the &lt;code&gt;/etc/hosts&lt;/code&gt; of the tutorial machine with the desired DNS entry:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;...
10.101.6.144 control.travel-control.istio-cluster.org
...
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Then, from this machine, the url &lt;code&gt;control.travel-control.istio-cluster.org&lt;/code&gt; will resolve to the External IP of the Ingress Gateway of Istio.&lt;/p&gt;


&lt;div class=&#34;alert alert-warning&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;alert-heading&#34;&gt;OpenShift&lt;/h4&gt;

    OpenShift does not provide the Kubernetes Service EXTERNAL-IP for &amp;ldquo;LoadBalancer&amp;rdquo; TYPE. Instead, you can expose the istio-ingressgateway service.

&lt;/div&gt;

&lt;p&gt;For OpenShift we will expose the Ingress gateway as a service:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ oc expose service istio-ingressgateway -n istio-system
$ oc get routes -n istio-system
NAME                   HOST/PORT                                  PATH   SERVICES               PORT    TERMINATION          WILDCARD
istio-ingressgateway   &amp;lt;YOUR_ROUTE_HOST&amp;gt;                                 istio-ingressgateway   http2                        None
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Then, from this machine, the host &amp;lt;YOUR_ROUTE_HOST&amp;gt; will resolve to the External IP of the Ingress Gateway of Istio. For OpenShift we will
not define a DNS entry, instead, where you see &lt;code&gt;control.travel-control.istio-cluster.org&lt;/code&gt; in the steps below, subsitute the value of &amp;lt;YOUR_ROUTE_HOST&amp;gt;.&lt;/p&gt;


&lt;div class=&#34;alert alert-success&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;alert-heading&#34;&gt;Step 2&lt;/h4&gt;

    Use the Request Routing Wizard on the &lt;em&gt;control&lt;/em&gt; service to generate a traffic rule

&lt;/div&gt;

&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/tutorial/03-03-service-actions.png&#34; alt=&#34;Request Routing Wizard&#34; title=&#34;Request Routing Wizard&#34;&gt;&lt;/p&gt;
&lt;p&gt;Use &amp;ldquo;Add Route Rule&amp;rdquo; button to add a default rule where any request will be routed to the &lt;em&gt;control&lt;/em&gt; workload.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/tutorial/03-03-request-routing.png&#34; alt=&#34;Routing Rule&#34; title=&#34;Routing Rule&#34;&gt;&lt;/p&gt;
&lt;p&gt;Use the Advanced Options and add a gateway with host &lt;code&gt;control.travel-control.istio-cluster.org&lt;/code&gt; and create the Istio config.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/tutorial/03-03-create-gateway.png&#34; alt=&#34;Create Gateway&#34; title=&#34;Create Gateway&#34;&gt;&lt;/p&gt;
&lt;p&gt;Verify the Istio configuration generated.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/tutorial/03-03-istio-config.png&#34; alt=&#34;Istio Config&#34; title=&#34;Istio Config&#34;&gt;&lt;/p&gt;


&lt;div class=&#34;alert alert-success&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;alert-heading&#34;&gt;Step 3&lt;/h4&gt;

    Test the &lt;em&gt;control&lt;/em&gt; service by pointing your browser to &lt;code&gt;\http://control.travel-control.istio-cluster.org&lt;/code&gt;

&lt;/div&gt;

&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/tutorial/03-03-test-gateway.png&#34; alt=&#34;Test Gateway&#34; title=&#34;Test Gateway&#34;&gt;&lt;/p&gt;


&lt;div class=&#34;alert alert-success&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;alert-heading&#34;&gt;Step 4&lt;/h4&gt;

    Review &lt;em&gt;travel-control&lt;/em&gt; namespace in Kiali

&lt;/div&gt;

&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/tutorial/03-03-travel-control-graph.png&#34; alt=&#34;Travel Control Graph&#34; title=&#34;Travel Control Graph&#34;&gt;&lt;/p&gt;
&lt;p&gt;Understanding what happened:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;External traffic enters into the cluster through a Gateway&lt;/li&gt;
&lt;li&gt;Traffic is routed to the &lt;em&gt;control&lt;/em&gt; service through a VirtualService&lt;/li&gt;
&lt;li&gt;Kiali Graph visualizes the traffic telemetry reported from the &lt;em&gt;control&lt;/em&gt; sidecar proxy
&lt;ul&gt;
&lt;li&gt;Only the &lt;em&gt;travel-control&lt;/em&gt; namespace is part of the mesh&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&#34;https://istio.io/latest/docs/reference/config/networking/gateway/&#34;&gt;(i) Istio Gateway&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://istio.io/latest/docs/reference/config/networking/virtual-service/&#34;&gt;(ii) Istio Virtual Service&lt;/a&gt;&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Observe</title>
      <link>https://v2-24.kiali.io/docs/tutorials/travels/04-observe/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://v2-24.kiali.io/docs/tutorials/travels/04-observe/</guid>
      <description>
        
        
        &lt;h2 id=&#34;enable-sidecars-in-all-workloads&#34;&gt;Enable Sidecars in all workloads&lt;/h2&gt;
&lt;p&gt;An Istio sidecar proxy adds a workload into the mesh.&lt;/p&gt;
&lt;p&gt;Proxies connect with the control plane and provide &lt;a href=&#34;https://istio.io/latest/about/service-mesh/#what-is-istio&#34;&gt;Service Mesh functionality&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Automatically providing metrics, logs and traces is a major feature of the sidecar.&lt;/p&gt;
&lt;p&gt;In the previous steps we have added a sidecar only in the &lt;em&gt;travel-control&lt;/em&gt; namespace&amp;rsquo;s &lt;em&gt;control&lt;/em&gt; workload.&lt;/p&gt;
&lt;p&gt;We have added new powerful features but the application is still missing visibility from other workloads.&lt;/p&gt;


&lt;div class=&#34;alert alert-success&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;alert-heading&#34;&gt;Step 1&lt;/h4&gt;

    Switch to the Workload graph and select multiple namespaces to identify missing sidecars in the Travel Demo application

&lt;/div&gt;

&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/tutorial/04-01-missing-sidecars.png&#34; alt=&#34;Missing Sidecars&#34; title=&#34;Missing Sidecars&#34;&gt;&lt;/p&gt;
&lt;p&gt;That &lt;em&gt;control&lt;/em&gt; workload provides good visibility of its traffic, but telemetry is partially enabled, as &lt;em&gt;travel-portal&lt;/em&gt; and &lt;em&gt;travel-agency&lt;/em&gt; workloads don&amp;rsquo;t have sidecar proxies.&lt;/p&gt;


&lt;div class=&#34;alert alert-success&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;alert-heading&#34;&gt;Step 2&lt;/h4&gt;

    Enable proxy injection in &lt;em&gt;travel-portal&lt;/em&gt; and &lt;em&gt;travel-agency&lt;/em&gt; namespaces

&lt;/div&gt;

&lt;p&gt;In the First Steps of this tutorial we didn&amp;rsquo;t inject the sidecar proxies on purpose to show a scenario where only some workloads may have sidecars.&lt;/p&gt;
&lt;p&gt;Typically, Istio users annotate namespaces before the deployment to allow Istio to automatically add the sidecar when the application is rolled out into the cluster. Perform
the following commands:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;kubectl label namespace travel-agency istio-injection=enabled
kubectl label namespace travel-portal istio-injection=enabled

kubectl rollout restart deploy -n travel-portal
kubectl rollout restart deploy -n travel-agency
&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;p&gt;Verify that &lt;em&gt;travel-control&lt;/em&gt;, &lt;em&gt;travel-portal&lt;/em&gt; and &lt;em&gt;travel-agency&lt;/em&gt; workloads have sidecars deployed:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/tutorial/04-01-updated-workloads.png&#34; alt=&#34;Updated Workloads&#34; title=&#34;Updated Workloads&#34;&gt;&lt;/p&gt;


&lt;div class=&#34;alert alert-success&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;alert-heading&#34;&gt;Step 3&lt;/h4&gt;

    Verify updated telemetry for &lt;em&gt;travel-portal&lt;/em&gt; and &lt;em&gt;travel-agency&lt;/em&gt; namespaces

&lt;/div&gt;

&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/tutorial/04-01-updated-telemetry.png&#34; alt=&#34;Updated Telemetry&#34; title=&#34;Updated Telemetry&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;graph-walkthrough&#34;&gt;Graph walkthrough&lt;/h2&gt;
&lt;p&gt;The graph provides a powerful set of &lt;a href=&#34;https://v2-24.kiali.io/docs/features/topology/&#34;&gt;Graph Features&lt;/a&gt; to visualize the traffic topology of the service mesh.&lt;/p&gt;
&lt;p&gt;In this step, we will show how to use the Graph to show relevant information in the context of the Travel Demo application.&lt;/p&gt;
&lt;p&gt;Our goal will be to identify the most critical service of the demo application.&lt;/p&gt;


&lt;div class=&#34;alert alert-success&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;alert-heading&#34;&gt;Step 1&lt;/h4&gt;

    Select all &lt;em&gt;travel-&lt;/em&gt; namespaces in the graph and enable &lt;em&gt;Traffic Distribution&lt;/em&gt; edge labels in the Display Options:

&lt;/div&gt;

&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/tutorial/04-02-graph-request-distribution.png&#34; alt=&#34;Graph Request Distribution&#34; title=&#34;Graph Request Distribution&#34;&gt;&lt;/p&gt;
&lt;p&gt;Review the status of the mesh, everything seems healthy, but also note that &lt;em&gt;hotels&lt;/em&gt; service has more load compared to other services inlcuded in the &lt;em&gt;travel-agency&lt;/em&gt; namespace.&lt;/p&gt;


&lt;div class=&#34;alert alert-success&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;alert-heading&#34;&gt;Step 2&lt;/h4&gt;

    Select the &lt;em&gt;hotels&lt;/em&gt; service, use the graph side-panel to select a trace from the Traces tab:

&lt;/div&gt;

&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/tutorial/04-02-hotels-normal-trace.png&#34; alt=&#34;Hotels Normal Trace&#34; title=&#34;Hotels Normal Trace&#34;&gt;&lt;/p&gt;
&lt;p&gt;Combining telemetry and tracing information will show that there are traces started from a portal that involve multiple services but also other traces that only consume the &lt;em&gt;hotels&lt;/em&gt; service.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/tutorial/04-02-hotels-single-trace.png&#34; alt=&#34;Hotels Single Trace&#34; title=&#34;Hotels Single Trace&#34;&gt;&lt;/p&gt;


&lt;div class=&#34;alert alert-success&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;alert-heading&#34;&gt;Step 3&lt;/h4&gt;

    Select the main &lt;em&gt;travels&lt;/em&gt; application and double-click to zoom in

&lt;/div&gt;

&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/tutorial/04-02-travels-zoom.png&#34; alt=&#34;Travels Zoom&#34; title=&#34;Travels Zoom&#34;&gt;&lt;/p&gt;
&lt;p&gt;The graph can focus on an element to study a particular context in detail. Note that a contextual menu is available using
right-click, to easily shortcut the navigation to other sections.&lt;/p&gt;
&lt;h2 id=&#34;application-details&#34;&gt;Application details&lt;/h2&gt;
&lt;p&gt;Kiali provides &lt;a href=&#34;https://v2-24.kiali.io/docs/features/details/&#34;&gt;Detail Views&lt;/a&gt; to navigate into applications, workloads and services.&lt;/p&gt;
&lt;p&gt;These views provide information about the structure, health, metrics, logs, traces and Istio configuration for any application component.&lt;/p&gt;
&lt;p&gt;In this tutorial we are going to learn how to use them to examine the main &lt;em&gt;travels&lt;/em&gt; application of our example.&lt;/p&gt;


&lt;div class=&#34;alert alert-success&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;alert-heading&#34;&gt;Step 1&lt;/h4&gt;

    Navigate to the &lt;em&gt;travels&lt;/em&gt; application

&lt;/div&gt;

&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/tutorial/04-03-travels-application.png&#34; alt=&#34;Travels Application&#34; title=&#34;Travels Application&#34;&gt;&lt;/p&gt;
&lt;p&gt;An &lt;em&gt;application&lt;/em&gt; is an abstract group of workloads and services labeled with the same &amp;ldquo;application&amp;rdquo; name.&lt;/p&gt;
&lt;p&gt;From Service Mesh perspective this concept is significant as telemetry and tracing signals are mainly grouped by &amp;ldquo;application&amp;rdquo; even if multiple workloads are involved.&lt;/p&gt;
&lt;p&gt;At this point of the tutorial, the &lt;em&gt;travels&lt;/em&gt; application is quite simple, just a &lt;em&gt;travels-v1&lt;/em&gt; workload exposed through the &lt;em&gt;travels&lt;/em&gt; service. Navigate to the
&lt;em&gt;travels-v1&lt;/em&gt; workload detail by clicking the link in the &lt;em&gt;travels&lt;/em&gt; application overview.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/tutorial/04-03-travels-v1-workload.png&#34; alt=&#34;Travels-v1 Workload&#34; title=&#34;Travels-v1 Workload&#34;&gt;&lt;/p&gt;


&lt;div class=&#34;alert alert-success&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;alert-heading&#34;&gt;Step 2&lt;/h4&gt;

    Examine &lt;em&gt;Outbound Metrics&lt;/em&gt; of &lt;em&gt;travels-v1&lt;/em&gt; workload

&lt;/div&gt;

&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/tutorial/04-03-travels-v1-metrics.png&#34; alt=&#34;Travels-v1 Metrics&#34; title=&#34;Travels-v1 Metrics&#34;&gt;&lt;/p&gt;
&lt;p&gt;The Metrics tab provides a powerful visualization of telemetry collected by the Istio proxy sidecar. It presents a dashboard of charts, each of which can be
expanded for closer inspection. Expand the &lt;em&gt;Request volume&lt;/em&gt; chart:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/tutorial/04-03-travels-v1-metrics-request-volume.png&#34; alt=&#34;Travels-v1 Request Volume Chart&#34; title=&#34;Travels-v1 Request Volume Chart&#34;&gt;&lt;/p&gt;
&lt;p&gt;Metrics Settings provides multiple predefined criteria out-of-the-box.  Additionally, enable the &lt;em&gt;spans&lt;/em&gt; checkbox to correlate metrics and tracing spans
in a single chart.&lt;/p&gt;
&lt;p&gt;We can see in the context of the Travels application, the &lt;em&gt;hotels&lt;/em&gt; service request volume differs from that of the other &lt;em&gt;travel-agency&lt;/em&gt; services.&lt;/p&gt;
&lt;p&gt;By examining the Request Duration chart also shows that there is no suspicious delay, so probably this asymmetric volume is part of the application business&amp;rsquo; logic.&lt;/p&gt;


&lt;div class=&#34;alert alert-success&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;alert-heading&#34;&gt;Step 3&lt;/h4&gt;

    Review &lt;em&gt;Logs&lt;/em&gt; of &lt;em&gt;travels-v1&lt;/em&gt; workload

&lt;/div&gt;

&lt;p&gt;The Logs tab provides a unified view of application container logs with the Istio sidecar proxy logs. It also offers a &lt;em&gt;spans&lt;/em&gt; checkbox, providing
a correlated view of both logs and tracing, helping identify spans of interest.&lt;/p&gt;
&lt;p&gt;From the application container log we can spot that there are two main business methods: &lt;em&gt;GetDestinations&lt;/em&gt; and &lt;em&gt;GetTravelQuote&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;In the Istio sidecar proxy log we see that &lt;em&gt;GetDestinations&lt;/em&gt; invokes a &lt;code&gt;GET /hotels&lt;/code&gt; request without parameters.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/tutorial/04-03-travels-v1-logs-getdestinations.png&#34; alt=&#34;Travels-v1 Logs GetDestinations&#34; title=&#34;Travels-v1 Logs GetDestinations&#34;&gt;&lt;/p&gt;
&lt;p&gt;However, &lt;em&gt;GetTravelQuote&lt;/em&gt; invokes multiple requests to other services using a specific city as a parameter.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/tutorial/04-03-travels-v1-logs-gettravelquote.png&#34; alt=&#34;Travels-v1 Logs GetTravelQuote&#34; title=&#34;Travels-v1 Logs GetTravelQuote&#34;&gt;&lt;/p&gt;
&lt;p&gt;Then, as discussed in the &lt;a href=&#34;https://v2-24.kiali.io/docs/tutorials/travels/02-install-travel-demo/#travel-agency-namespace&#34;&gt;Travel Demo design&lt;/a&gt;, an initial query returns all available hotels before letting the user choose one and then get specific quotes for other destination services.&lt;/p&gt;
&lt;p&gt;That scenario is shown in the increase of the &lt;em&gt;hotels&lt;/em&gt; service utilization.&lt;/p&gt;


&lt;div class=&#34;alert alert-success&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;alert-heading&#34;&gt;Step 4&lt;/h4&gt;

    Review &lt;em&gt;Traces&lt;/em&gt; of &lt;em&gt;workload-v1&lt;/em&gt;

&lt;/div&gt;

&lt;p&gt;Now we have identified that the &lt;em&gt;hotels&lt;/em&gt; service has more use than other &lt;em&gt;travel-agency&lt;/em&gt; services.&lt;/p&gt;
&lt;p&gt;The next step is to get more context to answer if some particular service is acting slower than expected.&lt;/p&gt;
&lt;p&gt;The Traces tab allows comparison between traces and metrics histograms, letting the user determine if a particular spike is expected in the context of average values.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/tutorial/04-03-travels-v1-tracing-details.png&#34; alt=&#34;Travels-v1 Traces&#34; title=&#34;Travels-v1 Traces&#34;&gt;&lt;/p&gt;
&lt;p&gt;In the same context, individual &lt;em&gt;spans&lt;/em&gt; can be compared in more detail, helping to identify a problematic step in the broader scenario.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/tutorial/04-03-travels-v1-tracing-spans.png&#34; alt=&#34;Travels-v1 Spans&#34; title=&#34;Travels-v1 Spans&#34;&gt;&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Connect</title>
      <link>https://v2-24.kiali.io/docs/tutorials/travels/05-connect/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://v2-24.kiali.io/docs/tutorials/travels/05-connect/</guid>
      <description>
        
        
        &lt;h2 id=&#34;request-routing&#34;&gt;Request Routing&lt;/h2&gt;
&lt;p&gt;The Travel Demo application has several portals deployed on the &lt;em&gt;travel-portal&lt;/em&gt; namespace consuming the &lt;em&gt;travels&lt;/em&gt; service deployed on the &lt;em&gt;travel-agency&lt;/em&gt; namespace.&lt;/p&gt;
&lt;p&gt;The &lt;em&gt;travels&lt;/em&gt; service is backed by a single workload called &lt;em&gt;travels-v1&lt;/em&gt; that receives requests from all portal workloads.&lt;/p&gt;
&lt;p&gt;At a moment of the lifecycle the business needs of the portals may differ and new versions of the &lt;em&gt;travels&lt;/em&gt; service may be necessary.&lt;/p&gt;
&lt;p&gt;This step will show how to route requests dynamically to multiple versions of the &lt;em&gt;travels&lt;/em&gt; service.&lt;/p&gt;
&lt;p&gt;

&lt;div class=&#34;alert alert-success&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;alert-heading&#34;&gt;Step 1&lt;/h4&gt;

    Deploy &lt;em&gt;travels-v2&lt;/em&gt; and &lt;em&gt;travels-v3&lt;/em&gt; workloads

&lt;/div&gt;

To deploy the new versions of the &lt;em&gt;travels&lt;/em&gt; service execute the following commands:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;kubectl apply -f &amp;lt;(curl -L https://raw.githubusercontent.com/kiali/demos/master/travels/travels-v2.yaml) -n travel-agency
kubectl apply -f &amp;lt;(curl -L https://raw.githubusercontent.com/kiali/demos/master/travels/travels-v3.yaml) -n travel-agency
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/tutorial/05-01-travels-v2-v3.png&#34; alt=&#34;Travels-v2 and travels-v3&#34; title=&#34;Travels-v2 and travels-v3&#34;&gt;&lt;/p&gt;
&lt;p&gt;As there is no specific routing defined, when there are multiple workloads for &lt;em&gt;travels&lt;/em&gt; service the requests are uniformly distributed.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/tutorial/05-01-travels-before-routing.png&#34; alt=&#34;Travels graph before routing&#34; title=&#34;Travels graph before routing&#34;&gt;&lt;/p&gt;
&lt;p&gt;

&lt;div class=&#34;alert alert-success&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;alert-heading&#34;&gt;Step 2&lt;/h4&gt;

    Investigate the http headers used by the Travel Demo application

&lt;/div&gt;

The &lt;a href=&#34;https://istio.io/latest/docs/concepts/traffic-management/#routing-rules&#34;&gt;Traffic Management&lt;/a&gt; features of Istio allow you to define &lt;a href=&#34;https://istio.io/latest/docs/concepts/traffic-management/#match-condition&#34;&gt;Matching Conditions&lt;/a&gt; for dynamic request routing.&lt;/p&gt;
&lt;p&gt;In our scenario we would like to perform the following routing logic:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;All traffic from &lt;em&gt;travels.uk&lt;/em&gt; routed to &lt;em&gt;travels-v1&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;All traffic from &lt;em&gt;viaggi.it&lt;/em&gt; routed to &lt;em&gt;travels-v2&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;All traffic from &lt;em&gt;voyages.fr&lt;/em&gt; routed to &lt;em&gt;travels-v3&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Portal workloads use HTTP/1.1 protocols to call the &lt;em&gt;travels&lt;/em&gt; service, so one strategy could be to use the HTTP headers to define the matching condition.&lt;/p&gt;
&lt;p&gt;But, where to find the HTTP headers ? That information typically belongs to the application domain and we should examine the code, documentation or dynamically trace a request to understand which headers are being used in this context.&lt;/p&gt;
&lt;p&gt;There are multiple possibilities. The Travel Demo application uses an &lt;a href=&#34;https://istio.io/latest/docs/reference/config/annotations/&#34;&gt;Istio Annotation&lt;/a&gt; feature to add an annotation into the Deployment descriptor, which adds additional Istio configuration into the proxy.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/tutorial/05-01-deployment-istio-config.png&#34; alt=&#34;Istio Config annotations&#34; title=&#34;Istio Config annotations&#34;&gt;&lt;/p&gt;
&lt;p&gt;In our example the &lt;a href=&#34;https://github.com/kiali/demos/blob/master/travels/travels-v2.yaml#L15&#34;&gt;HTTP Headers&lt;/a&gt; are added as part of the trace context.&lt;/p&gt;
&lt;p&gt;Then tracing will populate custom tags with the &lt;em&gt;portal&lt;/em&gt;, &lt;em&gt;device&lt;/em&gt;, &lt;em&gt;user&lt;/em&gt; and &lt;em&gt;travel&lt;/em&gt; used.&lt;/p&gt;


&lt;div class=&#34;alert alert-success&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;alert-heading&#34;&gt;Step 3&lt;/h4&gt;

    Use the Request Routing Wizard on &lt;em&gt;travels&lt;/em&gt; service to generate a traffic rule

&lt;/div&gt;

&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/tutorial/05-01-travels-request-routing.png&#34; alt=&#34;Travels Service Request Routing&#34; title=&#34;Travels Service Request Routing&#34;&gt;&lt;/p&gt;
&lt;p&gt;We will define three &amp;ldquo;Request Matching&amp;rdquo; rules as part of this request routing. Define all three rules before clicking the Create button.&lt;/p&gt;
&lt;p&gt;In the first rule, we will add a request match for when the &lt;em&gt;portal&lt;/em&gt; header has the value of &lt;em&gt;travels.uk&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Define the exact match, like below, and click the &amp;ldquo;Add Match&amp;rdquo; button to update the &amp;ldquo;Matching selected&amp;rdquo; for this rule.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/tutorial/05-01-add-match.png&#34; alt=&#34;Add Request Matching&#34; title=&#34;Add Request Matching&#34;&gt;&lt;/p&gt;
&lt;p&gt;Move to &amp;ldquo;Route To&amp;rdquo; tab and update the destination for this &amp;ldquo;Request Matching&amp;rdquo; rule.  Then use the &amp;ldquo;Add Route Rule&amp;rdquo; to create the first rule.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/tutorial/05-01-route-to.png&#34; alt=&#34;Route To&#34; title=&#34;Route To&#34;&gt;&lt;/p&gt;
&lt;p&gt;Add similar rules to route traffic from &lt;em&gt;viaggi.it&lt;/em&gt; to &lt;em&gt;travels-v2&lt;/em&gt; workload and from &lt;em&gt;voyages.fr&lt;/em&gt; to &lt;em&gt;travels-v3&lt;/em&gt; workload.&lt;/p&gt;
&lt;p&gt;When the three rules are defined you can use &amp;ldquo;Create&amp;rdquo; button to generate all Istio configurations needed for this scenario. Note
that the rule ordering does not matter in this scenario.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/tutorial/05-01-rules-defined.png&#34; alt=&#34;Rules Defined&#34; title=&#34;Rules Defined&#34;&gt;&lt;/p&gt;
&lt;p&gt;The Istio config for a given service is found on the &amp;ldquo;Istio Config&amp;rdquo; card, on the Service Details page.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/tutorial/05-01-service-istio-config.png&#34; alt=&#34;Service Istio Config&#34; title=&#34;Service Istio Config&#34;&gt;&lt;/p&gt;


&lt;div class=&#34;alert alert-success&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;alert-heading&#34;&gt;Step 4&lt;/h4&gt;

    Verify that the Request Routing is working from the &lt;em&gt;travels-portal&lt;/em&gt; Graph

&lt;/div&gt;

&lt;p&gt;Once the Request Routing is working we can verify that outbound traffic from every portal goes to the single &lt;em&gt;travels&lt;/em&gt; workload.  To
see this clearly use a &amp;ldquo;Workload Graph&amp;rdquo; for the &amp;ldquo;travel-portal&amp;rdquo; namespace, enable &amp;ldquo;Traffic Distribution&amp;rdquo; edge labels and disable the
&amp;ldquo;Service Nodes&amp;rdquo; Display option:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/tutorial/05-01-request-routing-graph.png&#34; alt=&#34;Travel Portal Namespace Graph&#34; title=&#34;Travel Portal Namespace Graph&#34;&gt;&lt;/p&gt;
&lt;p&gt;Note that no distribution label on an edge implies 100% of traffic.&lt;/p&gt;
&lt;p&gt;Examining the &amp;ldquo;Inbound Traffic&amp;rdquo; for any of the &lt;em&gt;travels&lt;/em&gt; workloads will show a similar pattern in the telemetry.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/tutorial/05-01-travels-v1-inbound-traffic.png&#34; alt=&#34;Travels v1 Inbound Traffic&#34; title=&#34;Travels v1 Inbound Traffic&#34;&gt;&lt;/p&gt;
&lt;p&gt;Using a custom time range to select a large interval, we can see how the workload initially received traffic from all portals but then only a single portal after the Request Routing scenarios were defined.&lt;/p&gt;


&lt;div class=&#34;alert alert-success&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;alert-heading&#34;&gt;Step 5&lt;/h4&gt;

    Update or delete Istio Configuration

&lt;/div&gt;

&lt;p&gt;Kiali Wizards allow you to define high level Service Mesh scenarios and will generate the Istio Configuration needed for its implementation (VirtualServices, DestinationRules, Gateways and PeerRequests).
These scenarios can be updated or deleted from the &amp;ldquo;Actions&amp;rdquo; menu of a given service.&lt;/p&gt;
&lt;p&gt;To experiment further you can navigate to the &lt;em&gt;travels&lt;/em&gt; service and update your configuration by selecting &amp;ldquo;Request Routing&amp;rdquo;, as shown below.  When you have
finished experimenting with Routing Request scenarios then use the &amp;ldquo;Actions&amp;rdquo; menu to delete the generated Istio config.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/tutorial/05-01-update-or-delete.png&#34; alt=&#34;Update or Delete&#34; title=&#34;Update or Delete&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;fault-injection&#34;&gt;Fault Injection&lt;/h2&gt;
&lt;p&gt;The &lt;a href=&#34;https://v2-24.kiali.io/docs/tutorials/travels/04-observe/#graph-walkthrough&#34;&gt;Observe&lt;/a&gt; step has spotted that the &lt;em&gt;hotels&lt;/em&gt; service has additional traffic compared with other services deployed in the &lt;em&gt;travel-agency&lt;/em&gt; namespace.&lt;/p&gt;
&lt;p&gt;Also, this service becomes critical in the main business logic. It is responsible for querying all available destinations, presenting them to the user, and getting a quote for the selected destination.&lt;/p&gt;
&lt;p&gt;This also means that the &lt;em&gt;hotels&lt;/em&gt; service may be one of the weakest points of the Travel Demo application.&lt;/p&gt;
&lt;p&gt;This step will show how to test the resilience of the Travel Demo application by injecting faults into the &lt;em&gt;hotels&lt;/em&gt; service and then observing how the application reacts to this scenario.&lt;/p&gt;


&lt;div class=&#34;alert alert-success&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;alert-heading&#34;&gt;Step 1&lt;/h4&gt;

    Use the Fault Injection Wizard on &lt;em&gt;hotels&lt;/em&gt; service to inject a delay

&lt;/div&gt;

&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/tutorial/05-02-fault-injection-action.png&#34; alt=&#34;Fault Injection Action&#34; title=&#34;Fault Injection Action&#34;&gt;&lt;/p&gt;
&lt;p&gt;Select an HTTP Delay and specify the &amp;ldquo;Delay percentage&amp;rdquo; and &amp;ldquo;Fixed Delay&amp;rdquo; values. The default values will introduce a 5 seconds delay into 100% of received requests.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/tutorial/05-02-http-delay.png&#34; alt=&#34;HTTP Delay&#34; title=&#34;HTTP Delay&#34;&gt;&lt;/p&gt;


&lt;div class=&#34;alert alert-success&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;alert-heading&#34;&gt;Step 2&lt;/h4&gt;

    Understanding &lt;em&gt;source&lt;/em&gt; and &lt;em&gt;destination&lt;/em&gt; metrics

&lt;/div&gt;

&lt;p&gt;Telemetry is collected from proxies and it is labeled with information about the &lt;em&gt;source&lt;/em&gt; and &lt;em&gt;destination&lt;/em&gt; workloads.&lt;/p&gt;
&lt;p&gt;In our example, let&amp;rsquo;s say that &lt;em&gt;travels&lt;/em&gt; service (&amp;ldquo;Service A&amp;rdquo; in the Istio diagram below) invokes the &lt;em&gt;hotels&lt;/em&gt; service (&amp;ldquo;Service B&amp;rdquo; in the diagram). &lt;em&gt;Travels&lt;/em&gt; is the &amp;ldquo;source&amp;rdquo; workload and &lt;em&gt;hotels&lt;/em&gt; is the &amp;ldquo;destination&amp;rdquo; workload. The &lt;em&gt;travels&lt;/em&gt; proxy will report telemetry from the source perspective and &lt;em&gt;hotels&lt;/em&gt; proxy will report telemetry from the destination perspective. Let&amp;rsquo;s look at the latency reporting from both perspectives.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/tutorial/05-02-istio-architecture.png&#34; alt=&#34;Istio Architecture&#34; title=&#34;Istio Architecture&#34;&gt;&lt;/p&gt;
&lt;p&gt;The &lt;em&gt;travels&lt;/em&gt; workload proxy has the Fault Injection configuration so it will perform the call to the &lt;em&gt;hotels&lt;/em&gt; service and will apply the delay on the &lt;em&gt;travels&lt;/em&gt; workload side (this is reported as &lt;em&gt;source&lt;/em&gt; telemetry).&lt;/p&gt;
&lt;p&gt;We can see in the &lt;em&gt;hotels&lt;/em&gt; telemetry reported by the &lt;em&gt;source&lt;/em&gt; (the &lt;em&gt;travels&lt;/em&gt; proxy) that there is a visible gap showing 5 second delay in the request duration.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/tutorial/05-02-source-metrics.png&#34; alt=&#34;Source Metrics&#34; title=&#34;Source Metrics&#34;&gt;&lt;/p&gt;
&lt;p&gt;But as the Fault Injection delay is applied on the source proxy (&lt;em&gt;travels&lt;/em&gt;), the destination proxy (&lt;em&gt;hotels&lt;/em&gt;) is unaffected and its destination telemetry show no delay.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/tutorial/05-02-destination-metrics.png&#34; alt=&#34;Destination Metrics&#34; title=&#34;Destination Metrics&#34;&gt;&lt;/p&gt;


&lt;div class=&#34;alert alert-success&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;alert-heading&#34;&gt;Step 3&lt;/h4&gt;

    Study the impact of the &lt;em&gt;travels&lt;/em&gt; service delay

&lt;/div&gt;

&lt;p&gt;The injected delay is propagated from the &lt;em&gt;travels&lt;/em&gt; service to the downstream services deployed on &lt;em&gt;travel-portal&lt;/em&gt; namespace, degrading the overall response time. But the downstream services are unaware, operate normally, and show a green status.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/tutorial/05-02-degraded-response-time.png&#34; alt=&#34;Degraded Response Time&#34; title=&#34;Degraded Response Time&#34;&gt;&lt;/p&gt;


&lt;div class=&#34;alert alert-success&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;alert-heading&#34;&gt;Step 4&lt;/h4&gt;

    Update or delete Istio Configuration

&lt;/div&gt;

&lt;p&gt;As part of this step you can update the Fault Injection scenario to test different delays. When finished, you can delete the generated Istio config for the &lt;em&gt;hotels&lt;/em&gt; service.&lt;/p&gt;
&lt;h2 id=&#34;traffic-shifting&#34;&gt;Traffic Shifting&lt;/h2&gt;
&lt;p&gt;In the previous &lt;a href=&#34;#request-routing&#34;&gt;Request Routing&lt;/a&gt; step we have deployed two new versions of the &lt;em&gt;travels&lt;/em&gt; service using the &lt;em&gt;travels-v2&lt;/em&gt; and &lt;em&gt;travels-v3&lt;/em&gt; workloads.&lt;/p&gt;
&lt;p&gt;That scenario showed how Istio can route specific requests to specific workloads. It was configured such that each portal deployed in the &lt;em&gt;travel-portal&lt;/em&gt; namespace (&lt;em&gt;travels.uk&lt;/em&gt;, &lt;em&gt;viaggi.it&lt;/em&gt; and &lt;em&gt;voyages.fr&lt;/em&gt;) were routed to a specific &lt;em&gt;travels&lt;/em&gt; workload (&lt;em&gt;travels-v1&lt;/em&gt;, &lt;em&gt;travels-v2&lt;/em&gt; and &lt;em&gt;travels-v3&lt;/em&gt;).&lt;/p&gt;
&lt;p&gt;This Traffic Shifting step will simulate a new scenario: the new &lt;em&gt;travels-v2&lt;/em&gt; and &lt;em&gt;travels-v3&lt;/em&gt; workloads will represent new improvements for the &lt;em&gt;travels&lt;/em&gt; service that will be used by all requests.&lt;/p&gt;
&lt;p&gt;These new improvements implemented in &lt;em&gt;travels-v2&lt;/em&gt; and &lt;em&gt;travels-v3&lt;/em&gt; represent two alternative ways to address a specific problem. Our goal is to test them before deciding which one to use as a next version.&lt;/p&gt;
&lt;p&gt;At the beginning we will send 80% of the traffic into the original &lt;em&gt;travels-v1&lt;/em&gt; workload, and will split 10% of the traffic each on &lt;em&gt;travels-v2&lt;/em&gt; and &lt;em&gt;travels-v3&lt;/em&gt;.&lt;/p&gt;


&lt;div class=&#34;alert alert-success&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;alert-heading&#34;&gt;Step 1&lt;/h4&gt;

    Use the Traffic Shifting Wizard on &lt;em&gt;travels&lt;/em&gt; service

&lt;/div&gt;

&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/tutorial/05-03-traffic-shifting-action.png&#34; alt=&#34;Traffic Shifting Action&#34; title=&#34;Traffic Shifting Action&#34;&gt;&lt;/p&gt;
&lt;p&gt;Create a scenario with 80% of the traffic distributed to &lt;em&gt;travels-v1&lt;/em&gt; workload and 10% of the traffic distributed each to &lt;em&gt;travels-v2&lt;/em&gt; and &lt;em&gt;travels-v3&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/tutorial/05-03-split-traffic.png&#34; alt=&#34;Split Traffic&#34; title=&#34;Split Traffic&#34;&gt;&lt;/p&gt;


&lt;div class=&#34;alert alert-success&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;alert-heading&#34;&gt;Step 2&lt;/h4&gt;

    Examine Traffic Shifting distribution from the &lt;em&gt;travels-agency&lt;/em&gt; Graph

&lt;/div&gt;

&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/tutorial/05-03-travels-graph.png&#34; alt=&#34;Travels Graph&#34; title=&#34;Travels Graph&#34;&gt;&lt;/p&gt;


&lt;div class=&#34;alert alert-success&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;alert-heading&#34;&gt;Step 3&lt;/h4&gt;

    Compare &lt;em&gt;travels&lt;/em&gt; workload and assess new changes proposed in &lt;em&gt;travels-v2&lt;/em&gt; and &lt;em&gt;travels-v3&lt;/em&gt;

&lt;/div&gt;

&lt;p&gt;Istio Telemetry is grouped per logical application. That has the advantage of easily comparing different but related workloads, for one or more services.&lt;/p&gt;
&lt;p&gt;In our example, we can use the &amp;ldquo;Inbound Metrics&amp;rdquo; and &amp;ldquo;Outbound Metrics&amp;rdquo; tabs in the &lt;em&gt;travels&lt;/em&gt; application details, group by &amp;ldquo;Local version&amp;rdquo; and compare how &lt;em&gt;travels-v2&lt;/em&gt; and &lt;em&gt;travels-v3&lt;/em&gt; are working.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/tutorial/05-03-compare-local-travels-version.png&#34; alt=&#34;Compare Travels Workloads&#34; title=&#34;Compare Travels Workloads&#34;&gt;
&lt;img src=&#34;https://v2-24.kiali.io/images/tutorial/05-03-compare-local-travels-version-2.png&#34; alt=&#34;Compare Travels Workloads&#34; title=&#34;Compare Travels Workloads&#34;&gt;&lt;/p&gt;
&lt;p&gt;The charts show that the Traffic distribution is working accordingly and 80% is being distributed to &lt;em&gt;travels-v1&lt;/em&gt; workload and they also show no big differences between &lt;em&gt;travels-v2&lt;/em&gt; and &lt;em&gt;travels-v3&lt;/em&gt; in terms of request duration.&lt;/p&gt;


&lt;div class=&#34;alert alert-success&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;alert-heading&#34;&gt;Step 4&lt;/h4&gt;

    Update or delete Istio Configuration

&lt;/div&gt;

&lt;p&gt;As part of this step you can update the Traffic Shifting scenario to test different distributions. When finished, you can delete the generated Istio config for the &lt;em&gt;travels&lt;/em&gt; service.&lt;/p&gt;
&lt;h2 id=&#34;tcp-traffic-shifting&#34;&gt;TCP Traffic Shifting&lt;/h2&gt;
&lt;p&gt;The Travel Demo application has a database service used by several services deployed in the &lt;em&gt;travel-agency&lt;/em&gt; namespace.&lt;/p&gt;
&lt;p&gt;At some point in the lifecycle of the application the telemetry shows that the database service degrades and starts to increase the average response time.&lt;/p&gt;
&lt;p&gt;This is a common situation. In this case, a database specialist suggests an update of the original indexes due to the data growth.&lt;/p&gt;
&lt;p&gt;Our database specialist is suggesting two approaches and proposes to prepare two versions of the database service to test which may work better.&lt;/p&gt;
&lt;p&gt;This step will show how the &amp;ldquo;Traffic Shifting&amp;rdquo; strategy can be applied to TCP services to test which new database indexing strategy works better.&lt;/p&gt;


&lt;div class=&#34;alert alert-success&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;alert-heading&#34;&gt;Step 1&lt;/h4&gt;

    Deploy &lt;em&gt;mysqldb-v2&lt;/em&gt; and &lt;em&gt;mysqldb-v3&lt;/em&gt; workloads

&lt;/div&gt;

&lt;p&gt;To deploy the new versions of the &lt;em&gt;mysqldb&lt;/em&gt; service execute the commands:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;kubectl apply -f &amp;lt;(curl -L https://raw.githubusercontent.com/kiali/demos/master/travels/mysql-v2.yaml) -n travel-agency
kubectl apply -f &amp;lt;(curl -L https://raw.githubusercontent.com/kiali/demos/master/travels/mysql-v3.yaml) -n travel-agency
&lt;/code&gt;&lt;/pre&gt;

&lt;div class=&#34;alert alert-success&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;alert-heading&#34;&gt;Step 2&lt;/h4&gt;

    Use the TCP Traffic Shifting Wizard on &lt;em&gt;mysqldb&lt;/em&gt; service

&lt;/div&gt;

&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/tutorial/05-04-tcp-traffic-shifting-action.png&#34; alt=&#34;TCP Traffic Shifting Action&#34; title=&#34;TCP Traffic Shifting Action&#34;&gt;&lt;/p&gt;
&lt;p&gt;Create a scenario with 80% of the traffic distributed to &lt;em&gt;mysqldb-v1&lt;/em&gt; workload and 10% of the traffic distributed each to &lt;em&gt;mysqldb-v2&lt;/em&gt; and &lt;em&gt;mysqldb-v3&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/tutorial/05-04-tcp-split-traffic.png&#34; alt=&#34;TCP Split Traffic&#34; title=&#34;TCP Split Traffic&#34;&gt;&lt;/p&gt;


&lt;div class=&#34;alert alert-success&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;alert-heading&#34;&gt;Step 3&lt;/h4&gt;

    Examine Traffic Shifting distribution from the &lt;em&gt;travels-agency&lt;/em&gt; Graph

&lt;/div&gt;

&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/tutorial/05-04-tcp-graph.png&#34; alt=&#34;MysqlDB Graph&#34; title=&#34;MysqlDB Graph&#34;&gt;&lt;/p&gt;
&lt;p&gt;Note that TCP telemetry has different types of metrics, as &amp;ldquo;Traffic Distribution&amp;rdquo; is only available for HTTP/gRPC services, for this service we need to use &amp;ldquo;Traffic Rate&amp;rdquo; to evaluate the distribution of data (bytes-per-second) between &lt;em&gt;mysqldb&lt;/em&gt; workloads.&lt;/p&gt;


&lt;div class=&#34;alert alert-success&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;alert-heading&#34;&gt;Step 4&lt;/h4&gt;

    Compare &lt;em&gt;mysqldb&lt;/em&gt; workload and study new indexes proposed in &lt;em&gt;mysqldb-v2&lt;/em&gt; and &lt;em&gt;mysqldb-v3&lt;/em&gt;

&lt;/div&gt;

&lt;p&gt;TCP services have different telemetry but it&amp;rsquo;s still grouped by versions, allowing the user to compare and study pattern differences for &lt;em&gt;mysqldb-v2&lt;/em&gt; and &lt;em&gt;mysqldb-v3&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/tutorial/05-04-tcp-compare-versions.png&#34; alt=&#34;Compare MysqlDB Workloads&#34; title=&#34;Compare MysqlDB Workloads&#34;&gt;&lt;/p&gt;
&lt;p&gt;The charts show more peaks in &lt;em&gt;mysqldb-v2&lt;/em&gt; compared to &lt;em&gt;mysqldb-v3&lt;/em&gt; but overall a similar behavior, so it&amp;rsquo;s probably safe to choose either strategy to shift all traffic.&lt;/p&gt;


&lt;div class=&#34;alert alert-success&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;alert-heading&#34;&gt;Step 5&lt;/h4&gt;

    Update or delete Istio Configuration

&lt;/div&gt;

&lt;p&gt;As part of this step you can update the TCP Traffic Shifting scenario to test a different distribution. When finished, you can delete the generated Istio config for the &lt;em&gt;mysqldb&lt;/em&gt; service.&lt;/p&gt;
&lt;h2 id=&#34;request-timeouts&#34;&gt;Request Timeouts&lt;/h2&gt;
&lt;p&gt;In the &lt;a href=&#34;#fault-injection&#34;&gt;Fault Injection&lt;/a&gt; step we showed how we could introduce a delay in the critical &lt;em&gt;hotels&lt;/em&gt; service and test the resilience of the application.&lt;/p&gt;
&lt;p&gt;The delay was propagated across services and Kiali showed how services accepted the delay without creating errors on the system.&lt;/p&gt;
&lt;p&gt;But in real scenarios delays may have important consequences. Services may prefer to fail sooner, and recover, rather than propagating a delay across services.&lt;/p&gt;
&lt;p&gt;This step will show how to add a request timeout for one of the portals deployed in &lt;em&gt;travel-portal&lt;/em&gt; namespace. The &lt;em&gt;travel.uk&lt;/em&gt; and &lt;em&gt;viaggi.it&lt;/em&gt; portals will accept delays but &lt;em&gt;voyages.fr&lt;/em&gt; will timeout and fail.&lt;/p&gt;


&lt;div class=&#34;alert alert-success&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;alert-heading&#34;&gt;Step 1&lt;/h4&gt;

    Use the Fault Injection Wizard on &lt;em&gt;hotels&lt;/em&gt; service to inject a delay

&lt;/div&gt;

&lt;p&gt;Repeat the &lt;a href=&#34;#fault-injection&#34;&gt;Fault Injection&lt;/a&gt; step to add delay on &lt;em&gt;hotels&lt;/em&gt; service.&lt;/p&gt;


&lt;div class=&#34;alert alert-success&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;alert-heading&#34;&gt;Step 2&lt;/h4&gt;

    Use the Request Routing Wizard on &lt;em&gt;travels&lt;/em&gt; service to add a route rule with delay for &lt;em&gt;voyages.fr&lt;/em&gt;

&lt;/div&gt;

&lt;p&gt;Add a rule to add a request timeout only on requests coming from &lt;em&gt;voyages.fr&lt;/em&gt; portal:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Use the Request Matching tab to add a matching condition for the &lt;em&gt;portal&lt;/em&gt; header with &lt;em&gt;voyages.fr&lt;/em&gt; value.&lt;/li&gt;
&lt;li&gt;Use the Request Timeouts tab to add an HTTP Timeout for this rule.&lt;/li&gt;
&lt;li&gt;Add the rule to the scenario.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/tutorial/05-05-request-timeout-rule.png&#34; alt=&#34;Request Timeout Rule&#34; title=&#34;Request Timeout Rule&#34;&gt;&lt;/p&gt;
&lt;p&gt;A first rule should be added to the list like:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/tutorial/05-05-voyages-rule.png&#34; alt=&#34;Voyages Portal Rule&#34; title=&#34;Voyages Portal Rule&#34;&gt;&lt;/p&gt;
&lt;p&gt;Add a second rule to match any request and create the scenario. With this configuration, requests coming from &lt;em&gt;voyages.fr&lt;/em&gt; will match the first rule and all others will match the second rule.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/tutorial/05-05-generic-rule.png&#34; alt=&#34;Any Request Rule&#34; title=&#34;Any Request Rule&#34;&gt;&lt;/p&gt;


&lt;div class=&#34;alert alert-success&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;alert-heading&#34;&gt;Step 3&lt;/h4&gt;

    Review the impact of the request timeout in the &lt;em&gt;travels&lt;/em&gt; service

&lt;/div&gt;

&lt;p&gt;Create the rule. The Graph will show how requests coming from &lt;em&gt;voyages.fr&lt;/em&gt; start to fail, due to the request timeout introduced.&lt;/p&gt;
&lt;p&gt;Requests coming from other portals work without failures but are degraded by the &lt;em&gt;hotels&lt;/em&gt; delay.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/tutorial/05-05-travels-graph-voyages-error.png&#34; alt=&#34;Travels Graph&#34; title=&#34;Travels Graph&#34;&gt;&lt;/p&gt;
&lt;p&gt;This scenario can be visualized in detail if we examine the &amp;ldquo;Inbound Metrics&amp;rdquo; and we group by &amp;ldquo;Remote app&amp;rdquo; and &amp;ldquo;Response code&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/tutorial/05-05-voyages-rule-metrics.png&#34; alt=&#34;Travels Inbound Metrics&#34; title=&#34;Travels Inbound Metrics&#34;&gt;
&lt;img src=&#34;https://v2-24.kiali.io/images/tutorial/05-05-voyages-rule-metrics-2.png&#34; alt=&#34;Travels Inbound Metrics&#34; title=&#34;Travels Inbound Metrics&#34;&gt;&lt;/p&gt;
&lt;p&gt;As expected, the requests coming from &lt;em&gt;voyages.fr&lt;/em&gt; don&amp;rsquo;t propagate the delay and they fail in the 2 seconds range, meanwhile requests from other portals don&amp;rsquo;t fail but they propagate the delay introduced in the &lt;em&gt;hotels&lt;/em&gt; service.&lt;/p&gt;


&lt;div class=&#34;alert alert-success&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;alert-heading&#34;&gt;Step 4&lt;/h4&gt;

    Update or delete Istio Configuration

&lt;/div&gt;

&lt;p&gt;As part of this step you can update the scenarios defined around &lt;em&gt;hotels&lt;/em&gt; and &lt;em&gt;travels&lt;/em&gt; services to experiment with more conditions, or you can delete the generated Istio config in both services.&lt;/p&gt;
&lt;h2 id=&#34;circuit-breaking&#34;&gt;Circuit Breaking&lt;/h2&gt;
&lt;p&gt;Distributed systems will benefit from failing quickly and applying back pressure, as opposed to propagating delays and errors through the system.&lt;/p&gt;
&lt;p&gt;Circuit breaking is an important technique used to limit the impact of failures, latency spikes, and other types of network problems.&lt;/p&gt;
&lt;p&gt;This step will show how to apply a Circuit Breaker into the &lt;em&gt;travels&lt;/em&gt; service in order to limit the number of concurrent requests and connections.&lt;/p&gt;


&lt;div class=&#34;alert alert-success&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;alert-heading&#34;&gt;Step 1&lt;/h4&gt;

    Deploy a new &lt;em&gt;loadtester&lt;/em&gt; portal in the &lt;em&gt;travel-portal&lt;/em&gt; namespace

&lt;/div&gt;

&lt;p&gt;In this example we are going to deploy a new workload that will simulate an important increase in the load of the system.&lt;/p&gt;


&lt;div class=&#34;alert alert-warning&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;alert-heading&#34;&gt;OpenShift&lt;/h4&gt;

    OpenShift users may need to also add the associated loadtester serviceaccount to the necessary securitycontextcontraints.

&lt;/div&gt;

&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;kubectl apply -f &amp;lt;(curl -L https://raw.githubusercontent.com/kiali/demos/master/travels/travel_loadtester.yaml) -n travel-portal
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The &lt;em&gt;loadtester&lt;/em&gt; workload will try to create 50 concurrent connections to the &lt;em&gt;travels&lt;/em&gt; service, adding considerable pressure to the &lt;em&gt;travels-agency&lt;/em&gt; namespace.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/tutorial/05-06-loadtester-graph.png&#34; alt=&#34;Loadtester Graph&#34; title=&#34;Loadtester Graph&#34;&gt;&lt;/p&gt;
&lt;p&gt;The Travel Demo application is capable of handling this load and in a first look it doesn&amp;rsquo;t show unhealthy status.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/tutorial/05-06-loadtester-details.png&#34; alt=&#34;Loadtester Details&#34; title=&#34;Loadtester Details&#34;&gt;&lt;/p&gt;
&lt;p&gt;But in a real scenario an unexpected increase in the load of a service like this may have a significant impact in the overall system status.&lt;/p&gt;


&lt;div class=&#34;alert alert-success&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;alert-heading&#34;&gt;Step 2&lt;/h4&gt;

    Use the Traffic Shifting Wizard on &lt;em&gt;travels&lt;/em&gt; service to generate a traffic rule

&lt;/div&gt;

&lt;p&gt;Use the &amp;ldquo;Traffic Shifting&amp;rdquo; Wizard to distribute traffic (evenly) to the &lt;em&gt;travels&lt;/em&gt; workloads and use the &amp;ldquo;Advanced Options&amp;rdquo; to add a &amp;ldquo;Circuit Breaker&amp;rdquo; to the scenario.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/tutorial/05-06-traffic-shifting-circuit-breaker.png&#34; alt=&#34;Traffic Shifting with Circuit Breaker&#34; title=&#34;Traffic Shifting with Circuit Breaker&#34;&gt;&lt;/p&gt;
&lt;p&gt;The &amp;ldquo;Connection Pool&amp;rdquo; settings will indicate that the proxy sidecar will reject requests when the number of concurrent connections and requests exceeds more than one.&lt;/p&gt;
&lt;p&gt;The &amp;ldquo;Outlier Detection&amp;rdquo; will eject a host from the connection pool if there is more than one consecutive error.&lt;/p&gt;


&lt;div class=&#34;alert alert-success&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;alert-heading&#34;&gt;Step 3&lt;/h4&gt;

    Study the behavior of the Circuit Breaker in the &lt;em&gt;travels&lt;/em&gt; service

&lt;/div&gt;

&lt;p&gt;In the &lt;em&gt;loadtester&lt;/em&gt; versioned-app Graph we can see that the &lt;em&gt;travels&lt;/em&gt; service&amp;rsquo;s Circuit Breaker accepts some, but fails most, connections.&lt;/p&gt;
&lt;p&gt;Remember, that these connections are stopped by the proxy on the &lt;em&gt;loadtester&lt;/em&gt; side. That &amp;ldquo;fail sooner&amp;rdquo; pattern prevents overloading the network.&lt;/p&gt;
&lt;p&gt;Using the Graph we can select the failed edge, check the Flags tab, and see that those requests are closed by the Circuit breaker.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/tutorial/05-06-loadtester-flags-graph.png&#34; alt=&#34;Loadtester Flags Graph&#34; title=&#34;Loadtester Flags Graph&#34;&gt;&lt;/p&gt;
&lt;p&gt;If we examine the &amp;ldquo;Request volume&amp;rdquo; metric from the &amp;ldquo;Outbound Metrics&amp;rdquo; tab we can see the evolution of the requests, and how the introduction of the Circuit Breaker made the proxy reduce the request volume.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/tutorial/05-06-loadtester-flags-details.png&#34; alt=&#34;Loadtester Outbound Metrics&#34; title=&#34;Loadtester Outbound Metrics&#34;&gt;&lt;/p&gt;


&lt;div class=&#34;alert alert-success&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;alert-heading&#34;&gt;Step 4&lt;/h4&gt;

    Update or delete Istio Configuration

&lt;/div&gt;

&lt;p&gt;As part of this step you can update the scenarios defined around the &lt;em&gt;travels&lt;/em&gt; service to experiment with more Circuit Breaker settings, or you can delete the generated Istio config in the service.&lt;/p&gt;
&lt;p&gt;Understanding what happened:&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://istio.io/latest/docs/tasks/traffic-management/circuit-breaking/&#34;&gt;(i) Circuit Breaking&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://istio.io/latest/docs/reference/config/networking/destination-rule&#34;&gt;(ii) Outlier Detection&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://istio.io/latest/docs/reference/config/networking/destination-rule&#34;&gt;(iii) Connection Pool Settings&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/upstream/circuit_breaking&#34;&gt;(iv) Envoy&amp;rsquo;s Circuit breaking Architecture&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;mirroring&#34;&gt;Mirroring&lt;/h2&gt;
&lt;p&gt;This tutorial has shown several scenarios where Istio can route traffic to different versions in order to compare versions and evaluate which one works best.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&#34;#traffic-shifting&#34;&gt;Traffic Shifting&lt;/a&gt; step was focused on &lt;em&gt;travels&lt;/em&gt; service adding a new &lt;em&gt;travels-v2&lt;/em&gt; and &lt;em&gt;travels-v3&lt;/em&gt; workloads
and the &lt;a href=&#34;#tcp-traffic-shifting&#34;&gt;TCP Traffic Shifting&lt;/a&gt; showed how this scenario can be used on TCP services like &lt;em&gt;mysqldb&lt;/em&gt; service.&lt;/p&gt;
&lt;p&gt;Mirroring (or shadowing) is a particular case of the Traffic Shifting scenario where the proxy sends a copy of live traffic to a mirrored service.&lt;/p&gt;
&lt;p&gt;The mirrored traffic happens out of band of the primary request path. It allows for testing of alternate services, in production environments, with minimal risk.&lt;/p&gt;
&lt;p&gt;Istio mirrored traffic is only supported for HTTP/gRPC protocols.&lt;/p&gt;
&lt;p&gt;This step will show how to apply mirrored traffic into the &lt;em&gt;travels&lt;/em&gt; service.&lt;/p&gt;


&lt;div class=&#34;alert alert-success&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;alert-heading&#34;&gt;Step 1&lt;/h4&gt;

    Use the Traffic Shifting Wizard on &lt;em&gt;travels&lt;/em&gt; service

&lt;/div&gt;

&lt;p&gt;We will simulate the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;travels-v1&lt;/em&gt; is the original traffic and it will keep 80% of the traffic&lt;/li&gt;
&lt;li&gt;&lt;em&gt;travels-v2&lt;/em&gt; is the new version to deploy, it&amp;rsquo;s being evaluated and it will get 20% of the traffic to compare against &lt;em&gt;travels-v1&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;But &lt;em&gt;travels-v3&lt;/em&gt; will be considered as a new, experimental version for testing outside of the regular request path. It will be defined as a mirrored workload on 50% of the original requests.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/tutorial/05-07-mirrored-traffic.png&#34; alt=&#34;Mirrored Traffic&#34; title=&#34;Mirrored Traffic&#34;&gt;&lt;/p&gt;


&lt;div class=&#34;alert alert-success&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;alert-heading&#34;&gt;Step 2&lt;/h4&gt;

    Examine Traffic Shifting distribution from the &lt;em&gt;travels-agency&lt;/em&gt; Graph

&lt;/div&gt;

&lt;p&gt;Note that Istio does not report mirrored traffic telemetry from the source proxy. It is reported from the destination proxy,
although it is not flagged as mirrored, and therefore an edge from &lt;em&gt;travels&lt;/em&gt; to the &lt;em&gt;travels-v3&lt;/em&gt; workload will appear in the graph.
Note the traffic rates reflect the expected ratio of 80/20 between &lt;em&gt;travels-v1&lt;/em&gt; and &lt;em&gt;travels-v2&lt;/em&gt;, with &lt;em&gt;travels-v3&lt;/em&gt; at about
half of that total.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/tutorial/05-07-mirrored-graph.png&#34; alt=&#34;Mirrored Graph&#34; title=&#34;Mirrored Graph&#34;&gt;&lt;/p&gt;
&lt;p&gt;This can be examined better using the &amp;ldquo;Source&amp;rdquo; and &amp;ldquo;Destination&amp;rdquo; metrics from the &amp;ldquo;Inbound Metrics&amp;rdquo; tab.&lt;/p&gt;
&lt;p&gt;The &amp;ldquo;Source&amp;rdquo; proxy, in this case the proxies injected into the workloads of &lt;em&gt;travel-portal&lt;/em&gt; namespace, won&amp;rsquo;t report telemetry for &lt;em&gt;travels-v3&lt;/em&gt; mirrored workload.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/tutorial/05-07-mirrored-source-metrics.png&#34; alt=&#34;Mirrored Source Metrics&#34; title=&#34;Mirrored Source Metrics&#34;&gt;&lt;/p&gt;
&lt;p&gt;But the &amp;ldquo;Destination&amp;rdquo; proxy, in this case the proxy injected in the &lt;em&gt;travels-v3&lt;/em&gt; workload, will collect the telemetry from the mirrored traffic.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/tutorial/05-07-mirrored-destination-metrics.png&#34; alt=&#34;Mirrored Destination Metrics&#34; title=&#34;Mirrored Destination Metrics&#34;&gt;&lt;/p&gt;


&lt;div class=&#34;alert alert-success&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;alert-heading&#34;&gt;Step 3&lt;/h4&gt;

    Update or delete Istio Configuration

&lt;/div&gt;

&lt;p&gt;As part of this step you can update the Mirroring scenario to test different mirrored distributions.&lt;/p&gt;
&lt;p&gt;When finished you can delete the generated Istio config for the &lt;em&gt;travels&lt;/em&gt; service.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Secure</title>
      <link>https://v2-24.kiali.io/docs/tutorials/travels/06-secure/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://v2-24.kiali.io/docs/tutorials/travels/06-secure/</guid>
      <description>
        
        
        &lt;h2 id=&#34;authorization-policies-and-sidecars&#34;&gt;Authorization Policies and Sidecars&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://istio.io/latest/docs/concepts/security/&#34;&gt;Security&lt;/a&gt; is one of the main pillars of Istio features.&lt;/p&gt;
&lt;p&gt;The Istio &lt;a href=&#34;https://istio.io/latest/docs/concepts/security/#high-level-architecture&#34;&gt;Security High Level Architecture&lt;/a&gt; provides a comprehensive solution to design and implement multiple security scenarios.&lt;/p&gt;
&lt;p&gt;In this tutorial we will show how Kiali can use telemetry information to create security policies for the workloads deployed in a given namespace.&lt;/p&gt;
&lt;p&gt;Istio telemetry aggregates the ServiceAccount information used in the workloads communication. This information can be used to define authorization policies that deny and allow actions on future live traffic communication status.&lt;/p&gt;
&lt;p&gt;Additionally, Istio sidecars can be created to limit the hosts with which a given workload can communicate. This improves traffic control, and also reduces the memory footprint of the proxies.&lt;/p&gt;
&lt;p&gt;This step will show how we can define authorization policies for the &lt;em&gt;travel-agency&lt;/em&gt; namespace, in the Travel Demo application, for all existing traffic in a given time period.&lt;/p&gt;
&lt;p&gt;Once authorization policies are defined, a new workload will be rejected if it doesn&amp;rsquo;t match the security rules defined.&lt;/p&gt;


&lt;div class=&#34;alert alert-success&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;alert-heading&#34;&gt;Step 1&lt;/h4&gt;

    Undeploy the &lt;em&gt;loadtester&lt;/em&gt; workload from &lt;em&gt;travel-portal&lt;/em&gt; namespace

&lt;/div&gt;

&lt;p&gt;In this example we will use the &lt;em&gt;loadtester&lt;/em&gt; workload as the &amp;ldquo;intruder&amp;rdquo; in our security rules.&lt;/p&gt;
&lt;p&gt;If we have followed the previous tutorial steps, we need to undeploy it from the system.&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;kubectl delete -f &amp;lt;(curl -L https://raw.githubusercontent.com/kiali/demos/master/travels/travel_loadtester.yaml) -n travel-portal
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;We should validate that telemetry has updated the &lt;em&gt;travel-portal&lt;/em&gt; namespace and &amp;ldquo;Security&amp;rdquo; can be enabled in the Graph Display options.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/tutorial/06-01-travel-portal-graph.png&#34; alt=&#34;Travel Portal Graph&#34; title=&#34;Travel Portal Graph&#34;&gt;&lt;/p&gt;


&lt;div class=&#34;alert alert-success&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;alert-heading&#34;&gt;Step 2&lt;/h4&gt;

    Create Authorization Policies, and Istio Sidecars, for current traffic for &lt;em&gt;travel-agency&lt;/em&gt; namespace

&lt;/div&gt;

&lt;p&gt;Every workload in the cluster uses a &lt;a href=&#34;https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/&#34;&gt;Service Account&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;travels.uk&lt;/em&gt;, &lt;em&gt;viaggi.it&lt;/em&gt; and &lt;em&gt;voyages.fr&lt;/em&gt; workloads use the default &lt;em&gt;cluster.local/ns/travel-portal/sa/default&lt;/em&gt; ServiceAccount defined automatically per namespace.&lt;/p&gt;
&lt;p&gt;This information is propagated into the Istio Telemetry and Kiali can use it to define a set of AuthorizationPolicy rules, and Istio Sidecars.&lt;/p&gt;
&lt;p&gt;The Sidecars restrict the list of hosts with which each workload can communicate, based on the current traffic.&lt;/p&gt;
&lt;p&gt;The &amp;ldquo;Create Traffic Policies&amp;rdquo; action, located in the Overview page, will create these definitions.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/tutorial/06-01-create-traffic-policies.png&#34; alt=&#34;Create Traffic Policies&#34; title=&#34;Create Traffic Policies&#34;&gt;&lt;/p&gt;
&lt;p&gt;This will generate a main DENY ALL rule to protect the whole namespace, and an individual ALLOW rule per workload identified in the telemetry.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/tutorial/06-01-travel-agency-authorization-policies.png&#34; alt=&#34;Travel Agency Authorization Policies&#34; title=&#34;Travel Agency Authorization Policies&#34;&gt;&lt;/p&gt;
&lt;p&gt;It will create also an individual Sidecar per workload, each of them containing the set of hosts.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/tutorial/06-01-travel-agency-sidecars.png&#34; alt=&#34;Travel Agency Sidecars&#34; title=&#34;Travel Agency Sidecars&#34;&gt;&lt;/p&gt;
&lt;p&gt;As an example, we can see that for the &lt;em&gt;travels-v1&lt;/em&gt; workload, the following list of hosts are added to the sidecar.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/tutorial/06-01-travels-v1-sidecars.png&#34; alt=&#34;Travels V1 Sidecar&#34; title=&#34;Travels V1 Sidecar&#34;&gt;&lt;/p&gt;


&lt;div class=&#34;alert alert-success&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;alert-heading&#34;&gt;Step 3&lt;/h4&gt;

    Deploy the &lt;em&gt;loadtester&lt;/em&gt; portal in the &lt;em&gt;travel-portal&lt;/em&gt; namespace

&lt;/div&gt;

&lt;p&gt;If the &lt;em&gt;loadtester&lt;/em&gt; workload uses a different ServiceAccount then, when it&amp;rsquo;s deployed, it won&amp;rsquo;t comply with the AuthorizationPolicy rules defined in the previous step.&lt;/p&gt;


&lt;div class=&#34;alert alert-warning&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;alert-heading&#34;&gt;OpenShift&lt;/h4&gt;

    OpenShift users may need to also add the associated loadtester serviceaccount to the necessary securitycontextcontraints.

&lt;/div&gt;

&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;kubectl apply -f &amp;lt;(curl -L https://raw.githubusercontent.com/kiali/demos/master/travels/travel_loadtester.yaml) -n travel-portal
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Now, &lt;em&gt;travels&lt;/em&gt; workload will reject requests made by &lt;em&gt;loadtester&lt;/em&gt; workload and that situation will be reflected in Graph:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/tutorial/06-01-loadtester-denied.png&#34; alt=&#34;Loadtester Denied&#34; title=&#34;Loadtester Denied&#34;&gt;&lt;/p&gt;
&lt;p&gt;This can also be verified in the details page using the Outbound Metrics tab grouped by response code (only the 403 line is present).&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/tutorial/06-01-loadtester-denied-metrics.png&#34; alt=&#34;Loadtester Denied Metrics&#34; title=&#34;Loadtester Denied Metrics&#34;&gt;&lt;/p&gt;
&lt;p&gt;Inspecting the Logs tab confirms that &lt;em&gt;loadtester&lt;/em&gt; workload is getting a HTTP 403 Forbidden response from &lt;em&gt;travels&lt;/em&gt; workloads, as expected.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/tutorial/06-01-loadtester-logs.png&#34; alt=&#34;Loadtester Logs&#34; title=&#34;Loadtester Logs&#34;&gt;&lt;/p&gt;


&lt;div class=&#34;alert alert-success&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;alert-heading&#34;&gt;Step 4&lt;/h4&gt;

    Update &lt;em&gt;travels-v1&lt;/em&gt; AuthorizationPolicy to allow &lt;em&gt;loadtester&lt;/em&gt; ServiceAccount

&lt;/div&gt;

&lt;p&gt;AuthorizationPolicy resources are defined per workload using matching selectors.&lt;/p&gt;
&lt;p&gt;As part of the example, we can show how a ServiceAccount can be added into an existing rule to allow traffic from &lt;em&gt;loadtester&lt;/em&gt; workload into the &lt;em&gt;travels-v1&lt;/em&gt; workload only.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/tutorial/06-01-authorizationpolicy-edit.png&#34; alt=&#34;AuthorizationPolicy Edit&#34; title=&#34;AuthorizationPolicy Edit&#34;&gt;&lt;/p&gt;
&lt;p&gt;As expected, now we can see that &lt;em&gt;travels-v1&lt;/em&gt; workload accepts requests from all &lt;em&gt;travel-portal&lt;/em&gt; namespace workloads, but &lt;em&gt;travels-v2&lt;/em&gt; and &lt;em&gt;travels-v3&lt;/em&gt; continue rejecting requests from &lt;em&gt;loadtester&lt;/em&gt; source.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/tutorial/06-01-travels-v1-authorizationpolicy.png&#34; alt=&#34;Travels v1 AuthorizationPolicy&#34; title=&#34;Travels v1 AuthorizationPolicy&#34;&gt;&lt;/p&gt;
&lt;p&gt;Using &amp;ldquo;Outbound Metrics&amp;rdquo; tab from the &lt;em&gt;loadtester&lt;/em&gt; workload we can group per &amp;ldquo;Remote version&amp;rdquo; and &amp;ldquo;Response code&amp;rdquo; to get a detailed view of this AuthorizationPolicy change.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/tutorial/06-01-loadtester-authorized-metrics.png&#34; alt=&#34;Travels v1 AuthorizationPolicy&#34; title=&#34;Travels v1 AuthorizationPolicy&#34;&gt;&lt;/p&gt;


&lt;div class=&#34;alert alert-success&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;alert-heading&#34;&gt;Step 5&lt;/h4&gt;

    Verify the proxies clusters list is limited by the Sidecars

&lt;/div&gt;

&lt;p&gt;According to &lt;a href=&#34;https://istio.io/latest/docs/reference/config/networking/sidecar/&#34;&gt;Istio Sidecar&lt;/a&gt; documentation, Istio configures all mesh sidecar proxies to reach every mesh workload. After the sidecars are created, the list of hosts is reduced according to the current traffic. To verify this, we can look for the clusters configured in each proxy.&lt;/p&gt;
&lt;p&gt;As an example, looking into the &lt;em&gt;cars-v1&lt;/em&gt; workload, we can see that there is a reduced number of clusters with which the proxy can communicate.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/tutorial/06-01-cars-v1-clusters.png&#34; alt=&#34;Cars v1 clusters&#34; title=&#34;Cars v1 clusters&#34;&gt;&lt;/p&gt;


&lt;div class=&#34;alert alert-success&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;alert-heading&#34;&gt;Step 6&lt;/h4&gt;

    Update or delete Istio Configuration

&lt;/div&gt;

&lt;p&gt;As part of this step, you can update the AuthorizationPolicies and Istio Sidecars generated for the &lt;em&gt;travel-agency&lt;/em&gt; namespace, and experiment with more security rules. Or, you can delete the generated Istio config for the namespace.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Uninstall Travel Demo</title>
      <link>https://v2-24.kiali.io/docs/tutorials/travels/99-uninstall/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://v2-24.kiali.io/docs/tutorials/travels/99-uninstall/</guid>
      <description>
        
        
        &lt;p&gt;To uninstall the Travel Demo application perform the following commands:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;kubectl delete namespace travel-agency
kubectl delete namespace travel-portal
kubectl delete namespace travel-control
&lt;/code&gt;&lt;/pre&gt;
      </description>
    </item>
    
  </channel>
</rss>
