<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Dallin</title>
    <description>The latest articles on Forem by Dallin (@junglekid).</description>
    <link>https://forem.com/junglekid</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1206973%2F824761e3-7c3b-458f-9dea-a9644a0b17d4.jpeg</url>
      <title>Forem: Dallin</title>
      <link>https://forem.com/junglekid</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/junglekid"/>
    <language>en</language>
    <item>
      <title>Using Istio, a Service Mesh, with Amazon Elastic Kubernetes Service (EKS) - Part 3</title>
      <dc:creator>Dallin</dc:creator>
      <pubDate>Tue, 14 Nov 2023 17:24:22 +0000</pubDate>
      <link>https://forem.com/junglekid/using-istio-a-service-mesh-with-amazon-elastic-kubernetes-service-eks-part-3-1in3</link>
      <guid>https://forem.com/junglekid/using-istio-a-service-mesh-with-amazon-elastic-kubernetes-service-eks-part-3-1in3</guid>
      <description>&lt;p&gt;This is the third and final part of the series on Using Istio, a Service Mesh, with Amazon Elastic Kubernetes Service (EKS). In the last two articles, we discussed various topics. These include what Service Mesh is, what Istio is, what technologies we used, the prerequisites and architecture overview, reviewed the Terraform code used to deploy the AWS resources and successfully deployed the Terraform Code to AWS. We also installed the the Istio CLI tool, istioctl, ran the "configure.sh" script to configure the Flux Repository, and installed Flux to the Amazon EKS cluster.  Finally, we reviewed the Addons and Applications managed by Flux, discussed the Istio Components and Addons used by Istio, and reviewed how Istio works with Applications and Microservices.&lt;/p&gt;

&lt;p&gt;In this final and third article, we will cover the following topics.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Access the Applications managed by Flux&lt;/li&gt;
&lt;li&gt;Demonstrate how Istio works&lt;/li&gt;
&lt;li&gt;Review the Istio Addons&lt;/li&gt;
&lt;li&gt;Clean up apps and infrastructure&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can access the code in my &lt;a href="https://github.com/junglekid/aws-eks-istio-lab"&gt;GitHub Repository&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Zd4pT0rd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kefv69nsassdos8t8q57.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Zd4pT0rd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kefv69nsassdos8t8q57.png" alt="Istio and AWS EKS" width="800" height="296"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Access Applications managed by Flux
&lt;/h2&gt;

&lt;p&gt;Let's access the Applications managed by Flux. Retrieve the &lt;strong&gt;&lt;em&gt;public_base_domain_name&lt;/em&gt;&lt;/strong&gt; specified in the "locals.tf" when you ran Terraform earlier.&lt;/p&gt;

&lt;h3&gt;
  
  
  Access Bookinfo App
&lt;/h3&gt;

&lt;p&gt;For the Bookinfo App, you can access the Bookinfo URL "&lt;a href="https://bookinfo"&gt;https://bookinfo&lt;/a&gt;./productpage" in your favorite web browser.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--q05si1JT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3jn3b3zkksx1p7ktx5v5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--q05si1JT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3jn3b3zkksx1p7ktx5v5.png" alt="Bookinfo" width="800" height="522"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Access Podinfo App
&lt;/h3&gt;

&lt;p&gt;For the Podinfo App, you can access the Podinfo URL "&lt;a href="https://podinfo"&gt;https://podinfo&lt;/a&gt;." in your favorite web browser.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--vTLlYj6B--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qzg8q01tqtnunnfx2ekn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vTLlYj6B--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qzg8q01tqtnunnfx2ekn.png" alt="Podinfo" width="800" height="526"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Access Istio Addons
&lt;/h2&gt;

&lt;p&gt;Let's access the Istio Addons before we demonstrate how Istio works. Retrieve the &lt;strong&gt;&lt;em&gt;public_base_domain_name&lt;/em&gt;&lt;/strong&gt; specified in the "locals.tf" when you ran Terraform earlier.&lt;/p&gt;

&lt;h3&gt;
  
  
  Access Kiali Dashboard
&lt;/h3&gt;

&lt;p&gt;To access the Kiali Dashboard, follow these steps.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Access the Kiali URL "&lt;a href="https://kiali"&gt;https://kiali&lt;/a&gt;." in your favorite web browser.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--vNxqxgt_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/be49h9u132cbm9xx5w9h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vNxqxgt_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/be49h9u132cbm9xx5w9h.png" alt="Kiali Login" width="800" height="516"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Generate and retrieve &lt;strong&gt;token&lt;/strong&gt; by running the following command&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl &lt;span class="nt"&gt;-n&lt;/span&gt; istio-system create token kiali-service-account
&lt;/code&gt;&lt;/pre&gt;


&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ADJtSdN4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yrsiwhe4lfgyaftmyoz9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ADJtSdN4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yrsiwhe4lfgyaftmyoz9.png" alt="Kiali Token" width="800" height="68"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Copy and paste the generated token from above to the Kiali Login page.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--PdKg3XDs--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5tognc8f7w5jqe2vluu0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--PdKg3XDs--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5tognc8f7w5jqe2vluu0.png" alt="Kiali Login with Token" width="800" height="520"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Log into the Kiali Dashboard.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--2py7nTS5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wy0l76syqti2kikqrtd0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--2py7nTS5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wy0l76syqti2kikqrtd0.png" alt="Kiali Overview Dashboard after login" width="800" height="522"&gt;&lt;/a&gt;   &lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Access Grafana Dashboard
&lt;/h3&gt;

&lt;p&gt;To access the Grafana Dashboard, follow these steps.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Access the Kiali URL "&lt;a href="https://grafana"&gt;https://grafana&lt;/a&gt;." in your favorite web browser.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Kf0hrXEc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/v1/./images/grafana_login.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Kf0hrXEc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/v1/./images/grafana_login.png" alt="Grafana Login" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Log into Grafana with the following username and password.&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Username: admin&lt;/li&gt;
&lt;li&gt;Password: Grafana&amp;amp;Git0ps&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--XE8xE_1Y--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/v1/./images/grafana_after_login.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--XE8xE_1Y--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/v1/./images/grafana_after_login.png" alt="Grafana After Login" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Demonstrate how Istio works
&lt;/h2&gt;

&lt;p&gt;Now that we know how to access the Applications let's demonstrate how Istio works. We will send several requests to the Bookinfo and Podinfo applications by running curl commands from the terminals or shells. We will do this to simulate enough traffic for Istio and the Istio Addons to capture the network traffic so the dashboards in Kiali and Grafana can display correctly.&lt;/p&gt;

&lt;h2&gt;
  
  
  Populate Data for Kiali and Istio Dashboards in Grafana
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Retrieve the &lt;strong&gt;&lt;em&gt;public_base_domain_name&lt;/em&gt;&lt;/strong&gt; specified in the "locals.tf" when you ran Terraform earlier.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Open two separate terminals or shells.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;NOTE&lt;/strong&gt;: Run these commands as often as you want to populate the data in Kiali and Grafana.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Run the following command in the first terminal or shell to send traffic to the Bookinfo application. Replace  with the actual domain name.&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="k"&gt;for &lt;/span&gt;i &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;1..720&lt;span class="o"&gt;}&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;do &lt;/span&gt;curl &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="nt"&gt;-o&lt;/span&gt; /dev/null &lt;span class="s2"&gt;"https://bookinfo.&amp;lt;public_base_domain_name&amp;gt;/productpage"&lt;/span&gt; &lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;done&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;In the second terminal or shell, run the following command to send traffic to the Podinfo application. Replace  with the actual domain name.&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="k"&gt;for &lt;/span&gt;i &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;1..720&lt;span class="o"&gt;}&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;do &lt;/span&gt;curl &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="nt"&gt;-o&lt;/span&gt; /dev/null &lt;span class="s2"&gt;"https://podinfo.&amp;lt;public_base_domain_name&amp;gt;"&lt;/span&gt; &lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;done&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;It will take 4 to 5 minutes for the above commands to finish.&lt;/p&gt;

&lt;h2&gt;
  
  
  Access and Review Data in Kiali Dashboard
&lt;/h2&gt;

&lt;p&gt;While the commands above run, re-access the Kiali Dashboard and review the data.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Let's change the time range to the last 10 minutes by clicking in the upper right corner of the web page. Click on "Last 1m" to "Last 10m".&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--c2naG8bb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/b5edsq5fp1ljktxbkmwg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--c2naG8bb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/b5edsq5fp1ljktxbkmwg.png" alt="Kiali change to Last 10m" width="800" height="303"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Click on "Graph" on the left side of the Kiali Dashboard.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--7h5lsslM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jheulz9132z7n88cgkkr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--7h5lsslM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jheulz9132z7n88cgkkr.png" alt="Kiali change to Graph" width="800" height="299"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Click on "Select Namespaces" and choose "bookinfo".&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Ok0nhow8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4y8e54cr9ui5lcjr90tc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Ok0nhow8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4y8e54cr9ui5lcjr90tc.png" alt="Kiali Graph Select NS" width="800" height="440"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--8oNmKGj4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lzzyff3chpx5bayrksde.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--8oNmKGj4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lzzyff3chpx5bayrksde.png" alt="Kiali Graph Select Bookinfo" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Click anywhere on the Kiali Dashboard, and you should see something similar.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--6_4Fnio4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/scpuadp8n47o96pq68t8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6_4Fnio4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/scpuadp8n47o96pq68t8.png" alt="Kiali Graph Bookinfo" width="800" height="482"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Click on "Display" and select "Response Time" and "Security".&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--tHSgvjMq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ginufqh8e0352828yl9j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--tHSgvjMq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ginufqh8e0352828yl9j.png" alt="Kiali Graph Bookinfo Change Display" width="443" height="941"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Click anywhere on the Kiali Dashboard again, and you should see the response times and a little green lock on each connection.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--L2kCiFOp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wkmtq1b2vvgrvuo079z1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--L2kCiFOp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wkmtq1b2vvgrvuo079z1.png" alt="Kiali Graph Bookinfo Display Security" width="800" height="522"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Click on "productpage v1" on the Kiali Graph Dashboard, and you should see something like this. It will display information on the right-hand side of the Dashboard, such as Traffic and Traces.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_xm_Bre7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/klu2yi14q2p2nzhghkpu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_xm_Bre7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/klu2yi14q2p2nzhghkpu.png" alt="Kiali Graph Bookinfo Productpage V1" width="800" height="475"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Let's add the podinfo namespace to the Kiali Graph Dashboard. Click Namespace again and then podinfo. After selecting, you should see something like this.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--VVe_qpnA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ji9g5kyh3beewuk94zk1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--VVe_qpnA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ji9g5kyh3beewuk94zk1.png" alt="Kiali Graph Bookinfo Podinfo" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Feel free to explore other parts of the Kiali Dashboard. The Kiali Dashboard pulls its data from Prometheus, Grafana, and Jaeger.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Access Istio Dashboards in Grafana
&lt;/h2&gt;

&lt;p&gt;Let's re-access the Grafana Dashboards for Istio and review the data. For details on what each Istio Dashboard does, click &lt;a href="https://istio.io/latest/docs/tasks/observability/metrics/using-istio-dashboard/"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;NOTE&lt;/strong&gt;: If the data is not showing in the Grafana Dashboards for Istio, re-run the commands from above to populate data for Bookinfo and Podinfo again.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Change to the Istio Dashboards in Grafana by clicking on Home in the upper left of the Grafana home page&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--n5Jv7_8n--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3gp3jw3luny0ul0h79ba.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--n5Jv7_8n--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3gp3jw3luny0ul0h79ba.png" alt="Grafana Home Button" width="800" height="484"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Click on Dashboards&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--iMPfeUc_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gn7x0kzrnhnla5x9sozl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--iMPfeUc_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gn7x0kzrnhnla5x9sozl.png" alt="Grafana Dashboards Button" width="800" height="484"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Hover over Istio and then click "Go to folder".&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--gCJIf05J--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6or422pnmw3rxk07y22r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--gCJIf05J--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6or422pnmw3rxk07y22r.png" alt="Grafana Dashboards Hover" width="800" height="480"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Istio Dashboards should now appear.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--7VM1AUyb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/s24hbhu5rfgrck2vdbks.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--7VM1AUyb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/s24hbhu5rfgrck2vdbks.png" alt="Istio Dashboards Folder" width="800" height="481"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Click on Istio Mesh Dashboard In Grafana. This dashboard provides a global view of all services and applications used in the Service Mesh.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--7PKIJBRq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vd5hekrohw3hm2tfld19.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--7PKIJBRq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vd5hekrohw3hm2tfld19.png" alt="Istio Mesh Dashboard" width="800" height="481"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Let's navigate to the Istio Service Dashboard by clicking on Istio in the upper left-right next to "Home &amp;gt; Dashboards &amp;gt; Istio" and then click "Istio Service Dashboard".&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--8srEOmO---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qjmj893hthleoiafqfbk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--8srEOmO---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qjmj893hthleoiafqfbk.png" alt="Istio Folder Istio Service Dashboard" width="800" height="481"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--dys5wRp8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ilwaef9027k2xxg0dfxs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--dys5wRp8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ilwaef9027k2xxg0dfxs.png" alt="Istio Folder Istio Service Dashboard" width="800" height="483"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--aS2FL56b--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vn42jpm88p31yc9r0tcb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--aS2FL56b--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vn42jpm88p31yc9r0tcb.png" alt="Istio Service Dashboard" width="800" height="278"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Click on service on the Istio Service Dashboard and change to "productpage.bookinfo.svc.cluster.local" service and then expand General, Client Workloads, and Service Workloads sections.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--buOGfPRO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rws6iywls4u8f5zv1749.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--buOGfPRO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rws6iywls4u8f5zv1749.png" alt="Istio Service Dashboard Product Page" width="800" height="485"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Review the General, Client Workloads, and Service Workloads sections. In the Client Workloads and Service Workloads sections, you can see that mutual TLS (mTLS) is enabled and working correctly.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--aI4n1Ukl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hqjjwyjg5xa6focb111e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--aI4n1Ukl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hqjjwyjg5xa6focb111e.png" alt="Istio Service Dashboard Client Workloads" width="800" height="477"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Feel free to explore other parts of the Istio Dashboards in Grafana.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Clean Up
&lt;/h2&gt;

&lt;h2&gt;
  
  
  Clean up Applications managed by Flux from Kubernetes
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Suspend Applications managed by Flux&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;flux &lt;span class="nb"&gt;suspend source &lt;/span&gt;git flux-system
flux &lt;span class="nb"&gt;suspend &lt;/span&gt;kustomization apps flux-system &lt;span class="se"&gt;\&lt;/span&gt;
  monitoring-controllers monitoring-configs
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Delete Applications managed by Flux&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl delete &lt;span class="nt"&gt;-f&lt;/span&gt; ./k8s/apps/base/bookinfo/config.yaml
kubectl delete &lt;span class="nt"&gt;-f&lt;/span&gt; ./k8s/apps/base/bookinfo/cert_request.yaml
kubectl delete &lt;span class="nt"&gt;-f&lt;/span&gt; ./k8s/apps/base/podinfo/config.yaml
kubectl delete &lt;span class="nt"&gt;-f&lt;/span&gt; ./k8s/apps/base/podinfo/cert_request.yaml
kubectl delete &lt;span class="nt"&gt;-f&lt;/span&gt; ./k8s/apps/base/bookinfo/release.yaml
flux delete helmrelease &lt;span class="nt"&gt;-s&lt;/span&gt; podinfo
flux delete helmrelease &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="nt"&gt;-n&lt;/span&gt; monitoring loki-stack
flux delete helmrelease &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="nt"&gt;-n&lt;/span&gt; monitoring kube-prometheus-stack
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Wait 1 to 5 minutes for Applications to be removed from Kubernetes&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Delete Application sources managed by Flux&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;flux delete &lt;span class="nb"&gt;source &lt;/span&gt;helm &lt;span class="nt"&gt;-s&lt;/span&gt; podinfo
flux delete &lt;span class="nb"&gt;source &lt;/span&gt;helm &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="nt"&gt;-n&lt;/span&gt; monitoring grafana-charts
flux delete &lt;span class="nb"&gt;source &lt;/span&gt;helm &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="nt"&gt;-n&lt;/span&gt; monitoring prometheus-community
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Verify Applications are removed&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl &lt;span class="nt"&gt;-n&lt;/span&gt; bookinfo get all
kubectl &lt;span class="nt"&gt;-n&lt;/span&gt; istio-ingress get ingresses bookinfo-ingress
kubectl &lt;span class="nt"&gt;-n&lt;/span&gt; podinfo get all
kubectl &lt;span class="nt"&gt;-n&lt;/span&gt; istio-ingress get ingresses podinfo-ingress
kubectl &lt;span class="nt"&gt;-n&lt;/span&gt; monitoring get all
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Clean up Infrastructure Applications managed by Flux from Kubernetes
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Suspend Infrastructure Applications managed by Flux&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;flux &lt;span class="nb"&gt;suspend &lt;/span&gt;kustomization infra-apps
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Delete Infrastructure Applications managed by Flux&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl delete &lt;span class="nt"&gt;-f&lt;/span&gt; ./k8s/infrastructure/apps/kiali/config.yaml &lt;span class="nt"&gt;--force&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;true&lt;/span&gt; &lt;span class="nt"&gt;--grace-period&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0
kubectl delete &lt;span class="nt"&gt;-f&lt;/span&gt; ./k8s/infrastructure/apps/kiali/cert_request.yaml
kubectl patch kiali kiali &lt;span class="nt"&gt;-n&lt;/span&gt; istio-system &lt;span class="nt"&gt;-p&lt;/span&gt; &lt;span class="s1"&gt;'{"metadata":{"finalizers": []}}'&lt;/span&gt; &lt;span class="nt"&gt;--type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;merge
kubectl delete kiali &lt;span class="nt"&gt;--all&lt;/span&gt; &lt;span class="nt"&gt;--all-namespaces&lt;/span&gt;
kubectl delete jaegers.jaegertracing.io &lt;span class="nt"&gt;-n&lt;/span&gt; observability jaeger
flux delete helmrelease &lt;span class="nt"&gt;-s&lt;/span&gt; kiali
flux delete helmrelease &lt;span class="nt"&gt;-s&lt;/span&gt; jaeger-operator
kubectl delete crd kialis.kiali.io
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Wait 1 to 5 minutes for Kubernetes Addons to be removed from Kubernetes&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Delete Application sources managed by Flux&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;flux delete &lt;span class="nb"&gt;source &lt;/span&gt;helm &lt;span class="nt"&gt;-s&lt;/span&gt; jaegertracing
flux delete &lt;span class="nb"&gt;source &lt;/span&gt;helm &lt;span class="nt"&gt;-s&lt;/span&gt; kiali
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Verify Kubernetes Addons were removed successfully&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl &lt;span class="nt"&gt;-n&lt;/span&gt; kiali-operator get all
kubectl &lt;span class="nt"&gt;-n&lt;/span&gt; observability get all
kubectl &lt;span class="nt"&gt;-n&lt;/span&gt; istio-ingress get ingresses kiali-ingress
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;&lt;p&gt;If any resources are not deleted, manually delete them.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Clean up Kubernetes Addons managed by Flux from Kubernetes
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Suspend Kubernetes Addons managed by Flux&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;flux &lt;span class="nb"&gt;suspend &lt;/span&gt;kustomization infra-configs infra-controllers
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Delete Kubernetes Addons managed by Flux&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;flux delete helmrelease &lt;span class="nt"&gt;-s&lt;/span&gt; aws-load-balancer-controller
flux delete helmrelease &lt;span class="nt"&gt;-s&lt;/span&gt; cert-manager
flux delete helmrelease &lt;span class="nt"&gt;-s&lt;/span&gt; cluster-autoscaler
flux delete helmrelease &lt;span class="nt"&gt;-s&lt;/span&gt; external-dns
flux delete helmrelease &lt;span class="nt"&gt;-s&lt;/span&gt; istio-base
flux delete helmrelease &lt;span class="nt"&gt;-s&lt;/span&gt; istiod
flux delete helmrelease &lt;span class="nt"&gt;-s&lt;/span&gt; istio-ingressgateway
flux delete helmrelease &lt;span class="nt"&gt;-s&lt;/span&gt; metrics-server
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Wait 1 to 5 minutes for Kubernetes Addons to be removed from Kubernetes&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Delete Application sources managed by Flux&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;flux delete &lt;span class="nb"&gt;source &lt;/span&gt;helm &lt;span class="nt"&gt;-s&lt;/span&gt; cert-manager
flux delete &lt;span class="nb"&gt;source &lt;/span&gt;helm &lt;span class="nt"&gt;-s&lt;/span&gt; cluster-autoscaler
flux delete &lt;span class="nb"&gt;source &lt;/span&gt;helm &lt;span class="nt"&gt;-s&lt;/span&gt; eks-charts
flux delete &lt;span class="nb"&gt;source &lt;/span&gt;helm &lt;span class="nt"&gt;-s&lt;/span&gt; external-dns
flux delete &lt;span class="nb"&gt;source &lt;/span&gt;helm &lt;span class="nt"&gt;-s&lt;/span&gt; istio
flux delete &lt;span class="nb"&gt;source &lt;/span&gt;helm &lt;span class="nt"&gt;-s&lt;/span&gt; jetstack
flux delete &lt;span class="nb"&gt;source &lt;/span&gt;helm &lt;span class="nt"&gt;-s&lt;/span&gt; metrics-server
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Verify Kubernetes Addons were removed successfully&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl &lt;span class="nt"&gt;-n&lt;/span&gt; kube-system get all &lt;span class="nt"&gt;-l&lt;/span&gt; app.kubernetes.io/name&lt;span class="o"&gt;=&lt;/span&gt;external-dns
kubectl &lt;span class="nt"&gt;-n&lt;/span&gt; kube-system get all &lt;span class="nt"&gt;-l&lt;/span&gt; app.kubernetes.io/name&lt;span class="o"&gt;=&lt;/span&gt;aws-load-balancer-controller
kubectl &lt;span class="nt"&gt;-n&lt;/span&gt; kube-system get all &lt;span class="nt"&gt;-l&lt;/span&gt; app.kubernetes.io/name&lt;span class="o"&gt;=&lt;/span&gt;aws-cluster-autoscaler
kubectl &lt;span class="nt"&gt;-n&lt;/span&gt; cert-manager get all
kubectl &lt;span class="nt"&gt;-n&lt;/span&gt; istio-ingress get ingresses kiali-ingress
kubectl &lt;span class="nt"&gt;-n&lt;/span&gt; istio-ingress get all
kubectl &lt;span class="nt"&gt;-n&lt;/span&gt; istio-system get all
kubectl get ingressclasses &lt;span class="nt"&gt;-l&lt;/span&gt; app.kubernetes.io/name&lt;span class="o"&gt;=&lt;/span&gt;aws-load-balancer-controller
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;&lt;p&gt;If any resources are not deleted, manually delete them.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Uninstall Flux from Kubernetes
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Uninstall Flux&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;flux uninstall &lt;span class="nt"&gt;-s&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Verify Flux was removed successfully&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl get all &lt;span class="nt"&gt;-n&lt;/span&gt; flux-system
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Clean up Terraform
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Navigate to the root of the directory of the GitHub repo and run the following commands&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;terraform

terraform destroy
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Check Terraform destroy results&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--OgmOTfIP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ohmhqm8zpt66looo8231.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--OgmOTfIP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ohmhqm8zpt66looo8231.png" alt="Terraform Destroy" width="349" height="26"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;In conclusion, this guide provided a comprehensive overview of utilizing Istio, a service mesh, and Amazon EKS. A service mesh is an essential infrastructure component that enhances communication and operational capabilities within a microservices architecture. Istio, as a leading service mesh implementation, provides a robust set of features for traffic management, security, and observability without heavy lifting from developers. Istio works seamlessly with Amazon EKS, as EKS supports Kubernetes natively, and Istio is designed to work with Kubernetes-managed services. Users can leverage Istio within EKS to manage microservices traffic, enforce security policies, and observe communication patterns between services, all while taking advantage of the managed Kubernetes environment that EKS provides. This combination allows for a powerful, scalable, and secure system for managing microservices at scale.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>eks</category>
      <category>servicemesh</category>
      <category>istio</category>
    </item>
    <item>
      <title>Using Flux, a GitOps Tool, Using Istio, a Service Mesh, with Amazon Elastic Kubernetes Service (EKS) - Part 3</title>
      <dc:creator>Dallin</dc:creator>
      <pubDate>Fri, 10 Nov 2023 22:20:31 +0000</pubDate>
      <link>https://forem.com/junglekid/using-flux-a-gitops-tool-using-istio-a-service-mesh-with-amazon-elastic-kubernetes-service-eks-part-3-7ki</link>
      <guid>https://forem.com/junglekid/using-flux-a-gitops-tool-using-istio-a-service-mesh-with-amazon-elastic-kubernetes-service-eks-part-3-7ki</guid>
      <description>&lt;p&gt;This is the third and final part of the series on Using Istio, a Service Mesh, with Amazon Elastic Kubernetes Service (EKS). In the last two articles, we discussed various topics. These include what Service Mesh is, what Istio is, what technologies we used, the prerequisites and architecture overview, reviewed the Terraform code used to deploy the AWS resources and successfully deployed the Terraform Code to AWS. We also installed the the Istio CLI tool, istioctl, ran the "configure.sh" script to configure the Flux Repository, and installed Flux to the Amazon EKS cluster.  Finally, we reviewed the Addons and Applications managed by Flux, discussed the Istio Components and Addons used by Istio, and reviewed how Istio works with Applications and Microservices.&lt;/p&gt;

&lt;p&gt;In this final and third article, we will cover the following topics.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Access the Applications managed by Flux&lt;/li&gt;
&lt;li&gt;Demonstrate how Istio works&lt;/li&gt;
&lt;li&gt;Review the Istio Addons&lt;/li&gt;
&lt;li&gt;Clean up apps and infrastructure&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Access Applications managed by Flux
&lt;/h2&gt;

&lt;p&gt;Let's access the Applications managed by Flux. Retrieve the &lt;strong&gt;&lt;em&gt;public_base_domain_name&lt;/em&gt;&lt;/strong&gt; specified in the "locals.tf" when you ran Terraform earlier.&lt;/p&gt;

&lt;h3&gt;
  
  
  Access Bookinfo App
&lt;/h3&gt;

&lt;p&gt;For the Bookinfo App, you can access the Bookinfo URL "&lt;a href="https://bookinfo.public_base_domain_name/productpage" rel="noopener noreferrer"&gt;https://bookinfo.public_base_domain_name/productpage&lt;/a&gt;" in your favorite web browser.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyn4e8pb4utqrtvvrsuok.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyn4e8pb4utqrtvvrsuok.png" alt="Bookinfo"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/.%2Fimages%2Fbookinfo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/.%2Fimages%2Fbookinfo.png" alt="Bookinfo"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Access Podinfo App
&lt;/h3&gt;

&lt;p&gt;For the Podinfo App, you can access the Podinfo URL "&lt;a href="https://podinfo.public_base_domain_name" rel="noopener noreferrer"&gt;https://podinfo.public_base_domain_name&lt;/a&gt;" in your favorite web browser.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcb91kzawqyygfat0gwfj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcb91kzawqyygfat0gwfj.png" alt="Podinfo"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Access Istio Addons
&lt;/h2&gt;

&lt;p&gt;Let's access the Istio Addons before we demonstrate how Istio works. Retrieve the &lt;strong&gt;&lt;em&gt;public_base_domain_name&lt;/em&gt;&lt;/strong&gt; specified in the "locals.tf" when you ran Terraform earlier.&lt;/p&gt;
&lt;h3&gt;
  
  
  Access Kiali Dashboard
&lt;/h3&gt;

&lt;p&gt;To access the Kiali Dashboard, follow these steps.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Access the Kiali URL "&lt;a href="https://kiali.public_base_domain_name" rel="noopener noreferrer"&gt;https://kiali.public_base_domain_name&lt;/a&gt;" in your favorite web browser.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxprtz414jjtdvqo7h58a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxprtz414jjtdvqo7h58a.png" alt="Kiali Login"&gt;&lt;/a&gt;    &lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Generate and retrieve &lt;strong&gt;token&lt;/strong&gt; by running the following command&lt;br&gt;
&lt;/p&gt;

&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl &lt;span class="nt"&gt;-n&lt;/span&gt; istio-system create token kiali-service-account
&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9m92dijhkq87vzr4nivq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9m92dijhkq87vzr4nivq.png" alt="Kiali Token"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;Copy and paste the generated token from above to the Kiali Login page.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxfyq89kfjvziev6440p2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxfyq89kfjvziev6440p2.png" alt="Kiali Login with Token"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;Log into the Kiali Dashboard.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3pja6j7nsuy0nwhd1qwm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3pja6j7nsuy0nwhd1qwm.png" alt="Kiali Overview Dashboard after login"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;/li&gt;

&lt;/ol&gt;

&lt;h3&gt;
  
  
  Access Grafana Dashboard
&lt;/h3&gt;

&lt;p&gt;To access the Grafana Dashboard, follow these steps.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Access the Kiali URL "&lt;a href="https://grafana.public_base_domain_name" rel="noopener noreferrer"&gt;https://grafana.public_base_domain_name&lt;/a&gt;" in your favorite web browser.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fotg6lm9dnyl1n1ley10l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fotg6lm9dnyl1n1ley10l.png" alt="Grafana Login"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Log into Grafana with the following username and password.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Username: admin&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Password: Grafana&amp;amp;Git0ps&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg1wx6k0tg0e65280iamz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg1wx6k0tg0e65280iamz.png" alt="Grafana After Login"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Demonstrate how Istio works
&lt;/h2&gt;

&lt;p&gt;Now that we know how to access the Applications let's demonstrate how Istio works. We will send several requests to the Bookinfo and Podinfo applications by running curl commands from the terminals or shells. We will do this to simulate enough traffic for Istio and the Istio Addons to capture the network traffic so the dashboards in Kiali and Grafana can display correctly.&lt;/p&gt;

&lt;h2&gt;
  
  
  Populate Data for Kiali and Istio Dashboards in Grafana
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Retrieve the &lt;strong&gt;&lt;em&gt;public_base_domain_name&lt;/em&gt;&lt;/strong&gt; specified in the "locals.tf" when you ran Terraform earlier.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Open two separate terminals or shells.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;NOTE&lt;/strong&gt;: Run these commands as often as you want to populate the data in Kiali and Grafana.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Run the following command in the first terminal or shell to send traffic to the Bookinfo application. Replace  with the actual domain name.&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="k"&gt;for &lt;/span&gt;i &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;1..720&lt;span class="o"&gt;}&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;do &lt;/span&gt;curl &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="nt"&gt;-o&lt;/span&gt; /dev/null &lt;span class="s2"&gt;"https://bookinfo.&amp;lt;public_base_domain_name&amp;gt;/productpage"&lt;/span&gt; &lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;done&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;In the second terminal or shell, run the following command to send traffic to the Podinfo application. Replace  with the actual domain name.&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="k"&gt;for &lt;/span&gt;i &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;1..720&lt;span class="o"&gt;}&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;do &lt;/span&gt;curl &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="nt"&gt;-o&lt;/span&gt; /dev/null &lt;span class="s2"&gt;"https://podinfo.&amp;lt;public_base_domain_name&amp;gt;"&lt;/span&gt; &lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;done&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;It will take 4 to 5 minutes for the above commands to finish.&lt;/p&gt;

&lt;h2&gt;
  
  
  Access and Review Data in Kiali Dashboard
&lt;/h2&gt;

&lt;p&gt;While the commands above run, re-access the Kiali Dashboard and review the data.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Let's change the time range to the last 10 minutes by clicking in the upper right corner of the web page. Click on "Last 1m" to "Last 10m"..&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqhksc94s17lytc9182f3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqhksc94s17lytc9182f3.png" alt="Kiali change to Last 10m"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Click on "Graph" on the left side of the Kiali Dashboard.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Firhco7u1z08ucvuap8nz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Firhco7u1z08ucvuap8nz.png" alt="Kiali change to Graph"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Click on "Select Namespaces" and choose "bookinfo".&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx666t0nmqd4fvtzoyoyk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx666t0nmqd4fvtzoyoyk.png" alt="Kiali Graph Select NS"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx33bwh36kpqd1cf0g7uo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx33bwh36kpqd1cf0g7uo.png" alt="Kiali Graph Select Bookinfo"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Click anywhere on the Kiali Dashboard, and you should see something similar.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv98dpgmeku5sgv269qlp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv98dpgmeku5sgv269qlp.png" alt="Kiali Graph Bookinfo"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Click on "Display" and select "Response Time" and "Security".&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwgufm3i4ryhqh2ti8299.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwgufm3i4ryhqh2ti8299.png" alt="Kiali Graph Bookinfo Change Display"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Click anywhere on the Kiali Dashboard again, and you should see the response times and a little green lock on each connection.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbyjp3ar7zbugu55y2dpt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbyjp3ar7zbugu55y2dpt.png" alt="Kiali Graph Bookinfo Display Security"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Click on "productpage v1" on the Kiali Graph Dashboard, and you should see something like this. It will display information on the right-hand side of the Dashboard, such as Traffic and Traces.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9ij3xpqwnwpwbcpc9rwx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9ij3xpqwnwpwbcpc9rwx.png" alt="Kiali Graph Bookinfo Productpage V1"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Let's add the podinfo namespace to the Kiali Graph Dashboard. Click Namespace again and then podinfo. After selecting, you should see something like this.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faq30lfblibxz9m5h6gpp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faq30lfblibxz9m5h6gpp.png" alt="Kiali Graph Bookinfo Podinfo"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Feel free to explore other parts of the Kiali Dashboard. The Kiali Dashboard pulls its data from Prometheus, Grafana, and Jaeger.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Access Istio Dashboards in Grafana
&lt;/h2&gt;

&lt;p&gt;Let's re-access the Grafana Dashboards for Istio and review the data. For details on what each Istio Dashboard does, click &lt;a href="https://istio.io/latest/docs/tasks/observability/metrics/using-istio-dashboard/" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;NOTE&lt;/strong&gt;: If the data is not showing in the Grafana Dashboards for Istio, re-run the commands from above to populate data for Bookinfo and Podinfo again.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Change to the Istio Dashboards in Grafana by clicking on Home in the upper left of the Grafana home page&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwqcngnzlzgesw06zvged.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwqcngnzlzgesw06zvged.png" alt="Grafana Home Button"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Click on Dashboards&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fufaaveyzbqzq2o14z0xs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fufaaveyzbqzq2o14z0xs.png" alt="Grafana Dashboards Button"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Hover over Istio and then click "Go to folder".&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcobueazell43lw0srfh9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcobueazell43lw0srfh9.png" alt="Grafana Dashboards Hover"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Istio Dashboards should now appear.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs27bhmvok6zl9onn3foj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs27bhmvok6zl9onn3foj.png" alt="Istio Dashboards Folder"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Click on Istio Mesh Dashboard In Grafana. This dashboard provides a global view of all services and applications used in the Service Mesh.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj1vpcwwuaqbjavx8i86h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj1vpcwwuaqbjavx8i86h.png" alt="Istio Mesh Dashboard"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Let's navigate to the Istio Service Dashboard by clicking on Istio in the upper left-right next to "Home &amp;gt; Dashboards &amp;gt; Istio" and then click "Istio Service Dashboard".&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwcp97h4q5njc63xyaiwf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwcp97h4q5njc63xyaiwf.png" alt="Istio Mesh Dashboard Istio Folder"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F955fq32y1gmc6ue6w7w4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F955fq32y1gmc6ue6w7w4.png" alt="Istio Folder Istio Service Dashboard"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwbzld1hoicefwqx96wvk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwbzld1hoicefwqx96wvk.png" alt="Istio Service Dashboard"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Click on service on the Istio Service Dashboard and change to "productpage.bookinfo.svc.cluster.local" service and then expand General, Client Workloads, and Service Workloads sections.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyrffhqubgnu24gw90jnu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyrffhqubgnu24gw90jnu.png" alt="Istio Service Dashboard Product Page"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Review the General, Client Workloads, and Service Workloads sections. In the Client Workloads and Service Workloads sections, you can see that mutual TLS (mTLS) is enabled and working correctly.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmsw4d66rmipe8zjbb8ul.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmsw4d66rmipe8zjbb8ul.png" alt="Istio Service Dashboard Client Workloads"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Feel free to explore other parts of the Istio Dashboards in Grafana.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Clean Up
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Clean up Applications managed by Flux from Kubernetes
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Suspend Applications managed by Flux&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;flux &lt;span class="nb"&gt;suspend source &lt;/span&gt;git flux-system
flux &lt;span class="nb"&gt;suspend &lt;/span&gt;kustomization apps flux-system &lt;span class="se"&gt;\&lt;/span&gt;
  monitoring-controllers monitoring-configs
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Delete Applications managed by Flux&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl delete &lt;span class="nt"&gt;-f&lt;/span&gt; ./k8s/apps/base/bookinfo/config.yaml
kubectl delete &lt;span class="nt"&gt;-f&lt;/span&gt; ./k8s/apps/base/bookinfo/cert_request.yaml
kubectl delete &lt;span class="nt"&gt;-f&lt;/span&gt; ./k8s/apps/base/podinfo/config.yaml
kubectl delete &lt;span class="nt"&gt;-f&lt;/span&gt; ./k8s/apps/base/podinfo/cert_request.yaml
kubectl delete &lt;span class="nt"&gt;-f&lt;/span&gt; ./k8s/apps/base/bookinfo/release.yaml
flux delete helmrelease &lt;span class="nt"&gt;-s&lt;/span&gt; podinfo
flux delete helmrelease &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="nt"&gt;-n&lt;/span&gt; monitoring loki-stack
flux delete helmrelease &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="nt"&gt;-n&lt;/span&gt; monitoring kube-prometheus-stack
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Wait 1 to 5 minutes for Applications to be removed from Kubernetes&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Delete Application sources managed by Flux&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;flux delete &lt;span class="nb"&gt;source &lt;/span&gt;helm &lt;span class="nt"&gt;-s&lt;/span&gt; podinfo
flux delete &lt;span class="nb"&gt;source &lt;/span&gt;helm &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="nt"&gt;-n&lt;/span&gt; monitoring grafana-charts
flux delete &lt;span class="nb"&gt;source &lt;/span&gt;helm &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="nt"&gt;-n&lt;/span&gt; monitoring prometheus-community
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Verify Applications are removed&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl &lt;span class="nt"&gt;-n&lt;/span&gt; bookinfo get all
kubectl &lt;span class="nt"&gt;-n&lt;/span&gt; istio-ingress get ingresses bookinfo-ingress
kubectl &lt;span class="nt"&gt;-n&lt;/span&gt; podinfo get all
kubectl &lt;span class="nt"&gt;-n&lt;/span&gt; istio-ingress get ingresses podinfo-ingress
kubectl &lt;span class="nt"&gt;-n&lt;/span&gt; monitoring get all
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Clean up Infrastructure Applications managed by Flux from Kubernetes
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Suspend Infrastructure Applications managed by Flux&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;flux &lt;span class="nb"&gt;suspend &lt;/span&gt;kustomization infra-apps
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Delete Infrastructure Applications managed by Flux&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl delete &lt;span class="nt"&gt;-f&lt;/span&gt; ./k8s/infrastructure/apps/kiali/config.yaml &lt;span class="nt"&gt;--force&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;true&lt;/span&gt; &lt;span class="nt"&gt;--grace-period&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0
kubectl delete &lt;span class="nt"&gt;-f&lt;/span&gt; ./k8s/infrastructure/apps/kiali/cert_request.yaml
kubectl patch kiali kiali &lt;span class="nt"&gt;-n&lt;/span&gt; istio-system &lt;span class="nt"&gt;-p&lt;/span&gt; &lt;span class="s1"&gt;'{"metadata":{"finalizers": []}}'&lt;/span&gt; &lt;span class="nt"&gt;--type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;merge
kubectl delete kiali &lt;span class="nt"&gt;--all&lt;/span&gt; &lt;span class="nt"&gt;--all-namespaces&lt;/span&gt;
kubectl delete jaegers.jaegertracing.io &lt;span class="nt"&gt;-n&lt;/span&gt; observability jaeger
flux delete helmrelease &lt;span class="nt"&gt;-s&lt;/span&gt; kiali
flux delete helmrelease &lt;span class="nt"&gt;-s&lt;/span&gt; jaeger-operator
kubectl delete crd kialis.kiali.io
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Wait 1 to 5 minutes for Kubernetes Addons to be removed from Kubernetes&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Delete Application sources managed by Flux&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;flux delete &lt;span class="nb"&gt;source &lt;/span&gt;helm &lt;span class="nt"&gt;-s&lt;/span&gt; jaegertracing
flux delete &lt;span class="nb"&gt;source &lt;/span&gt;helm &lt;span class="nt"&gt;-s&lt;/span&gt; kiali
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Verify Kubernetes Addons were removed successfully&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl &lt;span class="nt"&gt;-n&lt;/span&gt; kiali-operator get all
kubectl &lt;span class="nt"&gt;-n&lt;/span&gt; observability get all
kubectl &lt;span class="nt"&gt;-n&lt;/span&gt; istio-ingress get ingresses kiali-ingress
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;&lt;p&gt;If any resources are not deleted, manually delete them.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Clean up Kubernetes Addons managed by Flux from Kubernetes
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Suspend Kubernetes Addons managed by Flux&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;flux &lt;span class="nb"&gt;suspend &lt;/span&gt;kustomization infra-configs infra-controllers
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Delete Kubernetes Addons managed by Flux&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;flux delete helmrelease &lt;span class="nt"&gt;-s&lt;/span&gt; aws-load-balancer-controller
flux delete helmrelease &lt;span class="nt"&gt;-s&lt;/span&gt; cert-manager
flux delete helmrelease &lt;span class="nt"&gt;-s&lt;/span&gt; cluster-autoscaler
flux delete helmrelease &lt;span class="nt"&gt;-s&lt;/span&gt; external-dns
flux delete helmrelease &lt;span class="nt"&gt;-s&lt;/span&gt; istio-base
flux delete helmrelease &lt;span class="nt"&gt;-s&lt;/span&gt; istiod
flux delete helmrelease &lt;span class="nt"&gt;-s&lt;/span&gt; istio-ingressgateway
flux delete helmrelease &lt;span class="nt"&gt;-s&lt;/span&gt; metrics-server
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Wait 1 to 5 minutes for Kubernetes Addons to be removed from Kubernetes&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Delete Application sources managed by Flux&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;flux delete &lt;span class="nb"&gt;source &lt;/span&gt;helm &lt;span class="nt"&gt;-s&lt;/span&gt; cert-manager
flux delete &lt;span class="nb"&gt;source &lt;/span&gt;helm &lt;span class="nt"&gt;-s&lt;/span&gt; cluster-autoscaler
flux delete &lt;span class="nb"&gt;source &lt;/span&gt;helm &lt;span class="nt"&gt;-s&lt;/span&gt; eks-charts
flux delete &lt;span class="nb"&gt;source &lt;/span&gt;helm &lt;span class="nt"&gt;-s&lt;/span&gt; external-dns
flux delete &lt;span class="nb"&gt;source &lt;/span&gt;helm &lt;span class="nt"&gt;-s&lt;/span&gt; istio
flux delete &lt;span class="nb"&gt;source &lt;/span&gt;helm &lt;span class="nt"&gt;-s&lt;/span&gt; jetstack
flux delete &lt;span class="nb"&gt;source &lt;/span&gt;helm &lt;span class="nt"&gt;-s&lt;/span&gt; metrics-server
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Verify Kubernetes Addons were removed successfully&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl &lt;span class="nt"&gt;-n&lt;/span&gt; kube-system get all &lt;span class="nt"&gt;-l&lt;/span&gt; app.kubernetes.io/name&lt;span class="o"&gt;=&lt;/span&gt;external-dns
kubectl &lt;span class="nt"&gt;-n&lt;/span&gt; kube-system get all &lt;span class="nt"&gt;-l&lt;/span&gt; app.kubernetes.io/name&lt;span class="o"&gt;=&lt;/span&gt;aws-load-balancer-controller
kubectl &lt;span class="nt"&gt;-n&lt;/span&gt; kube-system get all &lt;span class="nt"&gt;-l&lt;/span&gt; app.kubernetes.io/name&lt;span class="o"&gt;=&lt;/span&gt;aws-cluster-autoscaler
kubectl &lt;span class="nt"&gt;-n&lt;/span&gt; cert-manager get all
kubectl &lt;span class="nt"&gt;-n&lt;/span&gt; istio-ingress get ingresses kiali-ingress
kubectl &lt;span class="nt"&gt;-n&lt;/span&gt; istio-ingress get all
kubectl &lt;span class="nt"&gt;-n&lt;/span&gt; istio-system get all
kubectl get ingressclasses &lt;span class="nt"&gt;-l&lt;/span&gt; app.kubernetes.io/name&lt;span class="o"&gt;=&lt;/span&gt;aws-load-balancer-controller
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;&lt;p&gt;If any resources are not deleted, manually delete them.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Uninstall Flux from Kubernetes
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Uninstall Flux&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;flux uninstall &lt;span class="nt"&gt;-s&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Verify Flux was removed successfully&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl get all &lt;span class="nt"&gt;-n&lt;/span&gt; flux-system
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Clean up Terraform
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Navigate to the root of the directory of the GitHub repo and run the following commands&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;terraform

terraform destroy
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Check Terraform destroy results&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2fmyjofk1d51340ulceq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2fmyjofk1d51340ulceq.png" alt="Terraform Destroy"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;In conclusion, this guide provided a comprehensive overview of utilizing Istio, a service mesh, and Amazon EKS. A service mesh is an essential infrastructure component that enhances communication and operational capabilities within a microservices architecture. Istio, as a leading service mesh implementation, provides a robust set of features for traffic management, security, and observability without heavy lifting from developers. Istio works seamlessly with Amazon EKS, as EKS supports Kubernetes natively, and Istio is designed to work with Kubernetes-managed services. Users can leverage Istio within EKS to manage microservices traffic, enforce security policies, and observe communication patterns between services, all while taking advantage of the managed Kubernetes environment that EKS provides. This combination allows for a powerful, scalable, and secure system for managing microservices at scale.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>eks</category>
      <category>servicemesh</category>
      <category>istio</category>
    </item>
    <item>
      <title>Using Istio, a Service Mesh, with Amazon Elastic Kubernetes Service (EKS) - Part 2</title>
      <dc:creator>Dallin</dc:creator>
      <pubDate>Fri, 10 Nov 2023 21:47:57 +0000</pubDate>
      <link>https://forem.com/junglekid/using-istio-a-service-mesh-with-amazon-elastic-kubernetes-service-eks-part-2-1l15</link>
      <guid>https://forem.com/junglekid/using-istio-a-service-mesh-with-amazon-elastic-kubernetes-service-eks-part-2-1l15</guid>
      <description>&lt;p&gt;This is the second part of the series on Using Istio, a Service Mesh, with Amazon Elastic Kubernetes Service (EKS). The first article discussed what a Service Mesh and Istio are, what technologies we will use, the prerequisites and architecture overview, and the configuration and setup process.&lt;/p&gt;

&lt;p&gt;In this part two article, we will be working on these tasks.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Configure access to Amazon EKS Cluster&lt;/li&gt;
&lt;li&gt;Install Istio CLI tool - istioctl&lt;/li&gt;
&lt;li&gt;Run the "configure.sh" script to configure the Flux Repository&lt;/li&gt;
&lt;li&gt;Install Flux to the Amazon EKS Cluster&lt;/li&gt;
&lt;li&gt;Review Addons and Applications managed by Flux&lt;/li&gt;
&lt;li&gt;Discuss the Istio Components and Addons used by Istio.&lt;/li&gt;
&lt;li&gt;Review how Istio works with Applications and Microservices&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can access the code in my &lt;a href="https://github.com/junglekid/aws-eks-istio-lab" rel="noopener noreferrer"&gt;GitHub Repository&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkefv69nsassdos8t8q57.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkefv69nsassdos8t8q57.png" alt="Istio and AWS EKS"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Configure access to Amazon EKS Cluster
&lt;/h2&gt;

&lt;p&gt;Amazon EKS Cluster details can be extracted from terraform output or by accessing the AWS Console to get the name of the cluster. This following command can be used to update the kubeconfig in your local machine where you run kubectl commands to interact with your EKS Cluster. Navigate to the root of the directory of the GitHub repo and run the following commands:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;terraform

&lt;span class="nv"&gt;AWS_REGION&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;terraform output &lt;span class="nt"&gt;-raw&lt;/span&gt; aws_region&lt;span class="si"&gt;)&lt;/span&gt;
&lt;span class="nv"&gt;EKS_CLUSTER_NAME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;terraform output &lt;span class="nt"&gt;-raw&lt;/span&gt; eks_cluster_name&lt;span class="si"&gt;)&lt;/span&gt;
aws eks &lt;span class="nt"&gt;--region&lt;/span&gt; &lt;span class="nv"&gt;$AWS_REGION&lt;/span&gt; update-kubeconfig &lt;span class="nt"&gt;--name&lt;/span&gt; &lt;span class="nv"&gt;$EKS_CLUSTER_NAME&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Results of configuring kubeconfig.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbz9pdiraas3oq86erz77.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbz9pdiraas3oq86erz77.png" alt="Kubeconfig"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Install Istio CLI - istioctl
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Install Istioctl CLI&lt;/p&gt;

&lt;p&gt;a. For macOS or Linux, follow these instructions using &lt;a href="https://brew.sh/" rel="noopener noreferrer"&gt;Homebrew&lt;/a&gt;&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;brew &lt;span class="nb"&gt;install &lt;/span&gt;istioctl
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;b. For Windows, follow these instructions with &lt;a href="https://chocolatey.org/install" rel="noopener noreferrer"&gt;Chocolatey&lt;/a&gt;.&lt;/p&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;choco&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;install&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;istioctl&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;c. For Windows, follow these instructions with &lt;a href="https://scoop.sh/" rel="noopener noreferrer"&gt;Scoop&lt;/a&gt;.&lt;/p&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;scoop&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;bucket&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;add&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;main&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;scoop&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;install&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;main/istioctl&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;d. Install instructions for other methods can be found &lt;a href="https://istio.io/latest/docs/setup/getting-started/" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Instructions on how to use &lt;strong&gt;istioctl&lt;/strong&gt; can be found &lt;a href="https://istio.io/latest/docs/reference/commands/istioctl" rel="noopener noreferrer"&gt;here&lt;/a&gt; and &lt;a href="https://istio.io/latest/docs/ops/diagnostic-tools/istioctl" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Verify that &lt;strong&gt;istioctl&lt;/strong&gt; is installed by running the following command.&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;istioctl version
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Results of running &lt;strong&gt;istioctl&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/.%2Fimages%2Fistioctl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/.%2Fimages%2Fistioctl.png" alt="istioctl"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Configure and Install Flux
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Configure Variables needed to install Flux&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;GITHUB_TOKEN&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'&amp;lt;REPLACE_WITH_GITHHUB_TOKEN&amp;gt;'&lt;/span&gt;
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;GITHUB_USER&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'&amp;lt;REPLACE_WITH_GITHUB_USER&amp;gt;'&lt;/span&gt;
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;GITHUB_OWNER&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'&amp;lt;REPLACE_WITH_GITHUB_OWNER&amp;gt;'&lt;/span&gt;
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;GITHUB_REPO_NAME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'&amp;lt;REPLACE_WITH_GITHUB_REPO_NAME&amp;gt;'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Configure the Flux Repository by running the "configure.sh" script. The "configure.sh" script updates the various applications with the necessary values to run correctly. Navigate to the root of the directory of the GitHub repo and run the following commands:&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;scripts

./configure.sh
&lt;span class="nb"&gt;cd&lt;/span&gt; ..
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Results of running the "configure.sh" script.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxqooytg49exqr48ynr2a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxqooytg49exqr48ynr2a.png" alt="Configure Flux"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Install Flux on the Amazon EKS Cluster&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;flux bootstrap github &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--components-extra&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;image-reflector-controller,image-automation-controller &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--owner&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;$GITHUB_OWNER&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--repository&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;$GITHUB_REPO_NAME&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--private&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;false&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--path&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;clusters/eks-istio-lab &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--personal&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Results of installing Flux on the Amazon EKS Cluster.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd24em12x3t5n3phk10qw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd24em12x3t5n3phk10qw.png" alt="Install Flux"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Wait 2 to 5 minutes for Flux to reconcile the Git repository we specified, During this time, Flux will install and configure all of the defined Kubernetes Addons and Applications.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Run the following command to check if all of the Kubernetes Addons and Applications deployed successfully&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;flux get all &lt;span class="nt"&gt;-A&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Managing Flux
&lt;/h2&gt;

&lt;p&gt;Managing Flux is handled by using the Flux CLI. Flux does not come with any Web or UI interface to manage Flux. Please click &lt;a href="https://fluxcd.io/flux/cmd/" rel="noopener noreferrer"&gt;here&lt;/a&gt; if you would like more information on the Flux CLI.&lt;/p&gt;

&lt;p&gt;The following are some commands you can use to manage Flux.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;flux get all
flux get sources all|git|helm|chart
flux get helmreleases
flux get kustomizations
flux logs
flux &lt;span class="nb"&gt;suspend &lt;/span&gt;kustomization &amp;lt;kustomization_name&amp;gt;
flux reconcile &lt;span class="nb"&gt;source &lt;/span&gt;git flux-system
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;For additional information on using Flux, please look at the following series I wrote about Flux.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.linkedin.com/pulse/using-flux-gitops-tool-amazon-elastic-kubernetes-service-rasmuson" rel="noopener noreferrer"&gt;Using Flux, a GitOps Tool, with Amazon Elastic Kubernetes Service (EKS) - Part 1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.linkedin.com/pulse/using-flux-gitops-tool-amazon-elastic-kubernetes-service-rasmuson-1c" rel="noopener noreferrer"&gt;Using Flux, a GitOps Tool, with Amazon Elastic Kubernetes Service (EKS) - Part 2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.linkedin.com/pulse/using-flux-gitops-tool-amazon-elastic-kubernetes-service-rasmuson-1f" rel="noopener noreferrer"&gt;Using Flux, a GitOps Tool, with Amazon Elastic Kubernetes Service (EKS) - Part 3&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Kubernetes Addons managed by Flux
&lt;/h2&gt;

&lt;p&gt;Below are the Applications that Flux manages, the Kubernetes Addons will be deployed and configured by Flux first. The following Kubernetes Addons will be installed.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AWS Application Load Balancer Controller&lt;/li&gt;
&lt;li&gt;External DNS&lt;/li&gt;
&lt;li&gt;Cluster Autoscaler&lt;/li&gt;
&lt;li&gt;Cert manager&lt;/li&gt;
&lt;li&gt;Metrics Server&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The AWS Application Load Balancer Controller and External DNS must be deployed first because the Applications need to be accessible by a load balancer and have the DNS Name registered with Route 53.&lt;/p&gt;

&lt;h2&gt;
  
  
  Applications managed by Flux
&lt;/h2&gt;

&lt;p&gt;Flux manages the following applications. These applications will be used to demonstrate the various Istio features.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://istio.io/latest/docs/examples/bookinfo/" rel="noopener noreferrer"&gt;Bookinfo&lt;/a&gt; - A sample application composed of four separate microservices&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/stefanprodan/podinfo" rel="noopener noreferrer"&gt;Podinfo&lt;/a&gt; - A tiny web application made with Go&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Istio and Istio Addons managed by Flux
&lt;/h2&gt;

&lt;p&gt;Istio is comprised of the following three components.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://istio.io/" rel="noopener noreferrer"&gt;Istio&lt;/a&gt; - An open-source service mesh that provides a uniform way to connect, manage, and secure microservices, enabling traffic flow control, policy enforcement, and telemetry data aggregation without altering service code.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://istio.io/latest/docs/ops/deployment/architecture/#istiod" rel="noopener noreferrer"&gt;Istiod&lt;/a&gt; - Consolidated control plane daemon of the Istio service mesh, responsible for service discovery, configuration management, certificate issuance, and providing overall operational control.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://istio.io/latest/docs/setup/additional-setup/gateway/" rel="noopener noreferrer"&gt;Istio Ingress Gateway&lt;/a&gt; - A dedicated network gateway in the Istio service mesh architecture that manages incoming traffic routing to various services within the mesh.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The following components are not necessary to run Istio but are addons to help the observability features of Istio.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://kiali.io/" rel="noopener noreferrer"&gt;Kiali&lt;/a&gt; - An open-source observability platform tailored for service mesh deployments, providing insights into the performance and structure of microservices networks within Istio. Kiali will retrieve data from Prometheus, Grafana, and Jaeger if installed and configured correctly.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.jaegertracing.io/" rel="noopener noreferrer"&gt;Jaeger&lt;/a&gt; - Distributed Tracing platform - An open-source, end-to-end distributed tracing system that helps monitor and troubleshoot transactions in complex, microservice-based architectures.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-prometheus-stack" rel="noopener noreferrer"&gt;Kube Prometheus Stack&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://prometheus.io/" rel="noopener noreferrer"&gt;Prometheus&lt;/a&gt; - An open-source monitoring system with a dimensional data model, flexible query language, and powerful alerting functionality for storing and querying time-series data.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://grafana.com/oss/" rel="noopener noreferrer"&gt;Grafana&lt;/a&gt; - An open-source analytics and monitoring platform designed for visualizing and exploring metrics from various databases and time-series data.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;a href="https://grafana.com/oss/loki/" rel="noopener noreferrer"&gt;Grafana Loki&lt;/a&gt; - A horizontally scalable, multi-tenant log aggregation system inspired by Prometheus, designed for cost-effective storage and querying of logs at scale.&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  Review how Istio works with Applications and Microservices
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Review Configuration of Kubernetes Namespaces work with Istio
&lt;/h3&gt;

&lt;p&gt;By default, Istio doesn't inject sidecars/proxies into the pods. The easiest way to have Istio inject a sidecar/proxy to a pod is by adding a label to a Kubernetes namespace. When the label is added to an existing Kubernetes namespace, the existing pods must be deleted to add the sidecar/proxy container.&lt;/p&gt;

&lt;p&gt;As part of the Bookinfo and Podinfo installation managed by Flux, the Kubernetes namespaces included the label to have Istio inject a sidecar/proxy. Let's review the Kubernetes namespaces that have the label "istio-injection=enabled".&lt;/p&gt;

&lt;p&gt;In the Bookinfo namespace.yaml file. As you can see, when this namespace is created, the label "istio-injection=enabled" is added.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;apiVersion&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;v1&lt;/span&gt;
&lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Namespace&lt;/span&gt;
&lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;bookinfo&lt;/span&gt;
  &lt;span class="na"&gt;labels&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;istio-injection&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;enabled&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Let's review which Kubernetes namespaces have the label "istio-injection=enabled".&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Run the following command to determine which Kubernetes namespaces have the label "istio-injection=enabled".&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The result is four Kubernetes namespaces with the label "istio-injection=enabled".&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpu3mvkimjvs5oajabjx0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpu3mvkimjvs5oajabjx0.png" alt="Istio Proxy Enabled Namespaces"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Check Pods in the Bookinfo namespace as two containers running for each pod by running the following command.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;As you can see, each pod is running two containers&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faovca3oy0zkl1spzetdt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faovca3oy0zkl1spzetdt.png" alt="Istio Proxy Enabled Bookinfo Pods"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Review Configuration of Istio Gateway and VirtualServices
&lt;/h3&gt;

&lt;p&gt;Istio Gateway is a component of the Istio service mesh that manages incoming and outgoing traffic for microservices-based applications. It handles routing, load balancing, security, and TLS termination tasks. You define routing rules, authentication, and authorization policies, and it provides observability and high availability features to ensure efficient and secure communication within the service mesh.&lt;/p&gt;

&lt;p&gt;Istio VirtualService is a Kubernetes custom resource definition (CRD) that defines how traffic is routed to services in a service mesh. It is a powerful tool that can be used to implement various traffic management policies, such as load balancing, fault injection, and rate limiting.&lt;/p&gt;

&lt;p&gt;Here is the Istio Gateway that was created. This is an Istio Ingress Gateway.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;apiVersion&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;networking.istio.io/v1beta1&lt;/span&gt;
&lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Gateway&lt;/span&gt;
&lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;common-gateway&lt;/span&gt;
  &lt;span class="na"&gt;namespace&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;istio-ingress&lt;/span&gt;
&lt;span class="na"&gt;spec&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;selector&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;istio&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ingressgateway&lt;/span&gt;
  &lt;span class="na"&gt;servers&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;port&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;number&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;443&lt;/span&gt;
        &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;https-443&lt;/span&gt;
        &lt;span class="na"&gt;protocol&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;HTTPS&lt;/span&gt;
      &lt;span class="na"&gt;tls&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;mode&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;SIMPLE&lt;/span&gt;
        &lt;span class="na"&gt;credentialName&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;wildcard-tls"&lt;/span&gt;
      &lt;span class="na"&gt;hosts&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;*"&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;port&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;number&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;80&lt;/span&gt;
        &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;http-80&lt;/span&gt;
        &lt;span class="na"&gt;protocol&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;HTTP&lt;/span&gt;
      &lt;span class="na"&gt;tls&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;httpsRedirect&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
      &lt;span class="na"&gt;hosts&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;*"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;As part of the Istio Gateway, a TLS certificate is required. The TLS certificate can be created in several ways, but for the guide, Cert-Manager was used to create a wildcard certificate with Let's Encrypt.&lt;/p&gt;

&lt;p&gt;When Istio Gateways are created, a Kubernetes Service is created. This Kubernetes Service can be defined and used in Kubernetes Ingresses.&lt;/p&gt;

&lt;p&gt;Let's review the Bookinfo Kubernetes Ingress to see how this works.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;apiVersion&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;networking.k8s.io/v1&lt;/span&gt;
&lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Ingress&lt;/span&gt;
&lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;annotations&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;alb.ingress.kubernetes.io/actions.ssl-redirect&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;{"Type":&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;"redirect",&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;"RedirectConfig":&lt;/span&gt;
      &lt;span class="s"&gt;{&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;"Protocol":&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;"HTTPS",&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;"Port":&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;"443",&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;"StatusCode":&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;"HTTP_301"}}'&lt;/span&gt;
    &lt;span class="na"&gt;alb.ingress.kubernetes.io/certificate-arn&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;arn:aws:acm:us-west-2:012345678910:certificate/3860d571-18bc-4c62-af82-92a5d1cc3aba"&lt;/span&gt;
    &lt;span class="na"&gt;alb.ingress.kubernetes.io/listen-ports&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;[{"HTTP":&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;80},&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;{"HTTPS":&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;443}]'&lt;/span&gt;
    &lt;span class="na"&gt;alb.ingress.kubernetes.io/scheme&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;internet-facing&lt;/span&gt;
    &lt;span class="na"&gt;alb.ingress.kubernetes.io/ssl-redirect&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;443"&lt;/span&gt;
    &lt;span class="na"&gt;alb.ingress.kubernetes.io/target-type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ip&lt;/span&gt;
    &lt;span class="na"&gt;alb.ingress.kubernetes.io/healthcheck-path&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;/healthz/ready&lt;/span&gt;
    &lt;span class="na"&gt;alb.ingress.kubernetes.io/healthcheck-port&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;status-port&lt;/span&gt;
    &lt;span class="na"&gt;alb.ingress.kubernetes.io/healthcheck-protocol&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;HTTP&lt;/span&gt;
    &lt;span class="na"&gt;alb.ingress.kubernetes.io/backend-protocol&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;HTTPS&lt;/span&gt;
    &lt;span class="na"&gt;external-dns.alpha.kubernetes.io/hostname&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;bookinfo.dallin.brewsentry.com"&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;bookinfo-ingress&lt;/span&gt;
  &lt;span class="na"&gt;namespace&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;istio-ingress&lt;/span&gt;
&lt;span class="na"&gt;spec&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;ingressClassName&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;alb&lt;/span&gt;
  &lt;span class="na"&gt;tls&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;hosts&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;bookinfo.dallin.brewsentry.com&lt;/span&gt;
    &lt;span class="na"&gt;secretName&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;bookinfo-tls&lt;/span&gt;
  &lt;span class="na"&gt;rules&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;host&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;bookinfo.dallin.brewsentry.com&lt;/span&gt;
    &lt;span class="na"&gt;http&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;paths&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;backend&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;service&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;istio-ingressgateway&lt;/span&gt;
            &lt;span class="na"&gt;port&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
              &lt;span class="na"&gt;number&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;443&lt;/span&gt;
        &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;/*&lt;/span&gt;
        &lt;span class="na"&gt;pathType&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ImplementationSpecific&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;The Bookinfo Kubernetes Ingress has a rule that listens for requests from a host and then routes the requests to the istio-ingressgateway Kubernetes Service.&lt;/p&gt;

&lt;p&gt;Istio VirtualService is a Kubernetes custom resource definition (CRD) that defines how traffic is routed to services in a service mesh. It is a powerful tool that can be used to implement various traffic management policies, such as load balancing, fault injection, and rate limiting.&lt;/p&gt;

&lt;p&gt;A VirtualService consists of a set of routing rules. Each routing rule defines a match condition and a destination. A request is routed to the destination if it matches the match condition.&lt;/p&gt;

&lt;p&gt;Here is the VirtualService for Bookinfo.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;apiVersion&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;networking.istio.io/v1beta1&lt;/span&gt;
&lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;VirtualService&lt;/span&gt;
&lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;bookinfo-vs&lt;/span&gt;
  &lt;span class="na"&gt;namespace&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;bookinfo&lt;/span&gt;
&lt;span class="na"&gt;spec&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;hosts&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;bookinfo.dallin.brewsentry.com"&lt;/span&gt;
  &lt;span class="na"&gt;gateways&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;istio-ingress/common-gateway&lt;/span&gt;
  &lt;span class="na"&gt;http&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;match&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uri&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;exact&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;/&lt;/span&gt;
    &lt;span class="na"&gt;redirect&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;uri&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;/productpage&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;match&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uri&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;exact&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;/productpage&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uri&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;prefix&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;/static&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uri&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;exact&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;/login&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uri&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;exact&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;/logout&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uri&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;prefix&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;/api/v1/products&lt;/span&gt;
    &lt;span class="na"&gt;route&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;destination&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;host&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;productpage&lt;/span&gt;
        &lt;span class="na"&gt;port&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;number&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;9080&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Let's review what Istio VirtualServices were created.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Run the following command to determine what Istio virtual services were created.&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl get virtualservices.networking.istio.io &lt;span class="nt"&gt;-A&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The result is that three Istio virtual services were created.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb03jx2srjc36usgt2qxd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb03jx2srjc36usgt2qxd.png" alt="Istio VirtualServices"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;In this article, we configured access to Amazon EKS Cluster and installed the Istio CLI - istioctl tool. We ran the "configure.sh" script and installed Flux on the Amazon EKS Cluster. We reviewed the Addons and Applications managed by Flux and discussed the Istio Components and Addons used by Istio. Finally, we reviewed how Istio works with Applications and Microservices.&lt;/p&gt;

&lt;p&gt;Please stay tuned for the third and final part of the series, where we will complete the following tasks.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Access the Applications managed by Flux&lt;/li&gt;
&lt;li&gt;Demonstrate how Istio works&lt;/li&gt;
&lt;li&gt;Review the Istio Addons&lt;/li&gt;
&lt;li&gt;Clean up apps and infrastructure&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>aws</category>
      <category>eks</category>
      <category>servicemesh</category>
      <category>istio</category>
    </item>
    <item>
      <title>Using Istio, a Service Mesh, with Amazon Elastic Kubernetes Service (EKS) - Part 1</title>
      <dc:creator>Dallin</dc:creator>
      <pubDate>Fri, 10 Nov 2023 20:57:08 +0000</pubDate>
      <link>https://forem.com/junglekid/using-istio-a-service-mesh-with-amazon-elastic-kubernetes-service-eks-part-1-31gb</link>
      <guid>https://forem.com/junglekid/using-istio-a-service-mesh-with-amazon-elastic-kubernetes-service-eks-part-1-31gb</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Have you ever wondered if there was a better way to manage, monitor, or secure your distributed microservices without adding extra modules to your code? Well, there is a way. It is called a Service Mesh.&lt;/p&gt;

&lt;p&gt;This is the first part of the series on Using Istio, a Service Mesh, with Amazon Elastic Kubernetes Service (EKS). This guide will explain what a Service Mesh and Istio are and show you how to use Istio, a Service Mesh, with Amazon Elastic Kubernetes Service (EKS). You will use Flux to deploy various Kubernetes Services and Applications, including Istio, and supporting applications and microservices to Amazon Elastic Kubernetes Service (EKS).&lt;/p&gt;

&lt;p&gt;You can access the code in my &lt;a href="https://github.com/junglekid/aws-eks-istio-lab"&gt;GitHub Repository&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Zd4pT0rd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kefv69nsassdos8t8q57.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Zd4pT0rd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kefv69nsassdos8t8q57.png" alt="Istio and AWS EKS" width="800" height="296"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Before we begin, let's define what Service Mesh and Istio are.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is a Service Mesh?
&lt;/h2&gt;

&lt;p&gt;A service mesh is a dedicated infrastructure layer for facilitating service-to-service communications between microservices, often in a cloud-based application. It's designed to handle a high volume of network-based inter-process communication among application infrastructure services using application programming interfaces (APIs).&lt;/p&gt;

&lt;p&gt;Here's a breakdown of the key components and concepts of a service mesh:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Sidecar Proxy&lt;/strong&gt;: In a typical service mesh, each microservice is paired with a lightweight network proxy that intercepts network communication. This proxy, often called a "sidecar," intercepts all network communication to and from the service.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Data Plane&lt;/strong&gt;: The collection of sidecar proxies that intercept and control the network traffic between services make up the data plane. They are responsible for features like service discovery, health checking, routing, load balancing, authentication, authorization, and observability.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Control Plane&lt;/strong&gt;: This is the administrative layer of the service mesh that provides the management capabilities. It allows operators to configure the proxies in the data plane and apply policies. It's also where the service mesh’s intelligence resides, as it controls the behavior of the proxy servers.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Service Discovery&lt;/strong&gt;: Service meshes can dynamically recognize the addition of new services and the removal of old ones, adapting to the changes in the infrastructure.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Traffic Management&lt;/strong&gt;: It can intelligently control the flow of traffic and API calls between services, handling load balancing, routing, and circuit breaking.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Security&lt;/strong&gt;: Service meshes can handle encryption in transit and enforce security policies, like mutual TLS (mTLS), for service identity verification and secure communication.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Observability&lt;/strong&gt;: Provides monitoring, logging, and tracing of service interactions, which is vital for diagnosing issues and understanding system behavior.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Policy Enforcement&lt;/strong&gt;: It allows operators to apply organizational policies related to security, compliance, and governance across all service communications.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Examples of Service Meshes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Istio&lt;/strong&gt;: One of the most popular service mesh solutions, Istio is designed to connect, secure, control, and observe services. It works with Kubernetes but can also be adapted to integrate with other environments. It provides robust traffic management, security features, and observability.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Linkerd&lt;/strong&gt;: Known for its simplicity and ease of use, Linkerd is a lightweight service mesh that offers core service mesh features like service discovery, routing, failure handling, and metrics. It's designed to be as transparent as possible and can be used with Kubernetes and other frameworks.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Consul&lt;/strong&gt;: Consul by HashiCorp provides a full-featured control plane with service discovery, health checking, and a service mesh. It can be used with Kubernetes or virtual machines and is known for its cross-datacenter functionality.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;AWS App Mesh&lt;/strong&gt;: This service mesh provided by AWS makes it easy to manage and communicate between microservices across multiple types of compute infrastructure. App Mesh standardizes how your services communicate, giving end-to-end visibility and helping to ensure high availability for your applications.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Service meshes are helpful because they offload common functionalities from the application code, allowing developers to focus on the business logic rather than the complexities of networking. However, they also add a new layer to the infrastructure stack, which can increase complexity and the operational burden if not managed properly.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Istio?
&lt;/h2&gt;

&lt;p&gt;Istio is an open-source service mesh that helps organizations run distributed, microservices-based applications more securely, reliably, and efficiently. It's designed to connect, monitor, and secure microservices, providing tools to manage traffic flows between services, enforce policies, and aggregate telemetry data. Google, IBM, and Lyft originally developed it and are now part of the Cloud Native Computing Foundation (CNCF). Istio is platform-independent but often associated with Kubernetes, commonly used to orchestrate containers that host microservices.&lt;/p&gt;

&lt;p&gt;Here's a brief overview of what Istio can do:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Traffic Management&lt;/strong&gt;: Istio provides advanced routing capabilities, allowing for A/B testing, canary releases, and more. It does this by managing the flow of traffic and API calls between services, which is crucial in a microservices architecture. It enables request retries, fault injection, and traffic splitting for increased resilience and control.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Security&lt;/strong&gt;: Istio enhances security by providing inter-service authentication and authorization without requiring changes to the application. It manages certificates and keys and ensures encrypted communication between services with mutual TLS (mTLS), helping to reduce the risk of man-in-the-middle attacks.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Observability&lt;/strong&gt;: It offers insights into the behavior of the services, including monitoring, logging, and tracing of the communications, which helps in understanding the performance and issues in the applications.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Policy Enforcement&lt;/strong&gt;: Istio allows you to enforce policies regarding access control and resource usage across your microservices without modifying the services themselves.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Service Discovery&lt;/strong&gt;: Istio supports service discovery mechanisms, making it easier for services to find and communicate with each other in a dynamic environment.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Istio achieves these features by deploying a special sidecar proxy (Envoy proxy) alongside each service instance. These proxies intercept and control all network communication between microservices, and they are managed by Istio's control plane, which provides the necessary rules for the proxies.&lt;/p&gt;

&lt;p&gt;Istio’s service mesh architecture is composed of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Data Plane&lt;/strong&gt;: Consisting of intelligent proxies (Envoy) deployed as sidecars that mediate and control all network communication between microservices.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Control Plane&lt;/strong&gt;: Manages and configures the proxies to route traffic and enforces policies at runtime.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Istio is designed to work on various environments, including on-premises, cloud-hosted, and hybrid environments, and it can run with services written in any language.&lt;/p&gt;

&lt;p&gt;Istio operates at the platform layer, providing the infrastructure necessary to manage the interactions between microservices, while the application code remains unaware of Istio’s existence. It is typically used in Kubernetes environments but can also be used with other orchestration solutions. Its control plane architecture is responsible for managing the overall configuration and behavior of the service mesh.&lt;/p&gt;

&lt;p&gt;By decoupling development concerns from operational challenges, Istio provides a uniform way to secure, connect, and monitor microservices.&lt;/p&gt;

&lt;h2&gt;
  
  
  Technologies we are going to use:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;HashiCorp Terraform&lt;/li&gt;
&lt;li&gt;Istio&lt;/li&gt;
&lt;li&gt;Flux&lt;/li&gt;
&lt;li&gt;GitHub&lt;/li&gt;
&lt;li&gt;Amazon Elastic Kubernetes Service (EKS)&lt;/li&gt;
&lt;li&gt;Amazon Elastic Container Registry (ECR)&lt;/li&gt;
&lt;li&gt;AWS Key Management Service (KMS)&lt;/li&gt;
&lt;li&gt;Amazon Route 53&lt;/li&gt;
&lt;li&gt;AWS Certificate Manager (ACM)&lt;/li&gt;
&lt;li&gt;Amazon Virtual Private Cloud (Amazon VPC)&lt;/li&gt;
&lt;li&gt;IAM policies and roles&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;p&gt;Before you begin, make sure you have the following before starting:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;An active AWS account. You can create a new &lt;a href="https://repost.aws/knowledge-center/create-and-activate-aws-account"&gt;AWS account here&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;AWS CLI installed and configured. Instructions can be found &lt;a href="https://aws.amazon.com/cli/"&gt;here&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Terraform installed. Instructions can be found &lt;a href="https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli"&gt;here&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Helm installed. Instructions can be found &lt;a href="https://helm.sh/docs/intro/install"&gt;here&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Kubernetes CLI (kubectl). Instructions can be found &lt;a href="https://kubernetes.io/docs/tasks/tools/#kubectl"&gt;here&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Flux CLI. Instructions can be found &lt;a href="https://fluxcd.io/flux/installation/#install-the-flux-cli"&gt;here&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;A GitHub Personal Access Token. Instructions can be found &lt;a href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens#creating-a-personal-access-token-classic"&gt;here&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Architecture Overview
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Amazon Elastic Kubernetes Service (EKS)&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Create AWS EKS Cluster
module "eks" {
  source  = "terraform-aws-modules/eks/aws"
  version = "~&amp;gt; 19.15"

  cluster_name                    = local.eks_cluster_name
  cluster_version                 = local.eks_cluster_version
  cluster_endpoint_private_access = true
  cluster_endpoint_public_access  = true

  cluster_addons = {
    kube-proxy = {
      most_recent                 = true
      resolve_conflicts           = "OVERWRITE"
      resolve_conflicts_on_update = "OVERWRITE"
    }
    vpc-cni = {
      most_recent                 = true
      resolve_conflicts           = "OVERWRITE"
      resolve_conflicts_on_update = "OVERWRITE"
      service_account_role_arn    = module.vpc_cni_ipv4_irsa_role.iam_role_arn
    }
    aws-ebs-csi-driver = {
      most_recent                 = true
      resolve_conflicts           = "OVERWRITE"
      resolve_conflicts_on_update = "OVERWRITE"
      service_account_role_arn    = module.ebs_csi_irsa_role.iam_role_arn
    }
    coredns = {
      most_recent                 = true
      resolve_conflicts           = "OVERWRITE"
      resolve_conflicts_on_update = "OVERWRITE"
    }
  }

  vpc_id     = module.vpc.vpc_id
  subnet_ids = module.vpc.private_subnets

  depends_on = [module.vpc]
}
...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;AWS Certificate Manager (ACM)&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Create SSL Certificate using AWS ACM for Bookinfo
resource "aws_acm_certificate" "bookinfo" {
  domain_name       = "bookinfo.${local.public_base_domain_name}"
  validation_method = "DNS"

  lifecycle {
    create_before_destroy = true
  }
}

# Validate SSL Certificate using DNS for Bookinfo
resource "aws_route53_record" "bookinfo_validation" {
  for_each = {
    for dvo in aws_acm_certificate.bookinfo.domain_validation_options : dvo.domain_name =&amp;gt; {
      name   = dvo.resource_record_name
      record = dvo.resource_record_value
      type   = dvo.resource_record_type
    }
  }

  allow_overwrite = true
  name            = each.value.name
  records         = [each.value.record]
  ttl             = 60
  type            = each.value.type
  zone_id         = local.route53_zone_id
}

# Retrieve SSL Certificate ARN from AWS ACM for Bookinfo
resource "aws_acm_certificate_validation" "bookinfo" {
  certificate_arn         = aws_acm_certificate.bookinfo.arn
  validation_record_fqdns = [for record in aws_route53_record.bookinfo_validation : record.fqdn]
}
...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Amazon Virtual Private Cloud (Amazon VPC)&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Create AWS VPC and Subnets
module "vpc" {
  source  = "terraform-aws-modules/vpc/aws"
  version = "~&amp;gt; 5.0.0"

  private_subnets     = [for k, v in local.azs : cidrsubnet(local.vpc_cidr, 4, k)]
  public_subnets      = [for k, v in local.azs : cidrsubnet(local.vpc_cidr, 8, k + 48)]

  name                 = local.vpc_name
  cidr                 = local.vpc_cidr
  azs                  = local.azs
  enable_nat_gateway   = true
  single_nat_gateway   = true
  enable_dns_hostnames = true
  enable_dns_support   = true

  create_flow_log_cloudwatch_iam_role             = true
  create_flow_log_cloudwatch_log_group            = true
  enable_dhcp_options                             = true
  enable_flow_log                                 = true
  flow_log_cloudwatch_log_group_retention_in_days = 7
  flow_log_max_aggregation_interval               = 60

  public_subnet_tags = {
    "kubernetes.io/cluster/${local.eks_cluster_name}" = "shared"
    "kubernetes.io/role/elb"                          = 1
  }

  private_subnet_tags = {
    "kubernetes.io/cluster/${local.eks_cluster_name}" = "shared"
    "kubernetes.io/role/internal-elb"                 = 1
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;IAM policies and roles&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Create IAM Role for AWS ALB Service Account
module "load_balancer_controller_irsa_role" {
  source  = "terraform-aws-modules/iam/aws//modules/iam-role-for-service-accounts-eks"
  version = "~&amp;gt; 5.0"

  role_name                              = "${local.eks_iam_role_prefix}-aws-load-balancer-controller"
  attach_load_balancer_controller_policy = true

  oidc_providers = {
    ex = {
      provider_arn               = module.eks.oidc_provider_arn
      namespace_service_accounts = ["kube-system:aws-load-balancer-controller"]
    }
  }
}
...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Amazon ALB&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Amazon ALBs will automatically be created when you deploy the various apps using Flux as the deployment tool. This will be discussed in part 2 of this article.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Amazon Route 53&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;When you deploy the various apps using Flux, the public domains you will use will be registered automatically on Amazon Route 53. This will be discussed in part 2 of this article.&lt;/p&gt;

&lt;p&gt;We just finished reviewing the architecture that will be created by Terraform code. Several of the code blocks from above are just snippets of code. Please see the git repo for the complete code. &lt;/p&gt;

&lt;h2&gt;
  
  
  Setup and Deploy Infrastructure
&lt;/h2&gt;

&lt;p&gt;Follow these steps to set up the environment.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Set variables in "locals.tf". Below are some of the variables that should be set.&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;aws_region&lt;/li&gt;
&lt;li&gt;aws_profile&lt;/li&gt;
&lt;li&gt;tags&lt;/li&gt;
&lt;li&gt;public_base_domain_name&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;Update Terraform S3 Backend in provider.tf&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;bucket&lt;/li&gt;
&lt;li&gt;key&lt;/li&gt;
&lt;li&gt;profile&lt;/li&gt;
&lt;li&gt;dynamodb_table&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Navigate to the Terraform directory&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;terraform
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Initialize Terraform&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;terraform init
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Validate the Terraform code&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;terraform validate
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Run, review, and save a Terraform plan&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;terraform plan &lt;span class="nt"&gt;-out&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;plan.out
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Apply the Terraform plan&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;terraform apply plan.out
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Review Terraform apply results&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--oYPlwI8---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/12zk4xa8r31bipvm0ds4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--oYPlwI8---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/12zk4xa8r31bipvm0ds4.png" alt="Terraform Apply" width="800" height="299"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;After completing the above steps, you should have a running and working Amazon EKS Cluster.&lt;/p&gt;

&lt;p&gt;Please stay tuned for part two of the series, where we will complete the following tasks.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Configure access to Amazon EKS Cluster&lt;/li&gt;
&lt;li&gt;Run the configure.sh script to configure the Flux Repository&lt;/li&gt;
&lt;li&gt;Install Flux to the Amazon EKS Cluster&lt;/li&gt;
&lt;li&gt;Review the Addons and Applications managed by Flux&lt;/li&gt;
&lt;li&gt;Discuss the Istio Components and Addons used by Istio&lt;/li&gt;
&lt;li&gt;Review how Istio works with Applications and Microservices&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>aws</category>
      <category>eks</category>
      <category>servicemesh</category>
      <category>istio</category>
    </item>
  </channel>
</rss>
