<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>article Talend ESB: Managing Talend microservices with Istio service mesh on Kubernetes in Official Support Articles</title>
    <link>https://community.qlik.com/t5/Official-Support-Articles/Talend-ESB-Managing-Talend-microservices-with-Istio-service-mesh/ta-p/2151312</link>
    <description>&lt;P&gt;&lt;STRONG&gt;&lt;FONT color="#339966"&gt;Content:&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;LI-TOC indent="15" liststyle="none" maxheadinglevel="4"&gt;&lt;/LI-TOC&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The Talend Community Knowledge Base article, &lt;A href="https://community.qlik.com/t5/Ready-for-Go-Live/Containerization-and-orchestration-of-Talend-microservices-with/ta-p/2150777" target="_self"&gt;Containerization and orchestration of Talend microservices with Docker and Kubernetes&lt;/A&gt; shows you how to:&lt;/P&gt;
&lt;UL class="lia-list-style-type-circle"&gt;
&lt;LI&gt;
&lt;P&gt;Build a demo Customer service as a Talend microservice container image&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Generate Kubernetes resources for the Customer service using the &lt;A title="Fabric8 Maven plugin" href="https://maven.fabric8.io/" target="_blank" rel="noopener"&gt;f8-m-p&lt;/A&gt; plugin&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Deploy the Customer service on a Kubernetes cluster using the f8-m-p&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Invoke the Customer service using a ClusterIP&lt;/P&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;However, in &lt;STRONG&gt;Production&lt;/STRONG&gt; environments, it is more likely you'll need to:&lt;/P&gt;
&lt;UL class="lia-list-style-type-circle"&gt;
&lt;LI&gt;
&lt;P&gt;Expose a few microservices to &lt;STRONG&gt;external&lt;/STRONG&gt; endpoints using an external load balancer&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Route traffic &lt;STRONG&gt;dynamically&lt;/STRONG&gt; to several &lt;STRONG&gt;internal&lt;/STRONG&gt; endpoints running in a distributed cluster&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Handle faults, timeouts, and perform retries&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Roll incremental changes or bug fixes without service outage&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Deploy multiple versions and route incoming traffic based on a match criteria&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Observe logs, metrics, and health of the services&lt;/P&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;This article provides another approach to deploying Talend microservices to a distributed Kubernetes cluster using the kubectl utility, and leveraging Istio to manage some of the production-grade requirements for microservices.&lt;/P&gt;
&lt;H3&gt;&lt;STRONG&gt;&lt;FONT color="#339966"&gt;Prerequisites&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/H3&gt;
&lt;UL class="lia-list-style-type-circle"&gt;
&lt;LI&gt;Talend 7.2 or above&lt;/LI&gt;
&lt;LI&gt;Internet access&lt;/LI&gt;
&lt;LI&gt;Access to a Docker repository&lt;/LI&gt;
&lt;LI&gt;Install a MySQL database&lt;/LI&gt;
&lt;LI&gt;Set up Kubernetes cluster and install Istio&lt;/LI&gt;
&lt;LI&gt;Download the sources for the project available in the&amp;nbsp; Microservices-JobDesigns.zip file&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Download the demo Kubernetes resource ZIP file (attached to the article) for one of the following cloud platforms:&lt;/P&gt;
&lt;UL class="lia-list-style-type-circle"&gt;
&lt;LI&gt;Demo Kubernetes resource files for AKS&lt;/LI&gt;
&lt;LI&gt;Demo Kubernetes resource files for GKE&lt;/LI&gt;
&lt;LI&gt;Demo Kubernetes resource files for EKS&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3&gt;&lt;STRONG&gt;&lt;FONT color="#339966"&gt;Environment&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/H3&gt;
&lt;P&gt;Before you can understand some of the Istio features, you need to set up a Kubernetes cluster and install Istio, by following the platform-specific instructions using one of the following Talend Community Knowledge Base (KB) articles:&lt;/P&gt;
&lt;UL class="lia-list-style-type-circle"&gt;
&lt;LI&gt;
&lt;P&gt;Follow the &lt;A title="Launch Azure Kubernetes Service " href="https://community.qlik.com/t5/Design-and-Development/Managing-Talend-microservices-with-Istio-service-mesh-on-Amazon/ta-p/2151301#:~:text=Launching%20an%20Elastic%20Kubernetes%20Service%20(EKS)" target="_blank" rel="noopener"&gt;Launching a standard Azure Kubernetes Service (AKS)&lt;/A&gt; and &lt;A title="Istio installation steps" href="https://community.qlik.com/t5/Design-and-Development/Managing-Talend-microservices-with-Istio-service-mesh-on-Amazon/ta-p/2151301#:~:text=Installing%20Istio%20with%20Helm%20on%20EKS" target="_blank" rel="noopener"&gt;Installing Istio with Helm on AKS&lt;/A&gt; sections in the &lt;EM&gt;Managing Talend microservices with Istio service mesh on Azure Kubernetes Service (AKS)&lt;/EM&gt; article.&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Follow the &lt;A title="Google Kubernetes Engine" href="https://community.qlik.com/t5/Design-and-Development/Managing-Talend-microservices-with-Istio-service-mesh-on-Google/ta-p/2151303#:~:text=Launch%20a%20standard%20Google%20Kubernetes%20Engine%20(GKE)" target="_blank" rel="noopener"&gt;Launch a standard Google Kubernetes Engine (GKE)&lt;/A&gt; and &lt;A title="Install Istio" href="https://community.qlik.com/t5/Design-and-Development/Managing-Talend-microservices-with-Istio-service-mesh-on-Google/ta-p/2151303#:~:text=Installing%20Istio%20with%20Helm%20on%20GKE" target="_blank" rel="noopener"&gt;Installing Istio with Helm on GKE&lt;/A&gt; sections in the &lt;EM&gt;Managing Talend microservices with Istio service mesh on Google Kubernetes Engine (GKE)&lt;/EM&gt; article.&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Follow the &lt;A title="Amazon Elastic Kubernete Service" href="https://community.qlik.com/t5/Design-and-Development/Managing-Talend-microservices-with-Istio-service-mesh-on-Amazon/ta-p/2151301#:~:text=Launching%20an%20Elastic%20Kubernetes%20Service%20(EKS)" target="_blank" rel="noopener"&gt;Launching an Elastic Kubernetes Service (EKS)&lt;/A&gt; and &lt;A title="Install Istio" href="https://community.qlik.com/t5/Design-and-Development/Managing-Talend-microservices-with-Istio-service-mesh-on-Amazon/ta-p/2151301#:~:text=Installing%20Istio%20with%20Helm%20on%20EKS" target="_blank" rel="noopener"&gt;Installing Istio with Helm on EKS&lt;/A&gt; sections in the &lt;EM&gt;Managing Talend microservices with Istio service mesh on Amazon Elastic Kubernetes Service (EKS)&lt;/EM&gt; article.&lt;/P&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3&gt;&lt;FONT color="#339966"&gt;&lt;STRONG&gt;Use case: Order processing&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/H3&gt;
&lt;P&gt;Typically, a request passes through different stages during the order processing lifecycle, such as Create, Get, and Amend.&lt;/P&gt;
&lt;P&gt;The following diagram showcases a few of those stages, the sequence of steps, and the services involved in a CreateOrder and GetOrder workflow.&lt;/P&gt;
&lt;P&gt;&lt;SPAN class="lia-inline-image-display-wrapper lia-image-align-inline"&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="0693p000008uNfSAAU.jpg"&gt;&lt;img src="https://community.qlik.com/t5/image/serverpage/image-id/121633iF101A6D58ACDE7BD/image-size/large?v=v2&amp;amp;px=999" role="button" title="0693p000008uNfSAAU.jpg" alt="0693p000008uNfSAAU.jpg" /&gt;&lt;/span&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;In this scenario, you're building a company's retail car purchasing microservice where:&lt;/P&gt;
&lt;UL class="lia-list-style-type-circle"&gt;
&lt;LI&gt;
&lt;P&gt;The &lt;STRONG&gt;CreateOrder&lt;/STRONG&gt; workflow is responsible for processing all the new orders placed by customers using different sales channels.&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;The &lt;STRONG&gt;GetOrder&lt;/STRONG&gt; workflow retrieves the details and status of a previously placed order.&lt;/P&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;H3&gt;&lt;FONT color="#339966"&gt;&lt;STRONG&gt;Creating a mock order&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/H3&gt;
&lt;P&gt;This section shows you how to create a mock order (referred to as a mock order because it's not a real order) with a sample MySQL database that contains information about classic car models purchased by customers.&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;
&lt;P&gt;Launch an RDS MySQL instance.&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;Import the &lt;STRONG&gt;mysql-sampledatabase-classicmodels.sql&lt;/STRONG&gt; file (attached to this article) to a folder.&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Login as &lt;STRONG&gt;root&lt;/STRONG&gt; and connect to the MySQL shell:&lt;/P&gt;
&lt;PRE&gt;sql connect INSTANCE_NAME --user=root --quiet&lt;/PRE&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Create the &lt;STRONG&gt;classicmodels&lt;/STRONG&gt; MySQL database by using the source command:&lt;/P&gt;
&lt;PRE&gt;source file_location/mysql-sampledatabase-classicmodels.sql&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;After the classicmodels database is created, observe the relationship between the &lt;STRONG&gt;customers&lt;/STRONG&gt;, &lt;STRONG&gt;orders&lt;/STRONG&gt;, and &lt;STRONG&gt;products&lt;/STRONG&gt; entities.&lt;/P&gt;
&lt;P&gt;&lt;SPAN class="lia-inline-image-display-wrapper lia-image-align-inline"&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="0693p000008uNfXAAU.jpg"&gt;&lt;img src="https://community.qlik.com/t5/image/serverpage/image-id/122567iEA618659E1626F92/image-size/large?v=v2&amp;amp;px=999" role="button" title="0693p000008uNfXAAU.jpg" alt="0693p000008uNfXAAU.jpg" /&gt;&lt;/span&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/LI&gt;
&lt;/OL&gt;
&lt;H3&gt;&lt;STRONG&gt;&lt;FONT color="#339966"&gt;Implementing the GetOrder&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/H3&gt;
&lt;P&gt;The GetOrder workflow retrieves all the orders made by a customer and displays the status of all the orders. This section shows you how to implement the GetOrder services as a Talend microservices.&lt;/P&gt;
&lt;H4&gt;&lt;STRONG&gt;&lt;FONT color="#339966"&gt;Microservice Orders&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/H4&gt;
&lt;OL&gt;
&lt;LI&gt;
&lt;P&gt;Launch Talend Studio, then import the Jobs in the &lt;STRONG&gt;Microservices-JobDesigns.zip&lt;/STRONG&gt; (attached to this article) file.&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Open the &lt;STRONG&gt;Orders&lt;/STRONG&gt; microservice.&lt;/P&gt;
&lt;P&gt;&lt;SPAN class="lia-inline-image-display-wrapper lia-image-align-inline"&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="0693p000008uNblAAE.jpg"&gt;&lt;img src="https://community.qlik.com/t5/image/serverpage/image-id/124883i14BE1403E9FA181E/image-size/large?v=v2&amp;amp;px=999" role="button" title="0693p000008uNblAAE.jpg" alt="0693p000008uNblAAE.jpg" /&gt;&lt;/span&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Click the &lt;STRONG&gt;Job&lt;/STRONG&gt; tab, then click &lt;STRONG&gt;Deployment&lt;/STRONG&gt; and notice that the &lt;STRONG&gt;Build Type&lt;/STRONG&gt; is set to &lt;STRONG&gt;Microservice for ESB&lt;/STRONG&gt;.&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Observe the Job design:&lt;/P&gt;
&lt;UL class="lia-list-style-type-circle"&gt;
&lt;LI&gt;Orders service is a REST data service&lt;/LI&gt;
&lt;LI&gt;Fetches all the order details from the database using &lt;STRONG&gt;customerNumber&lt;/STRONG&gt;&lt;/LI&gt;
&lt;LI&gt;Uses three different context environments namely STUDIO, QA, and PROD&lt;BR /&gt;&lt;BR /&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Run the Job in Studio. By default, the service listens on port &lt;STRONG&gt;8090&lt;/STRONG&gt;.&lt;/P&gt;
&lt;/LI&gt;
&lt;/OL&gt;
&lt;H4&gt;&lt;STRONG&gt;&lt;FONT color="#339966"&gt;Microservice Customers&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/H4&gt;
&lt;OL&gt;
&lt;LI&gt;
&lt;P&gt;Open the &lt;STRONG&gt;Customers&lt;/STRONG&gt; microservice.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN class="lia-inline-image-display-wrapper lia-image-align-inline"&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="0693p000008uNeuAAE.jpg"&gt;&lt;img src="https://community.qlik.com/t5/image/serverpage/image-id/124299iCEE4C077CA3CBD26/image-size/large?v=v2&amp;amp;px=999" role="button" title="0693p000008uNeuAAE.jpg" alt="0693p000008uNeuAAE.jpg" /&gt;&lt;/span&gt;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Click the &lt;STRONG&gt;Job&lt;/STRONG&gt; tab, then click &lt;STRONG&gt;Deployment&lt;/STRONG&gt; and notice that the &lt;STRONG&gt;Build Type&lt;/STRONG&gt; is set to &lt;STRONG&gt;Microservice for ESB&lt;/STRONG&gt;.&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Observe the Job design:&lt;/P&gt;
&lt;UL class="lia-list-style-type-circle"&gt;
&lt;LI&gt;
&lt;P&gt;Customers service is a REST data service&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Fetches all the customer details by &lt;STRONG&gt;customerNumber&lt;/STRONG&gt;&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Invokes the Order service and all the orders created by the customer&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Uses three different context environments namely STUDIO, QA, and PROD&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;In the context variables, observe the endpoint of the REST client, for example, the &lt;STRONG&gt;ORDER_SERVICE_CLIENT_URL&lt;/STRONG&gt; parameter&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;The host and port of the ORDER_SERVICE_CLIENT_URL changes for every environment&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;In the &lt;STRONG&gt;PROD &lt;/STRONG&gt;context the host is set with a logical host name, for example, &lt;STRONG&gt;order-service&lt;/STRONG&gt;&lt;/P&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Run the Job in Studio. By default, the service listens on port &lt;STRONG&gt;8090&lt;/STRONG&gt; and fails if the port is already in use.&lt;/P&gt;
&lt;/LI&gt;
&lt;/OL&gt;
&lt;H4&gt;&lt;STRONG&gt;&lt;FONT color="#339966"&gt;Build the GetOrder services&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/H4&gt;
&lt;OL&gt;
&lt;LI&gt;
&lt;P&gt;&lt;A id="Step_1" target="_blank"&gt;&lt;/A&gt;In the Studio, right-click the &lt;STRONG&gt;Customers&lt;/STRONG&gt; microservice, select &lt;STRONG&gt;Build Job&lt;/STRONG&gt;, and save the build to a folder demo.&lt;/P&gt;
&lt;P&gt;&lt;SPAN class="lia-inline-image-display-wrapper lia-image-align-inline"&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="0693p000008uNfmAAE.jpg"&gt;&lt;img src="https://community.qlik.com/t5/image/serverpage/image-id/124637iAD83A5AED2650BDF/image-size/large?v=v2&amp;amp;px=999" role="button" title="0693p000008uNfmAAE.jpg" alt="0693p000008uNfmAAE.jpg" /&gt;&lt;/span&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Follow the process in Step 1, and build a Job for &lt;STRONG&gt;Orders&lt;/STRONG&gt;.&lt;/P&gt;
&lt;P&gt;&lt;SPAN class="lia-inline-image-display-wrapper lia-image-align-inline"&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="0693p000008uNYDAA2.jpg"&gt;&lt;img src="https://community.qlik.com/t5/image/serverpage/image-id/122300i5FAA577B91D11A0E/image-size/large?v=v2&amp;amp;px=999" role="button" title="0693p000008uNYDAA2.jpg" alt="0693p000008uNYDAA2.jpg" /&gt;&lt;/span&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Launch the Windows Command Prompt and move them into the &lt;STRONG&gt;demo&lt;/STRONG&gt; folder.&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Follow the steps in the next section and run both the microservices.&lt;/P&gt;
&lt;/LI&gt;
&lt;/OL&gt;
&lt;H3&gt;&lt;STRONG&gt;&lt;FONT color="#339966"&gt;Running the GetOrder service as standalone microservice with QA context&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/H3&gt;
&lt;OL&gt;
&lt;LI&gt;
&lt;P&gt;Run the &lt;STRONG&gt;Orders&lt;/STRONG&gt; service:&lt;/P&gt;
&lt;PRE&gt;Java -jar Orders_0.1.jar --server.port=8065 --spring.config.location=classpath:config/contexts/ &lt;STRONG&gt;--spring.config.name=QA&lt;/STRONG&gt;&lt;/PRE&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Run the &lt;STRONG&gt;Customers&lt;/STRONG&gt; service:&lt;/P&gt;
&lt;PRE&gt;Java -jar Customers_0.1.jar --server.port=8066 --spring.config.location=classpath:config/contexts/ &lt;STRONG&gt;--spring.config.name=QA&lt;/STRONG&gt;&lt;/PRE&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Invoke the &lt;STRONG&gt;Customers&lt;/STRONG&gt; service using Talend API Tester or in a browser, enter the following URL and click the &lt;STRONG&gt;Send&lt;/STRONG&gt; button:&lt;/P&gt;
&lt;PRE&gt;http://localhost:8066/services/customer/103&lt;/PRE&gt;
&lt;P&gt;&lt;SPAN class="lia-inline-image-display-wrapper lia-image-align-inline"&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="0693p000008uNaiAAE.jpg"&gt;&lt;img src="https://community.qlik.com/t5/image/serverpage/image-id/125086i73946E1EBAA4319F/image-size/large?v=v2&amp;amp;px=999" role="button" title="0693p000008uNaiAAE.jpg" alt="0693p000008uNaiAAE.jpg" /&gt;&lt;/span&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Notice that the GetOrder service returns all the orders created by a customer upon call.&lt;/P&gt;
&lt;P&gt;&lt;SPAN class="lia-inline-image-display-wrapper lia-image-align-inline"&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="0693p000008uNeVAAU.jpg"&gt;&lt;img src="https://community.qlik.com/t5/image/serverpage/image-id/124870i6EE3BE386C60467A/image-size/large?v=v2&amp;amp;px=999" role="button" title="0693p000008uNeVAAU.jpg" alt="0693p000008uNeVAAU.jpg" /&gt;&lt;/span&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/LI&gt;
&lt;/OL&gt;
&lt;H3 class="lia-message-template-content-zone"&gt;&lt;STRONG&gt;&lt;FONT color="#339966"&gt;Use case: Order processing with Istio and Kubernetes&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/H3&gt;
&lt;P&gt;Istio is an open-source framework that provides a service mesh for microservices and can be installed on Kubernetes.&lt;/P&gt;
&lt;H4&gt;&lt;STRONG&gt;&lt;FONT color="#339966"&gt;Why Istio with GetOrder Services?&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/H4&gt;
&lt;P&gt;Istio can provide many additional capabilities to the Talend microservices by following a few best practices and without any additional changes to the Job designed in Talend Studio.&lt;/P&gt;
&lt;H3&gt;&lt;STRONG&gt;&lt;FONT color="#339966"&gt;Adding Istio capabilities for GetOrder services&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/H3&gt;
&lt;P&gt;With Istio sidecar injection, a sidecar proxy &lt;STRONG&gt;Envoy&lt;/STRONG&gt; is deployed in front of the GetOrder services (customer-service, order-service) and provides Istio Envoy capabilities. For more information on Envoy and its features, read the Istio &lt;A href="https://www.envoyproxy.io/docs/envoy/latest/" target="_blank" rel="noopener"&gt;Envoy&lt;/A&gt; documentation.&lt;/P&gt;
&lt;H4&gt;&lt;STRONG&gt;&lt;FONT color="#339966"&gt;Service Discovery&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/H4&gt;
&lt;P&gt;Service discovery explains how a service register and deregister its endpoint when deployed on a distributed cluster and how the clients/services can dynamically locate the endpoint URLs. Istio &lt;A title="Istio Traffic Management" href="https://istio.io/docs/concepts/traffic-management/" target="_blank" rel="noopener"&gt;Pilot&lt;/A&gt; has a built-in Kubernetes adapter and watches the Kubernetes API server for pod registrations and deregistrations.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Note&lt;/STRONG&gt;: Istio service discovery leverages the discovery features provided by platforms like Kubernetes.&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN class="lia-inline-image-display-wrapper lia-image-align-inline"&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="0693p000008uNfrAAE.jpg"&gt;&lt;img src="https://community.qlik.com/t5/image/serverpage/image-id/122839iFA740ACEC36333CB/image-size/large?v=v2&amp;amp;px=999" role="button" title="0693p000008uNfrAAE.jpg" alt="0693p000008uNfrAAE.jpg" /&gt;&lt;/span&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;The diagram above shows how Istio:&lt;/P&gt;
&lt;UL class="lia-list-style-type-circle"&gt;
&lt;LI&gt;
&lt;P&gt;Adds &lt;STRONG&gt;Envoy&lt;/STRONG&gt; proxy in front of the Talend microservice application pods&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Service discovery works for locating the services internally with in the mesh&lt;/P&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;For example, the &lt;STRONG&gt;customer-service&lt;/STRONG&gt; Pods in namespace &lt;STRONG&gt;talend-istio (1)&lt;/STRONG&gt; dynamically discovers the endpoint URL of the &lt;STRONG&gt;order-service (4)&lt;/STRONG&gt; by making a name lookup (&lt;STRONG&gt;order&lt;/STRONG&gt; &lt;STRONG&gt;-service&lt;/STRONG&gt; or &lt;STRONG&gt;order-service.talend-istio) &lt;/STRONG&gt; using the Istio &lt;STRONG&gt;Kubernetes adapter&lt;/STRONG&gt; &lt;STRONG&gt;(2)&lt;/STRONG&gt; and the &lt;STRONG&gt;Envoy&lt;/STRONG&gt; proxy &lt;STRONG&gt;(3)&lt;/STRONG&gt;.&lt;/P&gt;
&lt;P&gt;For more information, read &lt;A title="Discovering services" href="https://kubernetes.io/docs/concepts/services-networking/service/#discovering-services" target="_blank" rel="noopener"&gt;Discovering services&lt;/A&gt; in the Kubernetes using DNS documentation.&lt;/P&gt;
&lt;H4&gt;&lt;STRONG&gt;&lt;FONT color="#339966"&gt;Traffic management&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/H4&gt;
&lt;P&gt;The advantage of Istio Traffic management:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;P&gt;It allows developers and deployment teams to easily configure routing rules and control the flow of traffic and API calls between services.&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Operation teams can apply new rules or modifications without stopping the services.&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Istio Pilot watches for changes in routing rules and dynamically propagates new changes to the Envoy proxy.&lt;/P&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;H4&gt;&lt;STRONG&gt;&lt;FONT color="#339966"&gt;Gateways&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/H4&gt;
&lt;P&gt;The Gateway manages external Ingress traffic to our service mesh. It supports multiple protocols and can be configured to allow traffic on specific ports.&lt;/P&gt;
&lt;H4&gt;&lt;FONT color="#339966"&gt;&lt;STRONG&gt;Virtual services&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/H4&gt;
&lt;P&gt;A virtual service allows to configure an ordered list of routing rules and decides control how the Envoy proxy should route the traffic.&lt;/P&gt;
&lt;P&gt;The following diagram explains how:&lt;/P&gt;
&lt;UL class="lia-list-style-type-circle"&gt;
&lt;LI&gt;
&lt;P&gt;External traffic is allowed to the service mesh using the Ingress Gateway&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Define routing rules in a virtual service&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Apply rules and impose match conditions on the request URI&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Route traffic to one or more destinations&lt;/P&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;Refer to this &lt;STRONG&gt;VirtualService&lt;/STRONG&gt; configuration settings in the &lt;STRONG&gt;Service_&lt;/STRONG&gt;&lt;STRONG&gt;Discovery.yaml&lt;/STRONG&gt; file.&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN class="lia-inline-image-display-wrapper lia-image-align-inline"&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="0693p000008uNbWAAU.jpg"&gt;&lt;img src="https://community.qlik.com/t5/image/serverpage/image-id/124274i64E222AF4C499077/image-size/large?v=v2&amp;amp;px=999" role="button" title="0693p000008uNbWAAU.jpg" alt="0693p000008uNbWAAU.jpg" /&gt;&lt;/span&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H4&gt;&lt;STRONG&gt;&lt;FONT color="#339966"&gt;Destination rules&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/H4&gt;
&lt;P&gt;After enforcing the routing rules on the incoming traffic with virtual services, additional policies can be applied using destination rules.&lt;/P&gt;
&lt;P&gt;For example, the incoming traffic to &lt;STRONG&gt;order-service&lt;/STRONG&gt; can be routed to different versions (v1, v2) of the same service using &lt;STRONG&gt;subsets&lt;/STRONG&gt; by specifying &lt;STRONG&gt;match &lt;/STRONG&gt;conditions and &lt;STRONG&gt;weights&lt;/STRONG&gt;.&lt;/P&gt;
&lt;P&gt;Refer to this &lt;STRONG&gt;VirtualService&lt;/STRONG&gt; and &lt;STRONG&gt;DestinationRule&lt;/STRONG&gt; configuration entries in the &lt;STRONG&gt;CanaryDeployments.yaml&lt;/STRONG&gt; file.&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN class="lia-inline-image-display-wrapper lia-image-align-inline"&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="0693p000008uNfwAAE.jpg"&gt;&lt;img src="https://community.qlik.com/t5/image/serverpage/image-id/121881iA152D986323BF95E/image-size/large?v=v2&amp;amp;px=999" role="button" title="0693p000008uNfwAAE.jpg" alt="0693p000008uNfwAAE.jpg" /&gt;&lt;/span&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H4&gt;&lt;STRONG&gt;&lt;FONT color="#339966"&gt;Service Entry&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/H4&gt;
&lt;P&gt;&lt;STRONG&gt;ServiceEntry&lt;/STRONG&gt; enables adding additional entries into the Istio internal service registry so that auto-discovered services in the mesh can access/route to these manually specified services.&lt;/P&gt;
&lt;P&gt;In the GetOrder use case, the Talend microservice residing inside the service mesh need access to an external RDS MySQL instance.&lt;/P&gt;
&lt;P&gt;Refer to this &lt;STRONG&gt;ServiceEntry&lt;/STRONG&gt; configuration in the &lt;STRONG&gt;Service_&lt;/STRONG&gt;&lt;STRONG&gt;Discovery.yaml&lt;/STRONG&gt; file.&lt;/P&gt;
&lt;PRE&gt;apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
name: mysql-external
spec:
hosts:
- istio-customer-db.some_id.eu-central-1.rds.amazonaws.com
ports:
- name: tcp
number: 3306
protocol: tcp
location: MESH_EXTERNAL
resolution: DNS&lt;/PRE&gt;
&lt;H3&gt;&lt;FONT color="#339966"&gt;&lt;STRONG&gt;Logical architecture with Istio and Talend microservices&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/H3&gt;
&lt;P&gt;The microservices in the GetOrder use case are deployed to Kubernetes using Istio sidecar injection.&lt;/P&gt;
&lt;P&gt;The following diagram depicts a high-level logical architecture of the complete setup.&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN class="lia-inline-image-display-wrapper lia-image-align-inline"&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="0693p000008uNe7AAE.jpg"&gt;&lt;img src="https://community.qlik.com/t5/image/serverpage/image-id/125070i4C0EB218F353D255/image-size/large?v=v2&amp;amp;px=999" role="button" title="0693p000008uNe7AAE.jpg" alt="0693p000008uNe7AAE.jpg" /&gt;&lt;/span&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H4&gt;&lt;FONT color="#339966"&gt;&lt;STRONG&gt;Publishing GetOrder microservices to a container registry&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/H4&gt;
&lt;P&gt;To publish the GetOrder microservices to a container registry follow the instructions in the applicable article:&amp;nbsp;&lt;/P&gt;
&lt;UL class="lia-list-style-type-circle"&gt;
&lt;LI&gt;&lt;A href="https://community.qlik.com/t5/Design-and-Development/Managing-Talend-microservices-with-Istio-service-mesh-on-Azure/ta-p/2151304#:~:text=Publish%20Talend%20microservices%20to%20Azure%20Container%20Registry" target="_blank" rel="noopener"&gt;Publish Talend microservices to Azure Container Registry&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://community.qlik.com/t5/Design-and-Development/Managing-Talend-microservices-with-Istio-service-mesh-on-Google/ta-p/2151303#:~:text=Publish%20Talend%20microservices%20to%20Google%20Container%20Registry" target="_blank" rel="noopener"&gt;Publish Talend microservices to Google Container Registry&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://community.qlik.com/t5/Design-and-Development/Managing-Talend-microservices-with-Istio-service-mesh-on-Amazon/ta-p/2151301#:~:text=Publish%20Talend%20microservices%20to%20Amazon%20Elastic%20Container%20Registry%20(ECR)" target="_blank" rel="noopener"&gt;Publish Talend microservices to Amazon Elastic Container Registry (ECR)&lt;/A&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;H3&gt;&lt;FONT color="#339966"&gt;&lt;STRONG&gt;Deploying GetOrder microservices with Istio on Kubernetes&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/H3&gt;
&lt;P&gt;Deploying the GetOrder services on a Kubernetes cluster requires the following resources:&lt;/P&gt;
&lt;UL class="lia-list-style-type-circle"&gt;
&lt;LI&gt;
&lt;P&gt;Kubernetes resource files (YAML)&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Cloud / SDK shell&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Kubernetes command-line tool (kubectl)&lt;/P&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;These are available in the demo Kubernetes resource file you download in the Prerequisites section of this article.&lt;/P&gt;
&lt;H3&gt;&lt;STRONG&gt;&lt;FONT color="#339966"&gt;Set Talend context environment&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/H3&gt;
&lt;P&gt;The GetOrder services used in this article use Talend context environment and context variables, for example, the Prod context environment and context variables are used in this article for microservices deployments on a Kubernetes cluster.&lt;/P&gt;
&lt;P&gt;Unzip the demo Kubernetes resource file you downloaded in the &lt;A href="#Prerequisites" target="_self"&gt;Prerequisites&lt;/A&gt; section of this article.&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;
&lt;P&gt;Open the resources files for one of the Kubernetes clusters.&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Search for the API type &lt;STRONG&gt;Deployment&lt;/STRONG&gt;.&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Observe the value of the &lt;STRONG&gt;spring.config.location&lt;/STRONG&gt; property.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;spring.config.location&lt;/STRONG&gt; is set with the classpath location of Talend context environment properties file, for example, PROD.properties&lt;/P&gt;
&lt;PRE&gt;command: ["/bin/sh", "/maven/Customers/Customers_run.sh"]
args: ["--&lt;STRONG&gt;spring.config.location&lt;/STRONG&gt;=classpath:config/contexts/&lt;STRONG&gt;PROD.properties&lt;/STRONG&gt;"]&lt;/PRE&gt;
&lt;/LI&gt;
&lt;/OL&gt;
&lt;H4&gt;&lt;STRONG&gt;&lt;FONT color="#339966"&gt;Enable Istio sidecar injection at the namespace level&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/H4&gt;
&lt;OL&gt;
&lt;LI&gt;
&lt;P&gt;Connect to the cloud shell, create a namespace called &lt;STRONG&gt;talend-istio&lt;/STRONG&gt;:&lt;/P&gt;
&lt;PRE&gt;kubectl create ns &lt;STRONG&gt;talend-istio&lt;/STRONG&gt;&lt;/PRE&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Enable Istio sidecars injection on the new namespace:&lt;/P&gt;
&lt;PRE&gt;kubectl label namespace &lt;STRONG&gt;talend-istio&lt;/STRONG&gt; istio-injection=enabled&lt;/PRE&gt;
&lt;/LI&gt;
&lt;/OL&gt;
&lt;H4&gt;&lt;STRONG&gt;&lt;FONT color="#339966"&gt;Deploy the GetOrder services using a Kubernetes resource file&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/H4&gt;
&lt;OL&gt;
&lt;LI&gt;
&lt;P&gt;Using the &lt;STRONG&gt;kubectl&lt;/STRONG&gt; utility, execute the &lt;STRONG&gt;apply&lt;/STRONG&gt; command along with the resource file.&lt;/P&gt;
&lt;PRE&gt;&lt;STRONG&gt;kubectl apply&lt;/STRONG&gt; -n talend-istio -f &lt;STRONG&gt;FILE_NAME&lt;/STRONG&gt;&lt;/PRE&gt;
&lt;P&gt;&lt;SPAN class="lia-inline-image-display-wrapper lia-image-align-inline"&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="0693p000008uNg1AAE.jpg"&gt;&lt;img src="https://community.qlik.com/t5/image/serverpage/image-id/122612iC8BABB1AABCBD81B/image-size/large?v=v2&amp;amp;px=999" role="button" title="0693p000008uNg1AAE.jpg" alt="0693p000008uNg1AAE.jpg" /&gt;&lt;/span&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;From the cloud / SDK shell, observe that the Status of the pods in the &lt;STRONG&gt;talend-istio&lt;/STRONG&gt; namespace is &lt;STRONG&gt;Running&lt;/STRONG&gt;.&lt;/P&gt;
&lt;PRE&gt;kubectl get pods -n talend-istio&lt;/PRE&gt;
&lt;P&gt;&lt;SPAN class="lia-inline-image-display-wrapper lia-image-align-inline"&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="0693p000008uNg6AAE.jpg"&gt;&lt;img src="https://community.qlik.com/t5/image/serverpage/image-id/123004i252AA201ABD36D1A/image-size/large?v=v2&amp;amp;px=999" role="button" title="0693p000008uNg6AAE.jpg" alt="0693p000008uNg6AAE.jpg" /&gt;&lt;/span&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Observe the External-IP associated with the &lt;STRONG&gt;istio-ingressgateway&lt;/STRONG&gt;.&lt;/P&gt;
&lt;PRE&gt;kubectl -n istio-system get service istio-ingressgateway&lt;/PRE&gt;
&lt;P&gt;&lt;SPAN class="lia-inline-image-display-wrapper lia-image-align-inline"&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="0693p000008uNgBAAU.jpg"&gt;&lt;img src="https://community.qlik.com/t5/image/serverpage/image-id/124546iC55C521CA0C76008/image-size/large?v=v2&amp;amp;px=999" role="button" title="0693p000008uNgBAAU.jpg" alt="0693p000008uNgBAAU.jpg" /&gt;&lt;/span&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Note&lt;/STRONG&gt;: The IP address assigned to &lt;STRONG&gt;istio-ingressgateway&lt;/STRONG&gt; is the same as the IP address of the external LoadBalancer.&lt;/P&gt;
&lt;/LI&gt;
&lt;/OL&gt;
&lt;H4&gt;&lt;STRONG&gt;&lt;FONT color="#339966"&gt;Undeploy the GetOrder services using a Kubernetes resource file&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/H4&gt;
&lt;OL&gt;
&lt;LI&gt;
&lt;P&gt;Using the &lt;STRONG&gt;kubectl&lt;/STRONG&gt; utility, execute the &lt;STRONG&gt;delete&lt;/STRONG&gt; command along with the resource file.&lt;/P&gt;
&lt;PRE&gt;kubectl delete -n talend-istio -f FILE_NAME&lt;/PRE&gt;
&lt;P&gt;&lt;SPAN class="lia-inline-image-display-wrapper lia-image-align-inline"&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="0693p000008uNgGAAU.jpg"&gt;&lt;img src="https://community.qlik.com/t5/image/serverpage/image-id/121788i66018E924D03AFD7/image-size/large?v=v2&amp;amp;px=999" role="button" title="0693p000008uNgGAAU.jpg" alt="0693p000008uNgGAAU.jpg" /&gt;&lt;/span&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;From the cloud / SDK shell, observe that the pods in the &lt;STRONG&gt;talend-istio&lt;/STRONG&gt; namespace were deleted.&lt;/P&gt;
&lt;PRE&gt;kubectl get pods -n talend-istio&lt;/PRE&gt;
&lt;/LI&gt;
&lt;/OL&gt;
&lt;H3&gt;&lt;STRONG&gt;&lt;FONT color="#339966"&gt;Demo&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/H3&gt;
&lt;P&gt;The demo uses Istio Dashboards for Monitoring, execute the platform-specific instructions, and open the dashboards for Kiali, Grafana, and Jaeger:&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;A title="Launching Istio monitoring dashboards for GKE" href="https://community.qlik.com/t5/Design-and-Development/Managing-Talend-microservices-with-Istio-service-mesh-on-Google/ta-p/2151303#:~:text=Launching%20Istio%20monitoring%20dashboards%20for%20GKE" target="_blank" rel="noopener"&gt;Launching Istio monitoring dashboards for GKE&lt;/A&gt;&lt;BR /&gt;&lt;A title="Launching Istio monitoring dashboards for AKS" href="https://community.qlik.com/t5/Design-and-Development/Managing-Talend-microservices-with-Istio-service-mesh-on-Azure/ta-p/2151304#:~:text=Launching%20Istio%20monitoring%20dashboards%20for%20AKS" target="_blank" rel="noopener"&gt;Launching Istio monitoring dashboards for AKS&lt;/A&gt;&lt;BR /&gt;&lt;A title="Launch Istio monitoring dashboards for AWS" href="https://community.qlik.com/t5/Design-and-Development/Managing-Talend-microservices-with-Istio-service-mesh-on-Amazon/ta-p/2151301#:~:text=Launching%20Istio%20monitoring%20dashboards%20for%20AWS" target="_blank" rel="noopener"&gt;Launching Istio monitoring dashboards for AWS&lt;/A&gt;&lt;/P&gt;
&lt;H3&gt;&lt;STRONG&gt;&lt;FONT color="#339966"&gt;Service discovery and routing&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/H3&gt;
&lt;OL&gt;
&lt;LI&gt;
&lt;P&gt;Using the &lt;STRONG&gt;kubectl&lt;/STRONG&gt; utility, execute the &lt;STRONG&gt;apply&lt;/STRONG&gt; command along with the resource file.&lt;/P&gt;
&lt;PRE&gt;kubectl apply -n talend-istio -f Service_Discovery.yaml&lt;/PRE&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Before executing the &lt;STRONG&gt;apply&lt;/STRONG&gt; command download and modify the cloud-specific template files, and make the following changes:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;
&lt;P&gt;Search for the API type &lt;STRONG&gt;Deployment&lt;/STRONG&gt;, replace the value in the &lt;STRONG&gt;image&lt;/STRONG&gt; property with your registry location URL:&lt;/P&gt;
&lt;PRE&gt;image: &lt;STRONG&gt;REPLACE_WITH_YOUR_RESPOSITORY_URL/k8s_microservice/customer/microservices/orders:0.2.0&lt;/STRONG&gt;&lt;/PRE&gt;
&lt;P&gt;If you publish the images to Azure Container Registry, then &lt;A href="https://community.qlik.com/t5/Design-and-Development/Managing-Talend-microservices-with-Istio-service-mesh-on-Azure/ta-p/2151304#:~:text=Using%20Secret%20in%20the%20Kubernetes%20resource%20files" target="_blank" rel="noopener"&gt;Use Kubernetes Secrets in the resource files&lt;/A&gt; in the API of type &lt;STRONG&gt;Deployment&lt;/STRONG&gt;, for more detailed steps follow the section &lt;A href="https://community.qlik.com/t5/Design-and-Development/Managing-Talend-microservices-with-Istio-service-mesh-on-Amazon/ta-p/2151301#:~:text=Authentication%20with%20Amazon%20Elastic%20Container%20Registry%20from%20EKS" target="_blank" rel="noopener"&gt;Authentication with Azure Container Registry from AKS using Service principal&lt;/A&gt;.&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Search for the API type &lt;STRONG&gt;ServiceEntry&lt;/STRONG&gt;, replace the &lt;STRONG&gt;hosts&lt;/STRONG&gt; and &lt;STRONG&gt;number&lt;/STRONG&gt; property values with the URL and port number of an external database.&lt;/P&gt;
&lt;PRE&gt;&lt;STRONG&gt;hosts:
- istio-customer-db.some_id.eu-central-1.rds.amazonaws.com&lt;/STRONG&gt;
ports:
- name: tcp
&lt;STRONG&gt;number: 3306&lt;/STRONG&gt;&lt;/PRE&gt;
&lt;/LI&gt;
&lt;/OL&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;From the cloud / SDK shell, observe that the &lt;STRONG&gt;Status&lt;/STRONG&gt; of the pods in the &lt;STRONG&gt;talend-istio&lt;/STRONG&gt; namespace is &lt;STRONG&gt;Running&lt;/STRONG&gt;.&lt;/P&gt;
&lt;PRE&gt;kubectl get pods -n talend-istio&lt;/PRE&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;From your local machine (Windows / Linux), connect to &lt;STRONG&gt;Kiali,&lt;/STRONG&gt; observe that there are two applications in the &lt;STRONG&gt;talend-istio&lt;/STRONG&gt; namespace, and there is no traffic.&lt;/P&gt;
&lt;P&gt;&lt;SPAN class="lia-inline-image-display-wrapper lia-image-align-inline"&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="0693p000008uNQ4AAM.jpg"&gt;&lt;img src="https://community.qlik.com/t5/image/serverpage/image-id/124450i7FCD56B4BD966867/image-size/large?v=v2&amp;amp;px=999" role="button" title="0693p000008uNQ4AAM.jpg" alt="0693p000008uNQ4AAM.jpg" /&gt;&lt;/span&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Invoke the &lt;STRONG&gt;Customers&lt;/STRONG&gt; service endpoint using Talend API Tester, enter the following URL, click the &lt;STRONG&gt;Send&lt;/STRONG&gt; button, and observe the response.&lt;/P&gt;
&lt;PRE&gt;http://REPLACE_WITH_YOUR_INGRESS_EXTERNAL_IP/customer/103&lt;/PRE&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Create more load on the &lt;STRONG&gt;Customers&lt;/STRONG&gt; service, invoke the &lt;STRONG&gt;Customers&lt;/STRONG&gt; service endpoint by clicking the &lt;STRONG&gt;Send&lt;/STRONG&gt; button 4 to 5 times. Notice that the dashboard detects some traffic.&lt;/P&gt;
&lt;P&gt;&lt;SPAN class="lia-inline-image-display-wrapper lia-image-align-inline"&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="0693p000008uNgQAAU.jpg"&gt;&lt;img src="https://community.qlik.com/t5/image/serverpage/image-id/123692i6452336D873529E7/image-size/large?v=v2&amp;amp;px=999" role="button" title="0693p000008uNgQAAU.jpg" alt="0693p000008uNgQAAU.jpg" /&gt;&lt;/span&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;In the Dashboard, from the menu on the left, click &lt;STRONG&gt;Graph&lt;/STRONG&gt;, then select the &lt;STRONG&gt;Workload&lt;/STRONG&gt; graph.&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;
&lt;P&gt;In the &lt;STRONG&gt;Workload&lt;/STRONG&gt; graph, observe the last 5 minutes of traffic.&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Notice that the services are arranged in a sequence following their order of invocation, for example, &lt;STRONG&gt;istio-ingressgateway&lt;/STRONG&gt; &amp;gt; &lt;STRONG&gt;customer-service proxy&lt;/STRONG&gt; &amp;gt; &lt;STRONG&gt;customer-service application&lt;/STRONG&gt; &amp;gt; &lt;STRONG&gt;istio-customer-db&lt;/STRONG&gt; &amp;gt; &lt;STRONG&gt;order-service proxy&lt;/STRONG&gt; &amp;gt; then &lt;STRONG&gt;order-service application&lt;/STRONG&gt;.&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Observe that the HTTP traffic is &lt;STRONG&gt;green&lt;/STRONG&gt;, indicating there are no failures.&lt;/P&gt;
&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&lt;SPAN class="lia-inline-image-display-wrapper lia-image-align-inline"&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="0693p000008uNfiAAE.jpg"&gt;&lt;img src="https://community.qlik.com/t5/image/serverpage/image-id/122479i9325172DE2745FAD/image-size/large?v=v2&amp;amp;px=999" role="button" title="0693p000008uNfiAAE.jpg" alt="0693p000008uNfiAAE.jpg" /&gt;&lt;/span&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Click the &lt;STRONG&gt;Namespace&lt;/STRONG&gt; down arrow next &lt;STRONG&gt;talend-istio&lt;/STRONG&gt;, and add the &lt;STRONG&gt;istio-system&lt;/STRONG&gt; namespace.&lt;/P&gt;
&lt;UL class="lia-list-style-type-circle"&gt;
&lt;LI&gt;Review the &lt;STRONG&gt;Istio service&lt;/STRONG&gt; graph, and notice that the istio-telemetry service is added to the graph&lt;/LI&gt;
&lt;LI&gt;istio-telemetry gathers metrics data from the sidecars customer-service and order-service&lt;BR /&gt;&lt;BR /&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;SPAN class="lia-inline-image-display-wrapper lia-image-align-inline"&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="0693p000008uNgVAAU.jpg"&gt;&lt;img src="https://community.qlik.com/t5/image/serverpage/image-id/124572iE586BCBBE4AEE5B2/image-size/large?v=v2&amp;amp;px=999" role="button" title="0693p000008uNgVAAU.jpg" alt="0693p000008uNgVAAU.jpg" /&gt;&lt;/span&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;From your local machine (Windows / Linux), open the Google Cloud SDK shell, then using local port forwarding, connect to &lt;STRONG&gt;Grafana&lt;/STRONG&gt;. In the &lt;STRONG&gt;Istio Workload Dashboard&lt;/STRONG&gt;, observe the request/response &lt;STRONG&gt;duration&lt;/STRONG&gt; and &lt;STRONG&gt;size&lt;/STRONG&gt;.&lt;/P&gt;
&lt;P&gt;&lt;SPAN class="lia-inline-image-display-wrapper lia-image-align-inline"&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="0693p000008uNdhAAE.jpg"&gt;&lt;img src="https://community.qlik.com/t5/image/serverpage/image-id/122104iF37771381808BA8C/image-size/large?v=v2&amp;amp;px=999" role="button" title="0693p000008uNdhAAE.jpg" alt="0693p000008uNdhAAE.jpg" /&gt;&lt;/span&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;From your local machine (Windows / Linux), connect to &lt;STRONG&gt;Jaeger&lt;/STRONG&gt;. Find &lt;STRONG&gt;Traces&lt;/STRONG&gt; for customer-service, observe the dependency between the services and latency.&lt;/P&gt;
&lt;P&gt;&lt;SPAN class="lia-inline-image-display-wrapper lia-image-align-inline"&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="0693p000008uNgaAAE.jpg"&gt;&lt;img src="https://community.qlik.com/t5/image/serverpage/image-id/123147i44403051DC6EC575/image-size/large?v=v2&amp;amp;px=999" role="button" title="0693p000008uNgaAAE.jpg" alt="0693p000008uNgaAAE.jpg" /&gt;&lt;/span&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;STRONG&gt;Note&lt;/STRONG&gt;: Applications must manually propagate appropriate b3 HTTP headers for correlating spans into a single trace. For more information, read &lt;A title="Trace context propagation" href="https://istio.io/docs/tasks/observability/distributed-tracing/overview/#trace-context-propagation" target="_blank" rel="noopener"&gt;Trace context propagation&lt;/A&gt; and Zipkin &lt;A title="Open Zipkin b3-propagation" href="https://github.com/openzipkin/b3-propagation" target="_blank" rel="noopener"&gt;b3-propagation&lt;/A&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;H3&gt;&lt;FONT color="#339966"&gt;&lt;STRONG&gt;Recovery failures&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/H3&gt;
&lt;P&gt;This section helps you understand how Istio handles recovery failures such as faults, timeouts, and retries by enhancing the configuration from the &lt;A href="#Service_discovery_and_routing" target="_self"&gt;Service discovery and routing&lt;/A&gt; section of this article.&lt;/P&gt;
&lt;P&gt;In this scenario, assume the order-service runs CPU intensive tasks and not accepting new requests. To understand this scenario, configure the Virtual service as below:&lt;/P&gt;
&lt;UL class="lia-list-style-type-circle"&gt;
&lt;LI&gt;
&lt;P&gt;Configure Istio to create a delay of two secs before routing the request to &lt;STRONG&gt;order-service&lt;/STRONG&gt;&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;&lt;STRONG&gt;Customer-service&lt;/STRONG&gt; timeouts due to the latency induced by &lt;STRONG&gt;order-service&lt;/STRONG&gt;&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;On timeout, &lt;STRONG&gt;customer-service&lt;/STRONG&gt; performs a retry&lt;/P&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;OL&gt;
&lt;LI&gt;
&lt;P&gt;Using the &lt;STRONG&gt;kubectl&lt;/STRONG&gt; utility, execute the &lt;STRONG&gt;delete&lt;/STRONG&gt; command and clean the previous deployments:&lt;/P&gt;
&lt;PRE&gt;kubectl delete -n talend-istio -f Service_Discovery.yaml&lt;/PRE&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Using the &lt;STRONG&gt;kubectl&lt;/STRONG&gt; utility, execute the &lt;STRONG&gt;apply&lt;/STRONG&gt; command along with the resource file:&lt;/P&gt;
&lt;PRE&gt;kubectl apply -n talend-istio -f RecoveryFailures.yaml&lt;/PRE&gt;
&lt;P&gt;&lt;STRONG&gt;Note:&lt;/STRONG&gt; Before executing the &lt;STRONG&gt;apply&lt;/STRONG&gt; command, modify the &lt;STRONG&gt;YAML&lt;/STRONG&gt; file for environment-specific changes as follows:&lt;/P&gt;
&lt;OL class="lia-list-style-type-lower-alpha"&gt;
&lt;LI&gt;
&lt;P&gt;Search for the API type &lt;STRONG&gt;Deployment&lt;/STRONG&gt;, replace the value in the &lt;STRONG&gt;image&lt;/STRONG&gt; property with your registry location URL.&lt;/P&gt;
&lt;PRE&gt;image: &lt;STRONG&gt;eu.gcr.io/customer-success-account_id/k8s_microservice/customer/microservices/orders:0.2.0&lt;/STRONG&gt;&lt;/PRE&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Search for the API type &lt;STRONG&gt;ServiceEntry&lt;/STRONG&gt;, replace the &lt;STRONG&gt;hosts&lt;/STRONG&gt;, and &lt;STRONG&gt;number&lt;/STRONG&gt; property values with the URL and port number of an external database.&lt;/P&gt;
&lt;PRE&gt;&lt;STRONG&gt;hosts:
- istio-customer-db.some_id.eu-central-1.rds.amazonaws.com&lt;/STRONG&gt;
ports:
- name: tcp
&lt;STRONG&gt;number: 3306&lt;/STRONG&gt;&lt;/PRE&gt;
&lt;/LI&gt;
&lt;/OL&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;From the cloud / SDK shell, observe that the &lt;STRONG&gt;Status&lt;/STRONG&gt; of the pods in the &lt;STRONG&gt;talend-istio&lt;/STRONG&gt; namespace is &lt;STRONG&gt;Running&lt;/STRONG&gt;.&lt;/P&gt;
&lt;PRE&gt;kubectl get pods -n talend-istio&lt;/PRE&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Invoke the &lt;STRONG&gt;Customer&lt;/STRONG&gt; service endpoint using Talend API Tester, enter the following URL, and observe the response.&lt;/P&gt;
&lt;PRE&gt;http://REPLACE_WITH_YOUR_INGRESS_EXTERNAL_IP/customer/103&lt;/PRE&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Create more load on the &lt;STRONG&gt;Customer&lt;/STRONG&gt; service by clicking the customer-service endpoints 4 to 5 times. Notice that the dashboard detects some traffic.&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;From your local machine (Windows / Linux), open the Google Cloud SDK shell, then using local port forwarding, connect to &lt;STRONG&gt;Kiali&lt;/STRONG&gt;.&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Open the &lt;STRONG&gt;Versioned app &lt;/STRONG&gt;graph, observe the &lt;STRONG&gt;customer-service&lt;/STRONG&gt; is &lt;STRONG&gt;Red&lt;/STRONG&gt; and &lt;STRONG&gt;10%&lt;/STRONG&gt; of the HTTP traffic fails due to timeouts induced on order-service.&lt;/P&gt;
&lt;P&gt;&lt;SPAN class="lia-inline-image-display-wrapper lia-image-align-inline"&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="0693p000008uNgfAAE.jpg"&gt;&lt;img src="https://community.qlik.com/t5/image/serverpage/image-id/122051i54FA3406339CE9FB/image-size/large?v=v2&amp;amp;px=999" role="button" title="0693p000008uNgfAAE.jpg" alt="0693p000008uNgfAAE.jpg" /&gt;&lt;/span&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/LI&gt;
&lt;/OL&gt;
&lt;H3&gt;&lt;FONT color="#339966"&gt;&lt;STRONG&gt;Canary deployments&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/H3&gt;
&lt;OL&gt;
&lt;LI&gt;
&lt;P&gt;Using the &lt;STRONG&gt;kubectl&lt;/STRONG&gt; utility, execute the &lt;STRONG&gt;delete &lt;/STRONG&gt;command and clean the previous deployments.&lt;/P&gt;
&lt;PRE&gt;kubectl delete -n talend-istio -f RecoveryFailures.yaml&lt;/PRE&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Using the &lt;STRONG&gt;kubectl&lt;/STRONG&gt; utility, execute the &lt;STRONG&gt;apply&lt;/STRONG&gt; command along with the resource file.&lt;/P&gt;
&lt;PRE&gt;kubectl apply -n talend-istio -f CanaryDeployments.yaml&lt;/PRE&gt;
&lt;P&gt;&lt;STRONG&gt;Note:&lt;/STRONG&gt; Before executing the &lt;STRONG&gt;apply&lt;/STRONG&gt; command, modify the &lt;STRONG&gt;YAML&lt;/STRONG&gt; file for environment-specific changes as follows:&lt;/P&gt;
&lt;OL class="lia-list-style-type-lower-alpha"&gt;
&lt;LI&gt;
&lt;P&gt;Search for the API type &lt;STRONG&gt;Deployment&lt;/STRONG&gt;, replace the value in the &lt;STRONG&gt;image&lt;/STRONG&gt; property with your registry location URL.&lt;/P&gt;
&lt;PRE&gt;image: &lt;STRONG&gt;eu.gcr.io/customer-success-account_id/k8s_microservice/customer/microservices/orders:0.2.0&lt;/STRONG&gt;&lt;/PRE&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Search for the API type &lt;STRONG&gt;ServiceEntry&lt;/STRONG&gt;, replace the &lt;STRONG&gt;hosts&lt;/STRONG&gt;, and &lt;STRONG&gt;number&lt;/STRONG&gt; property values with the URL and port number of an external database.&lt;/P&gt;
&lt;PRE&gt;&lt;STRONG&gt;hosts:
- istio-customer-db.some_id.eu-central-1.rds.amazonaws.com&lt;/STRONG&gt;
ports:
- name: tcp
&lt;STRONG&gt;number: 3306&lt;/STRONG&gt;&lt;/PRE&gt;
&lt;/LI&gt;
&lt;/OL&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;From the cloud / SDK shell, observe that the Status of the pods in the &lt;STRONG&gt;talend-istio&lt;/STRONG&gt; namespace is &lt;STRONG&gt;Running&lt;/STRONG&gt;.&lt;/P&gt;
&lt;PRE&gt;kubectl get pods -n talend-istio&lt;/PRE&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Invoke the &lt;STRONG&gt;Customer&lt;/STRONG&gt; service endpoint using Talend API Tester, enter the following URL, and observe the response.&lt;/P&gt;
&lt;PRE&gt;http://REPLACE_WITH_YOUR_INGRESS_EXTERNAL_IP/customer/103&lt;/PRE&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Create more load on the &lt;STRONG&gt;Customer&lt;/STRONG&gt; service by clicking the customer-service endpoints 4 to 5 times. Notice that the dashboard detects some traffic.&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;From your local machine (Windows / Linux), open the Google Cloud SDK shell, then using local port forwarding connect to &lt;STRONG&gt;Kiali&lt;/STRONG&gt;.&lt;/P&gt;
&lt;P&gt;&lt;SPAN class="lia-inline-image-display-wrapper lia-image-align-inline"&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="0693p000008uNgkAAE.jpg"&gt;&lt;img src="https://community.qlik.com/t5/image/serverpage/image-id/124791iBC905889ACD679AC/image-size/large?v=v2&amp;amp;px=999" role="button" title="0693p000008uNgkAAE.jpg" alt="0693p000008uNgkAAE.jpg" /&gt;&lt;/span&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;From your local machine (Windows / Linux), open the Google Cloud SDK shell, then using local port forwarding, connect to &lt;STRONG&gt;Grafana&lt;/STRONG&gt;.&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;In the Istio &lt;STRONG&gt;Workload Dashboard&lt;/STRONG&gt;, observe the traffic was split into two versions of the &lt;STRONG&gt;order-service&lt;/STRONG&gt;.&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;&lt;SPAN class="lia-inline-image-display-wrapper lia-image-align-inline"&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="0693p000008uNgpAAE.jpg"&gt;&lt;img src="https://community.qlik.com/t5/image/serverpage/image-id/124031iC3A6A9B860DAC9E1/image-size/large?v=v2&amp;amp;px=999" role="button" title="0693p000008uNgpAAE.jpg" alt="0693p000008uNgpAAE.jpg" /&gt;&lt;/span&gt;&lt;/SPAN&gt;&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/LI&gt;
&lt;/OL&gt;
&lt;H3&gt;&lt;STRONG&gt;&lt;FONT color="#339966"&gt;Conclusion&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/H3&gt;
&lt;P&gt;This article explains how Talend integrates with distributed platforms like Kubernetes and how you can leverage Istio for managing traffic, service discovery, monitoring, and tracing services in a service mesh. Services are designed, developed, and published with the help of Talend Studio.&lt;/P&gt;</description>
    <pubDate>Tue, 23 Jan 2024 02:35:30 GMT</pubDate>
    <dc:creator>TalendSolutionExpert</dc:creator>
    <dc:date>2024-01-23T02:35:30Z</dc:date>
    <item>
      <title>Talend ESB: Managing Talend microservices with Istio service mesh on Kubernetes</title>
      <link>https://community.qlik.com/t5/Official-Support-Articles/Talend-ESB-Managing-Talend-microservices-with-Istio-service-mesh/ta-p/2151312</link>
      <description>&lt;P&gt;&lt;STRONG&gt;&lt;FONT color="#339966"&gt;Content:&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;LI-TOC indent="15" liststyle="none" maxheadinglevel="4"&gt;&lt;/LI-TOC&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The Talend Community Knowledge Base article, &lt;A href="https://community.qlik.com/t5/Ready-for-Go-Live/Containerization-and-orchestration-of-Talend-microservices-with/ta-p/2150777" target="_self"&gt;Containerization and orchestration of Talend microservices with Docker and Kubernetes&lt;/A&gt; shows you how to:&lt;/P&gt;
&lt;UL class="lia-list-style-type-circle"&gt;
&lt;LI&gt;
&lt;P&gt;Build a demo Customer service as a Talend microservice container image&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Generate Kubernetes resources for the Customer service using the &lt;A title="Fabric8 Maven plugin" href="https://maven.fabric8.io/" target="_blank" rel="noopener"&gt;f8-m-p&lt;/A&gt; plugin&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Deploy the Customer service on a Kubernetes cluster using the f8-m-p&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Invoke the Customer service using a ClusterIP&lt;/P&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;However, in &lt;STRONG&gt;Production&lt;/STRONG&gt; environments, it is more likely you'll need to:&lt;/P&gt;
&lt;UL class="lia-list-style-type-circle"&gt;
&lt;LI&gt;
&lt;P&gt;Expose a few microservices to &lt;STRONG&gt;external&lt;/STRONG&gt; endpoints using an external load balancer&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Route traffic &lt;STRONG&gt;dynamically&lt;/STRONG&gt; to several &lt;STRONG&gt;internal&lt;/STRONG&gt; endpoints running in a distributed cluster&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Handle faults, timeouts, and perform retries&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Roll incremental changes or bug fixes without service outage&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Deploy multiple versions and route incoming traffic based on a match criteria&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Observe logs, metrics, and health of the services&lt;/P&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;This article provides another approach to deploying Talend microservices to a distributed Kubernetes cluster using the kubectl utility, and leveraging Istio to manage some of the production-grade requirements for microservices.&lt;/P&gt;
&lt;H3&gt;&lt;STRONG&gt;&lt;FONT color="#339966"&gt;Prerequisites&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/H3&gt;
&lt;UL class="lia-list-style-type-circle"&gt;
&lt;LI&gt;Talend 7.2 or above&lt;/LI&gt;
&lt;LI&gt;Internet access&lt;/LI&gt;
&lt;LI&gt;Access to a Docker repository&lt;/LI&gt;
&lt;LI&gt;Install a MySQL database&lt;/LI&gt;
&lt;LI&gt;Set up Kubernetes cluster and install Istio&lt;/LI&gt;
&lt;LI&gt;Download the sources for the project available in the&amp;nbsp; Microservices-JobDesigns.zip file&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Download the demo Kubernetes resource ZIP file (attached to the article) for one of the following cloud platforms:&lt;/P&gt;
&lt;UL class="lia-list-style-type-circle"&gt;
&lt;LI&gt;Demo Kubernetes resource files for AKS&lt;/LI&gt;
&lt;LI&gt;Demo Kubernetes resource files for GKE&lt;/LI&gt;
&lt;LI&gt;Demo Kubernetes resource files for EKS&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3&gt;&lt;STRONG&gt;&lt;FONT color="#339966"&gt;Environment&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/H3&gt;
&lt;P&gt;Before you can understand some of the Istio features, you need to set up a Kubernetes cluster and install Istio, by following the platform-specific instructions using one of the following Talend Community Knowledge Base (KB) articles:&lt;/P&gt;
&lt;UL class="lia-list-style-type-circle"&gt;
&lt;LI&gt;
&lt;P&gt;Follow the &lt;A title="Launch Azure Kubernetes Service " href="https://community.qlik.com/t5/Design-and-Development/Managing-Talend-microservices-with-Istio-service-mesh-on-Amazon/ta-p/2151301#:~:text=Launching%20an%20Elastic%20Kubernetes%20Service%20(EKS)" target="_blank" rel="noopener"&gt;Launching a standard Azure Kubernetes Service (AKS)&lt;/A&gt; and &lt;A title="Istio installation steps" href="https://community.qlik.com/t5/Design-and-Development/Managing-Talend-microservices-with-Istio-service-mesh-on-Amazon/ta-p/2151301#:~:text=Installing%20Istio%20with%20Helm%20on%20EKS" target="_blank" rel="noopener"&gt;Installing Istio with Helm on AKS&lt;/A&gt; sections in the &lt;EM&gt;Managing Talend microservices with Istio service mesh on Azure Kubernetes Service (AKS)&lt;/EM&gt; article.&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Follow the &lt;A title="Google Kubernetes Engine" href="https://community.qlik.com/t5/Design-and-Development/Managing-Talend-microservices-with-Istio-service-mesh-on-Google/ta-p/2151303#:~:text=Launch%20a%20standard%20Google%20Kubernetes%20Engine%20(GKE)" target="_blank" rel="noopener"&gt;Launch a standard Google Kubernetes Engine (GKE)&lt;/A&gt; and &lt;A title="Install Istio" href="https://community.qlik.com/t5/Design-and-Development/Managing-Talend-microservices-with-Istio-service-mesh-on-Google/ta-p/2151303#:~:text=Installing%20Istio%20with%20Helm%20on%20GKE" target="_blank" rel="noopener"&gt;Installing Istio with Helm on GKE&lt;/A&gt; sections in the &lt;EM&gt;Managing Talend microservices with Istio service mesh on Google Kubernetes Engine (GKE)&lt;/EM&gt; article.&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Follow the &lt;A title="Amazon Elastic Kubernete Service" href="https://community.qlik.com/t5/Design-and-Development/Managing-Talend-microservices-with-Istio-service-mesh-on-Amazon/ta-p/2151301#:~:text=Launching%20an%20Elastic%20Kubernetes%20Service%20(EKS)" target="_blank" rel="noopener"&gt;Launching an Elastic Kubernetes Service (EKS)&lt;/A&gt; and &lt;A title="Install Istio" href="https://community.qlik.com/t5/Design-and-Development/Managing-Talend-microservices-with-Istio-service-mesh-on-Amazon/ta-p/2151301#:~:text=Installing%20Istio%20with%20Helm%20on%20EKS" target="_blank" rel="noopener"&gt;Installing Istio with Helm on EKS&lt;/A&gt; sections in the &lt;EM&gt;Managing Talend microservices with Istio service mesh on Amazon Elastic Kubernetes Service (EKS)&lt;/EM&gt; article.&lt;/P&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3&gt;&lt;FONT color="#339966"&gt;&lt;STRONG&gt;Use case: Order processing&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/H3&gt;
&lt;P&gt;Typically, a request passes through different stages during the order processing lifecycle, such as Create, Get, and Amend.&lt;/P&gt;
&lt;P&gt;The following diagram showcases a few of those stages, the sequence of steps, and the services involved in a CreateOrder and GetOrder workflow.&lt;/P&gt;
&lt;P&gt;&lt;SPAN class="lia-inline-image-display-wrapper lia-image-align-inline"&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="0693p000008uNfSAAU.jpg"&gt;&lt;img src="https://community.qlik.com/t5/image/serverpage/image-id/121633iF101A6D58ACDE7BD/image-size/large?v=v2&amp;amp;px=999" role="button" title="0693p000008uNfSAAU.jpg" alt="0693p000008uNfSAAU.jpg" /&gt;&lt;/span&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;In this scenario, you're building a company's retail car purchasing microservice where:&lt;/P&gt;
&lt;UL class="lia-list-style-type-circle"&gt;
&lt;LI&gt;
&lt;P&gt;The &lt;STRONG&gt;CreateOrder&lt;/STRONG&gt; workflow is responsible for processing all the new orders placed by customers using different sales channels.&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;The &lt;STRONG&gt;GetOrder&lt;/STRONG&gt; workflow retrieves the details and status of a previously placed order.&lt;/P&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;H3&gt;&lt;FONT color="#339966"&gt;&lt;STRONG&gt;Creating a mock order&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/H3&gt;
&lt;P&gt;This section shows you how to create a mock order (referred to as a mock order because it's not a real order) with a sample MySQL database that contains information about classic car models purchased by customers.&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;
&lt;P&gt;Launch an RDS MySQL instance.&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;Import the &lt;STRONG&gt;mysql-sampledatabase-classicmodels.sql&lt;/STRONG&gt; file (attached to this article) to a folder.&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Login as &lt;STRONG&gt;root&lt;/STRONG&gt; and connect to the MySQL shell:&lt;/P&gt;
&lt;PRE&gt;sql connect INSTANCE_NAME --user=root --quiet&lt;/PRE&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Create the &lt;STRONG&gt;classicmodels&lt;/STRONG&gt; MySQL database by using the source command:&lt;/P&gt;
&lt;PRE&gt;source file_location/mysql-sampledatabase-classicmodels.sql&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;After the classicmodels database is created, observe the relationship between the &lt;STRONG&gt;customers&lt;/STRONG&gt;, &lt;STRONG&gt;orders&lt;/STRONG&gt;, and &lt;STRONG&gt;products&lt;/STRONG&gt; entities.&lt;/P&gt;
&lt;P&gt;&lt;SPAN class="lia-inline-image-display-wrapper lia-image-align-inline"&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="0693p000008uNfXAAU.jpg"&gt;&lt;img src="https://community.qlik.com/t5/image/serverpage/image-id/122567iEA618659E1626F92/image-size/large?v=v2&amp;amp;px=999" role="button" title="0693p000008uNfXAAU.jpg" alt="0693p000008uNfXAAU.jpg" /&gt;&lt;/span&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/LI&gt;
&lt;/OL&gt;
&lt;H3&gt;&lt;STRONG&gt;&lt;FONT color="#339966"&gt;Implementing the GetOrder&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/H3&gt;
&lt;P&gt;The GetOrder workflow retrieves all the orders made by a customer and displays the status of all the orders. This section shows you how to implement the GetOrder services as a Talend microservices.&lt;/P&gt;
&lt;H4&gt;&lt;STRONG&gt;&lt;FONT color="#339966"&gt;Microservice Orders&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/H4&gt;
&lt;OL&gt;
&lt;LI&gt;
&lt;P&gt;Launch Talend Studio, then import the Jobs in the &lt;STRONG&gt;Microservices-JobDesigns.zip&lt;/STRONG&gt; (attached to this article) file.&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Open the &lt;STRONG&gt;Orders&lt;/STRONG&gt; microservice.&lt;/P&gt;
&lt;P&gt;&lt;SPAN class="lia-inline-image-display-wrapper lia-image-align-inline"&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="0693p000008uNblAAE.jpg"&gt;&lt;img src="https://community.qlik.com/t5/image/serverpage/image-id/124883i14BE1403E9FA181E/image-size/large?v=v2&amp;amp;px=999" role="button" title="0693p000008uNblAAE.jpg" alt="0693p000008uNblAAE.jpg" /&gt;&lt;/span&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Click the &lt;STRONG&gt;Job&lt;/STRONG&gt; tab, then click &lt;STRONG&gt;Deployment&lt;/STRONG&gt; and notice that the &lt;STRONG&gt;Build Type&lt;/STRONG&gt; is set to &lt;STRONG&gt;Microservice for ESB&lt;/STRONG&gt;.&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Observe the Job design:&lt;/P&gt;
&lt;UL class="lia-list-style-type-circle"&gt;
&lt;LI&gt;Orders service is a REST data service&lt;/LI&gt;
&lt;LI&gt;Fetches all the order details from the database using &lt;STRONG&gt;customerNumber&lt;/STRONG&gt;&lt;/LI&gt;
&lt;LI&gt;Uses three different context environments namely STUDIO, QA, and PROD&lt;BR /&gt;&lt;BR /&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Run the Job in Studio. By default, the service listens on port &lt;STRONG&gt;8090&lt;/STRONG&gt;.&lt;/P&gt;
&lt;/LI&gt;
&lt;/OL&gt;
&lt;H4&gt;&lt;STRONG&gt;&lt;FONT color="#339966"&gt;Microservice Customers&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/H4&gt;
&lt;OL&gt;
&lt;LI&gt;
&lt;P&gt;Open the &lt;STRONG&gt;Customers&lt;/STRONG&gt; microservice.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN class="lia-inline-image-display-wrapper lia-image-align-inline"&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="0693p000008uNeuAAE.jpg"&gt;&lt;img src="https://community.qlik.com/t5/image/serverpage/image-id/124299iCEE4C077CA3CBD26/image-size/large?v=v2&amp;amp;px=999" role="button" title="0693p000008uNeuAAE.jpg" alt="0693p000008uNeuAAE.jpg" /&gt;&lt;/span&gt;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Click the &lt;STRONG&gt;Job&lt;/STRONG&gt; tab, then click &lt;STRONG&gt;Deployment&lt;/STRONG&gt; and notice that the &lt;STRONG&gt;Build Type&lt;/STRONG&gt; is set to &lt;STRONG&gt;Microservice for ESB&lt;/STRONG&gt;.&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Observe the Job design:&lt;/P&gt;
&lt;UL class="lia-list-style-type-circle"&gt;
&lt;LI&gt;
&lt;P&gt;Customers service is a REST data service&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Fetches all the customer details by &lt;STRONG&gt;customerNumber&lt;/STRONG&gt;&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Invokes the Order service and all the orders created by the customer&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Uses three different context environments namely STUDIO, QA, and PROD&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;In the context variables, observe the endpoint of the REST client, for example, the &lt;STRONG&gt;ORDER_SERVICE_CLIENT_URL&lt;/STRONG&gt; parameter&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;The host and port of the ORDER_SERVICE_CLIENT_URL changes for every environment&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;In the &lt;STRONG&gt;PROD &lt;/STRONG&gt;context the host is set with a logical host name, for example, &lt;STRONG&gt;order-service&lt;/STRONG&gt;&lt;/P&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Run the Job in Studio. By default, the service listens on port &lt;STRONG&gt;8090&lt;/STRONG&gt; and fails if the port is already in use.&lt;/P&gt;
&lt;/LI&gt;
&lt;/OL&gt;
&lt;H4&gt;&lt;STRONG&gt;&lt;FONT color="#339966"&gt;Build the GetOrder services&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/H4&gt;
&lt;OL&gt;
&lt;LI&gt;
&lt;P&gt;&lt;A id="Step_1" target="_blank"&gt;&lt;/A&gt;In the Studio, right-click the &lt;STRONG&gt;Customers&lt;/STRONG&gt; microservice, select &lt;STRONG&gt;Build Job&lt;/STRONG&gt;, and save the build to a folder demo.&lt;/P&gt;
&lt;P&gt;&lt;SPAN class="lia-inline-image-display-wrapper lia-image-align-inline"&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="0693p000008uNfmAAE.jpg"&gt;&lt;img src="https://community.qlik.com/t5/image/serverpage/image-id/124637iAD83A5AED2650BDF/image-size/large?v=v2&amp;amp;px=999" role="button" title="0693p000008uNfmAAE.jpg" alt="0693p000008uNfmAAE.jpg" /&gt;&lt;/span&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Follow the process in Step 1, and build a Job for &lt;STRONG&gt;Orders&lt;/STRONG&gt;.&lt;/P&gt;
&lt;P&gt;&lt;SPAN class="lia-inline-image-display-wrapper lia-image-align-inline"&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="0693p000008uNYDAA2.jpg"&gt;&lt;img src="https://community.qlik.com/t5/image/serverpage/image-id/122300i5FAA577B91D11A0E/image-size/large?v=v2&amp;amp;px=999" role="button" title="0693p000008uNYDAA2.jpg" alt="0693p000008uNYDAA2.jpg" /&gt;&lt;/span&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Launch the Windows Command Prompt and move them into the &lt;STRONG&gt;demo&lt;/STRONG&gt; folder.&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Follow the steps in the next section and run both the microservices.&lt;/P&gt;
&lt;/LI&gt;
&lt;/OL&gt;
&lt;H3&gt;&lt;STRONG&gt;&lt;FONT color="#339966"&gt;Running the GetOrder service as standalone microservice with QA context&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/H3&gt;
&lt;OL&gt;
&lt;LI&gt;
&lt;P&gt;Run the &lt;STRONG&gt;Orders&lt;/STRONG&gt; service:&lt;/P&gt;
&lt;PRE&gt;Java -jar Orders_0.1.jar --server.port=8065 --spring.config.location=classpath:config/contexts/ &lt;STRONG&gt;--spring.config.name=QA&lt;/STRONG&gt;&lt;/PRE&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Run the &lt;STRONG&gt;Customers&lt;/STRONG&gt; service:&lt;/P&gt;
&lt;PRE&gt;Java -jar Customers_0.1.jar --server.port=8066 --spring.config.location=classpath:config/contexts/ &lt;STRONG&gt;--spring.config.name=QA&lt;/STRONG&gt;&lt;/PRE&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Invoke the &lt;STRONG&gt;Customers&lt;/STRONG&gt; service using Talend API Tester or in a browser, enter the following URL and click the &lt;STRONG&gt;Send&lt;/STRONG&gt; button:&lt;/P&gt;
&lt;PRE&gt;http://localhost:8066/services/customer/103&lt;/PRE&gt;
&lt;P&gt;&lt;SPAN class="lia-inline-image-display-wrapper lia-image-align-inline"&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="0693p000008uNaiAAE.jpg"&gt;&lt;img src="https://community.qlik.com/t5/image/serverpage/image-id/125086i73946E1EBAA4319F/image-size/large?v=v2&amp;amp;px=999" role="button" title="0693p000008uNaiAAE.jpg" alt="0693p000008uNaiAAE.jpg" /&gt;&lt;/span&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Notice that the GetOrder service returns all the orders created by a customer upon call.&lt;/P&gt;
&lt;P&gt;&lt;SPAN class="lia-inline-image-display-wrapper lia-image-align-inline"&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="0693p000008uNeVAAU.jpg"&gt;&lt;img src="https://community.qlik.com/t5/image/serverpage/image-id/124870i6EE3BE386C60467A/image-size/large?v=v2&amp;amp;px=999" role="button" title="0693p000008uNeVAAU.jpg" alt="0693p000008uNeVAAU.jpg" /&gt;&lt;/span&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/LI&gt;
&lt;/OL&gt;
&lt;H3 class="lia-message-template-content-zone"&gt;&lt;STRONG&gt;&lt;FONT color="#339966"&gt;Use case: Order processing with Istio and Kubernetes&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/H3&gt;
&lt;P&gt;Istio is an open-source framework that provides a service mesh for microservices and can be installed on Kubernetes.&lt;/P&gt;
&lt;H4&gt;&lt;STRONG&gt;&lt;FONT color="#339966"&gt;Why Istio with GetOrder Services?&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/H4&gt;
&lt;P&gt;Istio can provide many additional capabilities to the Talend microservices by following a few best practices and without any additional changes to the Job designed in Talend Studio.&lt;/P&gt;
&lt;H3&gt;&lt;STRONG&gt;&lt;FONT color="#339966"&gt;Adding Istio capabilities for GetOrder services&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/H3&gt;
&lt;P&gt;With Istio sidecar injection, a sidecar proxy &lt;STRONG&gt;Envoy&lt;/STRONG&gt; is deployed in front of the GetOrder services (customer-service, order-service) and provides Istio Envoy capabilities. For more information on Envoy and its features, read the Istio &lt;A href="https://www.envoyproxy.io/docs/envoy/latest/" target="_blank" rel="noopener"&gt;Envoy&lt;/A&gt; documentation.&lt;/P&gt;
&lt;H4&gt;&lt;STRONG&gt;&lt;FONT color="#339966"&gt;Service Discovery&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/H4&gt;
&lt;P&gt;Service discovery explains how a service register and deregister its endpoint when deployed on a distributed cluster and how the clients/services can dynamically locate the endpoint URLs. Istio &lt;A title="Istio Traffic Management" href="https://istio.io/docs/concepts/traffic-management/" target="_blank" rel="noopener"&gt;Pilot&lt;/A&gt; has a built-in Kubernetes adapter and watches the Kubernetes API server for pod registrations and deregistrations.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Note&lt;/STRONG&gt;: Istio service discovery leverages the discovery features provided by platforms like Kubernetes.&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN class="lia-inline-image-display-wrapper lia-image-align-inline"&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="0693p000008uNfrAAE.jpg"&gt;&lt;img src="https://community.qlik.com/t5/image/serverpage/image-id/122839iFA740ACEC36333CB/image-size/large?v=v2&amp;amp;px=999" role="button" title="0693p000008uNfrAAE.jpg" alt="0693p000008uNfrAAE.jpg" /&gt;&lt;/span&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;The diagram above shows how Istio:&lt;/P&gt;
&lt;UL class="lia-list-style-type-circle"&gt;
&lt;LI&gt;
&lt;P&gt;Adds &lt;STRONG&gt;Envoy&lt;/STRONG&gt; proxy in front of the Talend microservice application pods&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Service discovery works for locating the services internally with in the mesh&lt;/P&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;For example, the &lt;STRONG&gt;customer-service&lt;/STRONG&gt; Pods in namespace &lt;STRONG&gt;talend-istio (1)&lt;/STRONG&gt; dynamically discovers the endpoint URL of the &lt;STRONG&gt;order-service (4)&lt;/STRONG&gt; by making a name lookup (&lt;STRONG&gt;order&lt;/STRONG&gt; &lt;STRONG&gt;-service&lt;/STRONG&gt; or &lt;STRONG&gt;order-service.talend-istio) &lt;/STRONG&gt; using the Istio &lt;STRONG&gt;Kubernetes adapter&lt;/STRONG&gt; &lt;STRONG&gt;(2)&lt;/STRONG&gt; and the &lt;STRONG&gt;Envoy&lt;/STRONG&gt; proxy &lt;STRONG&gt;(3)&lt;/STRONG&gt;.&lt;/P&gt;
&lt;P&gt;For more information, read &lt;A title="Discovering services" href="https://kubernetes.io/docs/concepts/services-networking/service/#discovering-services" target="_blank" rel="noopener"&gt;Discovering services&lt;/A&gt; in the Kubernetes using DNS documentation.&lt;/P&gt;
&lt;H4&gt;&lt;STRONG&gt;&lt;FONT color="#339966"&gt;Traffic management&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/H4&gt;
&lt;P&gt;The advantage of Istio Traffic management:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;P&gt;It allows developers and deployment teams to easily configure routing rules and control the flow of traffic and API calls between services.&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Operation teams can apply new rules or modifications without stopping the services.&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Istio Pilot watches for changes in routing rules and dynamically propagates new changes to the Envoy proxy.&lt;/P&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;H4&gt;&lt;STRONG&gt;&lt;FONT color="#339966"&gt;Gateways&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/H4&gt;
&lt;P&gt;The Gateway manages external Ingress traffic to our service mesh. It supports multiple protocols and can be configured to allow traffic on specific ports.&lt;/P&gt;
&lt;H4&gt;&lt;FONT color="#339966"&gt;&lt;STRONG&gt;Virtual services&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/H4&gt;
&lt;P&gt;A virtual service allows to configure an ordered list of routing rules and decides control how the Envoy proxy should route the traffic.&lt;/P&gt;
&lt;P&gt;The following diagram explains how:&lt;/P&gt;
&lt;UL class="lia-list-style-type-circle"&gt;
&lt;LI&gt;
&lt;P&gt;External traffic is allowed to the service mesh using the Ingress Gateway&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Define routing rules in a virtual service&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Apply rules and impose match conditions on the request URI&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Route traffic to one or more destinations&lt;/P&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;Refer to this &lt;STRONG&gt;VirtualService&lt;/STRONG&gt; configuration settings in the &lt;STRONG&gt;Service_&lt;/STRONG&gt;&lt;STRONG&gt;Discovery.yaml&lt;/STRONG&gt; file.&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN class="lia-inline-image-display-wrapper lia-image-align-inline"&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="0693p000008uNbWAAU.jpg"&gt;&lt;img src="https://community.qlik.com/t5/image/serverpage/image-id/124274i64E222AF4C499077/image-size/large?v=v2&amp;amp;px=999" role="button" title="0693p000008uNbWAAU.jpg" alt="0693p000008uNbWAAU.jpg" /&gt;&lt;/span&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H4&gt;&lt;STRONG&gt;&lt;FONT color="#339966"&gt;Destination rules&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/H4&gt;
&lt;P&gt;After enforcing the routing rules on the incoming traffic with virtual services, additional policies can be applied using destination rules.&lt;/P&gt;
&lt;P&gt;For example, the incoming traffic to &lt;STRONG&gt;order-service&lt;/STRONG&gt; can be routed to different versions (v1, v2) of the same service using &lt;STRONG&gt;subsets&lt;/STRONG&gt; by specifying &lt;STRONG&gt;match &lt;/STRONG&gt;conditions and &lt;STRONG&gt;weights&lt;/STRONG&gt;.&lt;/P&gt;
&lt;P&gt;Refer to this &lt;STRONG&gt;VirtualService&lt;/STRONG&gt; and &lt;STRONG&gt;DestinationRule&lt;/STRONG&gt; configuration entries in the &lt;STRONG&gt;CanaryDeployments.yaml&lt;/STRONG&gt; file.&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN class="lia-inline-image-display-wrapper lia-image-align-inline"&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="0693p000008uNfwAAE.jpg"&gt;&lt;img src="https://community.qlik.com/t5/image/serverpage/image-id/121881iA152D986323BF95E/image-size/large?v=v2&amp;amp;px=999" role="button" title="0693p000008uNfwAAE.jpg" alt="0693p000008uNfwAAE.jpg" /&gt;&lt;/span&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H4&gt;&lt;STRONG&gt;&lt;FONT color="#339966"&gt;Service Entry&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/H4&gt;
&lt;P&gt;&lt;STRONG&gt;ServiceEntry&lt;/STRONG&gt; enables adding additional entries into the Istio internal service registry so that auto-discovered services in the mesh can access/route to these manually specified services.&lt;/P&gt;
&lt;P&gt;In the GetOrder use case, the Talend microservice residing inside the service mesh need access to an external RDS MySQL instance.&lt;/P&gt;
&lt;P&gt;Refer to this &lt;STRONG&gt;ServiceEntry&lt;/STRONG&gt; configuration in the &lt;STRONG&gt;Service_&lt;/STRONG&gt;&lt;STRONG&gt;Discovery.yaml&lt;/STRONG&gt; file.&lt;/P&gt;
&lt;PRE&gt;apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
name: mysql-external
spec:
hosts:
- istio-customer-db.some_id.eu-central-1.rds.amazonaws.com
ports:
- name: tcp
number: 3306
protocol: tcp
location: MESH_EXTERNAL
resolution: DNS&lt;/PRE&gt;
&lt;H3&gt;&lt;FONT color="#339966"&gt;&lt;STRONG&gt;Logical architecture with Istio and Talend microservices&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/H3&gt;
&lt;P&gt;The microservices in the GetOrder use case are deployed to Kubernetes using Istio sidecar injection.&lt;/P&gt;
&lt;P&gt;The following diagram depicts a high-level logical architecture of the complete setup.&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN class="lia-inline-image-display-wrapper lia-image-align-inline"&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="0693p000008uNe7AAE.jpg"&gt;&lt;img src="https://community.qlik.com/t5/image/serverpage/image-id/125070i4C0EB218F353D255/image-size/large?v=v2&amp;amp;px=999" role="button" title="0693p000008uNe7AAE.jpg" alt="0693p000008uNe7AAE.jpg" /&gt;&lt;/span&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H4&gt;&lt;FONT color="#339966"&gt;&lt;STRONG&gt;Publishing GetOrder microservices to a container registry&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/H4&gt;
&lt;P&gt;To publish the GetOrder microservices to a container registry follow the instructions in the applicable article:&amp;nbsp;&lt;/P&gt;
&lt;UL class="lia-list-style-type-circle"&gt;
&lt;LI&gt;&lt;A href="https://community.qlik.com/t5/Design-and-Development/Managing-Talend-microservices-with-Istio-service-mesh-on-Azure/ta-p/2151304#:~:text=Publish%20Talend%20microservices%20to%20Azure%20Container%20Registry" target="_blank" rel="noopener"&gt;Publish Talend microservices to Azure Container Registry&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://community.qlik.com/t5/Design-and-Development/Managing-Talend-microservices-with-Istio-service-mesh-on-Google/ta-p/2151303#:~:text=Publish%20Talend%20microservices%20to%20Google%20Container%20Registry" target="_blank" rel="noopener"&gt;Publish Talend microservices to Google Container Registry&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://community.qlik.com/t5/Design-and-Development/Managing-Talend-microservices-with-Istio-service-mesh-on-Amazon/ta-p/2151301#:~:text=Publish%20Talend%20microservices%20to%20Amazon%20Elastic%20Container%20Registry%20(ECR)" target="_blank" rel="noopener"&gt;Publish Talend microservices to Amazon Elastic Container Registry (ECR)&lt;/A&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;H3&gt;&lt;FONT color="#339966"&gt;&lt;STRONG&gt;Deploying GetOrder microservices with Istio on Kubernetes&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/H3&gt;
&lt;P&gt;Deploying the GetOrder services on a Kubernetes cluster requires the following resources:&lt;/P&gt;
&lt;UL class="lia-list-style-type-circle"&gt;
&lt;LI&gt;
&lt;P&gt;Kubernetes resource files (YAML)&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Cloud / SDK shell&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Kubernetes command-line tool (kubectl)&lt;/P&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;These are available in the demo Kubernetes resource file you download in the Prerequisites section of this article.&lt;/P&gt;
&lt;H3&gt;&lt;STRONG&gt;&lt;FONT color="#339966"&gt;Set Talend context environment&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/H3&gt;
&lt;P&gt;The GetOrder services used in this article use Talend context environment and context variables, for example, the Prod context environment and context variables are used in this article for microservices deployments on a Kubernetes cluster.&lt;/P&gt;
&lt;P&gt;Unzip the demo Kubernetes resource file you downloaded in the &lt;A href="#Prerequisites" target="_self"&gt;Prerequisites&lt;/A&gt; section of this article.&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;
&lt;P&gt;Open the resources files for one of the Kubernetes clusters.&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Search for the API type &lt;STRONG&gt;Deployment&lt;/STRONG&gt;.&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Observe the value of the &lt;STRONG&gt;spring.config.location&lt;/STRONG&gt; property.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;spring.config.location&lt;/STRONG&gt; is set with the classpath location of Talend context environment properties file, for example, PROD.properties&lt;/P&gt;
&lt;PRE&gt;command: ["/bin/sh", "/maven/Customers/Customers_run.sh"]
args: ["--&lt;STRONG&gt;spring.config.location&lt;/STRONG&gt;=classpath:config/contexts/&lt;STRONG&gt;PROD.properties&lt;/STRONG&gt;"]&lt;/PRE&gt;
&lt;/LI&gt;
&lt;/OL&gt;
&lt;H4&gt;&lt;STRONG&gt;&lt;FONT color="#339966"&gt;Enable Istio sidecar injection at the namespace level&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/H4&gt;
&lt;OL&gt;
&lt;LI&gt;
&lt;P&gt;Connect to the cloud shell, create a namespace called &lt;STRONG&gt;talend-istio&lt;/STRONG&gt;:&lt;/P&gt;
&lt;PRE&gt;kubectl create ns &lt;STRONG&gt;talend-istio&lt;/STRONG&gt;&lt;/PRE&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Enable Istio sidecars injection on the new namespace:&lt;/P&gt;
&lt;PRE&gt;kubectl label namespace &lt;STRONG&gt;talend-istio&lt;/STRONG&gt; istio-injection=enabled&lt;/PRE&gt;
&lt;/LI&gt;
&lt;/OL&gt;
&lt;H4&gt;&lt;STRONG&gt;&lt;FONT color="#339966"&gt;Deploy the GetOrder services using a Kubernetes resource file&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/H4&gt;
&lt;OL&gt;
&lt;LI&gt;
&lt;P&gt;Using the &lt;STRONG&gt;kubectl&lt;/STRONG&gt; utility, execute the &lt;STRONG&gt;apply&lt;/STRONG&gt; command along with the resource file.&lt;/P&gt;
&lt;PRE&gt;&lt;STRONG&gt;kubectl apply&lt;/STRONG&gt; -n talend-istio -f &lt;STRONG&gt;FILE_NAME&lt;/STRONG&gt;&lt;/PRE&gt;
&lt;P&gt;&lt;SPAN class="lia-inline-image-display-wrapper lia-image-align-inline"&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="0693p000008uNg1AAE.jpg"&gt;&lt;img src="https://community.qlik.com/t5/image/serverpage/image-id/122612iC8BABB1AABCBD81B/image-size/large?v=v2&amp;amp;px=999" role="button" title="0693p000008uNg1AAE.jpg" alt="0693p000008uNg1AAE.jpg" /&gt;&lt;/span&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;From the cloud / SDK shell, observe that the Status of the pods in the &lt;STRONG&gt;talend-istio&lt;/STRONG&gt; namespace is &lt;STRONG&gt;Running&lt;/STRONG&gt;.&lt;/P&gt;
&lt;PRE&gt;kubectl get pods -n talend-istio&lt;/PRE&gt;
&lt;P&gt;&lt;SPAN class="lia-inline-image-display-wrapper lia-image-align-inline"&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="0693p000008uNg6AAE.jpg"&gt;&lt;img src="https://community.qlik.com/t5/image/serverpage/image-id/123004i252AA201ABD36D1A/image-size/large?v=v2&amp;amp;px=999" role="button" title="0693p000008uNg6AAE.jpg" alt="0693p000008uNg6AAE.jpg" /&gt;&lt;/span&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Observe the External-IP associated with the &lt;STRONG&gt;istio-ingressgateway&lt;/STRONG&gt;.&lt;/P&gt;
&lt;PRE&gt;kubectl -n istio-system get service istio-ingressgateway&lt;/PRE&gt;
&lt;P&gt;&lt;SPAN class="lia-inline-image-display-wrapper lia-image-align-inline"&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="0693p000008uNgBAAU.jpg"&gt;&lt;img src="https://community.qlik.com/t5/image/serverpage/image-id/124546iC55C521CA0C76008/image-size/large?v=v2&amp;amp;px=999" role="button" title="0693p000008uNgBAAU.jpg" alt="0693p000008uNgBAAU.jpg" /&gt;&lt;/span&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Note&lt;/STRONG&gt;: The IP address assigned to &lt;STRONG&gt;istio-ingressgateway&lt;/STRONG&gt; is the same as the IP address of the external LoadBalancer.&lt;/P&gt;
&lt;/LI&gt;
&lt;/OL&gt;
&lt;H4&gt;&lt;STRONG&gt;&lt;FONT color="#339966"&gt;Undeploy the GetOrder services using a Kubernetes resource file&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/H4&gt;
&lt;OL&gt;
&lt;LI&gt;
&lt;P&gt;Using the &lt;STRONG&gt;kubectl&lt;/STRONG&gt; utility, execute the &lt;STRONG&gt;delete&lt;/STRONG&gt; command along with the resource file.&lt;/P&gt;
&lt;PRE&gt;kubectl delete -n talend-istio -f FILE_NAME&lt;/PRE&gt;
&lt;P&gt;&lt;SPAN class="lia-inline-image-display-wrapper lia-image-align-inline"&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="0693p000008uNgGAAU.jpg"&gt;&lt;img src="https://community.qlik.com/t5/image/serverpage/image-id/121788i66018E924D03AFD7/image-size/large?v=v2&amp;amp;px=999" role="button" title="0693p000008uNgGAAU.jpg" alt="0693p000008uNgGAAU.jpg" /&gt;&lt;/span&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;From the cloud / SDK shell, observe that the pods in the &lt;STRONG&gt;talend-istio&lt;/STRONG&gt; namespace were deleted.&lt;/P&gt;
&lt;PRE&gt;kubectl get pods -n talend-istio&lt;/PRE&gt;
&lt;/LI&gt;
&lt;/OL&gt;
&lt;H3&gt;&lt;STRONG&gt;&lt;FONT color="#339966"&gt;Demo&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/H3&gt;
&lt;P&gt;The demo uses Istio Dashboards for Monitoring, execute the platform-specific instructions, and open the dashboards for Kiali, Grafana, and Jaeger:&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;A title="Launching Istio monitoring dashboards for GKE" href="https://community.qlik.com/t5/Design-and-Development/Managing-Talend-microservices-with-Istio-service-mesh-on-Google/ta-p/2151303#:~:text=Launching%20Istio%20monitoring%20dashboards%20for%20GKE" target="_blank" rel="noopener"&gt;Launching Istio monitoring dashboards for GKE&lt;/A&gt;&lt;BR /&gt;&lt;A title="Launching Istio monitoring dashboards for AKS" href="https://community.qlik.com/t5/Design-and-Development/Managing-Talend-microservices-with-Istio-service-mesh-on-Azure/ta-p/2151304#:~:text=Launching%20Istio%20monitoring%20dashboards%20for%20AKS" target="_blank" rel="noopener"&gt;Launching Istio monitoring dashboards for AKS&lt;/A&gt;&lt;BR /&gt;&lt;A title="Launch Istio monitoring dashboards for AWS" href="https://community.qlik.com/t5/Design-and-Development/Managing-Talend-microservices-with-Istio-service-mesh-on-Amazon/ta-p/2151301#:~:text=Launching%20Istio%20monitoring%20dashboards%20for%20AWS" target="_blank" rel="noopener"&gt;Launching Istio monitoring dashboards for AWS&lt;/A&gt;&lt;/P&gt;
&lt;H3&gt;&lt;STRONG&gt;&lt;FONT color="#339966"&gt;Service discovery and routing&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/H3&gt;
&lt;OL&gt;
&lt;LI&gt;
&lt;P&gt;Using the &lt;STRONG&gt;kubectl&lt;/STRONG&gt; utility, execute the &lt;STRONG&gt;apply&lt;/STRONG&gt; command along with the resource file.&lt;/P&gt;
&lt;PRE&gt;kubectl apply -n talend-istio -f Service_Discovery.yaml&lt;/PRE&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Before executing the &lt;STRONG&gt;apply&lt;/STRONG&gt; command download and modify the cloud-specific template files, and make the following changes:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;
&lt;P&gt;Search for the API type &lt;STRONG&gt;Deployment&lt;/STRONG&gt;, replace the value in the &lt;STRONG&gt;image&lt;/STRONG&gt; property with your registry location URL:&lt;/P&gt;
&lt;PRE&gt;image: &lt;STRONG&gt;REPLACE_WITH_YOUR_RESPOSITORY_URL/k8s_microservice/customer/microservices/orders:0.2.0&lt;/STRONG&gt;&lt;/PRE&gt;
&lt;P&gt;If you publish the images to Azure Container Registry, then &lt;A href="https://community.qlik.com/t5/Design-and-Development/Managing-Talend-microservices-with-Istio-service-mesh-on-Azure/ta-p/2151304#:~:text=Using%20Secret%20in%20the%20Kubernetes%20resource%20files" target="_blank" rel="noopener"&gt;Use Kubernetes Secrets in the resource files&lt;/A&gt; in the API of type &lt;STRONG&gt;Deployment&lt;/STRONG&gt;, for more detailed steps follow the section &lt;A href="https://community.qlik.com/t5/Design-and-Development/Managing-Talend-microservices-with-Istio-service-mesh-on-Amazon/ta-p/2151301#:~:text=Authentication%20with%20Amazon%20Elastic%20Container%20Registry%20from%20EKS" target="_blank" rel="noopener"&gt;Authentication with Azure Container Registry from AKS using Service principal&lt;/A&gt;.&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Search for the API type &lt;STRONG&gt;ServiceEntry&lt;/STRONG&gt;, replace the &lt;STRONG&gt;hosts&lt;/STRONG&gt; and &lt;STRONG&gt;number&lt;/STRONG&gt; property values with the URL and port number of an external database.&lt;/P&gt;
&lt;PRE&gt;&lt;STRONG&gt;hosts:
- istio-customer-db.some_id.eu-central-1.rds.amazonaws.com&lt;/STRONG&gt;
ports:
- name: tcp
&lt;STRONG&gt;number: 3306&lt;/STRONG&gt;&lt;/PRE&gt;
&lt;/LI&gt;
&lt;/OL&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;From the cloud / SDK shell, observe that the &lt;STRONG&gt;Status&lt;/STRONG&gt; of the pods in the &lt;STRONG&gt;talend-istio&lt;/STRONG&gt; namespace is &lt;STRONG&gt;Running&lt;/STRONG&gt;.&lt;/P&gt;
&lt;PRE&gt;kubectl get pods -n talend-istio&lt;/PRE&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;From your local machine (Windows / Linux), connect to &lt;STRONG&gt;Kiali,&lt;/STRONG&gt; observe that there are two applications in the &lt;STRONG&gt;talend-istio&lt;/STRONG&gt; namespace, and there is no traffic.&lt;/P&gt;
&lt;P&gt;&lt;SPAN class="lia-inline-image-display-wrapper lia-image-align-inline"&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="0693p000008uNQ4AAM.jpg"&gt;&lt;img src="https://community.qlik.com/t5/image/serverpage/image-id/124450i7FCD56B4BD966867/image-size/large?v=v2&amp;amp;px=999" role="button" title="0693p000008uNQ4AAM.jpg" alt="0693p000008uNQ4AAM.jpg" /&gt;&lt;/span&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Invoke the &lt;STRONG&gt;Customers&lt;/STRONG&gt; service endpoint using Talend API Tester, enter the following URL, click the &lt;STRONG&gt;Send&lt;/STRONG&gt; button, and observe the response.&lt;/P&gt;
&lt;PRE&gt;http://REPLACE_WITH_YOUR_INGRESS_EXTERNAL_IP/customer/103&lt;/PRE&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Create more load on the &lt;STRONG&gt;Customers&lt;/STRONG&gt; service, invoke the &lt;STRONG&gt;Customers&lt;/STRONG&gt; service endpoint by clicking the &lt;STRONG&gt;Send&lt;/STRONG&gt; button 4 to 5 times. Notice that the dashboard detects some traffic.&lt;/P&gt;
&lt;P&gt;&lt;SPAN class="lia-inline-image-display-wrapper lia-image-align-inline"&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="0693p000008uNgQAAU.jpg"&gt;&lt;img src="https://community.qlik.com/t5/image/serverpage/image-id/123692i6452336D873529E7/image-size/large?v=v2&amp;amp;px=999" role="button" title="0693p000008uNgQAAU.jpg" alt="0693p000008uNgQAAU.jpg" /&gt;&lt;/span&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;In the Dashboard, from the menu on the left, click &lt;STRONG&gt;Graph&lt;/STRONG&gt;, then select the &lt;STRONG&gt;Workload&lt;/STRONG&gt; graph.&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;
&lt;P&gt;In the &lt;STRONG&gt;Workload&lt;/STRONG&gt; graph, observe the last 5 minutes of traffic.&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Notice that the services are arranged in a sequence following their order of invocation, for example, &lt;STRONG&gt;istio-ingressgateway&lt;/STRONG&gt; &amp;gt; &lt;STRONG&gt;customer-service proxy&lt;/STRONG&gt; &amp;gt; &lt;STRONG&gt;customer-service application&lt;/STRONG&gt; &amp;gt; &lt;STRONG&gt;istio-customer-db&lt;/STRONG&gt; &amp;gt; &lt;STRONG&gt;order-service proxy&lt;/STRONG&gt; &amp;gt; then &lt;STRONG&gt;order-service application&lt;/STRONG&gt;.&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Observe that the HTTP traffic is &lt;STRONG&gt;green&lt;/STRONG&gt;, indicating there are no failures.&lt;/P&gt;
&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&lt;SPAN class="lia-inline-image-display-wrapper lia-image-align-inline"&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="0693p000008uNfiAAE.jpg"&gt;&lt;img src="https://community.qlik.com/t5/image/serverpage/image-id/122479i9325172DE2745FAD/image-size/large?v=v2&amp;amp;px=999" role="button" title="0693p000008uNfiAAE.jpg" alt="0693p000008uNfiAAE.jpg" /&gt;&lt;/span&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Click the &lt;STRONG&gt;Namespace&lt;/STRONG&gt; down arrow next &lt;STRONG&gt;talend-istio&lt;/STRONG&gt;, and add the &lt;STRONG&gt;istio-system&lt;/STRONG&gt; namespace.&lt;/P&gt;
&lt;UL class="lia-list-style-type-circle"&gt;
&lt;LI&gt;Review the &lt;STRONG&gt;Istio service&lt;/STRONG&gt; graph, and notice that the istio-telemetry service is added to the graph&lt;/LI&gt;
&lt;LI&gt;istio-telemetry gathers metrics data from the sidecars customer-service and order-service&lt;BR /&gt;&lt;BR /&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;SPAN class="lia-inline-image-display-wrapper lia-image-align-inline"&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="0693p000008uNgVAAU.jpg"&gt;&lt;img src="https://community.qlik.com/t5/image/serverpage/image-id/124572iE586BCBBE4AEE5B2/image-size/large?v=v2&amp;amp;px=999" role="button" title="0693p000008uNgVAAU.jpg" alt="0693p000008uNgVAAU.jpg" /&gt;&lt;/span&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;From your local machine (Windows / Linux), open the Google Cloud SDK shell, then using local port forwarding, connect to &lt;STRONG&gt;Grafana&lt;/STRONG&gt;. In the &lt;STRONG&gt;Istio Workload Dashboard&lt;/STRONG&gt;, observe the request/response &lt;STRONG&gt;duration&lt;/STRONG&gt; and &lt;STRONG&gt;size&lt;/STRONG&gt;.&lt;/P&gt;
&lt;P&gt;&lt;SPAN class="lia-inline-image-display-wrapper lia-image-align-inline"&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="0693p000008uNdhAAE.jpg"&gt;&lt;img src="https://community.qlik.com/t5/image/serverpage/image-id/122104iF37771381808BA8C/image-size/large?v=v2&amp;amp;px=999" role="button" title="0693p000008uNdhAAE.jpg" alt="0693p000008uNdhAAE.jpg" /&gt;&lt;/span&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;From your local machine (Windows / Linux), connect to &lt;STRONG&gt;Jaeger&lt;/STRONG&gt;. Find &lt;STRONG&gt;Traces&lt;/STRONG&gt; for customer-service, observe the dependency between the services and latency.&lt;/P&gt;
&lt;P&gt;&lt;SPAN class="lia-inline-image-display-wrapper lia-image-align-inline"&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="0693p000008uNgaAAE.jpg"&gt;&lt;img src="https://community.qlik.com/t5/image/serverpage/image-id/123147i44403051DC6EC575/image-size/large?v=v2&amp;amp;px=999" role="button" title="0693p000008uNgaAAE.jpg" alt="0693p000008uNgaAAE.jpg" /&gt;&lt;/span&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;STRONG&gt;Note&lt;/STRONG&gt;: Applications must manually propagate appropriate b3 HTTP headers for correlating spans into a single trace. For more information, read &lt;A title="Trace context propagation" href="https://istio.io/docs/tasks/observability/distributed-tracing/overview/#trace-context-propagation" target="_blank" rel="noopener"&gt;Trace context propagation&lt;/A&gt; and Zipkin &lt;A title="Open Zipkin b3-propagation" href="https://github.com/openzipkin/b3-propagation" target="_blank" rel="noopener"&gt;b3-propagation&lt;/A&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;H3&gt;&lt;FONT color="#339966"&gt;&lt;STRONG&gt;Recovery failures&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/H3&gt;
&lt;P&gt;This section helps you understand how Istio handles recovery failures such as faults, timeouts, and retries by enhancing the configuration from the &lt;A href="#Service_discovery_and_routing" target="_self"&gt;Service discovery and routing&lt;/A&gt; section of this article.&lt;/P&gt;
&lt;P&gt;In this scenario, assume the order-service runs CPU intensive tasks and not accepting new requests. To understand this scenario, configure the Virtual service as below:&lt;/P&gt;
&lt;UL class="lia-list-style-type-circle"&gt;
&lt;LI&gt;
&lt;P&gt;Configure Istio to create a delay of two secs before routing the request to &lt;STRONG&gt;order-service&lt;/STRONG&gt;&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;&lt;STRONG&gt;Customer-service&lt;/STRONG&gt; timeouts due to the latency induced by &lt;STRONG&gt;order-service&lt;/STRONG&gt;&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;On timeout, &lt;STRONG&gt;customer-service&lt;/STRONG&gt; performs a retry&lt;/P&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;OL&gt;
&lt;LI&gt;
&lt;P&gt;Using the &lt;STRONG&gt;kubectl&lt;/STRONG&gt; utility, execute the &lt;STRONG&gt;delete&lt;/STRONG&gt; command and clean the previous deployments:&lt;/P&gt;
&lt;PRE&gt;kubectl delete -n talend-istio -f Service_Discovery.yaml&lt;/PRE&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Using the &lt;STRONG&gt;kubectl&lt;/STRONG&gt; utility, execute the &lt;STRONG&gt;apply&lt;/STRONG&gt; command along with the resource file:&lt;/P&gt;
&lt;PRE&gt;kubectl apply -n talend-istio -f RecoveryFailures.yaml&lt;/PRE&gt;
&lt;P&gt;&lt;STRONG&gt;Note:&lt;/STRONG&gt; Before executing the &lt;STRONG&gt;apply&lt;/STRONG&gt; command, modify the &lt;STRONG&gt;YAML&lt;/STRONG&gt; file for environment-specific changes as follows:&lt;/P&gt;
&lt;OL class="lia-list-style-type-lower-alpha"&gt;
&lt;LI&gt;
&lt;P&gt;Search for the API type &lt;STRONG&gt;Deployment&lt;/STRONG&gt;, replace the value in the &lt;STRONG&gt;image&lt;/STRONG&gt; property with your registry location URL.&lt;/P&gt;
&lt;PRE&gt;image: &lt;STRONG&gt;eu.gcr.io/customer-success-account_id/k8s_microservice/customer/microservices/orders:0.2.0&lt;/STRONG&gt;&lt;/PRE&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Search for the API type &lt;STRONG&gt;ServiceEntry&lt;/STRONG&gt;, replace the &lt;STRONG&gt;hosts&lt;/STRONG&gt;, and &lt;STRONG&gt;number&lt;/STRONG&gt; property values with the URL and port number of an external database.&lt;/P&gt;
&lt;PRE&gt;&lt;STRONG&gt;hosts:
- istio-customer-db.some_id.eu-central-1.rds.amazonaws.com&lt;/STRONG&gt;
ports:
- name: tcp
&lt;STRONG&gt;number: 3306&lt;/STRONG&gt;&lt;/PRE&gt;
&lt;/LI&gt;
&lt;/OL&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;From the cloud / SDK shell, observe that the &lt;STRONG&gt;Status&lt;/STRONG&gt; of the pods in the &lt;STRONG&gt;talend-istio&lt;/STRONG&gt; namespace is &lt;STRONG&gt;Running&lt;/STRONG&gt;.&lt;/P&gt;
&lt;PRE&gt;kubectl get pods -n talend-istio&lt;/PRE&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Invoke the &lt;STRONG&gt;Customer&lt;/STRONG&gt; service endpoint using Talend API Tester, enter the following URL, and observe the response.&lt;/P&gt;
&lt;PRE&gt;http://REPLACE_WITH_YOUR_INGRESS_EXTERNAL_IP/customer/103&lt;/PRE&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Create more load on the &lt;STRONG&gt;Customer&lt;/STRONG&gt; service by clicking the customer-service endpoints 4 to 5 times. Notice that the dashboard detects some traffic.&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;From your local machine (Windows / Linux), open the Google Cloud SDK shell, then using local port forwarding, connect to &lt;STRONG&gt;Kiali&lt;/STRONG&gt;.&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Open the &lt;STRONG&gt;Versioned app &lt;/STRONG&gt;graph, observe the &lt;STRONG&gt;customer-service&lt;/STRONG&gt; is &lt;STRONG&gt;Red&lt;/STRONG&gt; and &lt;STRONG&gt;10%&lt;/STRONG&gt; of the HTTP traffic fails due to timeouts induced on order-service.&lt;/P&gt;
&lt;P&gt;&lt;SPAN class="lia-inline-image-display-wrapper lia-image-align-inline"&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="0693p000008uNgfAAE.jpg"&gt;&lt;img src="https://community.qlik.com/t5/image/serverpage/image-id/122051i54FA3406339CE9FB/image-size/large?v=v2&amp;amp;px=999" role="button" title="0693p000008uNgfAAE.jpg" alt="0693p000008uNgfAAE.jpg" /&gt;&lt;/span&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/LI&gt;
&lt;/OL&gt;
&lt;H3&gt;&lt;FONT color="#339966"&gt;&lt;STRONG&gt;Canary deployments&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/H3&gt;
&lt;OL&gt;
&lt;LI&gt;
&lt;P&gt;Using the &lt;STRONG&gt;kubectl&lt;/STRONG&gt; utility, execute the &lt;STRONG&gt;delete &lt;/STRONG&gt;command and clean the previous deployments.&lt;/P&gt;
&lt;PRE&gt;kubectl delete -n talend-istio -f RecoveryFailures.yaml&lt;/PRE&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Using the &lt;STRONG&gt;kubectl&lt;/STRONG&gt; utility, execute the &lt;STRONG&gt;apply&lt;/STRONG&gt; command along with the resource file.&lt;/P&gt;
&lt;PRE&gt;kubectl apply -n talend-istio -f CanaryDeployments.yaml&lt;/PRE&gt;
&lt;P&gt;&lt;STRONG&gt;Note:&lt;/STRONG&gt; Before executing the &lt;STRONG&gt;apply&lt;/STRONG&gt; command, modify the &lt;STRONG&gt;YAML&lt;/STRONG&gt; file for environment-specific changes as follows:&lt;/P&gt;
&lt;OL class="lia-list-style-type-lower-alpha"&gt;
&lt;LI&gt;
&lt;P&gt;Search for the API type &lt;STRONG&gt;Deployment&lt;/STRONG&gt;, replace the value in the &lt;STRONG&gt;image&lt;/STRONG&gt; property with your registry location URL.&lt;/P&gt;
&lt;PRE&gt;image: &lt;STRONG&gt;eu.gcr.io/customer-success-account_id/k8s_microservice/customer/microservices/orders:0.2.0&lt;/STRONG&gt;&lt;/PRE&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Search for the API type &lt;STRONG&gt;ServiceEntry&lt;/STRONG&gt;, replace the &lt;STRONG&gt;hosts&lt;/STRONG&gt;, and &lt;STRONG&gt;number&lt;/STRONG&gt; property values with the URL and port number of an external database.&lt;/P&gt;
&lt;PRE&gt;&lt;STRONG&gt;hosts:
- istio-customer-db.some_id.eu-central-1.rds.amazonaws.com&lt;/STRONG&gt;
ports:
- name: tcp
&lt;STRONG&gt;number: 3306&lt;/STRONG&gt;&lt;/PRE&gt;
&lt;/LI&gt;
&lt;/OL&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;From the cloud / SDK shell, observe that the Status of the pods in the &lt;STRONG&gt;talend-istio&lt;/STRONG&gt; namespace is &lt;STRONG&gt;Running&lt;/STRONG&gt;.&lt;/P&gt;
&lt;PRE&gt;kubectl get pods -n talend-istio&lt;/PRE&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Invoke the &lt;STRONG&gt;Customer&lt;/STRONG&gt; service endpoint using Talend API Tester, enter the following URL, and observe the response.&lt;/P&gt;
&lt;PRE&gt;http://REPLACE_WITH_YOUR_INGRESS_EXTERNAL_IP/customer/103&lt;/PRE&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Create more load on the &lt;STRONG&gt;Customer&lt;/STRONG&gt; service by clicking the customer-service endpoints 4 to 5 times. Notice that the dashboard detects some traffic.&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;From your local machine (Windows / Linux), open the Google Cloud SDK shell, then using local port forwarding connect to &lt;STRONG&gt;Kiali&lt;/STRONG&gt;.&lt;/P&gt;
&lt;P&gt;&lt;SPAN class="lia-inline-image-display-wrapper lia-image-align-inline"&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="0693p000008uNgkAAE.jpg"&gt;&lt;img src="https://community.qlik.com/t5/image/serverpage/image-id/124791iBC905889ACD679AC/image-size/large?v=v2&amp;amp;px=999" role="button" title="0693p000008uNgkAAE.jpg" alt="0693p000008uNgkAAE.jpg" /&gt;&lt;/span&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;From your local machine (Windows / Linux), open the Google Cloud SDK shell, then using local port forwarding, connect to &lt;STRONG&gt;Grafana&lt;/STRONG&gt;.&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;In the Istio &lt;STRONG&gt;Workload Dashboard&lt;/STRONG&gt;, observe the traffic was split into two versions of the &lt;STRONG&gt;order-service&lt;/STRONG&gt;.&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;&lt;SPAN class="lia-inline-image-display-wrapper lia-image-align-inline"&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="0693p000008uNgpAAE.jpg"&gt;&lt;img src="https://community.qlik.com/t5/image/serverpage/image-id/124031iC3A6A9B860DAC9E1/image-size/large?v=v2&amp;amp;px=999" role="button" title="0693p000008uNgpAAE.jpg" alt="0693p000008uNgpAAE.jpg" /&gt;&lt;/span&gt;&lt;/SPAN&gt;&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/LI&gt;
&lt;/OL&gt;
&lt;H3&gt;&lt;STRONG&gt;&lt;FONT color="#339966"&gt;Conclusion&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/H3&gt;
&lt;P&gt;This article explains how Talend integrates with distributed platforms like Kubernetes and how you can leverage Istio for managing traffic, service discovery, monitoring, and tracing services in a service mesh. Services are designed, developed, and published with the help of Talend Studio.&lt;/P&gt;</description>
      <pubDate>Tue, 23 Jan 2024 02:35:30 GMT</pubDate>
      <guid>https://community.qlik.com/t5/Official-Support-Articles/Talend-ESB-Managing-Talend-microservices-with-Istio-service-mesh/ta-p/2151312</guid>
      <dc:creator>TalendSolutionExpert</dc:creator>
      <dc:date>2024-01-23T02:35:30Z</dc:date>
    </item>
  </channel>
</rss>

