<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Kiali – Documentation</title>
    <link>https://v2-24.kiali.io/docs/</link>
    <description>Recent content in Documentation on Kiali</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en</language>
    
	  <atom:link href="https://v2-24.kiali.io/docs/index.xml" rel="self" type="application/rss+xml" />
    
    
      
        
      
    
    
    <item>
      <title>News: KIALI-SECURITY-003 - Installation into ad-hoc namespaces</title>
      <link>https://v2-24.kiali.io/news/security-bulletins/kiali-security-003/</link>
      <pubDate>Tue, 11 May 2021 11:00:00 -0600</pubDate>
      
      <guid>https://v2-24.kiali.io/news/security-bulletins/kiali-security-003/</guid>
      <description>
        
        
        &lt;h2 id=&#34;description&#34;&gt;Description&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Disclosure date&lt;/strong&gt;: May 11, 2021&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected Releases&lt;/strong&gt;: prior to 1.33.0&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Impact Score&lt;/strong&gt;: &lt;a href=&#34;https://nvd.nist.gov/vuln-metrics/cvss/v3-calculator?vector=AV:N/AC:L/PR:H/UI:N/S:C/C:L/I:L/A:L&amp;amp;version=3.1&#34;&gt;6.6 - AV:N/AC:L/PR:H/UI:N/S:C/C:L/I:L/A:L&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A vulnerability was found in the Kiali Operator allowing installation of a specified image into any namespace.&lt;/p&gt;
&lt;p&gt;Kiali users are exposed to this vulnerability if all the following conditions are met:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Kiali operator is used for installation.&lt;/li&gt;
&lt;li&gt;Kiali CR was edited to install an image into an unapproved namespace.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This vulnerability is filed as
&lt;a href=&#34;https://access.redhat.com/security/cve/CVE-2021-3495&#34;&gt;CVE-2021-3495&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;mitigation&#34;&gt;Mitigation&lt;/h2&gt;
&lt;p&gt;If you can update:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Update to Kiali Operator v1.33.0 or later.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you can not update:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ensure only trusted individuals can create or edit a Kiali CRs (resources of kind &amp;ldquo;kiali&amp;rdquo;).&lt;/li&gt;
&lt;/ul&gt;

      </description>
    </item>
    
    <item>
      <title>News: KIALI-SECURITY-002 - Authentication bypass when using the OpenID login strategy</title>
      <link>https://v2-24.kiali.io/news/security-bulletins/kiali-security-002/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://v2-24.kiali.io/news/security-bulletins/kiali-security-002/</guid>
      <description>
        
        
        &lt;h2 id=&#34;description&#34;&gt;Description&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Disclosure date&lt;/strong&gt;: March 5, 2021&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected Releases&lt;/strong&gt;: 1.26.0, 1.26.1, 1.26.2, 1.27.0, 1.28.0, 1.28.1, 1.29.0, 1.29.1, 1.30.0&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Impact Score&lt;/strong&gt;: &lt;a href=&#34;https://nvd.nist.gov/vuln-metrics/cvss/v3-calculator?vector=AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:L/A:N/E:F/RL:X/RC:C&amp;amp;version=3.1&#34;&gt;7.0 - AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:L/A:N/E:F/RL:X/RC:C&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A vulnerability was found in Kiali allowing an attacker to bypass the
authentication mechanism. The vulnerability lets an attacker build forged
credentials and use them to gain unauthorized access to Kiali.&lt;/p&gt;
&lt;p&gt;Kiali users are exposed to this vulnerability if all the following conditions are met:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Kiali is setup with the &lt;code&gt;openid&lt;/code&gt; authentication strategy.&lt;/li&gt;
&lt;li&gt;As a result of configurations in both Kiali and your OpenID server, Kiali uses the
&lt;em&gt;implicit flow&lt;/em&gt; of the OpenID specification to negotiate authentication.&lt;/li&gt;
&lt;li&gt;Kiali is setup with RBAC turned off.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This vulnerability is filed as
&lt;a href=&#34;https://access.redhat.com/security/cve/CVE-2021-20278&#34;&gt;CVE-2021-20278&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;mitigation&#34;&gt;Mitigation&lt;/h2&gt;
&lt;p&gt;If you can update:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Update to Kiali v1.31.0 or later.&lt;/li&gt;
&lt;li&gt;If you need an earlier version, only Kiali 1.26.3 and 1.29.2 are fixed.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you are locked with an older version of Kiali, you have three options:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Configure Kiali to use the &lt;em&gt;authorization code&lt;/em&gt; flow of the OpenID specification; or&lt;/li&gt;
&lt;li&gt;Configure Kiali to use the &lt;em&gt;implicit flow&lt;/em&gt; of the OpenID specification &lt;em&gt;and&lt;/em&gt; enable RBAC; or&lt;/li&gt;
&lt;li&gt;Configure Kiali to use any of the other available authentication mechanisms.&lt;/li&gt;
&lt;/ul&gt;

      </description>
    </item>
    
    <item>
      <title>News: KIALI-SECURITY-001 - Authentication bypass using forged credentials</title>
      <link>https://v2-24.kiali.io/news/security-bulletins/kiali-security-001/</link>
      <pubDate>Tue, 24 Mar 2020 11:00:00 -0600</pubDate>
      
      <guid>https://v2-24.kiali.io/news/security-bulletins/kiali-security-001/</guid>
      <description>
        
        
        &lt;h2 id=&#34;description&#34;&gt;Description&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Disclosure date&lt;/strong&gt;: March 25, 2020&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected Releases&lt;/strong&gt;: 0.4.0 to 1.15.0&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Impact Score&lt;/strong&gt;: &lt;a href=&#34;https://nvd.nist.gov/vuln-metrics/cvss/v3-calculator?vector=AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:H/A:H&amp;amp;version=3.1&#34;&gt;9.4 - AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:H/A:H&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A vulnerability was found in Kiali allowing an attacker to bypass the
authentication mechanism. Currently, Kiali has four authentication mechanisms:
&lt;em&gt;login, token, openshift&lt;/em&gt; and &lt;em&gt;ldap&lt;/em&gt;. All are vulnerable.&lt;/p&gt;
&lt;p&gt;The vulnerability lets an attacker build forged credentials and use them to
gain unauthorized access to Kiali.&lt;/p&gt;
&lt;p&gt;Additionally, it was found that Kiali credentials were not being validated
properly. Depending on the authentication mechanism configured in Kiali, this
could facilitate unauthorized access into Kiali with forged and/or invalid
credentials.&lt;/p&gt;
&lt;p&gt;These vulnerabilities are filed as
&lt;a href=&#34;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-1762&#34;&gt;CVE-2020-1762&lt;/a&gt;
and
&lt;a href=&#34;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-1764&#34;&gt;CVE-2020-1764&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;detection&#34;&gt;Detection&lt;/h2&gt;
&lt;p&gt;Use the following bash script to check if you are vulnerable:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;KIALI_VERSION=$(kubectl get pods -n istio-system -l app=kiali -o yaml | sed -n &amp;#39;s/^.*image: .*:v\(.*\)$/\1/p&amp;#39; | sort -u)
kubectl get deploy kiali -n istio-system -o yaml | grep -q LOGIN_TOKEN_SIGNING_KEY
TEST_KEY_ENV=$?
kubectl get cm kiali -n istio-system -o yaml | grep signing_key | grep -vq kiali
TEST_KEY_CFG=$?
VERSION_ENTRIES=(${KIALI_VERSION//./ })
echo &amp;#34;Your Kiali version found: ${KIALI_VERSION}&amp;#34;
[ ${VERSION_ENTRIES[0]} -lt &amp;#34;1&amp;#34; ] || ([ ${VERSION_ENTRIES[0]} -eq &amp;#34;1&amp;#34; ] &amp;amp;&amp;amp; (\
  [ ${VERSION_ENTRIES[1]} -lt &amp;#34;15&amp;#34; ] || ([ ${VERSION_ENTRIES[1]} -eq &amp;#34;15&amp;#34; ] &amp;amp;&amp;amp; ( \
  [ ${VERSION_ENTRIES[2]} -le &amp;#34;0&amp;#34; ])))) &amp;amp;&amp;amp; echo &amp;#34;Your Kiali version is vulnerable&amp;#34;
[ $TEST_KEY_ENV -eq 1 ] &amp;amp;&amp;amp; [ $TEST_KEY_CFG -eq 1 ] &amp;amp;&amp;amp; echo &amp;#34;Your Kiali configuration looks vulnerable&amp;#34;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The script output will be similar to this:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Your Kiali version found: 1.14.0
Your Kiali version is vulnerable
Your Kiali configuration looks vulnerable
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;mitigation&#34;&gt;Mitigation&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Update to Kiali 1.15.1 or later.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Alternatively, if you cannot update to version 1.15.1, mitigation is possible by
&lt;a href=&#34;https://github.com/kiali/kiali/blob/a660a80b2add1fd2fcfb5662c63824ca1dff95b9/operator/deploy/kiali/kiali_cr.yaml#L602-L608&#34;&gt;setting a secure signing key&lt;/a&gt;
when deploying Kiali. If you installed via Kiali operator, you could use the following bash script:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;SIGN_KEY=$(chars=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890; for i in {1..20}; do echo -n &amp;#34;${chars:RANDOM%${#chars}:1}&amp;#34;; done; echo)
kubectl get kiali -n $(kubectl get kiali --all-namespaces --no-headers -o custom-columns=NS:.metadata.namespace) -o yaml | sed &amp;#34;s/spec:/spec:\n    login_token:\n      signing_key: $SIGN_KEY/&amp;#34; | kubectl apply -f -
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;If you installed via Istio helm charts or &lt;code&gt;istioctl&lt;/code&gt; command, you could use the following bash script:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;KIALI_INSTALL_NAMESPACE=istio-system
SIGN_KEY=$(chars=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890; for i in {1..20}; do echo -n &amp;#34;${chars:RANDOM%${#chars}:1}&amp;#34;; done; echo)
kubectl get cm kiali -n $KIALI_INSTALL_NAMESPACE -o yaml | sed &amp;#34;s/server:/login_token:\\n      signing_key: $SIGN_KEY\\n    server:/&amp;#34; | kubectl apply -f -
kubectl delete pod -l app=kiali -n $KIALI_INSTALL_NAMESPACE
&lt;/code&gt;&lt;/pre&gt;
      </description>
    </item>
    
    <item>
      <title>Docs: Introduction</title>
      <link>https://v2-24.kiali.io/docs/tutorials/multicluster/01-introduction/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://v2-24.kiali.io/docs/tutorials/multicluster/01-introduction/</guid>
      <description>
        
        
        &lt;p&gt;So far, we know how good Kiali can be to understand applications, their relationships with each other and with external applications.&lt;/p&gt;
&lt;p&gt;In the previous tutorial, Kiali was setup to observe just a single cluster. Now, we will expand its capabilities to observe more than one cluster. The extra clusters are remotes, meaning that there is not a control plane on them, they only have user applications.&lt;/p&gt;
&lt;p&gt;This topology is called &lt;a href=&#34;https://istio.io/latest/docs/setup/install/multicluster/primary-remote/&#34;&gt;primary-remote&lt;/a&gt; and it is very useful to spread applications into different clusters having just one primary cluster, which is where Istio and Kiali are installed.&lt;/p&gt;
&lt;p&gt;This scenario is a good choice when as an application administrator or architect, you want to give a different set of clusters to different sets of developers and you also want all these applications to belong to the same mesh. This scenario is also very helpful to give applications high availability capabilities while keeping the observability together (we are referring to just applications in terms of high availability, for Istio, we might want to install a multi-primary deployment model, which is on the &lt;a href=&#34;https://github.com/kiali/kiali/issues/5618&#34;&gt;roadmap&lt;/a&gt; for the multicluster journey for Kiali).&lt;/p&gt;
&lt;p&gt;In this tutorial we will be deploying Istio in a primary-remote deployment. At first, we will install the &amp;ldquo;east&amp;rdquo; cluster with Istio, then we will add the &amp;ldquo;west&amp;rdquo; remote cluster and join it to the mesh. Then we will see how Kiali allows us to observe and manage both clusters and their applications. Metrics will be aggregated into the &amp;ldquo;east&amp;rdquo; cluster using Prometheus federation and a single Kiali will be deployed on the &amp;ldquo;east&amp;rdquo; cluster.&lt;/p&gt;
&lt;p&gt;If you already have a primary-remote deployment, you can skip to &lt;a href=&#34;https://v2-24.kiali.io/docs/tutorials/multicluster/05-install-kiali/&#34;&gt;instaliing Kiali&lt;/a&gt;.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Introduction</title>
      <link>https://v2-24.kiali.io/docs/tutorials/tempo/01-introduction/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://v2-24.kiali.io/docs/tutorials/tempo/01-introduction/</guid>
      <description>
        
        
        &lt;h3 id=&#34;introduction&#34;&gt;Introduction&lt;/h3&gt;
&lt;p&gt;Kiali uses &lt;a href=&#34;https://v2-24.kiali.io/docs/configuration/p8s-jaeger-grafana/tracing/jaeger/&#34;&gt;Jaeger&lt;/a&gt; as a default distributed tracing backend. In this tutorial, we will replace it for &lt;a href=&#34;https://grafana.com/docs/tempo/next/&#34;&gt;Grafana Tempo&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;We will setup a local environment in minikube, and install Kiali with Tempo as a distributed backend. This is a simplified architecture diagram:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/tutorial/tempo/kiali-tempo.png&#34; alt=&#34;Kiali Tempo Architecture&#34; title=&#34;Kiali Tempo integration architecture&#34;&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;We will install Tempo with the Tempo Operator and enable Jaeger query frontend to be compatible with Kiali in order to query traces.&lt;/li&gt;
&lt;li&gt;We will setup Istio to send traces to the Tempo collector using the zipkin protocol. It is enabled by default from version 3.0 or higher of the Tempo Operator.&lt;/li&gt;
&lt;li&gt;We will install MinIO and setup it up as object store, S3 compatible.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;environment&#34;&gt;Environment&lt;/h3&gt;
&lt;p&gt;We use the following environment:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Istio 1.18.1&lt;/li&gt;
&lt;li&gt;Kiali 1.72&lt;/li&gt;
&lt;li&gt;Minikube 1.30&lt;/li&gt;
&lt;li&gt;Tempo operator TempoStack v3.0&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;There are different installation methods for Grafana Tempo, but in this tutorial we will use the &lt;a href=&#34;https://grafana.com/docs/tempo/latest/setup/operator/&#34;&gt;Tempo operator&lt;/a&gt;.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Jaeger</title>
      <link>https://v2-24.kiali.io/docs/configuration/p8s-jaeger-grafana/tracing/jaeger/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://v2-24.kiali.io/docs/configuration/p8s-jaeger-grafana/tracing/jaeger/</guid>
      <description>
        
        
        &lt;h2 id=&#34;jaeger-configuration&#34;&gt;Jaeger configuration&lt;/h2&gt;
&lt;p&gt;Jaeger is a &lt;em&gt;highly recommended&lt;/em&gt; service because &lt;a href=&#34;https://v2-24.kiali.io/docs/features/tracing/&#34;&gt;Kiali uses distributed
tracing data for several features&lt;/a&gt;,
providing an enhanced experience.&lt;/p&gt;
&lt;p&gt;By default, Kiali will try to reach Jaeger at the GRPC-enabled URL of the form
&lt;code&gt;http://tracing.&amp;lt;istio_namespace_name&amp;gt;:16685/jaeger&lt;/code&gt;, which is the usual case
if you are using &lt;a href=&#34;https://istio.io/latest/docs/ops/integrations/jaeger/#option-1-quick-start&#34;&gt;the Jaeger Istio
add-on&lt;/a&gt;.
If this endpoint is unreachable, Kiali will disable features that use
distributed tracing data.&lt;/p&gt;
&lt;p&gt;If your Jaeger instance has a different service name or is installed to a
different namespace, you must manually provide the endpoint where it is
available, like in the following example:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;spec&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;external_services&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;tracing&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Enabled by default. Kiali will anyway fallback to disabled if&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Jaeger is unreachable.&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;enabled&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;true&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Jaeger service name is &amp;#34;tracing&amp;#34; and is in the &amp;#34;telemetry&amp;#34; namespace.&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Make sure the URL you provide corresponds to the non-GRPC enabled endpoint&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# if you set &amp;#34;use_grpc&amp;#34; to false.&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;internal_url&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;http://tracing.telemetry:16685/jaeger&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;use_grpc&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;true&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Public facing URL of Jaeger&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;external_url&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;http://my-jaeger-host/jaeger&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Minimally, you must provide &lt;code&gt;spec.external_services.tracing.internal_url&lt;/code&gt; to
enable Kiali features that use distributed tracing data. However, Kiali can
provide contextual links that users can use to jump to the Jaeger console to
inspect tracing data more in depth. For these links to be available you need to
set the &lt;code&gt;spec.external_services.tracing.external_url&lt;/code&gt; to the URL where you
expose Jaeger outside the cluster.&lt;/p&gt;


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


    Default values for connecting to Jaeger are based on the &lt;a href=&#34;https://github.com/istio/istio/tree/master/samples/addons&#34;&gt;Istio&amp;rsquo;s provided
sample add-on manifests&lt;/a&gt;.
If your Jaeger setup differs significantly from the sample add-ons, make sure
that Istio is also properly configured to push traces to the right URL.

&lt;/div&gt;

&lt;h3 id=&#34;jaeger-authentication-configuration&#34;&gt;Jaeger authentication configuration&lt;/h3&gt;
&lt;p&gt;The Kiali CR provides authentication configuration that will be used also for querying the version check to provide information in the Mesh graph.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;spec&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;external_services&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;tracing&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;enabled&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;true&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;auth&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;insecure_skip_verify&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;false&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;password&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;pwd&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;token&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;type&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;basic&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;use_kiali_token&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;false&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;username&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;user&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;health_check_url&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;To configure a secret to be used as a password, see this &lt;a href=&#34;https://v2-24.kiali.io/docs/faq/installation/#how-can-i-use-a-secret-to-pass-external-service-credentials-to-the-kiali-server&#34;&gt;FAQ entry&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&#34;tls-certificate-configuration&#34;&gt;TLS Certificate Configuration&lt;/h3&gt;
&lt;p&gt;If your Jaeger server uses HTTPS with a certificate issued by a private CA, see the &lt;a href=&#34;https://v2-24.kiali.io/docs/configuration/p8s-jaeger-grafana/tls-configuration/&#34;&gt;TLS Configuration&lt;/a&gt; page to learn how to configure Kiali to trust your CA.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Prerequisites</title>
      <link>https://v2-24.kiali.io/docs/tutorials/travels/01-prerequisites/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://v2-24.kiali.io/docs/tutorials/travels/01-prerequisites/</guid>
      <description>
        
        
        &lt;h2 id=&#34;platform-setup&#34;&gt;Platform Setup&lt;/h2&gt;
&lt;p&gt;This tutorial assumes you will have access to a Kubernetes cluster with Istio installed.&lt;/p&gt;
&lt;p&gt;This tutorial has been tested using:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;a &lt;a href=&#34;https://istio.io/latest/docs/setup/platform-setup/minikube/&#34;&gt;Minikube&lt;/a&gt; installation.&lt;/li&gt;
&lt;li&gt;an &lt;a href=&#34;https://istio.io/latest/docs/setup/platform-setup/openshift/&#34;&gt;OpenShift&lt;/a&gt; installation.&lt;/li&gt;
&lt;/ul&gt;


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

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

&lt;/div&gt;



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


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

&lt;/div&gt;

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


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


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

&lt;/div&gt;

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


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

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

&lt;/div&gt;



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

    This tutorial uses a route for external Ingress IP.

&lt;/div&gt;

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

      </description>
    </item>
    
    <item>
      <title>Docs: Quick Start</title>
      <link>https://v2-24.kiali.io/docs/installation/quick-start/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://v2-24.kiali.io/docs/installation/quick-start/</guid>
      <description>
        
        
        &lt;h2 id=&#34;run-kiali-locally&#34;&gt;Run Kiali locally&lt;/h2&gt;
&lt;p&gt;Kiali can be run directly on your machine without being installed into a Kubernetes cluster. It uses your kubeconfig to connect to your cluster(s). If needed, it can port-forward into the cluster to connect to your external services (prometheus, tracing, istio, grafana).&lt;/p&gt;


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


    Running Kiali locally is currently experimental. Functionality may change between releases.

&lt;/div&gt;

&lt;p&gt;Download the Kiali binary from the &lt;a href=&#34;https://github.com/kiali/kiali/releases/latest&#34;&gt;Kiali GitHub releases page&lt;/a&gt; for your OS and Arch.&lt;/p&gt;
&lt;p&gt;Start Kiali which runs the backend server on localhost and opens your default browser to the Kiali UI.&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;kiali run
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;To see the full list of options&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;kiali run --help
&lt;/code&gt;&lt;/pre&gt;

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


    If the cluster name in your kubeconfig does not match the cluster name in Istio you can override this with &lt;code&gt;--cluster-name-overrides kubeconfig-name=istio-cluster-name&lt;/code&gt;. The flag is a comma separated list so you can override as many names as you need.

&lt;/div&gt;

&lt;h2 id=&#34;install-kiali&#34;&gt;Install Kiali&lt;/h2&gt;
&lt;p&gt;You can quickly install Kiali into your cluster via one of the following two methods.&lt;/p&gt;


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


    These instructions are not recommended for production environments. Find more detailed information on installing Kiali,
see the &lt;a href=&#34;https://v2-24.kiali.io/docs/installation/&#34;&gt;installation guide&lt;/a&gt;.

&lt;/div&gt;



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


    Before you install Kiali you must have already installed Istio along with its telemetry storage addon (i.e. Prometheus). You might also consider installing Istio&amp;rsquo;s optional tracing addon (i.e. Jaeger) and optional Grafana addon but those are not required by Kiali. Refer to the &lt;a href=&#34;https://istio.io/docs/setup/getting-started&#34;&gt;Istio documentation&lt;/a&gt; for details.

&lt;/div&gt;

&lt;h3 id=&#34;install-via-istio-addons&#34;&gt;Install via Istio Addons&lt;/h3&gt;
&lt;p&gt;If you &lt;a href=&#34;https://istio.io/latest/docs/setup/getting-started/#download&#34;&gt;downloaded Istio&lt;/a&gt;, the easiest way to install and try Kiali is by running:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;kubectl apply -f ${ISTIO_HOME}/samples/addons/kiali.yaml
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;To uninstall:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;kubectl delete -f ${ISTIO_HOME}/samples/addons/kiali.yaml --ignore-not-found
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;install-via-helm&#34;&gt;Install via Helm&lt;/h3&gt;


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


    Only Helm v3 has been tested. Previous Helm versions may or may not work.

&lt;/div&gt;

&lt;p&gt;To install the latest version of Kiali Server using &lt;a href=&#34;https://helm.sh/&#34;&gt;Helm&lt;/a&gt;, run the following command:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;helm install \
  --namespace istio-system \
  --set auth.strategy=&amp;#34;anonymous&amp;#34; \
  --repo https://kiali.org/helm-charts \
  kiali-server \
  kiali-server
&lt;/code&gt;&lt;/pre&gt;

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


    If you get a validation error, you may have to pass the option &lt;code&gt;--disable-openapi-validation&lt;/code&gt; (this is needed on some versions of OpenShift, for example).

&lt;/div&gt;

&lt;p&gt;To uninstall:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;helm uninstall --namespace istio-system kiali-server
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;access-to-the-ui&#34;&gt;Access to the UI&lt;/h2&gt;
&lt;p&gt;Run the following command:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;kubectl port-forward svc/kiali 20001:20001 -n istio-system
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Then, access Kiali by visiting https://localhost:20001/ in your preferred web browser.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>News: Release Notes</title>
      <link>https://v2-24.kiali.io/news/release-notes/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://v2-24.kiali.io/news/release-notes/</guid>
      <description>
        
        
        &lt;p&gt;For additional information check our &lt;a href=&#34;https://www.youtube.com/channel/UCcm2NzDN_UCZKk2yYmOpc5w&#34;&gt;sprint demo videos&lt;/a&gt; and &lt;a href=&#34;https://medium.com/kialiproject&#34;&gt;blogs&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;2240&#34;&gt;2.24.0&lt;/h2&gt;
&lt;p&gt;Sprint Release: March 30, 2026&lt;/p&gt;
&lt;p&gt;Features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/9136&#34;&gt;AI: Optimize get_istio_config tool for better parsing and token efficiency&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/9250&#34;&gt;AI: Handle impact of new Namespaces page.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/9328&#34;&gt;Build: Upgrade Node.js from v20 to v24&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/9111&#34;&gt;Build: Migrate from Yarn v1 to Yarn v4&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/&#34;&gt;Build: Upgrade Golang from v1.24 to v1.25&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/9294&#34;&gt;Kiali.io: Update docs with changes related to new overview page&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8987&#34;&gt;Server: Automatically set GOMEMLIMIT based on available memory (container cgroups / system)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/9306&#34;&gt;UI: Ambient and sidecars badges in the overview/namespaces pages&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/9281&#34;&gt;UI: Overview Page Service Insights should incorporate L4 metrics&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/9360&#34;&gt;UI: Overview Page re-order top row cards to group infrastructure&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/pull/9355&#34;&gt;UI: Improve UX for Graph Display menu&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Fixes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/9099&#34;&gt;PF6 misalignment issues&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8500&#34;&gt;K8s Client (cluster2) is not found or is not accessible for Kiali, when attempting multi-cluster configuration feature&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/9359&#34;&gt;(AI)(Tool) get_resource_detail: Remove &amp;lsquo;istio&amp;rsquo; and &amp;lsquo;app&amp;rsquo; from allowed resourceTypes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/9363&#34;&gt;(AI)(Tool)(Panic) get_mesh_graph throw panic when the namespace not exist&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;upgrade-change-notes&#34;&gt;Upgrade Change Notes:&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;kiali_health_status metric&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Starting in v2.22, when the health cache and kiali metrics are both enabled (true by default) Kiali would also write a new metric, &lt;code&gt;kiali_health_status&lt;/code&gt;. The initial implementation proved to be too heavy from a cardinality perspective. This metric has been redefined in v2.24 and will now generate a much lower cardinality of time series. Also, it is now opt-in, controlled by &lt;code&gt;spec.server.observability.metrics.health_status.enabled&lt;/code&gt;. So, by default in v2.24, this metric will be disabled. The metric name remains the same, although attributes have been altered. Unless manually manipulated, existing series will remain in Prometheus until they naturally expire.&lt;/p&gt;
&lt;h2 id=&#34;2230&#34;&gt;2.23.0&lt;/h2&gt;
&lt;p&gt;Sprint Release: March 09, 2026&lt;/p&gt;
&lt;p&gt;Features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/9138&#34;&gt;AI: Implement get_resource_metrics tool for CPU and Memory monitoring.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/9140&#34;&gt;AI: Implement get_logs tool for retrieving pod/container logs.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/9147&#34;&gt;AI: Comprehensive documentation for features.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/9153&#34;&gt;AI: Integrate Chatbot AI into new Overview and Namespace pages&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/9275&#34;&gt;API: K8s GW API to v1.5.0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/9189&#34;&gt;OSSMC: New Overview page&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/9261&#34;&gt;Security: Update to Go v1.24.13&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6922&#34;&gt;Server: Remove Istio Service Registry dependency on Validations&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8845&#34;&gt;UI: New Overview and Namespaces Pages&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Fixes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/9297&#34;&gt;Multiple Kiali metric-calculation defects produce incorrect user-visible values&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/9236&#34;&gt;remove root_namespace section in docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/9276&#34;&gt;Nil pointer dereference in SubsetPresenceChecker when VirtualService has nil route destinations&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;2220&#34;&gt;2.22.0&lt;/h2&gt;
&lt;p&gt;Sprint Release: February 16, 2026&lt;/p&gt;
&lt;p&gt;Features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/9079&#34;&gt;AI: Implement AI Chatbot Widget &amp;amp; MCP Integration (Dev Preview)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8900&#34;&gt;Perf: Introduce health pre-compute&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/9158&#34;&gt;Tracing: new use_waypoint_name config option (incorrect service name in Jaeger link)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/pull/9067&#34;&gt;UI: SPIRE support&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/9098&#34;&gt;UI: Replace react-datepicker with PatternFly 6 components&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Fixes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/9070&#34;&gt;UI: Slow loading of workloads&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/9091&#34;&gt;UI: PF6 Wizard Migration Issues&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/9171&#34;&gt;UI: Offline mode does not display Istio Config page&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;upgrade-change-notes-1&#34;&gt;Upgrade Change Notes:&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Health Status Pre-Compute and Caching&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Kiali v2.22 introduces health status pre-compute and caching which is enabled by default. Production mesh sizes are growing and Kiali render times have been increasing, particularly for the Overview and List pages. In response, Kiali v2.22 changes its approach to health status calculation. In prior versions Kiali calculated health &amp;ldquo;on-demand&amp;rdquo;, based on the user&amp;rsquo;s selected duration, configuration settings, and other information, such as pod status. Starting in v2.22 Kiali will pre-calculate health status using a single, configurable duration, 5 minutes by default. The cached values increase the responsiveness of the Overview and List pages. Other pages, such as the Traffic graph and Detail pages will continue to calculate health status on-demand, and is based on the user&amp;rsquo;s selected duration. Users may notice that the Duration Dropdown selector has been removed from the Overview and List pages.&lt;/p&gt;
&lt;p&gt;Users may notice an increase in backend resource utilization, as the Kiali server will now be calculating and refreshing health status, independent of user sessions. The Kiali CR introduces the following new configuration:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;spec.health_config.compute.duration: 5m&lt;/code&gt;
&lt;code&gt;spec.health_config.compute.refresh_interval: 3m&lt;/code&gt;
&lt;code&gt;spec.health_config.compute.timeout: 10m&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;spec.kiali_internal.health_cache.enabled: false&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;It is recommended to keep the health cache enabled, as not all features will fall back to on-demand calculation.&lt;/p&gt;
&lt;p&gt;Any questions, comments or feedback appreciated. Visit &lt;code&gt;#kiali&lt;/code&gt; on Istio Slack or start a Discussion in Github at &lt;code&gt;https://github.com/kiali/kiali&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&#34;2210&#34;&gt;2.21.0&lt;/h2&gt;
&lt;p&gt;Sprint Release: January 26, 2026&lt;/p&gt;
&lt;p&gt;Features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8777&#34;&gt;Auth: Provide explicit OIDC config if .well-known/openid-configuration is locked down&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8888&#34;&gt;Auth: Use auto-rotated certificates for external service (e.g. prometheus) connectivity&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8421&#34;&gt;Auth: Support OpenID Authorization Code Flow with PKCE (SSO)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8871&#34;&gt;Perf: Introduce background graph refresh and caching&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/pull/9005&#34;&gt;Perf: Improve traffic graph client-side rendering, particularly when displaying many service nodes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/9033&#34;&gt;Security: Enforce platform TLS profiles in Kiali via OpenShift-aware auto mode and kiali config fallback&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8710&#34;&gt;UI: Masthead status improved layout and multi-mesh handling&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8979&#34;&gt;UI: Notification center improvements for message detail handling&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Fixes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/9009&#34;&gt;Ambient: Fix missing Idle Node display in traffic graph, when not showing Waypoints&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8990&#34;&gt;Auth: Session persistor fixes re: chunked sessions and multi-session scenarios&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/9014&#34;&gt;Perses: Validate OpenShift dashboards&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;upgrade-change-notes-2&#34;&gt;Upgrade Change Notes:&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Traffic Graph Caching&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Kiali v2.21 introduces traffic graph caching. Enabled by default. When a user navigates to the Traffic Graph and renders the initial graph, Kiali will start a background job to regenerate the graph periodically, based on the refresh interval set in the UI. The background job will cache the resulting graph and return it on subsequent UI requests. This can greatly improve re-render times, especially for larger graphs. Note that the initial graph render time will be unchanged. It is still recommended to use &amp;ldquo;Manual&amp;rdquo; refresh when working with large meshes, in order to fully define the desired graph before performing the initial request. Any fundamental change to the graph definition will invalidate the cache and restart a new refresh job. Users can navigate away and then back to the traffic graph, and resume with the latest cached graph, within the timeout period (10m by default).&lt;/p&gt;
&lt;p&gt;Backend resource utilization may be affected, although is not anticipated to change significantly. The caching can be disabled in the Kiali config via:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;spec.kiali_internal.graph_cache.enabled: false&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Any questions, comments or feedback appreciated. Visit &lt;code&gt;#kiali&lt;/code&gt; on Istio Slack or start a Discussion in Github at &lt;code&gt;https://github.com/kiali/kiali&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&#34;2200&#34;&gt;2.20.0&lt;/h2&gt;
&lt;p&gt;Sprint Release: December 22, 2025&lt;/p&gt;
&lt;p&gt;Features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8539&#34;&gt;Maintenance: Upgrade to TypeScript 5&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/openshift-servicemesh-plugin/issues/518&#34;&gt;OSSMC: Upgrade to Patternfly 6&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8022&#34;&gt;UI: Upgrade to PatternFly 6&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8911&#34;&gt;UI: Replace legacy message center&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Fixes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8918&#34;&gt;GWAPI IE: Errors in Kiali logs when namespace stack&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8903&#34;&gt;Mesh Page: sporadic null reference in SummaryPanelClusterBox&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8908&#34;&gt;UI: Could not fetch workloads list&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;2190&#34;&gt;2.19.0&lt;/h2&gt;
&lt;p&gt;Sprint Release: November 24, 2025&lt;/p&gt;
&lt;p&gt;Features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8872&#34;&gt;AI: Kiali now has AI and Agent Policy and Contribution guidelines&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8616&#34;&gt;Config: Kiali CR now supports adding custom initContainers to the Kiali deployment&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8854&#34;&gt;Helm Charts: Server helm chart now supports cluster_wide_access=false&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8791&#34;&gt;K8s GW API: v1.4.0 support&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Fixes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8867&#34;&gt;Ambient: Fix &amp;ldquo;isAmbient&amp;rdquo; CP identification and Overview page badging&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8863&#34;&gt;Mesh Page: Fix missing validations for Data Plane side-panel&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8830&#34;&gt;UI: Masthead tooltip fixes for status and duplication&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;2180&#34;&gt;2.18.0&lt;/h2&gt;
&lt;p&gt;Sprint Release: November 03, 2025&lt;/p&gt;
&lt;p&gt;Features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8684&#34;&gt;Mesh Page: improvements for multiple controlplanes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8806&#34;&gt;Perses: &amp;lsquo;openshift&amp;rsquo; URL format&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5028&#34;&gt;Operator: Sidecar usage extension&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8813&#34;&gt;Operator: NetworkPolicy for OLM-installed operator&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/openshift-servicemesh-plugin/issues/507&#34;&gt;OSSMC: Add Netobserv Navigation traffic graph side-panel&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Fixes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8827&#34;&gt;URI too large&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8826&#34;&gt;Making cluster-wide namespace query when cluster-wide-access is false&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;2170&#34;&gt;2.17.0&lt;/h2&gt;
&lt;p&gt;Sprint Release: October 13, 2025&lt;/p&gt;
&lt;p&gt;Features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8717&#34;&gt;Auth: Support of multiple audiences in OIDC&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8692&#34;&gt;Config: Remove use of conf.ExternalServices.Istio.Registry&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8755&#34;&gt;Dependencies: Update GoLang to 1.24.4&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8782&#34;&gt;GW API: Support Inference Extension v1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8668&#34;&gt;Mesh Page: Show Kiali when in Local mode&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8762&#34;&gt;OSSMC: New &amp;ldquo;openshift&amp;rdquo; url_format for Tracing configuration&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8536&#34;&gt;Security: Allow configuration of NetworkPolicy to restrict Kiali ingress traffic&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8468&#34;&gt;Troubleshooting: Improve Kiali tracing by forwarding &lt;code&gt;x-request-id&lt;/code&gt; header to prometheus calls&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Fixes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8749&#34;&gt;OSSMC: Handle correctly pods page with no controller&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8765&#34;&gt;OSSMC: Distributed tracing plugin not doing redirection&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8759&#34;&gt;Server: Fix potential crash in Mesh Discovery&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8751&#34;&gt;UI: Scroll issue in Istio Config page&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8781&#34;&gt;UI: Kiali observability detail views not available to custom GVKs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;upgrade-change-notes-3&#34;&gt;Upgrade Change Notes:&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;The following fields are no longer used by the Kiali CR and MUST be removed, if currently set.&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;spec.external_services.istio.registry&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;2160&#34;&gt;2.16.0&lt;/h2&gt;
&lt;p&gt;Sprint Release: September 22, 2025&lt;/p&gt;
&lt;p&gt;Features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8674&#34;&gt;CRD: Autodetect &lt;code&gt;RootNamespace&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8655&#34;&gt;GatewayAPI: Support clusters that only have Gateway API gateways but no Istio gateways&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8732&#34;&gt;Perf: graph &amp;ldquo;Show Virtual Services&amp;rdquo; option controls &amp;ldquo;istio_detail&amp;rdquo; appender execution&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8731&#34;&gt;Perf: optimizations for the istio_detail graph appender&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Fixes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8678&#34;&gt;Ambient: Fix validations in KIA1312, KIA1313 and KIA1316&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8700&#34;&gt;UI: Fix missing version info in About box&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;upgrade-change-notes-4&#34;&gt;Upgrade Change Notes:&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Discovery Selectors&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Kiali now properly supports Istio control planes deployed into different namespaces. As part of this
support both the &lt;code&gt;spec.istio_namespace&lt;/code&gt; and &lt;code&gt;spec.external_services.istio.root_namespace&lt;/code&gt; configuration
fields have been removed. As such, Kiali Discovery Selectors, when defined, must include Istio&amp;rsquo;s
control plane namespace(s). If you are using Kiali Discovery Selectors, please ensure that this
new requirement is met. Note that Kiali&amp;rsquo;s deployment namespace is always included, and so co-located
Istio control planes will be discovered.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The following fields are no longer used by the Kiali CR and MUST be removed, if currently set.&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;spec.external_services.istio.root_namespace&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;2150&#34;&gt;2.15.0&lt;/h2&gt;
&lt;p&gt;Sprint Release: September 02, 2025&lt;/p&gt;
&lt;p&gt;Features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6041&#34;&gt;Ambient: Improvements to Ambient workload validation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8607&#34;&gt;CI: Run all cypress tests from tags&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8659&#34;&gt;CI: Add tests for kiali server/operator helm-charts&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8681&#34;&gt;CI: Validate CRDs are synced during release&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8632&#34;&gt;Deployment: Add support for &amp;ldquo;local&amp;rdquo; mode&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8237&#34;&gt;Deployment: Provide a schema for the Kiali CRD&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8606&#34;&gt;Deployment: Support multiple control planes in different namespaces on the same cluster&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8643&#34;&gt;Operator: provide a way to verify operator permissions are correct&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8394&#34;&gt;Perf: Only cache ConfigMaps in namespaces with controlplanes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8578&#34;&gt;Perses: Add support for Perses Dashboard&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Fixes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8657&#34;&gt;Ambient: fix startup OOM in ambient environments&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8621&#34;&gt;Operator: operator-sdk is now gone - operator release needs another way to verify bundle&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8639&#34;&gt;Operator: missing permission in CSV for OLM installs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8648&#34;&gt;UI: Multicluster Workload Validations icon padding&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;upgrade-change-notes-5&#34;&gt;Upgrade Change Notes:&lt;/h4&gt;
&lt;p&gt;Version 2.15.0 introduces a CRD schema for Kiali. The CRD version has not changed. But, validation will now occur on the cluster when the Kiali CRs are created or modified.&lt;/p&gt;
&lt;h2 id=&#34;2140&#34;&gt;2.14.0&lt;/h2&gt;
&lt;p&gt;Sprint Release: August 08, 2025&lt;/p&gt;
&lt;p&gt;Features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7901&#34;&gt;Ambient: UI support to add namespace to Ambient mesh&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8470&#34;&gt;Deployment: Support for external kiali deployment option&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8272&#34;&gt;Gateway API: Upgrade K8s Gateway API to v1.3.0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8555&#34;&gt;Gateway API: Support Gateway API Inference Extension&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Fixes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8585&#34;&gt;Authorization: do not perform cluster-wide query when cluster wide access is disabled&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8553&#34;&gt;Multi-cluster: Detect monitoring port for each controlplane&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8590&#34;&gt;Validation: Kiali does not recognize &lt;code&gt;istio-remote&lt;/code&gt; gateway class&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;upgrade-change-notes-6&#34;&gt;Upgrade Change Notes:&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;The following fields are no longer used by the Kiali CR and MUST be removed, if currently set.&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;no longer used
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;spec.istio_namespace&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;spec.in_cluster&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;spec.deployment.remote_secret_path&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;now auto-discovered
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;spec.external_services.istio.config_map_name&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;spec.external_services.istio.istiod_pod_monitoring_port&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;spec.external_services.istio.envoy_admin_local_port&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;spec.external_services.istio.istio_canary_version&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;spec.external_services.istio.istio_injection_annotation&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;spec.external_services.istio.istio_sidecar_annotation&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;spec.external_services.istio.istiod_deployment_name&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;spec.external_services.istio.istiod_pod_monitoring_port&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;spec.external_services.istio.url_service_version&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;2130&#34;&gt;2.13.0&lt;/h2&gt;
&lt;p&gt;Sprint Release: July 21, 2025&lt;/p&gt;
&lt;p&gt;Features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/pull/8567&#34;&gt;I18N: Spanish localization (partial)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8555&#34;&gt;Istio Config: Initial support for GW API Inference extension&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8493&#34;&gt;Mesh Page: Unify config format&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8552&#34;&gt;Mesh Page: Consistent istio Metrics&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Fixes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/pull/8573&#34;&gt;MeshPage: Fix dataplane namespace count&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;2120&#34;&gt;2.12.0&lt;/h2&gt;
&lt;p&gt;Sprint Release: Jun 30, 2025&lt;/p&gt;
&lt;p&gt;Features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8347&#34;&gt;Usability: Cleanup logs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8349&#34;&gt;Usability: Easy configuration/export of diagnostics&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7066&#34;&gt;Usability: Show json logs in a more human readable format&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8345&#34;&gt;Usability: Improve diagnostics for measuring performance&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8472&#34;&gt;Usability: Improve tracing tool&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8491&#34;&gt;Helm: be able to tell helm to skip creation of some resources&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8507&#34;&gt;Operator: Adapt bundle CSV to FBC&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8517&#34;&gt;Tracing: Be able to change the Trace limit default&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8527&#34;&gt;Molecule: try to workaround another transient ansible galaxy error&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8531&#34;&gt;Kiali.io: Features update&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8503&#34;&gt;CI: Grafana Test Flake in OSSMC&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8518&#34;&gt;CI: Shared Mesh page flaky test&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8528&#34;&gt;CI: Add test coverage for the tracing tool&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Fixes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8494&#34;&gt;Tracing: Improve coverage when auth is specified but not required&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8505&#34;&gt;Operator: change of kiali version produces error in op logs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/openshift-servicemesh-plugin/issues/455&#34;&gt;OSSMC (CI): Adapt OSSMC cypress tests to OCP 4.19&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8495&#34;&gt;OSSMC (CI): Cannot create property &amp;lsquo;url&amp;rsquo; on string &amp;lsquo;GET&amp;rsquo;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8540&#34;&gt;OSSMC (CI): failure in Workload logs tab&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;2110&#34;&gt;2.11.0&lt;/h2&gt;
&lt;p&gt;Sprint Release: Jun 09, 2025&lt;/p&gt;
&lt;p&gt;Features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8338&#34;&gt;Ambient: Support for ingress-use-waypoint&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7760&#34;&gt;Grafana: support datasource_uid parameter for Grafana dashboards links&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8248&#34;&gt;Istio: Support merging of multiple Istio configmaps&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8358&#34;&gt;Kiali.io: document how to test a remote cluster secret / kubeconfig&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8449&#34;&gt;Kiali.io: document how to use Kiali diagnostics for measuring performance&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8459&#34;&gt;Operator: Refactor to not use kubernetes.core.k8s_cluster_info task&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8396&#34;&gt;Perf: Remove Endpoints caching&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8361&#34;&gt;Tracing: Mesh page &amp;ldquo;Check Status&amp;rdquo; option to help troubleshooting&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8348&#34;&gt;Usability: Improve Kiali Logs and metrics for timing of a request&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Fixes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8464&#34;&gt;Ambient: Mode detection fix - DaemonSet filtering label matching assumes exact map match, uses wrong source of data&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8480&#34;&gt;Ambient: Fix runtime error starting Kiali outside the cluster with Istio Ambient&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8442&#34;&gt;UI: Show GW API Icon for GWs in the graph&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8478&#34;&gt;UI: Fix internal server error when editing a workload&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8458&#34;&gt;Usability: Fix missing Kiali metrics&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;2100&#34;&gt;2.10.0&lt;/h2&gt;
&lt;p&gt;Sprint Release: May 18, 2025&lt;/p&gt;
&lt;p&gt;Features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7996&#34;&gt;Ambient: Include ztunnel table filters&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8355&#34;&gt;Code: Adopt controller-runtime client&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8373&#34;&gt;Code: Adopt github.com/go-jose/go-jose/v3 instead of github.com/go-jose/go-jose&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8220&#34;&gt;Gateway API: Load all k8s gateway API classes that use Istio as a controller&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5043&#34;&gt;Kiali.io: Document features that enable you to more easily view a large graph&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/pull/8330&#34;&gt;Mesh Page: Load user config, if configured, and show on mesh page for istiod&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8346&#34;&gt;Support: Add structured logging&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8317&#34;&gt;Validation: Allow disabling validations&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Fixes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8381&#34;&gt;Ambient: Error Unmarshalling the config_dump in Istio Ambient 1.26&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8376&#34;&gt;Build: Not able to build v1.73 integration test image + runtime GLIBC error from &lt;code&gt;oc&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8417&#34;&gt;OSSMC: Trying to show traffic animation in OpenShift console leads to error&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8406&#34;&gt;Tempo: Does not return traces with error&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;290&#34;&gt;2.9.0&lt;/h2&gt;
&lt;p&gt;Sprint Release: Apr 25, 2025&lt;/p&gt;
&lt;p&gt;Features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7830&#34;&gt;CI: Use the sail operator instead of istioctl to deploy istio&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8097&#34;&gt;CI: Update primary-remote (multicluster) pipeline to use Sail Operator&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8098&#34;&gt;CI: Update external control plane pipeline to use Sail Operator&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8289&#34;&gt;CI: Update workflows /test-istio-version.yml to use sail operator&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8314&#34;&gt;Kiali.io: document the features that are supported by the operator but not by the server helm chart&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8315&#34;&gt;Operator: Allow providing extra labels for server and operator&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8344&#34;&gt;UI: Add &amp;ldquo;Manual&amp;rdquo; refresh interval&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8197&#34;&gt;UI: Scroll in tables with sticky headers&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Fixes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6357&#34;&gt;Demos: Service Spawner demo not generating traffic &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8007&#34;&gt;Perf: Kiali uses a lot of CPU (in validations)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8304&#34;&gt;Perf: Mesh page hangs for a long time when a component status is unhealthy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8259&#34;&gt;Server: Kiali not working when Istio native sidecars feature is disabled&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8284&#34;&gt;Server: Difference in Istio and Kiali Workload Name for Argo Rollouts&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8321&#34;&gt;Operator: defining an inaccessible cluster in Kiali CR breaks the operator&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8258&#34;&gt;UI: Node selection not working when navigating to graph from trace detail&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;280&#34;&gt;2.8.0&lt;/h2&gt;
&lt;p&gt;Sprint Release: Apr 07, 2025&lt;/p&gt;
&lt;p&gt;Features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8024&#34;&gt;Ambient: Include ztunnel specific metrics&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7952&#34;&gt;Hack scripts: Support for auto-injection-label in all install scripts&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8196&#34;&gt;Mesh page: Include Kiali resource metrics in side-panel&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6941&#34;&gt;Operator: Watch for changes to remote cluster secrets&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7904&#34;&gt;OSSMC: Integrate console tracing  with Kiali plugin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/pull/8277&#34;&gt;Perf: Ambient graph generation optimization&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8211&#34;&gt;Perf: Validation MultiMatchChecker optimization&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8210&#34;&gt;Perf: Validation VirtualServices SubsetPresenceChecker optimization&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7877&#34;&gt;Security: Use multi-cluster secret if it exists in the namespace&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7724&#34;&gt;UI: Enhance masthead Istio Status with multi-cluster support and improved UX&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8154&#34;&gt;UI: Workload detail Pod listing now shows the revision annotation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Fixes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8203&#34;&gt;Health: Service Health calculation wrongly&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8189&#34;&gt;Health: Ambient Inconsistency of Service Health between pages&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8271&#34;&gt;K8s Gateway: API CRD check improvement&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Deprecations:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8053&#34;&gt;Remove Cytoscape graph implementation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;After a 4 month deprecation period the support for Kiali&amp;rsquo;s original, Cytoscape-based, graph implementation has ended.
The &amp;lsquo;spec.kiali_feature_flags.ui_defaults.graph.impl&amp;rsquo; configuration setting is no longer supported, and the sole
implementation going forward uses PatternFly Topology. This has allowed for a significant cleanup of the Kiali
code base, and removal of several dated dependencies. We&amp;rsquo;d like to thank the &lt;a href=&#34;https://cytoscape.org/&#34;&gt;Cytoscape project&lt;/a&gt;,
without which Kiali would not have existed. It is an excellent library, and our migration to PatternFly was motivated
by a need to settle on a uniform component library.&lt;/p&gt;
&lt;h2 id=&#34;270&#34;&gt;2.7.0&lt;/h2&gt;
&lt;p&gt;Sprint Release: Mar 17, 2025&lt;/p&gt;
&lt;p&gt;Features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8145&#34;&gt;Ambient: Add metrics to ztunnel tab for workload detail&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8144&#34;&gt;Ambient: Add ztunnel resource consumption metrics to Mesh page side panel&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8007&#34;&gt;Perf: Validation and other perf enhancements&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Fixes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6641&#34;&gt;Code: Fix data race in GetKialiTokenForHomeCluster&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8232&#34;&gt;Graph: PFT graph find/hide broken for &amp;ldquo;label:&amp;rdquo; operand&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8139&#34;&gt;Validation: Inconsistency between Service list validation and service details&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8228&#34;&gt;Validation: Service Details Config Validations Inconsistency&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;260&#34;&gt;2.6.0&lt;/h2&gt;
&lt;p&gt;Sprint Release: Feb 21, 2025&lt;/p&gt;
&lt;p&gt;Features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7899&#34;&gt;Ambient: Waypoint proxy log improvement&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8143&#34;&gt;Ambient: Add ztunnel to mesh topology&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8050&#34;&gt;Ambient: Recognize any gateway as a Waypoint if &amp;ldquo;waypoint&amp;rdquo; is in the name&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7603&#34;&gt;Config: Allow mixed app and verion labeling schemes&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Fixes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8146&#34;&gt;Ambient: No ztunnel logs with waypoint in Istio 1.23&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8157&#34;&gt;Ambient: Some Waypoint proxies are reported incorrectly&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8084&#34;&gt;Authz: Fix access to DeploymentConfig (and some others)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8133&#34;&gt;GW API: Wrong ReferenceGrant apiVersion from Kiali server&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7909&#34;&gt;Logging: Istio sidecar logs missing with k8s native sidecar enabled&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8159&#34;&gt;Mesh page: side panel does not stay in sync with mesh graph&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8100&#34;&gt;Perf: Jaeger version check leads to delayed Kiali login screen until timeout occur&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8112&#34;&gt;Tracing: Spans missing References values when Tempo is used&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8106&#34;&gt;Tracing: Kiali does not report trace connectivity error&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8172&#34;&gt;UI: Istio-system applications shown as out of mesh&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Upgrade Notes:&lt;/p&gt;
&lt;p&gt;The default values for the following Kiali CR fields have changed:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;spec.istio_labels.app_label_name
&lt;ul&gt;
&lt;li&gt;previous default: &amp;ldquo;app&amp;rdquo;&lt;/li&gt;
&lt;li&gt;new default:      unset&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;spec.istio_labels.version_label_name
&lt;ul&gt;
&lt;li&gt;previous default: &amp;ldquo;version&amp;rdquo;&lt;/li&gt;
&lt;li&gt;new default:      unset&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The change is related to the work done for &lt;a href=&#34;https://github.com/kiali/kiali/issues/7603&#34;&gt;Kiali issue 7603&lt;/a&gt;, included with this release. By default Kiali now allows for a mixing app labeling schemes, using the same set of app and version label pairings recognized by Istio:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;service.istio.io/canonical-name, service.istio.io/canonical-revision&lt;/li&gt;
&lt;li&gt;app.kubernetes.io/name, app.kubernetes.io/version&lt;/li&gt;
&lt;li&gt;app, version&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Users can configure a single labeling scheme by setting the existing CR fields, or leaving them set when upgrading.&lt;/p&gt;
&lt;h2 id=&#34;250&#34;&gt;2.5.0&lt;/h2&gt;
&lt;p&gt;Sprint Release: Feb 03, 2025&lt;/p&gt;
&lt;p&gt;Features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5979&#34;&gt;Ambient: Trace support&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7107&#34;&gt;Istio: Workload Entry and Workload Group support for VMs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8058&#34;&gt;Istio: WorkloadGroup Validations&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8054&#34;&gt;Mesh Page: visualize gateways and waypoints&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7925&#34;&gt;Multicluster: When login to remote cluster fails, no visible error appears&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5614&#34;&gt;Operator: Add topologySpreadConstraints&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8057&#34;&gt;Security: configure /api endpoint to require authentication&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8075&#34;&gt;Istio: show configurations for K8sGateways&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Fixes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8033&#34;&gt;Ambient: Error reading logs when user doesn&amp;rsquo;t have permissions for ztunnel&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8101&#34;&gt;Misc: Fix mixed object references with the same name for k8s gw&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8081&#34;&gt;Multicluster: Error namespace not found in Multi Cluster&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8069&#34;&gt;UI: Fix color-scheme cached value handling&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;240&#34;&gt;2.4.0&lt;/h2&gt;
&lt;p&gt;Sprint Release: Jan 13, 2025&lt;/p&gt;
&lt;p&gt;Features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7999&#34;&gt;Ambient: Improve waypoint visualization&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7107&#34;&gt;Config: Support Workload Group workload in list view&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7932&#34;&gt;Misc: Formally support previous versions of Istio in Kiali releases&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7902&#34;&gt;Misc: dual stack ipv6 support&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Fixes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8023&#34;&gt;Operator: when on openshift, if ingress is disabled, skip some things that require the Route and abort if using openshift auth strategy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7997&#34;&gt;Tracing: GRPC Jaeger client using old tag for istio multi cluster&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8036&#34;&gt;Tracing: Tempo Version url doesn&amp;rsquo;t work with TLS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8034&#34;&gt;UI: Workload Traffic tab navigation leaves Overview tab confused&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8025&#34;&gt;UI: Irregular metrics loading error &lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;230&#34;&gt;2.3.0&lt;/h2&gt;
&lt;p&gt;Sprint Release: Dec 23, 2024&lt;/p&gt;
&lt;p&gt;Features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/pull/7970&#34;&gt;Ambient - Several troubleshooting additions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7977&#34;&gt;Maintenance - Go version 1.23.2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7769&#34;&gt;Tempo - Performance review and cache introduced&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7934&#34;&gt;Traffic Graph - New &amp;ldquo;point-style&amp;rdquo; traffic animation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8004&#34;&gt;UI - Show dual stack IPs in service details&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Fixes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7937&#34;&gt;Traffic graph - In ambient mode, graph missed some gateway traffic&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7958&#34;&gt;UI - Kiosk mode Time duration component does not handle the URL correctly&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/8000&#34;&gt;Validations - KIA1104 should only show when there is one route destination but has explicit weight assigned and less than 100 on tcp/tls route&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;220&#34;&gt;2.2.0&lt;/h2&gt;
&lt;p&gt;Sprint Release: Dec 02, 2024&lt;/p&gt;
&lt;p&gt;Features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7820&#34;&gt;Core, UI - Alternative Workload controllers support&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7926&#34;&gt;Multicluster - Pull the CA from the cluster and add that to the remote secret&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7832&#34;&gt;Operator, Core - Adjustable readiness and liveness probes delay&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7922&#34;&gt;Operator, Multicluster - allow multiple Kiali Servers in the same cluster each have cluster-wide-access enabled&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7903&#34;&gt;Tempo - Optimize Tempo query&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7929&#34;&gt;UI - Enable the Selection-based zoom in PFT&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7882&#34;&gt;Validation, UI - Make gateways optional in istio status&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Fixes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7935&#34;&gt;UI - Traffic graph Zoomed-in &amp;ldquo;reset view&amp;rdquo; not resizing correctly&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7940&#34;&gt;UI - Workload detail missing envoy tab when Istio working with native sidecars&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;210&#34;&gt;2.1.0&lt;/h2&gt;
&lt;p&gt;Sprint Release: Nov 11, 2024&lt;/p&gt;
&lt;p&gt;Features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7623&#34;&gt;Mesh Page - Consistent display format for configuration values on the Mesh page&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7726&#34;&gt;Mesh Page - Canary upgrade status only uses home cluster&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7841&#34;&gt;Operator - Operator should look for OpenShiftAPIServer to determine if its running on OCP&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7856&#34;&gt;Operator - Bump base image to 4.17 / 1.35.0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7896&#34;&gt;Security - Move base image of Kiali Server to UBI9 / RHEL9&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7457&#34;&gt;UI - Config list items should properly use Group + Version + Kind for kube resources&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7317&#34;&gt;UI - Improve color choice for &amp;ldquo;Not Ready&amp;rdquo; icon in dark-mode&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Fixes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7875&#34;&gt;Ambient - External service shown as unknown&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7843&#34;&gt;Ambient - When the graph nodes are inaccesible, the graph has duplicated edges (From L4 and L7)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7811&#34;&gt;Ambient - Kiali doesn&amp;rsquo;t show connection from ambient to sidecar injected namespace as mTLS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7844&#34;&gt;Mesh Page - Failed to get istio deployment status when using IP in external services URLs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7839&#34;&gt;Minigraph - Unable to navigate between workloads using the minigraph&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7878&#34;&gt;Traffic Graph - Graph hide can leave orphan edges&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7802&#34;&gt;Traffic Graph - PFT graph page throws a console error when the user navigates to the graph from a details page&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7452&#34;&gt;UI - Config list items must include apiVersion value when the Istio object is created outside of Kiali&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7690&#34;&gt;Validation - Istio validations inconsisteny - exported to other namespace&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7789&#34;&gt;Validation - Kiali states pod has no Istio sidecar under Workloads even though Istio has native sidecar support enabled&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Deprecations:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;RedHat Community Operator
&lt;ul&gt;
&lt;li&gt;The community operator created confusion as to which operator to use on OpenShift. It will no longer be updated and will eventually be
removed. OpenShift users are encouraged to use the productized operator, which is included with licensed copies of OpenShift.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;200&#34;&gt;2.0.0&lt;/h2&gt;
&lt;p&gt;Sprint Release: Oct 21, 2024&lt;/p&gt;
&lt;p&gt;The first major Kiali release in over 5 years!  There are two main reasons for the major version update:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;There is a breaking change in Kiali&amp;rsquo;s namespace management configuration. To limit the namespaces accessible to Kiali, or made visible to users, Kiali v2.0 users will configure Discovery Selectors.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;There is no longer support for the following deprecated configuration settings:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;spec.deployment.accessible_namespaces&lt;/li&gt;
&lt;li&gt;api.namespaces.exclude&lt;/li&gt;
&lt;li&gt;api.namespaces.include&lt;/li&gt;
&lt;li&gt;api.namespaces.label_selector_exclude&lt;/li&gt;
&lt;li&gt;api.namespaces.label_selector_include&lt;/li&gt;
&lt;/ul&gt;
&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;Kiali has a new traffic graph implementation.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The Cytoscape implementation has been deprecated and is no longer the default. Kiali has moved to PatternFly Topology to align with the rest of the Kiali interface, which is already implemented using PatternFly components.  The old graph implementation will be removed as soon as the Kiali maintainers believe the new implementation has proven itself in the field. Until that time, it can still be accessed by setting:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;spec&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;kiali_feature_flags&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;ui_defaults&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;graph&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;impl&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;cy&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7445&#34;&gt;Ambient Graph - Improve Ambient Graph&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6900&#34;&gt;Ambient Graph - Better visualize ztunnel&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7702&#34;&gt;Ambient Graph - Treat waypoint nodes as workloads, not apps&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7706&#34;&gt;Ambient Graph - Use bidirectional edges between workloads and waypoints&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7546&#34;&gt;Configuration - Discovery Selectors, enhance namespace accessibility per Discovery KEP&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7745&#34;&gt;Configuration - change names of url / in_cluster_url to better reflect what they are&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7177&#34;&gt;Configuration - Auto-detect more Istio config for ease-of-configuration&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7795&#34;&gt;Configuration - Be able to specify auth.username and custom dashboards auth via secrets&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7569&#34;&gt;Configuration - Support for additional environment variables in deployment&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7485&#34;&gt;Extensions - Support 3rd party traffic metrics per Extensions KEP&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7814&#34;&gt;Gateway API - K8s GW API v1.2.0 support&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/openshift-servicemesh-plugin/issues/99&#34;&gt;Graph - Patternfly topology for Kiali graph&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7515&#34;&gt;Mesh Page - Improve istio canary handling&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7203&#34;&gt;Mesh Page - Ensure per-control-plane Istio settings&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7058&#34;&gt;Perf - Kiali Performance and Scalability testing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7674&#34;&gt;UI - Upgrade Patternfly to version 5.4&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Fixes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7665&#34;&gt;Kiali federation with multiple Kubernetes flavors not able to access none OpenShift workloads/applications when running on OCP&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7720&#34;&gt;K8s Gateways: Out of mesh error when not in &amp;lsquo;istio-system&amp;rsquo;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7717&#34;&gt;bearer token auth with external Grafana&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7758&#34;&gt;Config: grafana and tracing versions should be obtained over in_cluster_url&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7717&#34;&gt;Auth: Fix issue with bearer token auth with external Grafana&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7758&#34;&gt;Auth: Fix URL-choice issue when fetching Grafana and tracing versions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7598&#34;&gt;Mesh page - controlplanes not mapped to their dataplanes when using stable revision labels&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7598&#34;&gt;Mesh page: Fix issue for controlplanes not mapped to their dataplanes, when using stable revision labels&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7441&#34;&gt;Mesh page: Memory consumption chart for istiod container isn&amp;rsquo;t getting created&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7829&#34;&gt;Mesh page: istiod with no proxies synced yet throws error&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7665&#34;&gt;Multicluster: Fix issue federating Kiali instances on different Kubernetes&amp;rsquo; impls&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/openshift-servicemesh-plugin/issues/375&#34;&gt;OSSMC: Toggle menu of the workload minigraph does not load the action list&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7822&#34;&gt;Tempo: View in Tracing link&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/openshift-servicemesh-plugin/issues/375&#34;&gt;UI: Toggle menu of the workload minigraph does not load the action list&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7817&#34;&gt;UI: Broken Breadcrumb for Details pages&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7685&#34;&gt;Validations - Inconsistency between List and Details pages&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;1894&#34;&gt;1.89.4&lt;/h2&gt;
&lt;p&gt;Sprint Release: Sep 30, 2024&lt;/p&gt;
&lt;p&gt;Features:&lt;/p&gt;
&lt;p&gt;The next feature release will be Kiali v 2.0.0&lt;/p&gt;
&lt;p&gt;Fixes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7720&#34;&gt;K8s Gateways: Fix &amp;ldquo;Out of mesh&amp;rdquo; error when not in &amp;lsquo;istio-system&amp;rsquo;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7773&#34;&gt;Operator: Fix support of namespaces that just have numbers in their name&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7685&#34;&gt;Validations - Fix “exportTo” validation inconsistency between List and Detail pages&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;1893&#34;&gt;1.89.3&lt;/h2&gt;
&lt;p&gt;Sprint Release: Sep 09, 2024&lt;/p&gt;
&lt;p&gt;Features:&lt;/p&gt;
&lt;p&gt;The next feature release will be Kiali v 2.0.0&lt;/p&gt;
&lt;p&gt;Fixes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7638&#34;&gt;Custom Dashboard - External Links of Custom dashboard not visible&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7672&#34;&gt;Graph - Cannot load the graph: cluster (unknown) is not found or is not accessible for Kiali&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7590&#34;&gt;Graph - Inconsistent ServiceEntry Display in Multi-Namespace Environment&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7589&#34;&gt;Graph - Fix handling of defaultExportTo setting in serviceEntry and other components&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7658&#34;&gt;Tempo - query_scope is ignored for Tempo in single-cluster environment&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;1890&#34;&gt;1.89.0&lt;/h2&gt;
&lt;p&gt;Sprint Release: Aug 19, 2024&lt;/p&gt;
&lt;p&gt;Features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7480&#34;&gt;Maintenance - Upgrade go from 1.22.1 to 1.22.5&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7503&#34;&gt;Maintenance - Move to node 20&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7527&#34;&gt;Mesh page - Hide mesh page for non istio-system users&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7076&#34;&gt;Perf - Kiali Performance improvements.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7553&#34;&gt;UX - Align the notification badge with PF standards&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Fixes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7542&#34;&gt;Auth - k8s api token not auto refreshing for calls to fetch cacerts&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7459&#34;&gt;Mesh page - Display full yaml from &lt;code&gt;istio&lt;/code&gt; configmap&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7619&#34;&gt;Operator - when installing OSSMC, make sure the Kiali version is the same.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/openshift-servicemesh-plugin/issues/330&#34;&gt;OSSMC - cannot update namespace or create Istio objects&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7622&#34;&gt;OSSMC - Upgrade api from v1alpha1 to v1&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;1880&#34;&gt;1.88.0&lt;/h2&gt;
&lt;p&gt;Sprint Release: Jul 29, 2024&lt;/p&gt;
&lt;p&gt;Features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7350&#34;&gt;Ambient - Identify waypoint proxies for Istio Ambient&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7207&#34;&gt;Dependencies - React Router migration from v5 to v6&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7527&#34;&gt;Mesh page - Hide mesh page for non istio-system users&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7531&#34;&gt;Mesh page - View Tempo version in Mesh Page&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7501&#34;&gt;K8s GW API - Autodiscover gateways&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7524&#34;&gt;K8s GW API - Rework - Duplicate labels in Kiali CR and code&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7413&#34;&gt;K8s GW API - Cross-Namespace routing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/openshift-servicemesh-plugin/issues/335&#34;&gt;UI - Place alert notifications in the top right corner of the screen&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7553&#34;&gt;UI - Align the notification badge with PF standards&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Fixes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7475&#34;&gt;Mesh page - Grafana version checks don&amp;rsquo;t use configured Grafana auth&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7455&#34;&gt;Mesh page - throws error when one of the clusters is inaccessible&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7332&#34;&gt;Tracing - The tracing service is disabled by default&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7232&#34;&gt;K8s GW API - Hardcoded ingressgateway labels in code&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7522&#34;&gt;Cypress - KIA1102 validation fails - Issue in Kiali&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7549&#34;&gt;Ambient - Hiding TCP hides HTTP&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7559&#34;&gt;Kiali operator - helmchart frequently changes the replica count when HPA is enabled&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;1870&#34;&gt;1.87.0&lt;/h2&gt;
&lt;p&gt;Sprint Release: Jul 08, 2024&lt;/p&gt;
&lt;p&gt;Features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7432&#34;&gt;Ambient - Show Ambient labels in Service and Application details&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7473&#34;&gt;Ambient - Improve Ambient appender performance&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7444&#34;&gt;Graph - improve PFT &amp;ldquo;focus node&amp;rsquo;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7355&#34;&gt;K8s GW API - 1.1 Support&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7223&#34;&gt;K8s GW API - GRPCRoute support&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7397&#34;&gt;Kiali.io - Include performance results and improvements into kiali.io&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7490&#34;&gt;Kiali.io - Add Kiali and Ambient documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7476&#34;&gt;Operator - ansible kubernetes.core collection update&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/openshift-servicemesh-plugin/issues/317&#34;&gt;OSSMC - Support for Gateway API objects in the Istio Config list page&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Fixes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7448&#34;&gt;Ambient - Cannot load the graph: Namespace is excluded&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7500&#34;&gt;Ambient - ztunnel logs are using pod name (And not workload)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7504&#34;&gt;Masthead - kiali may hang when asking for masthead&amp;rsquo;s Debug Info while graph page is displayed&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7458&#34;&gt;Mesh page - controlplanes have an edge to every dataplane&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7063&#34;&gt;Multi-cluster - Visual bug on the Overview page upon refresh&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7447&#34;&gt;Routing Wizard - Empty Matching fail&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7463&#34;&gt;K8s GW API - ReferenceGrant has incorrect API version in the wizard&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/openshift-servicemesh-plugin/issues/330&#34;&gt;OSSMC cannot update namespace or create Istio objects&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7481&#34;&gt;Validations - KIA0106 False Positive - Unable to Find Service Accounts&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Deprecations:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Kiali is deprecating its current namespace selection approach. For a description of the new mechanism see &lt;a href=&#34;https://github.com/kiali/kiali/blob/master/design/KEPS/namespace-discovery/proposal.md&#34;&gt;https://github.com/kiali/kiali/blob/master/design/KEPS/namespace-discovery/proposal.md&lt;/a&gt;. The following configuration is deprecated:
&lt;ul&gt;
&lt;li&gt;spec.deployment.accessible_namespaces&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Note that the following settings have already been deprecated and will soon be removed:
&lt;ul&gt;
&lt;li&gt;api.namespaces.exclude&lt;/li&gt;
&lt;li&gt;api.namespaces.include&lt;/li&gt;
&lt;li&gt;api.namespaces.label_selector_exclude&lt;/li&gt;
&lt;li&gt;api.namespaces.label_selector_include&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;1860&#34;&gt;1.86.0&lt;/h2&gt;
&lt;p&gt;Sprint Release: Jun 17, 2024&lt;/p&gt;
&lt;p&gt;Features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7377&#34;&gt;mesh page - Add legend to the mesh graph&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7379&#34;&gt;mesh page = display side-panel JSON in a table format&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7344&#34;&gt;ambient - support http ambient waypoint telemetry in graph&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7429&#34;&gt;ambient - support http ambient waypoint telemetry in charts&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7420&#34;&gt;ambient - Adapt Auto Injection action in Ambient Mesh&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7388&#34;&gt;Request for fetch traces is timeouted after 30s&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7394&#34;&gt;Simplify i18n support &lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Fixes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7384&#34;&gt;Traces are not filtered for cluster in Multi cluster&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7418&#34;&gt;graph - PFT graph does not show parallel edges with different protocols&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7187&#34;&gt;Helm chart/operator does not support Adding an Inaccessible Cluster &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7256&#34;&gt;CI - Flake - graph_context_menu nodes undefined&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7180&#34;&gt;CI - Improve Cypress test related in kiali_help.feature&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;1850&#34;&gt;1.85.0&lt;/h2&gt;
&lt;p&gt;Sprint Release: May 27&lt;/p&gt;
&lt;p&gt;Features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5913&#34;&gt;New Mesh Topology page&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7266&#34;&gt;Custom http headers for tracing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7150&#34;&gt;Add the ability to modify the dnsconfig for the kiali deployment in kubernetes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7238&#34;&gt;make sure Kiali can observe important istiod metrics&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7357&#34;&gt;kiali-server helm chart: Do not create ClusterRole if not needed&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/openshift-servicemesh-plugin/issues/308&#34;&gt;Include Mesh page in OSSMC&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Fixes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7305&#34;&gt;graph - Getting &amp;ldquo;Cannot load the graph: cluster (kubernetes) is not found or is not accessible for Kiali&amp;rdquo; with certain prometheus configurations.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6523&#34;&gt;ambient - Improve check for detection of workload in Ambient Mesh&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7338&#34;&gt;ambient - ztunnel logs are not shown on a kind cluster &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/openshift-servicemesh-plugin/issues/298&#34;&gt;ossmc - Istio config list page does not filter by namespace (OCP 4.15)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6648&#34;&gt;Vulnerability in Go Crypto CVE-2022-27191&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;1840&#34;&gt;1.84.0&lt;/h2&gt;
&lt;p&gt;Sprint Release: May 06, 2024&lt;/p&gt;
&lt;p&gt;Features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6898&#34;&gt;Ambient - support ztunnel access logs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7322&#34;&gt;Operator - be able to disable namespace watching&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/openshift-servicemesh-plugin/issues/198&#34;&gt;OSSMC - Adapt OSSMC to PF5&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/openshift-servicemesh-plugin/issues/279&#34;&gt;OSSMC - Internationalization (I18N)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Fixes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7275&#34;&gt;KIA1102 shows warning instead of a danger status&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/openshift-servicemesh-plugin/issues/284&#34;&gt;Traffic graph context menu options do not redirect to the correct pages&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7152&#34;&gt;(multi-Cluster AuthorizationPolicy) (KIA0106) when namespace SPIFFY is on remote cluster&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7287&#34;&gt;False KIA1102 alert&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7315&#34;&gt;Kiali fails to watch Gateway due to &lt;code&gt;spec.servers(*).tls.mode: OPTIONAL_MUTUAL&lt;/code&gt; setting&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;1830&#34;&gt;1.83.0&lt;/h2&gt;
&lt;p&gt;Sprint Release: Apr 12, 2024&lt;/p&gt;
&lt;p&gt;Features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;n/a&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Fixes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7227&#34;&gt;Namespace selector order is random&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/openshift-servicemesh-plugin/issues/288&#34;&gt;The Istio config list page does not update when switching from a forbidden namespace to an accessible one&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7252&#34;&gt;token &amp;amp; OpenShift authentication not working &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7254&#34;&gt;automaxprocs removed from kiali&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7259&#34;&gt;Graph for Ambient ns is not generated correctly when the traffic is not generated throw a Gateway&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6777&#34;&gt;(e2e) Tests should check status code before attempting to unmarshal into json&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7243&#34;&gt;(molecule) flake in molecule test &amp;ldquo;os-console-links-test&amp;rdquo;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;1820&#34;&gt;1.82.0&lt;/h2&gt;
&lt;p&gt;Sprint Release: Mar 22, 2024&lt;/p&gt;
&lt;p&gt;Features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6036&#34;&gt;Multicluster - External controlplane support&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6037&#34;&gt;Multicluster - Token per cluster&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7176&#34;&gt;Tracing - Include a health_check_url for tracing external service&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7185&#34;&gt;Tracing - Update Tempo resource usage&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6942&#34;&gt;Auth - Enhancing Kiali OIDC process by supporting CSI secrets&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Fixes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7086&#34;&gt;Kiali tracing URLs don&amp;rsquo;t work with Grafana 10+&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7127&#34;&gt;Warning in workload &amp;lsquo;istio-ingressgateway&amp;rsquo; in non control-plane namespace&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7171&#34;&gt;Distributed Tracing menu item active when there is no public URL defined&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7179&#34;&gt;Graph - crash in DeadNode appender in multi mesh-setup&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;1810&#34;&gt;1.81.0&lt;/h2&gt;
&lt;p&gt;Sprint Release: Mar 01, 2024&lt;/p&gt;
&lt;p&gt;Features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7093&#34;&gt;Kiali Server Helm Chart Support Custom NodePort&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Fixes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7071&#34;&gt;envoy access log entry doc links are broken&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/openshift-servicemesh-plugin/issues/251&#34;&gt;Istio config href is broken&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/openshift-servicemesh-plugin/issues/253&#34;&gt;TLS information is not available&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/openshift-servicemesh-plugin/issues/264&#34;&gt;AlertUtils Kiali messages are not shown in OSSMC&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7145&#34;&gt;Kiali operator does not preserve camel case on additional ingress labels&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7147&#34;&gt;The duration label is confusing in the Overview control plane charts&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7149&#34;&gt;Fix help text for graph Security Display option.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7153&#34;&gt;(graph) ServiceEntry ExportTo is not handled correctly&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;1800&#34;&gt;1.80.0&lt;/h2&gt;
&lt;p&gt;Sprint Release: Feb 09, 2024&lt;/p&gt;
&lt;p&gt;Features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6879&#34;&gt;Make support of &amp;ldquo;ExportTo&amp;rdquo; feature of Istio config configurable&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6924&#34;&gt;Use client-go&amp;rsquo;s service account token client refresh&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7090&#34;&gt;Kiali v1.73.x compatible with Istio 1.20 and GW API v1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7089&#34;&gt;Upgrade Patternfly to version 5.2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4597&#34;&gt;Add pprof endpoints for debugging perf issues&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Fixes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7024&#34;&gt;Multicluster - delete traffic routing on &amp;ldquo;remote&amp;rdquo; cluster 404&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/openshift-servicemesh-plugin/issues/239&#34;&gt;Switching namespaces does not work on Istio Config page&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7053&#34;&gt;Error fetching Istio deployment status of the remote control plane in the Primary remote deployment&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7061&#34;&gt;Validations: Missing KIA0005 in objects details page when wrongly exported&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7077&#34;&gt;PFT Graph not handling graph background clicks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7074&#34;&gt;Close button on the Certificates information does not do anything&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;1790&#34;&gt;1.79.0&lt;/h2&gt;
&lt;p&gt;Sprint Release: Jan 19, 2024&lt;/p&gt;
&lt;p&gt;Features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5850&#34;&gt;Tempo - Initial Support Complete&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6243&#34;&gt;Multicluster - provide links to external Kialis without requiring istio secrets&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6937&#34;&gt;Multicluster - Add documentation for configuring Kiali with primary-primary&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7025&#34;&gt;K8s GW API - Support of TCP/TLS/GRPC Routes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6918&#34;&gt;K8s GW API - Support of ReferenceGrant&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6966&#34;&gt;Use the Prometheus &lt;code&gt;/-/healthy&lt;/code&gt; endpoint for the default value for health_check_url&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7027&#34;&gt;Ambient - Workload graph reports the istio-waypoint proxies as &amp;ldquo;Out of Mesh&amp;rdquo; &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/openshift-servicemesh-plugin/issues/192&#34;&gt;re-enable ARM builds&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7030&#34;&gt;Remove graph &amp;ldquo;Compress-On-Hide&amp;rdquo; Display option&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Fixes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6677&#34;&gt;Bug after v1.72.0 release with oAuth2 strategy when DisableRBAC is true&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7006&#34;&gt;Potential runtime error in kube_cache.GetK8sGateways&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5734&#34;&gt;Prometheus retention config not resolved correctly when using defaults in prom&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6946&#34;&gt;Incorrect spacing and icon sizing in Graph Summary Panel&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6948&#34;&gt;Istio config bug&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6950&#34;&gt;kiali operator cannot determine kiali version when installing ossmc&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6955&#34;&gt;Tracing client must use the Kiali SA Token (Not the user token)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6669&#34;&gt;Double istio rev in configmap name&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6964&#34;&gt;debug info shows incorrect log level&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6961&#34;&gt;Fix rank options in the graph&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6971&#34;&gt;Update axios HTTP client library&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6962&#34;&gt;Kiali render hostnames as individual service instead of serviceentry as whole&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6982&#34;&gt;Scrollbar in Workloads Logs view&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7000&#34;&gt;UI Error after deleting Istio Config&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6998&#34;&gt;Extra padding in long namespace names&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/7022&#34;&gt;Graph: Link to App which does not exist&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;1780&#34;&gt;1.78.0&lt;/h2&gt;
&lt;p&gt;Sprint Release: Dec 08, 2023&lt;/p&gt;
&lt;p&gt;Features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6768&#34;&gt;Update Patternfly library to version 5.1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6806&#34;&gt;Add labels and annotations in wizards&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5692&#34;&gt;Multicluster - When istiod is unavailable portforwarding requests scale with namespaces&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6432&#34;&gt;Multicluster - Create an istio registry per primary&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6616&#34;&gt;Tempo Integration - Use select for query in Tempo 2.2 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6893&#34;&gt;Apply new eslint rules only to edited files&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6888&#34;&gt;(Kiali-operator Helm Chart) Mount /tmp instead of /tmp/ansible-operator/runner as emptyDir to enable read-only root filesystem&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6811&#34;&gt;Workload logs - improve appearance of checkboxes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6912&#34;&gt;Set Secure Attribute on Session Cookie &lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Fixes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6773&#34;&gt;Info icon in yaml editor&amp;rsquo;s overview panel is not aligned properly&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6926&#34;&gt;patternfly graph not showing node decorators&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6665&#34;&gt;Kiali UI not showing API Docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6780&#34;&gt;(Multicluster) Not all reviews workloads are visible in Kiali &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6858&#34;&gt;Integration tests - Kiali 1.73 is not compatible with Istio 1.20&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6856&#34;&gt;Istio 1.20 incompatibility&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6870&#34;&gt;Jaeger traces: Filter by percentile no returning any trace&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6881&#34;&gt;tracing UI - hover over trace dots &amp;ldquo;flickers&amp;rdquo; the heat map&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6884&#34;&gt;Health icon in Application summary panel graph looks weird&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6913&#34;&gt;panic when observability section does not configure the tracing endpoint correctly&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6916&#34;&gt;Show kiali own traces&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6911&#34;&gt;Disalignment in API Documentation info for Workloads and Services&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5635&#34;&gt;Link to trace does not always open trace details&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Deprecations:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Kiali is deprecating use of the Jaeger exporter for Kiali&amp;rsquo;s own traces. Kiali will move to supporting only the OTel exporter.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;1770&#34;&gt;1.77.0&lt;/h2&gt;
&lt;p&gt;Sprint Release: Nov 17, 2023&lt;/p&gt;
&lt;p&gt;Features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6795&#34;&gt;Tempo - Wrong Distributed Tracing link for nav menu&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6540&#34;&gt;Tempo - Span query returning emptly results &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6438&#34;&gt;PF5 - Upgrade to patternfly 5&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6450&#34;&gt;PF5 - Move table deprecated component&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6813&#34;&gt;OSSMC - add version fields to operator CSV metadata for display in OS Console UI&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Fixes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6704&#34;&gt;helm-charts smoke test GH action fails to start&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6710&#34;&gt;Traces are duplicated across both clusters &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6753&#34;&gt;getNamespaceMetrics includes cluster in query params&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6792&#34;&gt;(operator) only process one OSSMConsole CR&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6807&#34;&gt;ossmc package.json did not get updated version during last build&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6787&#34;&gt;empty tree entry in kiali.io installation menu and goes to incorrect place&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6714&#34;&gt;Repeatedly refreshing causes the UI to crash&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6810&#34;&gt;Extra space between left nav and top nav&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6815&#34;&gt;Multicluster - Missing cluster param in Show traces&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6825&#34;&gt;Trace link in Graph - Trace is not loaded when clicked&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6808&#34;&gt;(run-kiali) Error fetching availability of the tracing service&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6847&#34;&gt;Error deploying istio 1.20 with hack script in OpenShift&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;1760&#34;&gt;1.76.0&lt;/h2&gt;
&lt;p&gt;Sprint Release: Oct 27, 2023&lt;/p&gt;
&lt;p&gt;Features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6716&#34;&gt;Update go version 1.20.10&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6687&#34;&gt;Tempo - Update the main external link to distributed tracing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6689&#34;&gt;Tempo - Update documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6699&#34;&gt;Tempo - Update Trace data on hover &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6742&#34;&gt;Add cluster_name support for run-kiali.sh hack script&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6609&#34;&gt;Istio warning/error status for situations where eastwestgateway is not healthy.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6751&#34;&gt;istio hack script: cluster name should not be set to empty string&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6706&#34;&gt;OSSMC - build and release ossmc plugin at end of sprint&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/openshift-servicemesh-plugin/issues/208&#34;&gt;OSSMC - Add scrollbar environment variable&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6448&#34;&gt;PF5 - Move deprecated component Dropdown&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Fixes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6010&#34;&gt;Kiali Crashing in sidecar validation (without a sidecar)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6494&#34;&gt;(CI) Test flake - workload logs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6598&#34;&gt;Unable to reach API Server &amp;lsquo;istio APIs and resources are not present in cluster (Kubernetes)&amp;rsquo;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6772&#34;&gt;Multi mesh setup results in an error when fetching workloads&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6669&#34;&gt;Double istio rev in configmap name&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6674&#34;&gt;Selecting a trace in the Graph does not mark the edges when using Tempo &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6682&#34;&gt;Service of a remote app/workload is not reported in the detail view&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6693&#34;&gt;Tempo - Incomplete span data&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6702&#34;&gt;Invalid AuthorizationPolicy generated from Overview page &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6711&#34;&gt;Envoy is duplicated across both clusters&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6712&#34;&gt;Traffic tab in Apps details is duplicated for both clusters&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6738&#34;&gt;(ci) need to fix CI script for running molecule tests on openshift&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6740&#34;&gt;Gateway badge is not being applied to gateways in the graph&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6745&#34;&gt;Inbound Metrics tab for the Service detail is duplicated for services in different clusters&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6750&#34;&gt;setup-kind-ci.sh script fails if it is not executed from root folder&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;1750&#34;&gt;1.75.0&lt;/h2&gt;
&lt;p&gt;Sprint Release: Oct 06, 2023&lt;/p&gt;
&lt;p&gt;Features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6429&#34;&gt;GW API Multiple implementations&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6130&#34;&gt;Support K8s native sidecars&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6449&#34;&gt;PF5 Move deprecated Select&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5849&#34;&gt;Tempo tempo reading traces&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6537&#34;&gt;Tempo Rename to Tracing instead of Jaeger when applicable &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6663&#34;&gt;Tempo Update hack script to support OpenShift&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/openshift-servicemesh-plugin/issues/203&#34;&gt;Focus selector support in PF graph&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6522&#34;&gt;Include Ambient annotations as configuration settings&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6599&#34;&gt;FAQ on how to get Kiali and Istio versions&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Fixes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6437&#34;&gt;Remote cluster istio-system namespace card show data from primary control plane&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6510&#34;&gt;&amp;ldquo;Cannot load the graph: json: cannot unmarshal object into Go value of type ()*kubernetes.RegistryEndpoint&amp;rdquo;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6615&#34;&gt;Multicluster - Traffic routings created via Graph page are always located in the local cluster&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6632&#34;&gt;Breadcrumb click on Istio Type filter - Filter type is reset&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6635&#34;&gt;Grafana, Ingress, Egress pods not running in Openshift after installing istio via istioctl&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6633&#34;&gt;K8sGateway Validations - Inconsistency in lists&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6639&#34;&gt;Little disalignments in Kiali UI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6657&#34;&gt;Wrong cluster when double tapping on a service/application in node graph&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6670&#34;&gt;molecule tests are broken due to upstream galaxy changes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6676&#34;&gt;Annotation wizard behaviour is not correct when user add/deletes some annotations&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;1740&#34;&gt;1.74.0&lt;/h2&gt;
&lt;p&gt;Sprint Release: Sep 15, 2023&lt;/p&gt;
&lt;p&gt;Features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6429&#34;&gt;Added support of multiple Gateway API classes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5848&#34;&gt;Ensure Tempo works using jaeger-query&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6526&#34;&gt;Update Releasing doc&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/openshift-servicemesh-plugin/issues/202&#34;&gt;Adjust PFT graph-tour&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6566&#34;&gt;document minimum helm version&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6261&#34;&gt;Make Kiali compatible with OSSMC&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6446&#34;&gt;Minimal upgrade to PF5&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Fixes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6398&#34;&gt;Duplicate test ID related to Overview page in Multicluster mode&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6458&#34;&gt;PFGraph throws console error when hovering an application label&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6492&#34;&gt;Graph not showing traffic from portals to travels in west cluster&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6512&#34;&gt;IstioType in istioconfigList is propagated to other views&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6535&#34;&gt;kiali pod stay in Error status after node shutdown&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6544&#34;&gt;Graph side-panel has multi-cluster issues&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6545&#34;&gt;(make) work around opm render bug when building for OLM&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6548&#34;&gt;Double tap on a node redirects to wrong cluster&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6561&#34;&gt;UI issues in Graph replay for OSSMC&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6504&#34;&gt;Sorting by cluster does not work in the list view located in the Overview page&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;1730&#34;&gt;1.73.0&lt;/h2&gt;
&lt;p&gt;Sprint Release: Aug 25, 2023&lt;/p&gt;
&lt;p&gt;Features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6306&#34;&gt;Tutorial for Multicluster&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6268&#34;&gt;Support for dark mode&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6401&#34;&gt;Ambient for Istio 1.19, experimental support&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6502&#34;&gt;Fixed help icon in Envoy tab&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6526&#34;&gt;Update Releasing doc&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/openshift-servicemesh-plugin/issues/195&#34;&gt;OSSMC: update user guide/install guide for 0.4.0&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Fixes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6374&#34;&gt;Incorrect save commit may be triggered while editing yaml&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6387&#34;&gt;Data race when accessing &lt;code&gt;IsGatewayAPI&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6460&#34;&gt;Kiali Istio Config page &amp;ndash; KIA0104 validation (failed)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6462&#34;&gt;Traffic tab - &amp;lsquo;View metrics&amp;rsquo; link broken&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6464&#34;&gt;Wrong cluster badge shown in the page for reviews app detail when accessing it from a graph&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6467&#34;&gt;Multicluster - Namespace Validations in Graph&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6481&#34;&gt;operator installed via OLM cannot set kiali server pod securityContext.readOnlyRootFilesystem to false&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6517&#34;&gt;Kiali fails on OCP cluster&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;1720&#34;&gt;1.72.0&lt;/h2&gt;
&lt;p&gt;Sprint Release: Aug 04, 2023&lt;/p&gt;
&lt;p&gt;Features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5599&#34;&gt;Remove option to disable kube caching&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5923&#34;&gt;Multi-cluster view for Istio config wizards&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6358&#34;&gt;Multi-cluster - hack scripts work with kind&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6397&#34;&gt;K8s Gateway API - improve graph support&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6423&#34;&gt;create Istio configs for services in Ambient Namespace&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Fixes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6249&#34;&gt;Multi-cluster Some pages are broken when meshID is not set&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6248&#34;&gt;Unwanted &amp;ldquo;fit&amp;rdquo; on refresh&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6362&#34;&gt;Helm Chart 1.66.1 is missing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6366&#34;&gt;Multicluster - unbound variable in kiali-deploy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6372&#34;&gt;App health - Inconsistency in Overview page&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6380&#34;&gt;Kiali pod fails to start because of &amp;ldquo;failed to list *v1beta1.Gateway: gateways.gateway.networking.k8s.io is forbidden&amp;rdquo;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6381&#34;&gt;openshift auth logout not behaving&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6405&#34;&gt;Traces tab - 500 errors&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6404&#34;&gt;Service Traffic Wizard - Autogenerated Gateways shown&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6402&#34;&gt;(hack) run-kiali.sh not working with OpenShift&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6417&#34;&gt;Slider CSS affects Openshift console look and feel (OSSMC plugin)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/openshift-servicemesh-plugin/issues/180&#34;&gt;Add global typestyle to OSSMC top HTML element&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6349&#34;&gt;Convert all custom static CSS to typestyle&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;1710&#34;&gt;1.71.0&lt;/h2&gt;
&lt;p&gt;Sprint Release: Jul 14, 2023&lt;/p&gt;
&lt;p&gt;Features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6056&#34;&gt;Multicluster - Config validation from remote cluster&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5984&#34;&gt;Add documentation for &amp;lsquo;Kiali Internal Metrics&amp;rsquo; dashboard&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6132&#34;&gt;Operator - speed up the setting up of configuration&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6270&#34;&gt;Align Patternfly version with Openshift 4.13&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6012&#34;&gt;Auto-enable find/hide filters via Kiali CR&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6330&#34;&gt;Add edit actions in contextual menu for remote clusters &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6338&#34;&gt;Get rid of the experimental warning in the Mesh section&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Fixes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6331&#34;&gt;Graph IdleNodes option is broken&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5988&#34;&gt;Grafana link is not available in Kiali&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6328&#34;&gt;Cluster and ClusterName params in the same API url&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6344&#34;&gt;kiali_feature_flags.clustering.autodetect_secrets.label default is incorrect&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6308&#34;&gt;Incorrect ServiceAccount used for Multi-cluster when using OpenID without RBAC&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;1700&#34;&gt;1.70.0&lt;/h2&gt;
&lt;p&gt;Sprint Release: Jun 23, 2023&lt;/p&gt;
&lt;p&gt;Features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6218&#34;&gt;Update Kiali to build with Go 1.20&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6193&#34;&gt;Use ExecPlugin for remote cluster secret&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5928&#34;&gt;Multicluster - add kiali.io docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6214&#34;&gt;Blog post for Multicluster&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6236&#34;&gt;Video demo for multi cluster&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6239&#34;&gt;Multicluster - Edit Istio Configs in remote clusters&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6177&#34;&gt;show more control plane info in OverView page&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6241&#34;&gt;Verify Kiali using Istio 1.18 Ambient alpha&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6267&#34;&gt;Upgrade Typescript version&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Fixes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6285&#34;&gt;Using LISTENER_FILTER within an EnvoyFilter leads to a cache error&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6253&#34;&gt;K8Gateway object not visible in the Istio Config List. &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6011&#34;&gt;Wrong IstioObject field types&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6287&#34;&gt;Create ServiceEntry - Required Ports - Empty Accepted&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6294&#34;&gt;Service details of ServiceEntry fails&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5376&#34;&gt;kiali.io Architecture is outdated - direct istio dependency&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;1690&#34;&gt;1.69.0&lt;/h2&gt;
&lt;p&gt;Sprint Release: Jun 02, 2023&lt;/p&gt;
&lt;p&gt;Features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5920&#34;&gt;Multicluster - details Views&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6102&#34;&gt;Multicluster - Remove warning &amp;ldquo;Not all remote clusters have reachable Kiali instances&amp;rdquo;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6169&#34;&gt;Multicluster - Overview page istio status&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6150&#34;&gt;Multicluster - Add contextual menu in the nodes for the remote cluster&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6152&#34;&gt;Multicluster - Add cluster column in traffic details tab&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6123&#34;&gt;Graph - Improve graph node labels - remove parentheses&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6137&#34;&gt;Operator - Add new server configuration for ClusterName&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Fixes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6133&#34;&gt;UI - Styling in the Overview page in the UI for cards with long namespace names pushes out kebab menu into adjacent card&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6136&#34;&gt;Multicluster Workload list - Wrong details column content&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6138&#34;&gt;edge colors get &amp;ldquo;stuck&amp;rdquo; as yellow / red after service health recovers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6020&#34;&gt;Workload List gets Validations from backend but do not use them&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6117&#34;&gt;Multicluster Graph page - Validations error in logs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6160&#34;&gt;Typo in accessibleNamespaces field of server config get API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6161&#34;&gt;Multicluster support Namespace Validations&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6139&#34;&gt;Failed to update kiali-server helm chart value view_only_mode in standalone Kiali installation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6171&#34;&gt;Multicluster - Propagate Cluster param in graph nodes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6176&#34;&gt;need to document the auth.openshift settings&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6180&#34;&gt;support openshift route over non-standard port&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6184&#34;&gt;Graph - hiding an entire namespace or cluster keeps the namespace/boxes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6098&#34;&gt;After navigating to the Service graph, all other graphs are displayed with injectServiceNodes=false&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6179&#34;&gt;Multicluster - Add sort by Cluster column&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6185&#34;&gt;Multi-cluster graph - error when user lacks access to remote cluster&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;1680&#34;&gt;1.68.0&lt;/h2&gt;
&lt;p&gt;Sprint Release: May 12, 2023&lt;/p&gt;
&lt;p&gt;Features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5910&#34;&gt;Kiali initial Istio Ambient support&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5919&#34;&gt;Multi-cluster List Views &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5921&#34;&gt;Multi-cluster view for overview page&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5962&#34;&gt;Multi-cluster list view - Istio Config&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6028&#34;&gt;Multi-cluster Update the namespace health service&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5964&#34;&gt;Multi-cluster Services details view&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5965&#34;&gt;Multi-cluster Workloads details view&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5967&#34;&gt;Multi-cluster Istio config details view&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6026&#34;&gt;Multi-cluster Health calculation for workload/app/svc&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5966&#34;&gt;Multi-cluster Applications details view&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/openshift-servicemesh-plugin/issues/144&#34;&gt;Operator Remove ansible loops for better performance&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6103&#34;&gt;Update log level getting istio-cni-config configmap&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6107&#34;&gt;Cluster badges in details pages should be only visible in Multi cluster &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5934&#34;&gt;Cypress test coverage for #5718&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5868&#34;&gt;Cypress Add validation references to K8S Gateways validations&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Fixes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6063&#34;&gt;Multi-cluster - Istio Configs duplicated&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6068&#34;&gt;Client generating 503 metric requests for some node graphs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6071&#34;&gt;no_istiod_test integration test is not working in ocp&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6083&#34;&gt;Operator Support ingress override_yaml to set OpenShift Route spec.host&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6084&#34;&gt;Crash in graph appender due to excluded namespace&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6082&#34;&gt;Improve Grafana integration documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6114&#34;&gt;Cache tries to list cluster scoped resource but it is namespace scoped&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6124&#34;&gt;hardcoded label name&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;1670&#34;&gt;1.67.0&lt;/h2&gt;
&lt;p&gt;Sprint Release: Apr 21, 2023&lt;/p&gt;
&lt;p&gt;Features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/3914&#34;&gt;Support for Istio&amp;rsquo;s discoverySelectors&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6054&#34;&gt;Updated documentatation for Namespace Management (discovery selectors, cluster-wide-access, accessible namespaces_ and namespace watching&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5931&#34;&gt;(operator) use &amp;ldquo;include_tasks:&amp;rdquo;, not the deprecated &amp;ldquo;include:&amp;rdquo;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5987&#34;&gt;Multi-cluster - way to create roles/SA in remote clusters&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6001&#34;&gt;Multi-cluster - Home cluster name should match Istio cluster name&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6007&#34;&gt;Multi-cluster - Combine duplicated namespaces in dropdown selector&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5960&#34;&gt;Multi-cluster - list view - Services&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5961&#34;&gt;Multi-cluster - list view - Applications&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Fixes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5867&#34;&gt;List page toggles to help with performance issues with the Kiali UI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5989&#34;&gt;Missing horizontal scrollbar when seeing logs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5991&#34;&gt;validation error (KIA0202) for auto generated destination rule&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6000&#34;&gt;Perf regression when fetching workloads&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6006&#34;&gt;validation error (KIA0401) when AutoMtls is enabled in istio MeshConfig&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6015&#34;&gt;CRD does not validate correctly&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/6044&#34;&gt;Error fetching app health when a namespace only exist in the remote clusters &lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Notes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;There have been changes to Namespace Management.  The changes are backward compatible but it is recommended to understand the changes regarding Discovery Selector support, cluster-wide access, and accessible-namespaces.  For more see &lt;a href=&#34;https://kiali.io/docs/configuration/rbac/&#34;&gt;here&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Deprecations:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The following settings are deprecated and may be removed in a future release:
&lt;ul&gt;
&lt;li&gt;api.namespaces.exclude&lt;/li&gt;
&lt;li&gt;api.namespaces.include&lt;/li&gt;
&lt;li&gt;api.namespaces.label_selector_exclude&lt;/li&gt;
&lt;li&gt;api.namespaces.label_selector_include&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It is recommended to instead use Istio Discovery Selectors to limit the namespaces in the mesh.&lt;/p&gt;
&lt;h2 id=&#34;1661&#34;&gt;1.66.1&lt;/h2&gt;
&lt;p&gt;Sprint Release: Mar 31, 2023&lt;/p&gt;
&lt;p&gt;Features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5950&#34;&gt;make - run-operator should enable the profiler&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/openshift-servicemesh-plugin/issues/127&#34;&gt;No install-crd reference on README&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5959&#34;&gt;Multicluster - list view - Workloads&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5943&#34;&gt;Multicluster - Services view&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5925&#34;&gt;Multicluster - Hack script for setup a primary-remote scenario&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5764&#34;&gt;Multicluster - Update each business layer to read from each configured backend kube cluster&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5701&#34;&gt;Multicluster - Kiali supports reading from/writing to multiple clusters&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5766&#34;&gt;Multicluster - Update the namespace cache which caches the user token per namespace&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/pull/5927&#34;&gt;Multicluster - distributed errors demo for testing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5939&#34;&gt;Multicluster - Modify the Kube Cache to allow whether to cache Istio types&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/openshift-servicemesh-plugin/issues/114&#34;&gt;core-ui - Need the configuration and endpoints&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/openshift-servicemesh-plugin/issues/119&#34;&gt;core-ui - Remove IstioConfigList elements and pull them from library&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Fixes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5742&#34;&gt;Error fetching Istiod resource thresholds on Web UI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5945&#34;&gt;make - Error to create operator pull secret&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5949&#34;&gt;Missing scraping parameters in kiali-operator helm chart&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4338&#34;&gt;ansible option we use in operator code is being renamed&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/openshift-servicemesh-plugin/issues/124&#34;&gt;CORS issue with library API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5972&#34;&gt;fix flaky test failure&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Notes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;To avoid a known performance degradation, update to v1.66.1 (or later) from v1.66.0.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Deprecations:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Given that the Kiali cache is now mandatory and that there have been several changes to the cache implementation, the .spec.kubernetes_config.cache_* settings have all deprecated and will be removed from the CRD. It is recommended to remove these settings from your CR, if defined.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;1650&#34;&gt;1.65.0&lt;/h2&gt;
&lt;p&gt;Sprint Release: Mar 10, 2023&lt;/p&gt;
&lt;p&gt;Features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5769&#34;&gt;K8sGateway Object Validation - Add References&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5711&#34;&gt;Improve KIA0301 (more than one gateway warning) to treat a single * as not a warning&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5818&#34;&gt;document how to upgrade Go in the Kiali builds&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5862&#34;&gt;Error page could be more than just a text message&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5878&#34;&gt;log the version of go that was used to build the server&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Fixes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5372&#34;&gt;remove monitoringdashboard CRD (when supporting kiali &amp;gt;= 1.25)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5859&#34;&gt;bad printf - missing param&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5846&#34;&gt;Istio 1.17.0 image is not available in gcr.io&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5882&#34;&gt;Istio Config doesn&amp;rsquo;t show correct yaml for Sidecar OutboundTrafficPolicy.Mode&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5864&#34;&gt;Application crash when accessing service from K8s Gateway&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5872&#34;&gt;envoy listeners tab - match column shows does not show correct dest port when destination_port is specified&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5871&#34;&gt;navigating from envoy listeners tab to a named route incorrectly highlights the clusters tab&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5890&#34;&gt;Don&amp;rsquo;t let the graph generation panic on bad telemetry&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;1640&#34;&gt;1.64.0&lt;/h1&gt;
&lt;p&gt;Sprint Release: Feb 17, 2023&lt;/p&gt;
&lt;p&gt;Features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5263&#34;&gt;Mesh wide settings should take the MeshConfig defaults&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5755&#34;&gt;Don&amp;rsquo;t use the anonymous account to fetch cluster version (OpenShift authentication)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4179&#34;&gt;Editable Istio config annotations for workloads and services&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5751&#34;&gt;Configure Kiali timeouts while fetching traces from jaeger&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5799&#34;&gt;Build Kiali with a newer minor version of Golang&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5797&#34;&gt;K8s GW API Support  - v1alpha2 is deprecated&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5808&#34;&gt;document for contributors in operator and helm chart repos&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5823&#34;&gt;Consistent way to resolve Kiali version from Istio version&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5833&#34;&gt;reponse type id_token check in Open ID authentication is no longer needed&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5832&#34;&gt;Pod labels for Kiali Operator Helm Chart&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Fixes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5811&#34;&gt;(Cypress) Improve test coverage for Istio Config Wizards&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5815&#34;&gt;Format frontend code with prettier standards&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5813&#34;&gt;remove implicit flow from documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5805&#34;&gt;Remove @webcomponents/custom-elements from package.json since Firefox ESR supports it natively&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5788&#34;&gt;remove compat matrix/version checking&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5720&#34;&gt;Rework RBAC documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5741&#34;&gt;Form to add port should start empty&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5762&#34;&gt;No istiod: Disable validations also in the Overview page&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5770&#34;&gt;Investigate possible flaky test in Cypress suite&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5743&#34;&gt;Graphs loading very slowly&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5790&#34;&gt;Remove &amp;ldquo;Labels&amp;rdquo; in Create K8s Gateway Wizard&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5803&#34;&gt;Prettier pre-commit hook is not working correctly&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5208&#34;&gt;Wrong engine node version in package.json&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5830&#34;&gt;Internal server error when creating a Gateway with a duplicate name in the Istio Config Wizard&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5836&#34;&gt;Read-only YAML editor in Istio Config even with write privileges&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5834&#34;&gt;Duplicate IDs for the text inputs + high port value breaks the UI (Istio Config wizard page)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;1632&#34;&gt;1.63.2&lt;/h2&gt;
&lt;p&gt;Sprint Release: Feb 02, 2023&lt;/p&gt;
&lt;p&gt;Features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5501&#34;&gt;Validations for Gateway API objects&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5626&#34;&gt;Kiali without Istio API using istio_api_enabled=false&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5502&#34;&gt;Gateway API Objects - Include in wizards&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5657&#34;&gt;upgrade operator base image to 4.12&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5709&#34;&gt;References for k8s httpRoute&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5708&#34;&gt;References for K8s Gateways&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5320&#34;&gt;Add dates in chart tooltips&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5719&#34;&gt;(CI) Gateway API in CI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5726&#34;&gt;(CI) Gateway API Integration tests.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5753&#34;&gt;(cypress) Gateway API in Cypress tests.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5702&#34;&gt;Multicluster - Hack script to setup local multicluster with OIDC&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5738&#34;&gt;Multicluster - cluster configuration&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Fixes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5714&#34;&gt;Kiali view-only mode allows changing proxy log-level&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5713&#34;&gt;Workload auto-injection of proxy should ensure label and annotation settings don&amp;rsquo;t conflict&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5695&#34;&gt;Upgrade error on role switch for view-only&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5725&#34;&gt;hide &amp;ldquo;enable injection&amp;rdquo; menu option in Overview page when in OSSM&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5729&#34;&gt;KIA0106 false positive with wildcard&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5739&#34;&gt;IRC link on kiali.io is not working&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5757&#34;&gt;Service with K8s Gateway - Inconsistency between views&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Notes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Helm 3.10 is now required to run the Helm Charts.&lt;/li&gt;
&lt;li&gt;To avoid a known performance degradation, update to v1.63.2 (or later) from earlier revisions of v1.63.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Deprecations:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4705&#34;&gt;The deprecated support for OpenID&amp;rsquo;s &lt;em&gt;implicit flow&lt;/em&gt; has now been removed.&lt;/a&gt; If necessary, you must switch to using the more secure &lt;em&gt;authorization code flow&lt;/em&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;1621&#34;&gt;1.62.1&lt;/h2&gt;
&lt;p&gt;Sprint Release: Feb 02, 2023&lt;/p&gt;
&lt;p&gt;Features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5660&#34;&gt;Test the new native stats runtime by setting TELEMETRY_USE_NATIVE_STATS to &amp;ldquo;true&amp;rdquo; in istiod&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5670&#34;&gt;Kiali CR definition to allow the use of appProtocol in the service configuration&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5588&#34;&gt;Show Kiali configuration in the application&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Fixes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5669&#34;&gt;Kiali may prevent istiod from becoming ready on initial startup of istiod pod&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5696&#34;&gt;Kiali errors out loading workload graph in &amp;lsquo;default&amp;rsquo; namespace &lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Notes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;To avoid a known performance degradation, update to v1.62.1 (or later) from v1.62.0.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Deprecations:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The &lt;a href=&#34;https://kiali.io/docs/features/multi-cluster/&#34;&gt;experimental support for multicluster deployment models&lt;/a&gt; is now deprecated and may be removed in a future release. &lt;a href=&#34;https://github.com/kiali/kiali/issues/5618&#34;&gt;New multicluster features&lt;/a&gt; are currently being developed within the Kiali community as a replacement.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;1610&#34;&gt;1.61.0&lt;/h2&gt;
&lt;p&gt;Sprint Release: Dec 16&lt;/p&gt;
&lt;p&gt;Features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5611&#34;&gt;Kiali SA should use view-only role unless using anonymous strategy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5650&#34;&gt;openshift auth timeout customizations&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Fixes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5643&#34;&gt;Kiali distroless version breaks external https calls&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5663&#34;&gt;Redirect Loop on OpenID Connect Failures&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5646&#34;&gt;Update GH pipelines removing deprecated warnings&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;1600&#34;&gt;1.60.0&lt;/h2&gt;
&lt;p&gt;Sprint Release: Nov 25&lt;/p&gt;
&lt;p&gt;Features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/openshift-servicemesh-plugin/issues/52&#34;&gt;Add Kiali validations on Istio Detail pages &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5561&#34;&gt;Bump go version to 1.18&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5524&#34;&gt;Indicate the status of a canary upgrade in the control plane card&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5578&#34;&gt;Kiali traffic wizard&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5597&#34;&gt;Control Plane Card - Min TLS Improvement&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5622&#34;&gt;document how to specify digest images in the Kiali CR and helm chart&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Fixes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5197&#34;&gt;(CI) Test Flake - TestCreateSessionNoChunks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5623&#34;&gt;Min TLS Version - React Warning&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5631&#34;&gt;(kiali.io) Aditional CI issues&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5634&#34;&gt;Kiali heatmap tooltips are too compute-heavy&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Deprecations:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4705&#34;&gt;Support for OpenID&amp;rsquo;s &lt;em&gt;implicit flow&lt;/em&gt; is deprecated and will be removed soon.&lt;/a&gt; Please, switch to using the &lt;em&gt;authorization code flow&lt;/em&gt; which is more secure.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Known Issues:&lt;/p&gt;
&lt;p&gt;With the move to a distroless container in v1.59, &lt;a href=&#34;https://github.com/kiali/kiali/issues/5643&#34;&gt;root CA certificates went missing&lt;/a&gt;. This affects the Kiali integration with OpenID. The problem will be fixed in the next release (v1.61).  The workaround is to use one of the &amp;ldquo;-distro&amp;rdquo; image tags found on the &lt;a href=&#34;https://quay.io/repository/kiali/kiali?tab=tags&#34;&gt;Quay.io repo&lt;/a&gt; by specifying it in the &lt;code&gt;deployment.image_version&lt;/code&gt; setting of the &lt;a href=&#34;https://kiali.io/docs/configuration/kialis.kiali.io/#.spec.deployment.image_version&#34;&gt;Kiali CR&lt;/a&gt; or &lt;a href=&#34;https://github.com/kiali/helm-charts/blob/v1.60.0/kiali-server/values.yaml#L48&#34;&gt;server helm chart value&lt;/a&gt;. If using the operator, in order to be able to set the &lt;code&gt;deployment.image_version&lt;/code&gt; within the Kiali CR, you must &lt;a href=&#34;https://github.com/kiali/helm-charts/blob/v1.60.0/kiali-operator/values.yaml#L66-L70&#34;&gt;enable the allowAdHocKialiImage setting&lt;/a&gt; when installing the operator.&lt;/p&gt;
&lt;h2 id=&#34;1590&#34;&gt;1.59.0&lt;/h2&gt;
&lt;p&gt;Sprint Release: Nov 4, 2022&lt;/p&gt;
&lt;p&gt;Features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5504&#34;&gt;Validate that Kiali installs as an add-on for Ambient&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5525&#34;&gt;Migrate the control plane related information from the masthead to the control plane card &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5508&#34;&gt;switch the published images to be distroless&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5528&#34;&gt;Add TLS min version to the Control Plane card in the Overview Page&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5580&#34;&gt;Helm charts installation doesn&amp;rsquo;t work on Apple M1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5591&#34;&gt;mount secret data from files, not environment variables&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5594&#34;&gt;Filter &amp;ldquo;istio&amp;rdquo; GatewayClassName Gateway API gateways&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Fixes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5546&#34;&gt;Config Create Wizard - Preview shows old state &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5568&#34;&gt;(Cypress) Fix kiali login test on openshift&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5584&#34;&gt;Kiali dashboard freezes when checking traces information&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;1580&#34;&gt;1.58.0&lt;/h2&gt;
&lt;p&gt;Sprint Release: Oct 14, 2022&lt;/p&gt;
&lt;p&gt;Features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5232&#34;&gt;openid strategy should not show login page: where are kiali&amp;rsquo;s autologin options?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/openshift-servicemesh-plugin/issues/45&#34;&gt;Add Kiali validation on Istio Config list&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5516&#34;&gt;Can we exclude the some accessible namespaces in kiali CR with some labelSelector?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5261&#34;&gt;Add Argocd Rollout as workload type to Kiali.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5490&#34;&gt;Badging gateway api gateways correctly on the graph&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Fixes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4210&#34;&gt;&amp;ldquo;KIA0203 This subset&amp;rsquo;s labels are not found in any matching host&amp;rdquo; For Argo Rollout canary scenario&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/openshift-servicemesh-plugin/issues/53&#34;&gt;Links to ServiceMesh tabs should propagate interval and refresh parameters&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/openshift-servicemesh-plugin/issues/94&#34;&gt;Duration in Overview tab from details pages not refreshing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5465&#34;&gt;(CI) Test flake - Kiali Graph page - Find/Hide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5495&#34;&gt;Control Plane Card icon overlapping &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5499&#34;&gt;(CI) Test flake - Service Details Traces - Spans&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4935&#34;&gt;Jaeger - namespace_selector not working for services in istio-system&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5540&#34;&gt;(Cypress) login using default authentication method does not work&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;1570&#34;&gt;1.57.0&lt;/h2&gt;
&lt;p&gt;Sprint Release: Sep 23&lt;/p&gt;
&lt;p&gt;Features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4678&#34;&gt;Optimize the Kiali Cache design under cluster rights presence&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5167&#34;&gt;Reorganize the Overview page to better show data plane vs control plane status&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/openshift-servicemesh-plugin/issues/42&#34;&gt;Plugin time interval+refresh controls on detail pages&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5451&#34;&gt;Initial Release of OSSMC&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5368&#34;&gt;Relax &amp;ldquo;missing label&amp;rdquo; wording in tooltips&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/openshift-servicemesh-plugin/issues/90&#34;&gt;missing version and commit info in log output&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5455&#34;&gt;make container securityContext configurable&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5457&#34;&gt;Move Kiali&amp;lt;-&amp;gt;Istio version checks to the &amp;ldquo;About&amp;rdquo; dialog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5485&#34;&gt;Added K8s Gateway API objects to Istio Config list page&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5082&#34;&gt;Enable github pipeline to run integration tests with token auth enabled&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Fixes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5432&#34;&gt;Revisit &amp;ldquo;round timeseries on client-side with significant decimals&amp;rdquo;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5358&#34;&gt;(CI) Test flake - Service details page&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5441&#34;&gt;(hack) setup kind in ci finalising with error&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5407&#34;&gt;(CI) Test flake - workload details&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5196&#34;&gt;(CI) Test Flake - TestConcurrentClientExpiration&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5226&#34;&gt;(CI) Test flake - The degraded status of a service is reported in the list of service&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5437&#34;&gt;(CI) Test flake - Sidebar toggle&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5459&#34;&gt;Upgrade operator base image to 4.11&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5248&#34;&gt;Change istioctl install hack script to default to single cluster settings&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Upgrade Notes:&lt;/p&gt;
&lt;p&gt;The &lt;a href=&#34;https://github.com/kiali/kiali/issues/5167&#34;&gt;improved control plane card on the Overview page&lt;/a&gt; makes use of previously unused
metrics.  If these metrics have been removed from your environment you will need to add them back for the feature to work.  As a result,&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;process_cpu_seconds_total&lt;/td&gt;
&lt;td&gt;used to graph cpu usage in the control plane overview card&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;container_memory_working_set_bytes&lt;/td&gt;
&lt;td&gt;used to graph memory usage in the control plane overview card&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;pilot_proxy_convergence_time_sum&lt;/td&gt;
&lt;td&gt;used in control plane overview card to show the average proxy push time&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;pilot_proxy_convergence_time_count&lt;/td&gt;
&lt;td&gt;used in control plane overview card to show the average proxy push time&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;br /&gt;
&lt;p&gt;If these metrics have been removed from your environment you will need to add them back for the feature to work.  As a result,
we have updated our recommended Prometheus metric thinning configuration.  See &lt;a href=&#34;https://kiali.io/docs/configuration/p8s-jaeger-grafana/prometheus/#metric-thinning&#34;&gt;kiali.io&lt;/a&gt;
for the updated configuration.  The metrics used are not typically very heavy and adding them back should likely not be an issue.&lt;/p&gt;
&lt;p&gt;See &lt;a href=&#34;https://kiali.io/docs/faq/general/#requiredmetrics&#34;&gt;this FAQ entry&lt;/a&gt; for a list of all metrics required by Kiali.&lt;/p&gt;
&lt;h2 id=&#34;1560&#34;&gt;1.56.0&lt;/h2&gt;
&lt;p&gt;Sprint Release: Sep 2&lt;/p&gt;
&lt;p&gt;Features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4635&#34;&gt;Support single cluster traces view when using Jaeger with multi-cluster storage backend&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5399&#34;&gt;add capabilities-drop explicitly to deployment&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5274&#34;&gt;Support Telemetry and WasmPlugin Istio objects&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/openshift-servicemesh-plugin/issues/43&#34;&gt;Plugin service actions on details pages&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Fixes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5070&#34;&gt;k8s api token not auto refreshing (aws eks warning)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;1550&#34;&gt;1.55.0&lt;/h2&gt;
&lt;p&gt;Sprint Release: August 12, 2022&lt;/p&gt;
&lt;p&gt;Features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5151&#34;&gt;(scalability) How to thin metrics to those required only by Kiali&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4505&#34;&gt;Launch Kiali wizard scenarios from graph nodes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5246&#34;&gt;Milliseconds precision for sorting log entries in the Logs tab&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5153&#34;&gt;Istio Workload Config Validation Optimization&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5207&#34;&gt;Customizable links in Kiosk mode&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5235&#34;&gt;Relax host validations on presence of ALLOW_ANY vs REGISTRY_ONLY&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Fixes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5286&#34;&gt;Overlay trace onclick event doesn&amp;rsquo;t work in the metrics charts&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5255&#34;&gt;Terminated in Another Window color doesn&amp;rsquo;t look like the PF warning title color&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5273&#34;&gt;Adjust the &amp;ldquo;View in Grafana&amp;rdquo; link in metrics tab&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5310&#34;&gt;Sidecar with no workloadSelector in two separate namespaces are marked as conflicting&amp;hellip;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5291&#34;&gt;trace details heatmap vertical labels are truncated&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5287&#34;&gt;Adjust the &amp;ldquo;View in Tracing&amp;rdquo; links to the same row&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5342&#34;&gt;Skip workloads when summarizing config validations in Overview page and in Graph&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5289&#34;&gt;logs tab page has wrong container when navigating from trace tab &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5213&#34;&gt;More than one Gateway, but cannot find duplicate&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;1540&#34;&gt;1.54.0&lt;/h2&gt;
&lt;p&gt;Sprint Release: July 22, 2022&lt;/p&gt;
&lt;p&gt;Features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5159&#34;&gt;Update istio.io/client-go to Istio 1.14&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4511&#34;&gt;Revisit DestinationRule no labels warning&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5266&#34;&gt;Outdated Kiali validations&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5262&#34;&gt;Review validations documentation on Kiali.io&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/2887&#34;&gt;Combine destination/source reporters in metric tab&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5276&#34;&gt;Adjust mouse pointer on areas that user can navigate/jump to&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5318&#34;&gt;remove perms no longer needed&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5334&#34;&gt;(helm) be able to specify custom annotations on the Kiali CR&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Fixes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5302&#34;&gt;Misaligned dropdown when invalid operand is typed&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5297&#34;&gt;(helm) when operator helm chart optionally creates CR, it puts the annotation in the wrong spot&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;1530&#34;&gt;1.53.0&lt;/h2&gt;
&lt;p&gt;Sprint Release: July 1st, 2022&lt;/p&gt;
&lt;p&gt;Features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5001&#34;&gt;Add cypress UI tests around the Service Details page&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4896&#34;&gt;Add outboundTrafficPolicy value to overview istio-system card &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4854&#34;&gt;Create a UI suite test on cypress&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5072&#34;&gt;UI tests around the Workloads Details page.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5204&#34;&gt;Add Kiali validations on the Istio Config Details sidepanel&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5206&#34;&gt;Not found messages may have a better message in the body page&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5142&#34;&gt;Reproducible performance testing environment&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5162&#34;&gt;Envoy tab: add tooltips with the Envoy terminology&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5187&#34;&gt;Update the information about mTLS data in details pages&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5238&#34;&gt;Document ability to set default Kiali CR image_name in operator from helm charts&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/openshift-servicemesh-plugin/issues/39&#34;&gt;Release pipeline for the plugin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5269&#34;&gt;Remove invalid durations based on prometheus scrape interval&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5244&#34;&gt;fix doc link 404&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Fixes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5192&#34;&gt;404 external link in kiali.io&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4701&#34;&gt;Failing to Display Larger Number of Log Lines&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5186&#34;&gt;Fix UI Actions regressions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5198&#34;&gt;(CI) Test Flake - Cypress sidecar injection&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5219&#34;&gt;(e2e) Flaky test fix TestAuthPolicyPrincipalsError&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5250&#34;&gt;Keep Envoy tab after refresh&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5257&#34;&gt;DR details open fails in some cases&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;1520&#34;&gt;1.52.0&lt;/h2&gt;
&lt;p&gt;Sprint Release: June 10th, 2022&lt;/p&gt;
&lt;p&gt;Features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4519&#34;&gt;Update beta interfaces for CronJob workloads&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5168&#34;&gt;Adjust font style in charts options&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5131&#34;&gt;&amp;ldquo;This subset&amp;rsquo;s labels are not found in any matching host&amp;rdquo; - DestinationRule and ServiceEntry&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4260&#34;&gt;Upgrade the Patternfly framework&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5129&#34;&gt;Review conditional rendering in the kiosk mode&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5127&#34;&gt;Add more mechanisms to provide OpenShift tokens to Kiali&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4827&#34;&gt;Improve the upstream pipelines&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5073&#34;&gt;UI tests around the Graph page Find/Hide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4864&#34;&gt;Kiali and Istio validation messages should be placed together&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Fixes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5092&#34;&gt;Update font color on green/red labels for trace details&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5148&#34;&gt;Toolbar icons misaligned &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5166&#34;&gt;Adjust Istio/Kiali version warnings&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5164&#34;&gt;(e2e) TestAuthPolicyPrincipalsError test flaking&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5161&#34;&gt;Envoy filter broken&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5076&#34;&gt;(cypress) Sidecar injection tests sometimes fail&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5125&#34;&gt;Fix find/hide toolbar alignment issues&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5097&#34;&gt;Fix &amp;ldquo;info&amp;rdquo; icons in the yaml config editor&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5111&#34;&gt;Multiple condition values under builder are displayed without comma to separate multiple values&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5115&#34;&gt;operator aborts if cluster does not support default HPA version&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5109&#34;&gt;Validations missing for few keys of authorization policy conditions&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;1510&#34;&gt;1.51.0&lt;/h2&gt;
&lt;p&gt;Sprint Release: May 20th, 2022&lt;/p&gt;
&lt;p&gt;Features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5084&#34;&gt;add cypress tests for graph replay&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4826&#34;&gt;Migrate e2e test suite to Golang&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4960&#34;&gt;(cypress) UI tests around the Graph page Toolbars (otherwise not covered)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4424&#34;&gt;validation: authorization policy validation, principals not found&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4936&#34;&gt;Make the Istio Config details poll explicit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4912&#34;&gt;Add cypress UI tests around the Workload List page&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5055&#34;&gt;operator release pipeline needs to update createdAt field in CSVs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5025&#34;&gt;add creation of olm metadata to the new github release workflow&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4836&#34;&gt;Investigate update of Patternfly to be compatible with OS Console&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5045&#34;&gt;Investigate testing demos scripts on upstream + OpenShift platform&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/5029&#34;&gt;Schedule release pipelines&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali-operator/pull/536&#34;&gt;Update to use new HPA v2&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Fixes:&lt;/p&gt;
&lt;h2 id=&#34;1500&#34;&gt;1.50.0&lt;/h2&gt;
&lt;p&gt;Sprint Release: April 29th, 2022&lt;/p&gt;
&lt;p&gt;Features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4949&#34;&gt;Add cypress UI tests around the Graph page Display menu&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4955&#34;&gt;Add cypress UI tests around the Services List page&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4869&#34;&gt;Improve Kiali server release pipeline using Github Actions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4870&#34;&gt;Improve Kiali operator release pipeline using Github Actions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4992&#34;&gt;Improve Helm charts release pipeline using Github Actions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4993&#34;&gt;Improve Kiali site release pipeline using Github Actions&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Fixes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/pull/4915&#34;&gt;Remove Snyk and consolidate on GitHub Dependabot&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4953&#34;&gt;Update operator&amp;rsquo;s Ansible base image&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/pull/4973&#34;&gt;Quite some logging&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4849&#34;&gt;Clean expired clients&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/demos/pull/46&#34;&gt;Minor Demo and Tutorial enhancements&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4975&#34;&gt;Fix to Destination Rule validation (.svc)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4894&#34;&gt;Fix to Virtual Service YAML display&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;1490&#34;&gt;1.49.0&lt;/h2&gt;
&lt;p&gt;Sprint Release: April 8th, 2022&lt;/p&gt;
&lt;p&gt;Features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4542&#34;&gt;Auth: Phase out usage of JWTs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4895&#34;&gt;Kiali UI and Kiali Server can point to a single commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4872&#34;&gt;Add cypress UI tests around the Overview page&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4884&#34;&gt;Update Prometheus client lib&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4825&#34;&gt;Transfer frontend repo into kiali repo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4833&#34;&gt;Hack script to create a Kind cluster in CI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4737&#34;&gt;Feature flag to disable log browser&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/3408&#34;&gt;Support Gateways workloads in user namespaces&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4814&#34;&gt;add the ability to add annotations to configmap.yaml&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Fixes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4892&#34;&gt;ui crash with no gateways&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4871&#34;&gt;UI messages at INFO level look just like ERROR level messages&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4842&#34;&gt;fatal error: concurrent map writes&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;1480&#34;&gt;1.48.0&lt;/h2&gt;
&lt;p&gt;Sprint Release: March 18th, 2022&lt;/p&gt;
&lt;p&gt;Features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4601&#34;&gt;Research a new Graph layout to support large topologies&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4241&#34;&gt;Improve the side panel in the Istio Config editor&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4748&#34;&gt;Reduce the number of requests to fetch health data on list pages&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4610&#34;&gt;Improve the representation of edges and connections in large topologies&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4554&#34;&gt;Add help messages for DestinationRules&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4564&#34;&gt;Add help messages for RequestAuthentications&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4556&#34;&gt;Add help messages for Gateways&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4562&#34;&gt;Add help messages for AuthorizationPolicies&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4561&#34;&gt;Add help messages for WorkloadGroups&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4560&#34;&gt;Add help messages for WorkloadEntries&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4558&#34;&gt;Add help messages for Sidecars&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4557&#34;&gt;Add help messages for ServiceEntries&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4555&#34;&gt;Add help messages for EnvoyFilters&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4790&#34;&gt;Reduce the number of requests to fetch health data on detail pages&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4605&#34;&gt;Research workload/service label filters on Graph&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4559&#34;&gt;Add help messages for VirtualServices&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/2447&#34;&gt;Ensure all validations has object references&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4553&#34;&gt;Base side panel redesign for Istio config objects&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4692&#34;&gt;Improve crossnamespace Istio Gateways query in ServiceDetailsPage&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4769&#34;&gt;Envoy metrics look broken&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4585&#34;&gt;Develop a mock backend server for local UI work in scalability scenarios&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4664&#34;&gt;feat(multitenancy): support additional metric label for prometheus&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Fixes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4758&#34;&gt;Sidecar Validations - Workloads should be from local namespace&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4807&#34;&gt;Gateway details warning - Missing validation reference&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4798&#34;&gt;Kiali graph is not working with disabled Istio&amp;rsquo;s /debug endpoints&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4797&#34;&gt;Mismatched Node Graph Type breaks UI in Application&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4788&#34;&gt;Misconfigured &lt;code&gt;istiod_deployment_name&lt;/code&gt; causes a panic&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4720&#34;&gt;Namespace with External Registry Service only - UI Error Loading services&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4795&#34;&gt;Service List - Missing Configuration status&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4793&#34;&gt;&amp;ldquo;Could not fetch services list&amp;rdquo; Error&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4640&#34;&gt;KIA0003 for multiple Request Authentication&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4784&#34;&gt;Duration dropdown showing invalid durations&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4764&#34;&gt;Kiali shows KIA0701 for istio-system debug ports - but should not&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4766&#34;&gt;Istio Config List - Configuration icon load inconsistency&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4761&#34;&gt;cannot use a custom secret for Kiali identity&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali-ui/pull/2321&#34;&gt;Improve protection against graph numbers that are actually string variables&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali-ui/pull/2320&#34;&gt;Fix time selection issue in replay custom startTime picker&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;1470&#34;&gt;1.47.0&lt;/h2&gt;
&lt;p&gt;Sprint Release: February 25th, 2022&lt;/p&gt;
&lt;p&gt;Features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4552&#34;&gt;Allow dynamic markers on editor according to Istio config object&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/3577&#34;&gt;Introduce &amp;ldquo;preview&amp;rdquo; mode in Istio Config actions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4733&#34;&gt;Add Istio Config Preview under wizard actions under istio config page&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4382&#34;&gt;Refactor Kiali Validations to better use the Istio registry information&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4528&#34;&gt;Refactor Kiali Validations according to Istio Registry usage model for listing Configs and Services&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4681&#34;&gt;Add Istio Config Preview under wizard actions under service details page&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/pull/4658&#34;&gt;Add graph generator for creating mock graph data&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Fixes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4715&#34;&gt;(operator) CSV should define skipRange&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4714&#34;&gt;namespace excludes default regexes should only filter out namespaces that &amp;ldquo;starts-with&amp;rdquo; the patterns.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/pull/4676&#34;&gt;Fix &amp;ldquo;xxx is not found as xxx&amp;rdquo; issue&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;1460&#34;&gt;1.46.0&lt;/h2&gt;
&lt;p&gt;Sprint Release: February 4th, 2022&lt;/p&gt;
&lt;p&gt;Features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4703&#34;&gt;Add prerequisites in quick-start kiali.io to try kiali&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4502&#34;&gt;Create and sync namespace caches on startup&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4684&#34;&gt;publish the auto-generated docs for the kiali cr&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4036&#34;&gt;Instrument Kiali server with Jaeger&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4643&#34;&gt;Deprecate Iter8 extension in favor of a new model&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/3061&#34;&gt;Validations: Support &lt;code&gt;exportTo&lt;/code&gt; field&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Fixes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4675&#34;&gt;Gateway Validation References - Contains self reference&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4673&#34;&gt;invalid link in kiali.io doc page istio.md&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4666&#34;&gt;Graph hide can hang browser when zoomed out enough to hide labels&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4682&#34;&gt;auth is broken according to molecule tests&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4668&#34;&gt;Trend lines feature broken in master&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;1450&#34;&gt;1.45.0&lt;/h2&gt;
&lt;p&gt;Sprint Release: January 14th, 2022&lt;/p&gt;
&lt;p&gt;Features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4521&#34;&gt;Hide graph labels that are too small to read&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4433&#34;&gt;Add preview mode in overview page&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4541&#34;&gt;Graph: Correctly badge service nodes with the VS/Route icon&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4547&#34;&gt;(graph) Enable namespace and cluster boxing by default&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4582&#34;&gt;tests should use latest minikube and dex to keep up to date&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4316&#34;&gt;Support &lt;code&gt;exportTo&lt;/code&gt; validation in ServicesEntries&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4540&#34;&gt;(operator) update operator to base image 1.10.1 (4.9)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Fixes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4636&#34;&gt;Jaeger http legacy protocol has problems in master&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4588&#34;&gt;Adjust font style in trace details comparison map&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4638&#34;&gt;fast click &lt;code&gt;Idle Nodes&lt;/code&gt; (or other graph display options) can break UI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4652&#34;&gt;Missing &amp;ldquo;KIA1106 More than one Virtual Service for same host&amp;rdquo; for cross-namespace cases&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4589&#34;&gt;Minigraph navigation broken&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4645&#34;&gt;&amp;ldquo;KIA1102 VirtualService is pointing to a non-existent gateway&amp;rdquo; shown only once.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4641&#34;&gt;Wrong KIA1106 &amp;ldquo;More than one Virtual Service for same host&amp;rdquo;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4592&#34;&gt;Number of regex.Compile() calls in multi_match_checker scales quadratically with hosts checked&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4570&#34;&gt;&amp;ldquo;Could not fetch services list&amp;rdquo; Error in Service view when selecting some namespaces&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4246&#34;&gt;Molecule &amp;ldquo;api-test&amp;rdquo; failure in graph generation on ossm 2.1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4224&#34;&gt;Validations and TLS Endpoints Very Slow&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/3949&#34;&gt;Reconciliation may fail when removing a namespace from a cluster immediately after removing it from spec.deployment.accessible_namespaces&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4486&#34;&gt;k8s service appProtocol is no reflected in config checks&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;1440&#34;&gt;1.44.0&lt;/h2&gt;
&lt;p&gt;Sprint Release: December 3rd, 2021&lt;/p&gt;
&lt;p&gt;Features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4488&#34;&gt;Correct graph edge for Pod to Pod communication using destination_workload&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4462&#34;&gt;Make istiod ports configurable in kiali&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/3062&#34;&gt;Support rootNamespace: administrative namespace for istio config&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4450&#34;&gt;Support rootNamespace in Peer Authentication validations&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4449&#34;&gt;Support rootNamespace in Sidecar validations&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4510&#34;&gt;access ingress_enabled for now to support older CRs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/3786&#34;&gt;Include an explanation about the lack of health information for TCP services (like a database)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4485&#34;&gt;(operator) implement best practice guidelines to support multi-tenant installations&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4042&#34;&gt;Upgrade kubernetes/client-go version and update beta interfaces for workloads&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Fixes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4458&#34;&gt;KIA1105: Virtual service routes may not point to any subset&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4527&#34;&gt;Possible memory leak in /api/istio/status endpoint&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/3858&#34;&gt;Documentation doesn&amp;rsquo;t show how to configure Kiali&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;1430&#34;&gt;1.43.0&lt;/h2&gt;
&lt;p&gt;Sprint Release: November 12nd, 2021&lt;/p&gt;
&lt;p&gt;Features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/3765&#34;&gt;Allow Kiali Graphs to show EgressGateway traffic to ServiceEntry&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4468&#34;&gt;(Feature Request) Support mounting existing secret into Kiali Pod&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/2888&#34;&gt;Calculate graph importance score&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4339&#34;&gt;Validations - Ensure ServiceEntry has WorkloadEntry addresses&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4448&#34;&gt;Support getting the root namespace from Istio configuration&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4342&#34;&gt;ingress created by Kiali CR does not include ingress class - need new deployment.ingress setting&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Please note this introduces a backward-incompatible change. Users with the prior ingress settings defined in their Kiali CR will need to make an update.  Other users are not affected. The previous ingress settings were:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;deployment&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;ingress_enabled&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;&amp;lt;true|false&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;override_ingress_yaml&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;...the override yaml here...&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This has been changed to the following:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;deployment&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;ingress&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;enabled&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;&amp;lt;true|false&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;override_yaml&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;...the override yaml here...&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4118&#34;&gt;Update kiali.io docs to Kiali 1.36+&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4288&#34;&gt;Google OIDC allowed domains&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/2201&#34;&gt;Include ServiceAccount info across console&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/3703&#34;&gt;Add information about Istio overhead &lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Fixes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4206&#34;&gt;Workload Entry graph nodes display only &amp;ldquo;latest&amp;rdquo; version&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4478&#34;&gt;Kiali Documentation link from Master Head seems broken&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4445&#34;&gt;Crash in onCopy button in Envoy tab editors&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4466&#34;&gt;&amp;ldquo;More than one Gateway for the same host port combination&amp;rdquo; even with different ports&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4356&#34;&gt;Workload pod proxy logs shows details for Envoy app logging&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;1420&#34;&gt;1.42.0&lt;/h2&gt;
&lt;p&gt;Sprint Release: October 22nd, 2021&lt;/p&gt;
&lt;p&gt;Features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4395&#34;&gt;Migrate to Docsy for kiali.io theme&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/1372&#34;&gt;Add strong type mapping in Istio Kiali model&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4383&#34;&gt;Show mirroring info or badge on the graph&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/2997&#34;&gt;Add a &amp;ldquo;Trendlines&amp;rdquo; option in the metrics tab&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4326&#34;&gt;Show gateway in istio config&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/3394&#34;&gt;Add Sidecars on  &amp;ldquo;Create Traffic Policies&amp;rdquo; namespace action&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4377&#34;&gt;Ability to pass custom headers to httputil.Post&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4403&#34;&gt;Add hostAliases field to kiali deployment manifests&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4303&#34;&gt;Kiali Istio dashboards incompatible with thanos-query&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Fixes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4420&#34;&gt;URL parameters not persisted in inbound/outbound metric tabs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4416&#34;&gt;Include Mesh Gateway in Create Traffic Routing - causes failure&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4265&#34;&gt;Potential Memory Leak in UI AuthenticationController&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4437&#34;&gt;More Sidecars on Configuration&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4407&#34;&gt; &amp;ldquo;missing span root&amp;rdquo; in graph side panel &lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;1410&#34;&gt;1.41.0&lt;/h2&gt;
&lt;p&gt;Sprint Release: October 1st, 2021&lt;/p&gt;
&lt;p&gt;Features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4133&#34;&gt;Add help for Graph shortcuts&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/2911&#34;&gt;Add custom label aggregation in metrics tab&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4392&#34;&gt;Kiali Operator - Add ability to specify image SHA in Kiali CRs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/3704&#34;&gt;Improve discovery matcher process for Custom Dashboards&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/2947&#34;&gt;Add SRE style metrics in the Overview namespace chart&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/1525&#34;&gt;Be able to set the logging level for istio and envoy logs from Kiali UI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4323&#34;&gt;Custom HTTP headers when connecting to Prometheus&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4165&#34;&gt;Display Envoy tab for workloads running Istio Proxy without Sidecar&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Fixes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/3733&#34;&gt;Workload page displays an error when accessing VirtualMachineInstance resource&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4219&#34;&gt;WorkloadEntry workload graph nodes have broken link&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4295&#34;&gt;Mesh internal ServiceEntry should be grouped in app box with workloads&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4384&#34;&gt;Error loading Graph - Namespace (kube-state-metrics) is excluded for Kiali&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4141&#34;&gt;Workloads flap between OK and Not Ready w/ Argo Rollout CR&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4371&#34;&gt;Unable to edit IstioConfig&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4363&#34;&gt;Kiali loading icon seems broken&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4351&#34;&gt;seg fault in IsMaistra status (found in Kiali v1.40.0)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4338&#34;&gt;ansible option we use in operator code is being renamed&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;1400&#34;&gt;1.40.0&lt;/h2&gt;
&lt;p&gt;Sprint Release: September 10th, 2021&lt;/p&gt;
&lt;p&gt;Features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4314&#34;&gt;Support exportTo validation in VirtualServices&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4184&#34;&gt;Add graph Factory Reset button&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/1433&#34;&gt;Add help tooltip in the metrics tab&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/1440&#34;&gt;Add info/tooltip on virtual service that doesn&amp;rsquo;t have a gateways section&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4268&#34;&gt;Support the new istio injection label&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/1577&#34;&gt;Add indication if certificates are managed by Citadel or external tool&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4220&#34;&gt;Distinguish between VM based workloads and pod based workloads on the graph&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4223&#34;&gt;Identify and label WorkloadEntry graph nodes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4196&#34;&gt;ci-kind-molecule-tests.sh should support installing OLM and testing with OLM-installed operator&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4259&#34;&gt;Docs and scripts regarding secrets and service accounts might need to be updated&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Fixes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4218&#34;&gt;(validations) Don&amp;rsquo;t show KIA0203 when there are no VS referencing the DR subset&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4298&#34;&gt;Kiali Operator: Pods attempt to use auth secret when external service disabled&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4302&#34;&gt;Not able to build Molecule image&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4325&#34;&gt;Metrics charts can be too thin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/3840&#34;&gt;Some graph settings do not have query parms - can&amp;rsquo;t bookmark pages&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4202&#34;&gt;Workload&amp;rsquo;s page Actions dropdown is clickable in view_only_mode &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4290&#34;&gt;CRUD Permissions on events&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/3927&#34;&gt;Kiali Login error when Prometheus fails to start&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;1390&#34;&gt;1.39.0&lt;/h2&gt;
&lt;p&gt;Sprint Release: August 20th, 2021&lt;/p&gt;
&lt;p&gt;Features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4230&#34;&gt;generate metrics for validators&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/3895&#34;&gt;(molecule) run molecule tests using a KinD cluster&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4147&#34;&gt;Remote cluster functionality should be configurable&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/2596&#34;&gt;Update Kiali UI to latest Node.js LTS version&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4195&#34;&gt;Add a Molecule test to verify Grafana integration&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/3241&#34;&gt;(operator) perform true &amp;ldquo;can_i&amp;rdquo; check to confirm the operator has correct permissions&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Fixes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4289&#34;&gt;grafana-test fails - cannot look up grafana url successfully&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4255&#34;&gt;route created by operator doesn&amp;rsquo;t seem right&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4238&#34;&gt;Jaeger traces &amp;amp; spans fetching error&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;138&#34;&gt;1.38&lt;/h2&gt;
&lt;h3 id=&#34;1381&#34;&gt;1.38.1&lt;/h3&gt;
&lt;p&gt;Mid-Sprint Release: August 6th, 2021&lt;/p&gt;
&lt;p&gt;Fixes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4221&#34;&gt;Issues with clustering discovery&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4215&#34;&gt;Scripts not loading (404) on openid_error when Kiali is hosted in a subfolder (web_root: /kiali)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4238&#34;&gt;Jaeger traces &amp;amp; spans fetching error&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4261&#34;&gt;helm-charts and istio addons doesn&amp;rsquo;t have default grafana in_cluster_url defined&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;1380&#34;&gt;1.38.0&lt;/h3&gt;
&lt;p&gt;Sprint Release: July 30th, 2021&lt;/p&gt;
&lt;p&gt;Features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4068&#34;&gt;New badge/visualization for hostnames in Graph&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/3499&#34;&gt;Enhanced logs viewing and correlation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4094&#34;&gt;bump operator to newer minor-release of base image&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/1370&#34;&gt;Add validation for &amp;ldquo;exportTo&amp;rdquo; fields of VirtualService, ServiceEntry&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4197&#34;&gt;Feature Request: Disable certain validations&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4090&#34;&gt;Display traffic scenario badges when present&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4070&#34;&gt;gRPC Streaming traffic&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/3730&#34;&gt;Consider using tcp_received telemetry for graph generation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4190&#34;&gt;community OLM metadata moving to new repos&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4163&#34;&gt;trivial case change to disconnected annotation value in operator metadata&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4182&#34;&gt;document the new dashboard annotations&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4111&#34;&gt;clean up upstream istio kiali addon install doc&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4156&#34;&gt;Display custom dashboards with more than two rows of graphs inside the card&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4160&#34;&gt;test custom dashboard overrides&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4145&#34;&gt;Use annotations to personalize CustomDashboards&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Fixes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4215&#34;&gt;Scripts not loading (404) on openid_error when Kiali is hosted in a subfolder (web_root: /kiali)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4221&#34;&gt;Issues with clustering discovery&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4157&#34;&gt;(operator) Playbook &amp;ldquo;create additional kiali labels&amp;hellip;&amp;rdquo; fails due to unquoted string in label&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4226&#34;&gt;grafana links missing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4207&#34;&gt;ERR GetAppTraces, Jaeger GRPC client error: rpc error: code = Unavailable desc = connection closed&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4216&#34;&gt;molecule tests need to wait for CRD to be established&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4203&#34;&gt;Add missing warning on VirtualService &amp;ldquo;exportTo&amp;rdquo; field&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4072&#34;&gt;Exposing workloads with ServiceEntries makes Kiali show non-existing Services&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4132&#34;&gt;Cannot fetch proxy status on Istio master (1.11)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;1370&#34;&gt;1.37.0&lt;/h2&gt;
&lt;p&gt;Sprint Release: July 9th, 2021&lt;/p&gt;
&lt;p&gt;Features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/3988&#34;&gt;Support for custom istio injection labels and values&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/3596&#34;&gt;Metrics page: select all/none filter&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4067&#34;&gt;Add Gateway/VirtualService hostnames in Service details&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/2932&#34;&gt;Add gateway validation to VirtualServices&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/1446&#34;&gt;Services list should show when a VirtualService/DestinationRule is applied&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/1952&#34;&gt;Unify style attribute for config validation icons&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/1833&#34;&gt;(multi-cluster) Enhance support for mesh deployment models&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/1369&#34;&gt;Add help icon in Wizards&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4050&#34;&gt;Support for custom CA certificates in OpenID authentication&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Fixes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4162&#34;&gt;The namespaces that begins with &lt;code&gt;kube&lt;/code&gt; are hidden but those should be OK&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4134&#34;&gt;Repeated queries on CustomMetrics&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4131&#34;&gt;kiali Cannot load the graph &amp;ldquo;invalid character &amp;rsquo;d&amp;rsquo; looking for beginning of value&amp;rdquo;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4130&#34;&gt;Duplicated application container on Workload Logs tab&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4106&#34;&gt;Metrics Settings are kept but not applied when switching metrics tabs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4120&#34;&gt;(perf) pr #3975 introduced perf regression for /api/namespaces/bookinfo/services/details/graph endpoint&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/3221&#34;&gt;Tooltip span not available&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;1360&#34;&gt;1.36.0&lt;/h2&gt;
&lt;p&gt;Sprint Release: June 18th, 2021&lt;/p&gt;
&lt;p&gt;Features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4005&#34;&gt;Connect Listeners and Routes in the Envoy Config modal&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4109&#34;&gt;remove istio_component_namespaces config&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/3948&#34;&gt;Research Metrics tab main layout&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/2897&#34;&gt;Display throughput on the graph edges&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4008&#34;&gt;Move Envoy Details to Workload Details&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/3529&#34;&gt;Pod table should reflect any container crash&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4057&#34;&gt;Consolidate Dashboards CRDs into main Kiali config, also handled via Kiali Operator&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4069&#34;&gt;convert community OLM metadata to new bundle format&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/1477&#34;&gt;Add to graph indicator for Kiali scenarios&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/3912&#34;&gt;move the support for old versions to CRD v1 when appropriate&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/3244&#34;&gt;Internal metrics revisit&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Fixes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4009&#34;&gt;Difference between App and Workload healths - causing inconsistency in Overview&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/3904&#34;&gt;Wrong Health info at Service level&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4087&#34;&gt;Trace graph tooltip truncates long hostnames&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4076&#34;&gt;Circuit Breaker Badge is missing in the Graph&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4079&#34;&gt;clean up hack/istio/bookinfo* resources&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/3583&#34;&gt;Health popover disappearing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/3706&#34;&gt;(helm)(operator) do not use deprecated Ingress kind - update to latest apiVersion&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4058&#34;&gt;Graph replay health is not correct&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4062&#34;&gt;Molecule tests broken for podman 3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/4049&#34;&gt;Possible false positive reported as violating KIA0202&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/kiali/issues/3586&#34;&gt;horizontal scroll problem on graph side panel trace tab detail&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Grafana Tempo</title>
      <link>https://v2-24.kiali.io/docs/configuration/p8s-jaeger-grafana/tracing/tempo/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://v2-24.kiali.io/docs/configuration/p8s-jaeger-grafana/tracing/tempo/</guid>
      <description>
        
        
        &lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#grafana-tempo-configuration&#34;&gt;Grafana Tempo Configuration&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#using-the-grafana-tempo-api&#34;&gt;Using the Grafana Tempo API&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#set-up-the-kiali-cr&#34;&gt;Setup the Kiali CR&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#set-up-a-tempo-datasource-in-grafana&#34;&gt;Set up a Tempo Datasource in Grafana&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#additional-configuration&#34;&gt;Additional Configuration&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#service-check-url&#34;&gt;Service check URL&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#configuration-for-the-grafana-tempo-datasource&#34;&gt;Configuration for the Grafana Tempo Datasource&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#using-the-jaeger-frontend-with-grafana-tempo-tracing-backend&#34;&gt;Using the Jaeger frontend with Grafana Tempo tracing backend&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#tanka&#34;&gt;Tanka&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#tempo-operator&#34;&gt;Tempo Operator&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#configuration-table&#34;&gt;Configuration table&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#supported-versions&#34;&gt;Supported Versions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#minimal-configuration-for-kiali--179&#34;&gt;Minimal configuration for Kiali &amp;lt;= 1.79&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#minimal-configuration-for-kiali--179-1&#34;&gt;Minimal configuration for Kiali &amp;gt; 1.79&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#tempo-tuning&#34;&gt;Tempo tuning&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#resources-consumption&#34;&gt;Resources consumption&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#caching&#34;&gt;Caching&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#tune-search-pipeline&#34;&gt;Tune search pipeline&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#dedicated-attribute-columns&#34;&gt;Dedicated attribute columns&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#tempo-cache&#34;&gt;Tempo cache&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#tempo-authentication-configuration&#34;&gt;Tempo authentication configuration&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;grafana-tempo-configuration&#34;&gt;Grafana Tempo Configuration&lt;/h2&gt;
&lt;p&gt;There are two possibilities to integrate Kiali with Grafana Tempo:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#using-the-grafana-tempo-api&#34;&gt;Using the Grafana Tempo API&lt;/a&gt;: This option returns the traces from the Tempo API in OpenTelemetry format.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#using-the-jaeger-frontend-with-grafana-tempo-tracing-backend&#34;&gt;Using the Jaeger frontend&lt;/a&gt; with the Grafana Tempo backend.&lt;/li&gt;
&lt;li&gt;Appendix: &lt;a href=&#34;#configuration-table&#34;&gt;Configuration table&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;using-the-grafana-tempo-api&#34;&gt;Using the Grafana Tempo API&lt;/h3&gt;
&lt;p&gt;There are two steps to set up Kiali and Grafana Tempo:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#set-up-the-kiali-cr&#34;&gt;Set up the Kiali CR&lt;/a&gt; updating the Tracing and Grafana sections.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#set-up-a-tempo-datasource-in-grafana&#34;&gt;Set up a Tempo data source&lt;/a&gt; in Grafana.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;set-up-the-kiali-cr&#34;&gt;Set up the Kiali CR&lt;/h4&gt;
&lt;p&gt;This is a configuration example to set up Kiali tracing with Grafana Tempo:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;spec&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;external_services&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;tracing&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Enabled by default. Kiali will anyway fallback to disabled if&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Tempo is unreachable.&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;enabled&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;true&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;health_check_url&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;https://tempo-instance.grafana.net&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Tempo service name is &amp;#34;query-frontend&amp;#34; and is in the &amp;#34;tempo&amp;#34; namespace.&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Make sure the URL you provide corresponds to the non-GRPC enabled endpoint&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# It does not support grpc yet, so make sure &amp;#34;use_grpc&amp;#34; is set to false.&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;internal_url&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;http://tempo-tempo-query-frontend.tempo.svc.cluster.local:3200/&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;provider&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;tempo&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;tempo_config&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;org_id&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;1&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;datasource_uid&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;a8d2ef1c-d31c-4de5-a90b-e7bc5252cd00&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;url_format&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;grafana&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;use_grpc&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;false&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Public facing URL of Tempo &lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;external_url&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;https://grafana-istio-system.apps-crc.testing/&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Kiali uses the &lt;em&gt;external_url&lt;/em&gt; to construct &amp;ldquo;View in tracing&amp;rdquo; links in the UI.
For the Tempo provider the default &lt;em&gt;url_format&lt;/em&gt; is &lt;em&gt;grafana&lt;/em&gt;.
So, by default the URL will have the Grafana UI format when linking to specific services and traces.&lt;/p&gt;
&lt;p&gt;It is also possible to set &lt;em&gt;url_format&lt;/em&gt; to &lt;em&gt;openshift&lt;/em&gt;. In this case the URL will redirect to the UI Plugin in the OpenShift console.
When it is set to &lt;em&gt;openshift&lt;/em&gt;, there are other settings as well:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;spec&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;external_services&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;tracing&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;tempo_config&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;sample&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;namespace&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;tempo&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;tenant&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;default&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;url_format&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;openshift&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;When the tenant is specified, if &lt;em&gt;internal_url&lt;/em&gt; doesn&amp;rsquo;t have a path, it will be autocompleted with the Tempo path. For this example:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;internal_url&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;https://tempo-sample-gateway.tempo.svc.cluster.local:8080/&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Will be autocompleted to: &lt;em&gt;&lt;a href=&#34;https://tempo-sample-gateway.tempo.svc.cluster.local:8080/api/traces/v1/%7Btenant%7D/tempo&#34;&gt;https://tempo-sample-gateway.tempo.svc.cluster.local:8080/api/traces/v1/{tenant}/tempo&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The other valid option for &lt;em&gt;url_format&lt;/em&gt; is &lt;em&gt;jaeger&lt;/em&gt;, used when the Jaeger UI is available in Tempo.&lt;/p&gt;
&lt;h4 id=&#34;set-up-a-tempo-datasource-in-grafana&#34;&gt;Set up a Tempo Datasource in Grafana&lt;/h4&gt;
&lt;p&gt;We can optionally set up a default &lt;a href=&#34;https://grafana.com/docs/grafana/latest/datasources/tempo/&#34;&gt;Tempo datasource&lt;/a&gt; in Grafana so that you can view the Tempo tracing data within the Grafana UI, as you see here:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/documentation/configuration/grafana_tempo_ds.png&#34; alt=&#34;Kiali grafana_tempo&#34;&gt;&lt;/p&gt;
&lt;p&gt;To set up the Tempo datasource, go to the &lt;em&gt;Home&lt;/em&gt; menu in the Grafana UI, click &lt;em&gt;Data sources&lt;/em&gt;, then click the &lt;em&gt;Add new data source&lt;/em&gt; button and select the &lt;code&gt;Tempo&lt;/code&gt; data source.  You will then be asked to enter some data to configure the new Tempo data source:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/documentation/configuration/tempo_ds.png&#34; alt=&#34;Kiali grafana_tempo&#34;&gt;&lt;/p&gt;
&lt;p&gt;The most important values to set up are the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Mark the data source as default, so the URL that Kiali uses will redirect properly to the Tempo data source.&lt;/li&gt;
&lt;li&gt;Update the HTTP URL. This is the internal URL of the HTTP tempo frontend service. e.g. &lt;code&gt;http://tempo-tempo-query-frontend.tempo.svc.cluster.local:3200/&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;additional-configuration&#34;&gt;Additional configuration&lt;/h4&gt;
&lt;p&gt;The &lt;em&gt;Traces&lt;/em&gt; tab in the Kiali UI will show your traces in a bubble chart:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/documentation/configuration/grafana_tempo.png&#34; alt=&#34;Kiali grafana_tempo&#34;&gt;&lt;/p&gt;
&lt;p&gt;Increasing performance is achievable by enabling gRPC access, specifically for query searches. However, accessing the HTTP API will still be necessary to gather information about individual traces. This is an example to configure the gRPC access:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;spec&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;external_services&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;tracing&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;enabled&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;true&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# grpc port defaults to 9095&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;grpc_port&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;9095&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;internal_url&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;http://query-frontend.tempo:3200&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;provider&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;tempo&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;use_grpc&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;true&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;external_url&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;http://my-tempo-host:3200&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h5 id=&#34;service-check-url&#34;&gt;Service check URL&lt;/h5&gt;
&lt;p&gt;By default, Kiali will check the service health in the endpoint &lt;code&gt;/status/services&lt;/code&gt;, but sometimes, this is exposed in a different url, which can lead to a component unreachable message:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/documentation/configuration/component_unreachable.png&#34; alt=&#34;component_unreachable&#34;&gt;&lt;/p&gt;
&lt;p&gt;This can be changed with the &lt;code&gt;health_check_url&lt;/code&gt; configuration option.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;spec&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;external_services&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;tracing&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;health_check_url&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;http://query-frontend.tempo:3200&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h5 id=&#34;configuration-for-the-grafana-tempo-datasource&#34;&gt;Configuration for the Grafana Tempo Datasource&lt;/h5&gt;
&lt;p&gt;In order to correctly redirect Kiali to the right Grafana Tempo Datasource, there are a couple of configuration options to update:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;spec&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;external_services&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;tracing&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;tempo_config&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;org_id&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;1&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;datasource_uid&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;a8d2ef1c-d31c-4de5-a90b-e7bc5252cd00&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;org_id&lt;/code&gt; is usually not needed since &amp;ldquo;1&amp;rdquo; is the default value which is also Tempo&amp;rsquo;s default org id.
The &lt;code&gt;datasource_uid&lt;/code&gt; needs to be updated in order to redirect to the right datasource in Grafana versions 10 or higher.&lt;/p&gt;
&lt;h3 id=&#34;using-the-jaeger-frontend-with-grafana-tempo-tracing-backend&#34;&gt;Using the Jaeger frontend with Grafana Tempo tracing backend&lt;/h3&gt;
&lt;p&gt;It is possible to use the Grafana Tempo tracing backend exposing the Jaeger API.
&lt;a href=&#34;https://github.com/grafana/tempo/tree/main/cmd/tempo-query&#34;&gt;tempo-query&lt;/a&gt; is a
Jaeger storage plugin. It accepts the full Jaeger query API and translates these
requests into Tempo queries.&lt;/p&gt;
&lt;p&gt;Since Tempo is not yet part of the built-in addons that are part of Istio, you
need to manage your Tempo instance.&lt;/p&gt;
&lt;h4 id=&#34;tanka&#34;&gt;Tanka&lt;/h4&gt;
&lt;p&gt;The &lt;a href=&#34;https://grafana.com/docs/tempo/latest/setup/tanka/&#34;&gt;official Grafana Tempo documentation&lt;/a&gt;
explains how to deploy a Tempo instance using &lt;a href=&#34;https://tanka.dev/&#34;&gt;Tanka&lt;/a&gt;. You
will need to tweak the settings from the default Tanka configuration to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Expose the Zipkin collector&lt;/li&gt;
&lt;li&gt;Expose the GRPC Jaeger Query port&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;When the Tempo instance is deployed with the needed configurations, you have to
set
&lt;a href=&#34;https://istio.io/latest/docs/reference/config/istio.mesh.v1alpha1/#ProxyConfig-tracing&#34;&gt;&lt;code&gt;meshConfig.defaultConfig.tracing.zipkin.address&lt;/code&gt;&lt;/a&gt;
from Istio to the Tempo Distributor service and the Zipkin port. Tanka will deploy
the service in &lt;code&gt;distributor.tempo.svc.cluster.local:9411&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;external_services.tracing.internal_url&lt;/code&gt; Kiali option needs to be set to:
&lt;code&gt;http://query-frontend.tempo.svc.cluster.local:16685&lt;/code&gt;.&lt;/p&gt;
&lt;h4 id=&#34;tempo-operator&#34;&gt;Tempo Operator&lt;/h4&gt;
&lt;p&gt;The &lt;a href=&#34;https://github.com/grafana/tempo-operator&#34;&gt;Tempo Operator for Kubernetes&lt;/a&gt;
provides a native Kubernetes solution to deploy Tempo easily in your system.&lt;/p&gt;
&lt;p&gt;After installing the Tempo Operator in your cluster, you can create a new
Tempo instance with the following CR:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000&#34;&gt;kubectl create namespace tempo&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;kubectl apply -n tempo -f - &amp;lt;&amp;lt;EOF&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;apiVersion&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;tempo.grafana.com/v1alpha1&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;kind&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;TempoStack&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;metadata&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;smm&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;spec&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;storageSize&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;1Gi&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;storage&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;secret&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;type&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;s3&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;object-storage&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;template&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;queryFrontend&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;component&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;resources&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;          &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;limits&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;            &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;cpu&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;2&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;            &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;memory&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;2Gi&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;jaegerQuery&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;enabled&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;true&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;ingress&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;          &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;type&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;ingress&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;EOF&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Note the name of the bucket where the traces will be stored in our example is
called &lt;code&gt;object-storage&lt;/code&gt;. Check the
&lt;a href=&#34;https://grafana.com/docs/tempo/next/setup/operator/object-storage&#34;&gt;Tempo Operator&lt;/a&gt;
documentation to know more about what storages are supported and how to create
the secret properly to provide it to your Tempo instance.&lt;/p&gt;
&lt;p&gt;Now, you are ready to configure the
&lt;a href=&#34;https://istio.io/latest/docs/reference/config/istio.mesh.v1alpha1/#ProxyConfig-tracing&#34;&gt;&lt;code&gt;meshConfig.defaultConfig.tracing.zipkin.address&lt;/code&gt;&lt;/a&gt;
field in your Istio installation. It needs to be set to the &lt;code&gt;9411&lt;/code&gt; port of the
Tempo Distributor service. For the previous example, this value will be
&lt;code&gt;tempo-smm-distributor.tempo.svc.cluster.local:9411&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Now, you need to configure the &lt;code&gt;internal_url&lt;/code&gt; setting from Kiali to access
the Jaeger API. You can point to the &lt;code&gt;16685&lt;/code&gt; port to use GRPC or &lt;code&gt;16686&lt;/code&gt; if not.
For the given example, the value would be
&lt;code&gt;http://tempo-ssm-query-frontend.tempo.svc.cluster.local:16685&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;There is a &lt;a href=&#34;https://v2-24.kiali.io/docs/tutorials/tempo/02-kiali-tempo-integration/&#34;&gt;related tutorial&lt;/a&gt; with detailed instructions to setup Kiali and Grafana Tempo with the Operator.&lt;/p&gt;
&lt;h3 id=&#34;configuration-table&#34;&gt;Configuration table&lt;/h3&gt;
&lt;h4 id=&#34;supported-versions&#34;&gt;Supported versions&lt;/h4&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;div style=&#34;width:170px&#34;&gt;Kiali Version&lt;/div&gt;&lt;/th&gt;
&lt;th&gt;&lt;div style=&#34;width:70px&#34;&gt;Jaeger&lt;/div&gt;&lt;/th&gt;
&lt;th&gt;&lt;div style=&#34;width:70px&#34;&gt;Tempo&lt;/div&gt;&lt;/th&gt;
&lt;th&gt;&lt;div style=&#34;width:270px&#34;&gt;Tempo with JaegerQuery&lt;/div&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&amp;lt;= 1.79 (OSSM 2.5)&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;gt; 1.79&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;br&gt;
&lt;h4 id=&#34;minimal-configuration-for-kiali--179&#34;&gt;Minimal configuration for Kiali &amp;lt;= 1.79&lt;/h4&gt;
&lt;p&gt;In &lt;code&gt;external_services.tracing&lt;/code&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;div style=&#34;width:470px&#34;&gt;http&lt;hr&gt;&lt;/div&gt;&lt;/th&gt;
&lt;th&gt;&lt;div style=&#34;width:470px&#34;&gt;grpc &lt;hr&gt;&lt;/div&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Jaeger&lt;/td&gt;
&lt;td&gt;&lt;code&gt;.internal_url = &#39;http://jaeger_service_url:16686/jaeger&#39;&lt;/code&gt;&lt;br/&gt; &lt;code&gt;.use_grpc = false&lt;/code&gt; &lt;hr&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;.internal_url = &#39;http://jaeger_service_url:16685/jaeger&#39;&lt;/code&gt;&lt;br/&gt; &lt;code&gt;.use_grpc = true (Not required: by default)&lt;/code&gt; &lt;br&gt;&lt;hr&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tempo&lt;/td&gt;
&lt;td&gt;&lt;code&gt;.internal_url = &#39;http://query_frontend_url:16686&#39;&lt;/code&gt;&lt;br/&gt; &lt;code&gt;.use_grpc = false&lt;/code&gt; &lt;hr&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;.internal_url = &#39;http://query_frontend_url:16685&#39;&lt;/code&gt;  &lt;br/&gt;&lt;code&gt;.use_grpc = true (Not required: by default)&lt;/code&gt; &lt;br/&gt;&lt;hr&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;br&gt;
&lt;h4 id=&#34;minimal-configuration-for-kiali--179-1&#34;&gt;Minimal configuration for Kiali &amp;gt; 1.79&lt;/h4&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;div style=&#34;width:470px&#34;&gt;http&lt;hr&gt;&lt;/div&gt;&lt;/th&gt;
&lt;th&gt;&lt;div style=&#34;width:470px&#34;&gt;grpc  &lt;hr&gt;&lt;/div&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Jaeger&lt;/td&gt;
&lt;td&gt;&lt;code&gt;.internal_url = &#39;http://jaeger_service_url:16686/jaeger&#39;&lt;/code&gt;&lt;br/&gt; &lt;code&gt;.use_grpc = false&lt;/code&gt; &lt;hr&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;.internal_url = &#39;http://jaeger_service_url:16685/jaeger&#39;&lt;/code&gt; &lt;br&gt;&lt;code&gt;.use_grpc = true (Not required: by default)&lt;/code&gt;&lt;br&gt;&lt;hr&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tempo&lt;/td&gt;
&lt;td&gt;&lt;br/&gt;&lt;code&gt;internal_url = &#39;http://query_frontend_url:3200&#39;&lt;/code&gt;&lt;br/&gt; &lt;code&gt;.use_grpc = false&lt;/code&gt;&lt;br/&gt; &lt;code&gt;.provider = &#39;tempo&#39;&lt;/code&gt;&lt;br/&gt;&lt;hr&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;.internal_url = &#39;http://query_frontend_url:3200&#39;&lt;/code&gt;&lt;br/&gt; &lt;code&gt;.grpc_port: 9095&lt;/code&gt; &lt;br/&gt;&lt;code&gt;.provider: &#39;tempo&#39;&lt;/code&gt;&lt;br/&gt;&lt;code&gt;.use_grpc = true (Not required: by default)&lt;/code&gt;&lt;hr&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;tempo-tuning&#34;&gt;Tempo tuning&lt;/h3&gt;
&lt;h4 id=&#34;resources-consumption&#34;&gt;Resources consumption&lt;/h4&gt;
&lt;p&gt;Grafana Tempo is a powerful tool, but it can lead to performance issues when not configured correctly.
For example, the following configuration is not recommended and may lead to OOM issues for simple queries in the query-frontend component:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;spec&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;resources&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;total&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;limits&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;memory&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;2Gi&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;cpu&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;2000m&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;These resources are shared between all the Tempo components.
When needed, apply resources to each specific component, instead of applying the resources globally:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;spec&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;template&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;queryFrontend&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;component&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;resources&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;          &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;limits&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;            &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;cpu&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;2&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;            &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;memory&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;2Gi&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;a href=&#34;https://v2-24.kiali.io/files/tempo-dashboard.json&#34;&gt;This Grafana Dashboard&lt;/a&gt; is available to measure the resources used in the &lt;strong&gt;tempo&lt;/strong&gt; namespace.&lt;/p&gt;
&lt;h4 id=&#34;caching&#34;&gt;Caching&lt;/h4&gt;
&lt;p&gt;Tempo offers multi-level &lt;a href=&#34;https://grafana.com/docs/tempo/latest/operations/caching/&#34;&gt;caching&lt;/a&gt; that is used by default with Tanka and Helm deployment examples. It uses external cache, supporting Memcached and Redis.
The lower level cache has a higher hit rate, and caches bloom filters and parquet data.
The higher level caches frontend-search data.&lt;/p&gt;
&lt;p&gt;Optimizing the cache depends on the application usage, and can be done modifying different parameters:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Connection limit for MemCached: Should be increased in large deployments, as MemCached is set to 1024 by default.&lt;/li&gt;
&lt;li&gt;Cache size control: Should be increased when the working set is larger than the size of cache.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;tune-search-pipeline&#34;&gt;Tune search pipeline&lt;/h4&gt;
&lt;p&gt;There are many parameters to &lt;a href=&#34;https://grafana.com/docs/tempo/latest/operations/backend_search/&#34;&gt;tune the search pipeline&lt;/a&gt;, some of these:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;max_concurrent_queries: If it is too high it can cause OOM.&lt;/li&gt;
&lt;li&gt;concurrent_jobs: How many jobs are done concurrently.&lt;/li&gt;
&lt;li&gt;max_retries: When it is too high it can result in a lot of load.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;dedicated-attribute-columns&#34;&gt;Dedicated attribute columns&lt;/h4&gt;
&lt;p&gt;When using the vParquet3 storage format , defining &lt;a href=&#34;https://grafana.com/docs/tempo/latest/operations/dedicated_columns/&#34;&gt;dedicated attribute columns&lt;/a&gt; can improve the query performance.
In order to best choose those columns (Up to 10), a good criteria is to choose attributes that contribute growing the block size (And not those commonly used).&lt;/p&gt;
&lt;h3 id=&#34;tempo-authentication-configuration&#34;&gt;Tempo authentication configuration&lt;/h3&gt;
&lt;p&gt;The Kiali CR provides authentication configuration that will be used also for querying the version check to provide information in the Mesh graph.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;spec&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;external_services&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;tracing&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;enabled&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;true&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;auth&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;insecure_skip_verify&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;false&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;password&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;pwd&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;token&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;type&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;basic&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;use_kiali_token&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;false&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;username&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;user&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;health_check_url&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;To configure a secret to be used as a password, see this &lt;a href=&#34;https://v2-24.kiali.io/docs/faq/installation/#how-can-i-use-a-secret-to-pass-external-service-credentials-to-the-kiali-server&#34;&gt;FAQ entry&lt;/a&gt;.&lt;/p&gt;
&lt;h4 id=&#34;tls-certificate-configuration&#34;&gt;TLS Certificate Configuration&lt;/h4&gt;
&lt;p&gt;If your Tempo server uses HTTPS with a certificate issued by a private CA, see the &lt;a href=&#34;https://v2-24.kiali.io/docs/configuration/p8s-jaeger-grafana/tls-configuration/&#34;&gt;TLS Configuration&lt;/a&gt; page to learn how to configure Kiali to trust your CA.&lt;/p&gt;
&lt;h3 id=&#34;tempo-cache&#34;&gt;Tempo cache&lt;/h3&gt;
&lt;p&gt;Kiali 2.2 includes a simple tracing cache for Tempo that stores the last N traces. By default, it is enabled and it keeps the last 200 traces. It can be modified in the Kiali CR with:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;spec&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;external_services&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;tracing&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;enabled&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;true&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;tempo_config&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;cache_enabled&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;true&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;cache_capacity&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;200&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Kiali emits some cache metrics. The following query obtains the cache hit rate:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;(sum(kiali_cache_hits_total{name=&amp;quot;tempo&amp;quot;})/sum(kiali_cache_requests_total{name=&amp;quot;tempo&amp;quot;})) * 100&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/documentation/configuration/tempo_metrics_cache.png&#34; alt=&#34;tempo_metrics_cache&#34;&gt;&lt;/p&gt;

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


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

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

&lt;/div&gt;

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

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

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

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

      </description>
    </item>
    
    <item>
      <title>Docs: Kiali and Tempo setup</title>
      <link>https://v2-24.kiali.io/docs/tutorials/tempo/02-kiali-tempo-integration/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://v2-24.kiali.io/docs/tutorials/tempo/02-kiali-tempo-integration/</guid>
      <description>
        
        
        &lt;h3 id=&#34;steps-to-install-kiali-and-grafana-tempo&#34;&gt;Steps to install Kiali and Grafana Tempo&lt;/h3&gt;
&lt;p&gt;We will start minikube:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;minikube start
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;It is a requirement to have cert-manager installed:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.12.0/cert-manager.yaml
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Install the operator. It is important to download a version 3.0 or higher. In previous versions, the zipkin collector was not exposed, there was no way to change it as it was not defined in the CRD.&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;kubectl apply -f https://github.com/grafana/tempo-operator/releases/download/v0.3.0/tempo-operator.yaml
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;We will create the tempo namespace:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;kubectl create namespace tempo
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;We will deploy minio, this is a sample minio.yaml:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  # This name uniquely identifies the PVC. Will be used in deployment below.
  name: minio-pv-claim
  labels:
    app: minio-storage-claim
spec:
  # Read more about access modes here: http://kubernetes.io/docs/user-guide/persistent-volumes/#access-modes
  accessModes:
    - ReadWriteOnce
  resources:
    # This is the request for storage. Should be available in the cluster.
    requests:
      storage: 5Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: minio
spec:
  selector:
    matchLabels:
      app: minio
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        # Label is used as selector in the service.
        app: minio
    spec:
      # Refer to the PVC created earlier
      volumes:
        - name: storage
          persistentVolumeClaim:
            # Name of the PVC created earlier
            claimName: minio-pv-claim
      initContainers:
        - name: create-buckets
          image: busybox:1.28
          command:
            - &amp;#34;sh&amp;#34;
            - &amp;#34;-c&amp;#34;
            - &amp;#34;mkdir -p /storage/tempo-data&amp;#34;
          volumeMounts:
            - name: storage # must match the volume name, above
              mountPath: &amp;#34;/storage&amp;#34;
      containers:
        - name: minio
          # Pulls the default Minio image from Docker Hub
          image: minio/minio:latest
          args:
            - server
            - /storage
            - --console-address
            - &amp;#34;:9001&amp;#34;
          env:
            # Minio access key and secret key
            - name: MINIO_ACCESS_KEY
              value: &amp;#34;minio&amp;#34;
            - name: MINIO_SECRET_KEY
              value: &amp;#34;minio123&amp;#34;
          ports:
            - containerPort: 9000
            - containerPort: 9001
          volumeMounts:
            - name: storage # must match the volume name, above
              mountPath: &amp;#34;/storage&amp;#34;
---
apiVersion: v1
kind: Service
metadata:
  name: minio
spec:
  type: ClusterIP
  ports:
    - port: 9000
      targetPort: 9000
      protocol: TCP
      name: api
    - port: 9001
      targetPort: 9001
      protocol: TCP
      name: console
  selector:
    app: minio
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;And apply the yaml:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;kubectl apply -n tempo -f minio.yaml
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;We will create a secret to access minio:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;kubectl create secret generic -n tempo tempostack-dev-minio \
--from-literal=bucket=&amp;#34;tempo-data&amp;#34; \
--from-literal=endpoint=&amp;#34;http://minio:9000&amp;#34; \
--from-literal=access_key_id=&amp;#34;minio&amp;#34; \
--from-literal=access_key_secret=&amp;#34;minio123&amp;#34;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Install Grafana tempo with the operator. We will use the secret created in the previous step:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;kubectl apply -n tempo -f - &amp;lt;&amp;lt;EOF
apiVersion: tempo.grafana.com/v1alpha1
kind: TempoStack
metadata:
  name: smm
spec:
  storageSize: 1Gi
  storage:
    secret:
      type: s3
      name: tempostack-dev-minio
  resources:
    total:
      limits:
        memory: 2Gi
        cpu: 2000m
  template:
    queryFrontend:
      jaegerQuery:
        enabled: true
        ingress:
          type: ingress
EOF
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;As an optional step, we can check if all the deployments have started correctly, and the services distributor has the port 9411 and the query frontend 16686:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;kubectl get all -n tempo
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/tutorial/tempo/tempo-services.png&#34; alt=&#34;Tempo Services&#34; title=&#34;Tempo Services&#34;&gt;&lt;/p&gt;
&lt;p&gt;(Optional) We can test if minio is working with a batch job to send some traces, in this case, to the open telemetry collector:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;kubectl apply -f - &amp;lt;&amp;lt;EOF
apiVersion: batch/v1
kind: Job
metadata:
  name: tracegen
spec:
  template:
    spec:
      containers:
        - name: tracegen
          image: ghcr.io/open-telemetry/opentelemetry-collector-contrib/tracegen:latest
          command:
            - &amp;#34;./tracegen&amp;#34;
          args:
            - -otlp-endpoint=tempo-smm-distributor.tempo.svc.cluster.local:4317
            - -otlp-insecure
            - -duration=30s
            - -workers=1
      restartPolicy: Never
  backoffLimit: 4
EOF
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;And access the minio console:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;kubectl port-forward --namespace istio-system service/minio 9001:9001
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/tutorial/tempo/minio.png&#34; alt=&#34;MinIO console&#34; title=&#34;MinIO console&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;install-istio-with-helm-option-i&#34;&gt;Install Istio with helm (Option I)&lt;/h2&gt;
&lt;p&gt;Istio can be installed with Helm following the &lt;a href=&#34;https://istio.io/latest/docs/setup/install/helm/&#34;&gt;instructions&lt;/a&gt;.
The zipkin address needs to be set:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;--set values.meshConfig.defaultConfig.tracing.zipkin.address=&amp;#34;tempo-smm-distributor.tempo:9411&amp;#34;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;And then, install &lt;a href=&#34;https://istio.io/latest/docs/ops/integrations/jaeger/#option-1-quick-start&#34;&gt;Jaeger&lt;/a&gt; as Istio addon.&lt;/p&gt;
&lt;h2 id=&#34;install-istio-using-kiali-source-code-option-ii&#34;&gt;Install Istio using Kiali source code (Option II)&lt;/h2&gt;
&lt;p&gt;For development purposes, if we have Kiali source code, we can use the kiali hack scripts:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;hack/istio/install-istio-via-istioctl.sh -c kubectl -a &amp;#34;prometheus grafana&amp;#34; -s values.meshConfig.defaultConfig.tracing.zipkin.address=&amp;#34;tempo-smm-distributor.tempo:9411&amp;#34;
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;install-kiali-and-bookinfo-demo-with-some-traffic-generation&#34;&gt;Install Kiali and bookinfo demo with some traffic generation&lt;/h2&gt;
&lt;p&gt;Install kiali:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;helm install \
    --namespace istio-system \
    --set external_services.tracing.internal_url=http://tempo-smm-query-frontend.tempo:16685 \
    --set external_services.tracing.external_url=http://localhost:16686 \
    --set auth.strategy=anonymous \
    kiali-server \
    kiali/kiali-server
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Install bookinfo with traffic generator&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;curl -L -o install-bookinfo.sh https://raw.githubusercontent.com/kiali/kiali/master/hack/istio/install-bookinfo-demo.sh
chmod +x install-bookinfo.sh
./install-bookinfo.sh -c kubectl -tg -id ${ISTIO_DIR}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;And access Kiali:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;kubectl port-forward svc/kiali 20001:20001 -n istio-system
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/tutorial/tempo/kiali-tempo-traces.png&#34; alt=&#34;Kiali Tempo Traces&#34; title=&#34;Kiali Tempo traces&#34;&gt;&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Prerequisites</title>
      <link>https://v2-24.kiali.io/docs/tutorials/multicluster/02-prerequisites/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://v2-24.kiali.io/docs/tutorials/multicluster/02-prerequisites/</guid>
      <description>
        
        
        &lt;p&gt;This tutorial is a walkthrough guide to install everything. For this reason, we will need:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;minikube&lt;/li&gt;
&lt;li&gt;istioctl&lt;/li&gt;
&lt;li&gt;helm&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This tutorial was tested on:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Minikube v1.30.1&lt;/li&gt;
&lt;li&gt;Istio v1.18.1&lt;/li&gt;
&lt;li&gt;Kiali v1.70&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Clusters are provided by minikube instances, but this tutorial should work on on any Kubernetes environment.&lt;/p&gt;
&lt;p&gt;We will set up some environment variables for the following commands:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;CLUSTER_EAST=&amp;#34;east&amp;#34;
CLUSTER_WEST=&amp;#34;west&amp;#34;
ISTIO_DIR=&amp;#34;absolute-path-to-istio-folder&amp;#34;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;As Istio will be installed on more than one cluster and needs to communicate between clusters, we need to create certificates for the Istio installation. We will follow the &lt;a href=&#34;https://istio.io/latest/docs/tasks/security/cert-management/plugin-ca-cert/&#34;&gt;Istio documentation related to certificates&lt;/a&gt; to achieve this:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;mkdir -p certs
pushd certs

make -f $ISTIO_DIR/tools/certs/Makefile.selfsigned.mk root-ca

make -f $ISTIO_DIR/tools/certs/Makefile.selfsigned.mk $CLUSTER_EAST-cacerts
make -f $ISTIO_DIR/tools/certs/Makefile.selfsigned.mk $CLUSTER_WEST-cacerts

popd
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The result is two certificates for then use when installing Istio in the future.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Deploy East cluster</title>
      <link>https://v2-24.kiali.io/docs/tutorials/multicluster/03-deploy-east-cluster/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://v2-24.kiali.io/docs/tutorials/multicluster/03-deploy-east-cluster/</guid>
      <description>
        
        
        &lt;p&gt;Run the following commands to deploy the first cluster:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;minikube start -p $CLUSTER_EAST --network istio --memory 8g --cpus 4
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;For both clusters, we need to configure MetalLB, which is a load balancer. This is because we need to assign an external IP to the required ingress gateways to enable cross cluster communication between Istio and the applications installed.&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;minikube addons enable metallb -p $CLUSTER_EAST
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;We set up some environment variables with IP ranges that MetalLB will then assign to the services:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;MINIKUBE_IP=$(minikube ip -p $CLUSTER_EAST)
MINIKUBE_IP_NETWORK=$(echo $MINIKUBE_IP | sed -E &amp;#39;s/([0-9]+\.[0-9]+\.[0-9]+)\.[0-9]+/\1/&amp;#39;)
MINIKUBE_LB_RANGE=&amp;#34;${MINIKUBE_IP_NETWORK}.20-${MINIKUBE_IP_NETWORK}.29&amp;#34;

cat &amp;lt;&amp;lt;EOF | kubectl --context $CLUSTER_EAST apply -f -
apiVersion: v1
kind: ConfigMap
metadata:
  namespace: metallb-system
  name: config
data:
  config: |
    address-pools:
    - name: default
      protocol: layer2
      addresses: [${MINIKUBE_LB_RANGE}]
EOF
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;We should have the first cluster deployed and ready to use.&lt;/p&gt;

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


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

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

&lt;/div&gt;

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


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

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

&lt;/div&gt;

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


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

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

&lt;/div&gt;



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


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

&lt;/div&gt;



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

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

&lt;/div&gt;

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


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

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

&lt;/div&gt;

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


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

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

&lt;/div&gt;

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


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

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

&lt;/div&gt;

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


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

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

&lt;/div&gt;

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

      </description>
    </item>
    
    <item>
      <title>Docs: Install Istio on East cluster</title>
      <link>https://v2-24.kiali.io/docs/tutorials/multicluster/04-install-istio-east-cluster/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://v2-24.kiali.io/docs/tutorials/multicluster/04-install-istio-east-cluster/</guid>
      <description>
        
        
        &lt;p&gt;The east cluster is the primary one, consequently is where the istiod process will be installed alongside other applications like Kiali.&lt;/p&gt;
&lt;p&gt;Run the following commands to install Istio:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;kubectl create namespace istio-system --context $CLUSTER_EAST

kubectl create secret generic cacerts -n istio-system --context $CLUSTER_EAST \
      --from-file=certs/$CLUSTER_EAST/ca-cert.pem \
      --from-file=certs/$CLUSTER_EAST/ca-key.pem \
      --from-file=certs/$CLUSTER_EAST/root-cert.pem \
      --from-file=certs/$CLUSTER_EAST/cert-chain.pem

kubectl --context=$CLUSTER_EAST label namespace istio-system topology.istio.io/network=network1

cat &amp;lt;&amp;lt;EOF &amp;gt; $CLUSTER_EAST.yaml
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
  values:
    global:
      meshID: mesh1
      multiCluster:
        clusterName: $CLUSTER_EAST
      network: network1
EOF

istioctl install -y --set values.pilot.env.EXTERNAL_ISTIOD=true --context=$CLUSTER_EAST -f $CLUSTER_EAST.yaml
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;After the installation, we need to create what we called an “east-west” gateway. It’s an ingress gateway just for the cross cluster configuration as we are opting to use the installation for different networks (this will be the case in the majority of the production scenarios).&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ISTIO_DIR/samples/multicluster/gen-eastwest-gateway.sh \
    --mesh mesh1 --cluster $CLUSTER_EAST --network network1 | \
    istioctl --context=$CLUSTER_EAST install -y -f -
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Then, we need to expose the istiod service as well as the applications for the cross cluster communication:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;kubectl apply --context=$CLUSTER_EAST -n istio-system -f \
    $ISTIO_DIR/samples/multicluster/expose-istiod.yaml

kubectl --context=$CLUSTER_EAST apply -n istio-system -f \
    $ISTIO_DIR/samples/multicluster/expose-services.yaml

export DISCOVERY_ADDRESS=$(kubectl \
    --context=$CLUSTER_EAST \
    -n istio-system get svc istio-eastwestgateway \
    -o jsonpath=&amp;#39;{.status.loadBalancer.ingress[0].ip}&amp;#39;)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Finally, we need to install Prometheus, which is important and required for Kiali to operate:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;kubectl --context $CLUSTER_EAST -n istio-system apply -f $ISTIO_DIR/samples/addons/prometheus.yaml
&lt;/code&gt;&lt;/pre&gt;
      </description>
    </item>
    
    <item>
      <title>Docs: Observe</title>
      <link>https://v2-24.kiali.io/docs/tutorials/travels/04-observe/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://v2-24.kiali.io/docs/tutorials/travels/04-observe/</guid>
      <description>
        
        
        &lt;h2 id=&#34;enable-sidecars-in-all-workloads&#34;&gt;Enable Sidecars in all workloads&lt;/h2&gt;
&lt;p&gt;An Istio sidecar proxy adds a workload into the mesh.&lt;/p&gt;
&lt;p&gt;Proxies connect with the control plane and provide &lt;a href=&#34;https://istio.io/latest/about/service-mesh/#what-is-istio&#34;&gt;Service Mesh functionality&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Automatically providing metrics, logs and traces is a major feature of the sidecar.&lt;/p&gt;
&lt;p&gt;In the previous steps we have added a sidecar only in the &lt;em&gt;travel-control&lt;/em&gt; namespace&amp;rsquo;s &lt;em&gt;control&lt;/em&gt; workload.&lt;/p&gt;
&lt;p&gt;We have added new powerful features but the application is still missing visibility from other workloads.&lt;/p&gt;


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

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

&lt;/div&gt;

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


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

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

&lt;/div&gt;

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

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


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

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

&lt;/div&gt;

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


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

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

&lt;/div&gt;

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


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

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

&lt;/div&gt;

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


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

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

&lt;/div&gt;

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


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

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

&lt;/div&gt;

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


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

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

&lt;/div&gt;

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


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

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

&lt;/div&gt;

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


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

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

&lt;/div&gt;

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

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

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

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

&lt;/div&gt;

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

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

    Investigate the http headers used by the Travel Demo application

&lt;/div&gt;

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


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

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

&lt;/div&gt;

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


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

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

&lt;/div&gt;

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


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

    Update or delete Istio Configuration

&lt;/div&gt;

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


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

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

&lt;/div&gt;

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


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

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

&lt;/div&gt;

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


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

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

&lt;/div&gt;

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


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

    Update or delete Istio Configuration

&lt;/div&gt;

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


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

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

&lt;/div&gt;

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


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

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

&lt;/div&gt;

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


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

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

&lt;/div&gt;

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


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

    Update or delete Istio Configuration

&lt;/div&gt;

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


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

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

&lt;/div&gt;

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

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

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

&lt;/div&gt;

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


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

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

&lt;/div&gt;

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


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

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

&lt;/div&gt;

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


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

    Update or delete Istio Configuration

&lt;/div&gt;

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


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

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

&lt;/div&gt;

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


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

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

&lt;/div&gt;

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


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

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

&lt;/div&gt;

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


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

    Update or delete Istio Configuration

&lt;/div&gt;

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


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

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

&lt;/div&gt;

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


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

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

&lt;/div&gt;

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


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

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

&lt;/div&gt;

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


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

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

&lt;/div&gt;

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


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

    Update or delete Istio Configuration

&lt;/div&gt;

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


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

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

&lt;/div&gt;

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


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

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

&lt;/div&gt;

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


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

    Update or delete Istio Configuration

&lt;/div&gt;

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

      </description>
    </item>
    
    <item>
      <title>Docs: Install Kiali</title>
      <link>https://v2-24.kiali.io/docs/tutorials/multicluster/05-install-kiali/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://v2-24.kiali.io/docs/tutorials/multicluster/05-install-kiali/</guid>
      <description>
        
        
        &lt;p&gt;Run the following command to install Kiali using the Kiali operator:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;kubectl config use-context $CLUSTER_EAST

helm upgrade --install --namespace istio-system --set auth.strategy=anonymous --set deployment.logger.log_level=debug --set deployment.ingress.enabled=true --repo https://kiali.org/helm-charts kiali-server kiali-server 
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Verify that Kiali is running with the following command:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;istioctl dashboard kiali
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;There are other alternatives to expose Kiali or other Addons in Istio. Check &lt;a href=&#34;https://istio.io/latest/docs/tasks/observability/gateways/&#34;&gt;Remotely Accessing Telemetry Addons for more information&lt;/a&gt;.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Install Travels on East cluster</title>
      <link>https://v2-24.kiali.io/docs/tutorials/multicluster/06-install-travels-east-cluster/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://v2-24.kiali.io/docs/tutorials/multicluster/06-install-travels-east-cluster/</guid>
      <description>
        
        
        &lt;p&gt;Run the following commands to install Travels application on east cluster:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;kubectl create namespace travel-agency --context $CLUSTER_EAST
kubectl create namespace travel-portal --context $CLUSTER_EAST
kubectl create namespace travel-control --context $CLUSTER_EAST

kubectl label namespace travel-agency istio-injection=enabled --context $CLUSTER_EAST
kubectl label namespace travel-portal istio-injection=enabled --context $CLUSTER_EAST
kubectl label namespace travel-control istio-injection=enabled --context $CLUSTER_EAST

kubectl apply -f &amp;lt;(curl -L https://raw.githubusercontent.com/kiali/demos/master/travels/travel_agency.yaml) -n travel-agency --context $CLUSTER_EAST
kubectl apply -f &amp;lt;(curl -L https://raw.githubusercontent.com/kiali/demos/master/travels/travel_portal.yaml) -n travel-portal --context $CLUSTER_EAST
kubectl apply -f &amp;lt;(curl -L https://raw.githubusercontent.com/kiali/demos/master/travels/travel_control.yaml) -n travel-control --context $CLUSTER_EAST
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;After the installation, we can see that the Travels application is running on the east cluster:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/mc-tutorial/01.png&#34; alt=&#34;Overview&#34; title=&#34;Overview&#34;&gt;&lt;/p&gt;
&lt;p&gt;It is important to note that Kiali only observes one istio-system namespace as we did not configure it for multicluster yet.&lt;/p&gt;
&lt;p&gt;Go to the Graph page and select the three namespaces related to the Travels demo in the namespace dropdown menu. This shows you the in-cluster traffic:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/mc-tutorial/02.png&#34; alt=&#34;Graph&#34; title=&#34;Graph&#34;&gt;&lt;/p&gt;
&lt;p&gt;So far, we installed everything on one cluster, similarly to the Travels tutorial for a single cluster.&lt;/p&gt;
&lt;p&gt;Now we will expand this topology to include a remote cluster. As we commented this situation can be very common in a production scenario, either because we might want to split some applications into different clusters, generally because they are maintained by different developers or for high availability or just making applications available in other zones to reduce latencies.&lt;/p&gt;

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


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

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

&lt;/div&gt;

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


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

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

&lt;/div&gt;

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


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

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

&lt;/div&gt;

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


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

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

&lt;/div&gt;

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


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

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

&lt;/div&gt;

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


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

    Verify the proxies clusters list is limited by the Sidecars

&lt;/div&gt;

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


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

    Update or delete Istio Configuration

&lt;/div&gt;

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

      </description>
    </item>
    
    <item>
      <title>Docs: Deploy West cluster</title>
      <link>https://v2-24.kiali.io/docs/tutorials/multicluster/07-deploy-west-cluster/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://v2-24.kiali.io/docs/tutorials/multicluster/07-deploy-west-cluster/</guid>
      <description>
        
        
        &lt;p&gt;Run the following commands to deploy the second cluster:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;minikube start -p $CLUSTER_WEST --network istio --memory 8g --cpus 4
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Similar to the east cluster, we configure MetalLB:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;minikube addons enable metallb -p $CLUSTER_WEST

MINIKUBE_IP=$(minikube ip -p $CLUSTER_WEST)
MINIKUBE_IP_NETWORK=$(echo $MINIKUBE_IP | sed -E &amp;#39;s/([0-9]+\.[0-9]+\.[0-9]+)\.[0-9]+/\1/&amp;#39;)
MINIKUBE_LB_RANGE=&amp;#34;${MINIKUBE_IP_NETWORK}.30-${MINIKUBE_IP_NETWORK}.39&amp;#34;

cat &amp;lt;&amp;lt;EOF | kubectl --context $CLUSTER_WEST apply -f -
apiVersion: v1
kind: ConfigMap
metadata:
  namespace: metallb-system
  name: config
data:
  config: |
    address-pools:
    - name: default
      protocol: layer2
      addresses: [${MINIKUBE_LB_RANGE}]
EOF
&lt;/code&gt;&lt;/pre&gt;
      </description>
    </item>
    
    <item>
      <title>Docs: Install Istio on West cluster</title>
      <link>https://v2-24.kiali.io/docs/tutorials/multicluster/08-install-istio-west-cluster/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://v2-24.kiali.io/docs/tutorials/multicluster/08-install-istio-west-cluster/</guid>
      <description>
        
        
        &lt;p&gt;This installation will be different as this cluster will be a remote. In a remote cluster, it won&amp;rsquo;t be an Istio control plane. Istio will install some resources that allows the primary control plane to configure the workloads in the remote cluster like injecting the sidecars and configuring the low level routing.&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;kubectl create namespace istio-system --context $CLUSTER_WEST

kubectl create secret generic cacerts -n istio-system --context $CLUSTER_WEST \
      --from-file=certs/$CLUSTER_WEST/ca-cert.pem \
      --from-file=certs/$CLUSTER_WEST/ca-key.pem \
      --from-file=certs/$CLUSTER_WEST/root-cert.pem \
      --from-file=certs/$CLUSTER_WEST/cert-chain.pem

kubectl --context=$CLUSTER_WEST annotate namespace istio-system topology.istio.io/controlPlaneClusters=$CLUSTER_EAST
kubectl --context=$CLUSTER_WEST label namespace istio-system topology.istio.io/network=network2

cat &amp;lt;&amp;lt;EOF &amp;gt; $CLUSTER_WEST.yaml
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
  profile: remote
  values:
    istiodRemote:
      injectionPath: /inject/cluster/$CLUSTER_WEST/net/network2
    global:
      remotePilotAddress: ${DISCOVERY_ADDRESS}
EOF

istioctl install -y --context=$CLUSTER_WEST -f $CLUSTER_WEST.yaml
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;We will also install a Prometheus instance on the remote. We will federate both Prometheus, with the east&amp;rsquo;s one being the place where all metrics will be gathered together:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;kubectl apply -f $ISTIO_DIR/samples/addons/prometheus.yaml --context $CLUSTER_WEST
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;An important step is to create a secret on east cluster allowing it to fetch information of the remote cluster:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;istioctl x create-remote-secret \
    --context=$CLUSTER_WEST \
    --name=$CLUSTER_WEST | \
    kubectl apply -f - --context=$CLUSTER_EAST
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Finally, we create the east-west gateway&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ISTIO_DIR/samples/multicluster/gen-eastwest-gateway.sh \
    --mesh mesh1 --cluster $CLUSTER_WEST --network network2 | \
    istioctl --context=$CLUSTER_WEST install -y -f -
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;prometheus-federation&#34;&gt;Prometheus federation&lt;/h2&gt;
&lt;p&gt;Kiali requires unified metrics from a single Prometheus endpoint for all clusters, even in a multi-cluster environment. In this tutorial, we will federate the two Prometheus instances, meaning that all the remote’s metrics should be fetched by the main Prometheus.&lt;/p&gt;
&lt;p&gt;We will configure east&amp;rsquo;s Prometheus to fetch west&amp;rsquo;s metrics:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;kubectl patch svc prometheus -n istio-system --context $CLUSTER_WEST -p &amp;#34;{\&amp;#34;spec\&amp;#34;: {\&amp;#34;type\&amp;#34;: \&amp;#34;LoadBalancer\&amp;#34;}}&amp;#34;

WEST_PROMETHEUS_ADDRESS=$(kubectl --context=$CLUSTER_WEST -n istio-system get svc prometheus -o jsonpath=&amp;#39;{.status.loadBalancer.ingress[0].ip}&amp;#39;)

curl -L -o prometheus.yaml https://raw.githubusercontent.com/kiali/kiali/master/hack/istio/multicluster/prometheus.yaml

sed -i &amp;#34;s/WEST_PROMETHEUS_ADDRESS/$WEST_PROMETHEUS_ADDRESS/g&amp;#34; prometheus.yaml

kubectl --context=$CLUSTER_EAST apply -f prometheus.yaml -n istio-system
&lt;/code&gt;&lt;/pre&gt;
      </description>
    </item>
    
    <item>
      <title>Docs: Configure Kiali for multicluster</title>
      <link>https://v2-24.kiali.io/docs/tutorials/multicluster/09-configure-kiali/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://v2-24.kiali.io/docs/tutorials/multicluster/09-configure-kiali/</guid>
      <description>
        
        
        &lt;p&gt;We will configure Kiali to access the remote cluster. This will require a secret (similar to the Istio secret) containing the credentials for Kiali to fetch information from the remote cluster:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;curl -L -o kiali-prepare-remote-cluster.sh https://raw.githubusercontent.com/kiali/kiali/master/hack/istio/multicluster/kiali-prepare-remote-cluster.sh

chmod +x kiali-prepare-remote-cluster.sh

./kiali-prepare-remote-cluster.sh --kiali-cluster-context $CLUSTER_EAST --remote-cluster-context $CLUSTER_WEST
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Finally, upgrade the installation for Kiali to pick up the secret:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;kubectl config use-context $CLUSTER_EAST

helm upgrade --install --namespace istio-system --set auth.strategy=anonymous --set deployment.logger.log_level=debug --set deployment.ingress.enabled=true --repo https://kiali.org/helm-charts kiali-server kiali-server
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;As result, we can quickly see that a new namespace appear in the Overview, the istio-system namespace from west cluster:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/mc-tutorial/03.png&#34; alt=&#34;Kiali MC&#34; title=&#34;Kiali MC&#34;&gt;&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Anonymous strategy</title>
      <link>https://v2-24.kiali.io/docs/configuration/authentication/anonymous/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://v2-24.kiali.io/docs/configuration/authentication/anonymous/</guid>
      <description>
        
        
        &lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;The &lt;code&gt;anonymous&lt;/code&gt; strategy removes any authentication requirement. Users will
have access to Kiali without providing any credentials.&lt;/p&gt;
&lt;p&gt;Although the &lt;code&gt;anonymous&lt;/code&gt; strategy doesn&amp;rsquo;t provide any access protection, it&amp;rsquo;s
valid for some use-cases. Some examples known from the community:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Exposing Kiali through a reverse proxy, where the reverse proxy is providing a custom authentication mechanism.&lt;/li&gt;
&lt;li&gt;Exposing Kiali on an already limited network of trusted users.&lt;/li&gt;
&lt;li&gt;When Kiali is accessed through &lt;code&gt;kubectl port-forward&lt;/code&gt; or alike commands that allow usage of the cluster&amp;rsquo;s RBAC capabilities to limit access.&lt;/li&gt;
&lt;li&gt;When developing Kiali, where a developer has a private instance on his own machine.&lt;/li&gt;
&lt;/ul&gt;


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


    It&amp;rsquo;s worth to emphasize that the &lt;code&gt;anonymous&lt;/code&gt;
strategy will leave Kiali unsecured. If you are using this option, make sure
that Kiali is available only to trusted users, or access is protected by other
means.

&lt;/div&gt;

&lt;h2 id=&#34;set-up&#34;&gt;Set-up&lt;/h2&gt;
&lt;p&gt;To use the &lt;code&gt;anonymous&lt;/code&gt; strategy, use the following configuration in the Kiali CR:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;spec&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;auth&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;strategy&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;anonymous&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The &lt;code&gt;anonymous&lt;/code&gt; strategy doesn&amp;rsquo;t have any additional configuration.&lt;/p&gt;
&lt;h2 id=&#34;access-control&#34;&gt;Access control&lt;/h2&gt;
&lt;p&gt;When using the &lt;code&gt;anonymous&lt;/code&gt; strategy, the content displayed in Kiali is based on
the permissions of the Kiali service account. By default, the Kiali service
account has cluster wide access and will be able to display everything in the
cluster.&lt;/p&gt;
&lt;h3 id=&#34;openshift&#34;&gt;OpenShift&lt;/h3&gt;
&lt;p&gt;If you are running Kiali in OpenShift, access can be customized by changing
privileges to the Kiali ServiceAccount. For example, to reduce permissions to
individual namespaces, first, remove the cluster-wide permissions granted by
default:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;  oc delete clusterrolebindings kiali
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Then grant the &lt;code&gt;kiali&lt;/code&gt; role only in needed namespaces. For example:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;  oc adm policy add-role-to-user kiali system:serviceaccount:istio-system:kiali-service-account -n ${NAMESPACE}
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;view-only&#34;&gt;View only&lt;/h3&gt;
&lt;p&gt;You can tell the Kiali Operator to install Kiali in &amp;ldquo;view only&amp;rdquo;
mode (this does work for either OpenShift or Kubernetes). You do this by
setting the &lt;code&gt;view_only_mode&lt;/code&gt; to &lt;code&gt;true&lt;/code&gt; in the Kiali CR, which
allows Kiali to read service mesh resources found in the cluster, but it does
not allow any change:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;spec&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;deployment&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;view_only_mode&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;true&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
      </description>
    </item>
    
    <item>
      <title>Docs: How to Contribute</title>
      <link>https://v2-24.kiali.io/docs/contribution-guidelines/how-to-contribute/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://v2-24.kiali.io/docs/contribution-guidelines/how-to-contribute/</guid>
      <description>
        
        
        &lt;h2 id=&#34;contributing-to-the-docs&#34;&gt;Contributing to the Docs&lt;/h2&gt;
&lt;p&gt;To contribute to the kiali.io docs see &lt;a href=&#34;https://github.com/kiali/kiali.io&#34;&gt;kiali.io on github&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;In short you will:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Fork the &lt;a href=&#34;https://github.com/kiali/kiali.io&#34;&gt;kiali.io repo&lt;/a&gt; on GitHub.&lt;/li&gt;
&lt;li&gt;Make your changes and send a pull request (PR).&lt;/li&gt;
&lt;li&gt;If you&amp;rsquo;re not yet ready for a review, add &amp;ldquo;WIP&amp;rdquo; to the PR name to indicate it&amp;rsquo;s a work in progress.
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Don&amp;rsquo;t&lt;/strong&gt; add the Hugo property  &amp;ldquo;draft = true&amp;rdquo; to the page front matter, it prevents auto-deployment of the content preview.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;Wait for the automated PR workflow to do some checks. When it&amp;rsquo;s ready, you should see a comment like this: &lt;strong&gt;deploy/netlify — Deploy preview ready!&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Details&lt;/strong&gt; to the right of &amp;ldquo;Deploy preview ready&amp;rdquo; to see a preview of your updates.&lt;/li&gt;
&lt;li&gt;Continue updating your doc and pushing your changes until you&amp;rsquo;re happy with  the content.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;updating-a-single-page&#34;&gt;Updating a single page&lt;/h3&gt;
&lt;p&gt;If you&amp;rsquo;ve just spotted something you&amp;rsquo;d like to change while using the docs, there is a shortcut for you:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Click &lt;strong&gt;Edit this page&lt;/strong&gt; in the top right hand corner of the page.&lt;/li&gt;
&lt;li&gt;If you don&amp;rsquo;t already have an up to date fork of the project repo, you are prompted to get one:
&lt;ol&gt;
&lt;li&gt;Click &lt;strong&gt;Fork this repository and propose changes&lt;/strong&gt; or &lt;strong&gt;Update your Fork&lt;/strong&gt; to get an up to date version of the project to edit.&lt;/li&gt;
&lt;li&gt;The appropriate page in your fork is displayed in edit mode.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;Follow the steps above to make, preview, and propose your changes.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;creating-an-issue&#34;&gt;Creating an issue&lt;/h3&gt;
&lt;p&gt;If you&amp;rsquo;ve found a problem in the docs, but you&amp;rsquo;re not sure how to fix it yourself, please create an issue in the &lt;a href=&#34;https://github.com/kiali/kiali.io/issues&#34;&gt;kiali.io repo&lt;/a&gt;. You can also create an issue about a specific page by clicking the &lt;strong&gt;Create Documentation Issue&lt;/strong&gt; button in the top right hand corner of the page.&lt;/p&gt;
&lt;h2 id=&#34;contributing-to-the-code&#34;&gt;Contributing to the Code&lt;/h2&gt;
&lt;p&gt;For code contribution see the kiali project&amp;rsquo;s &lt;a href=&#34;https://github.com/kiali/kiali/blob/master/CONTRIBUTING.md&#34;&gt;CONTRIBUTING&lt;/a&gt; page.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Install Travels on West cluster</title>
      <link>https://v2-24.kiali.io/docs/tutorials/multicluster/10-install-travels-west-cluster-copy/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://v2-24.kiali.io/docs/tutorials/multicluster/10-install-travels-west-cluster-copy/</guid>
      <description>
        
        
        &lt;p&gt;We are going to deploy two new services just to distribute traffic on the new cluster. These services are travels v2 and v3:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;kubectl create ns travel-agency --context $CLUSTER_WEST

kubectl label namespace travel-agency istio-injection=enabled --context $CLUSTER_WEST

kubectl apply -f &amp;lt;(curl -L https://raw.githubusercontent.com/kiali/demos/master/travels/travels-v2.yaml) -n travel-agency --context $CLUSTER_WEST
kubectl apply -f &amp;lt;(curl -L https://raw.githubusercontent.com/kiali/demos/master/travels/travels-v3.yaml) -n travel-agency --context $CLUSTER_WEST

cat &amp;lt;&amp;lt;EOF | kubectl -n travel-agency --context $CLUSTER_WEST apply -f -
apiVersion: v1
kind: Service
metadata:
  name: travels
  labels:
    app: travels
spec:
  ports:
    - name: http
      port: 8000
  selector:
    app: travels
---
apiVersion: v1
kind: Service
metadata:
  name: insurances
  labels:
    app: insurances
spec:
  ports:
    - name: http
      port: 8000
  selector:
    app: insurances
---
apiVersion: v1
kind: Service
metadata:
  name: hotels
  labels:
    app: hotels
spec:
  ports:
    - name: http
      port: 8000
  selector:
    app: hotels
---
apiVersion: v1
kind: Service
metadata:
  name: flights
  labels:
    app: flights
spec:
  ports:
    - name: http
      port: 8000
  selector:
    app: flights
---
apiVersion: v1
kind: Service
metadata:
  name: discounts
  labels:
    app: discounts
spec:
  ports:
    - name: http
      port: 8000
  selector:
    app: discounts
---
apiVersion: v1
kind: Service
metadata:
  name: cars
  labels:
    app: cars
spec:
  ports:
    - name: http
      port: 8000
  selector:
    app: cars
EOF
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;After the installation, we can see that traffic is flowing to the remote cluster too:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/mc-tutorial/04.png&#34; alt=&#34;Travels MC&#34; title=&#34;Travels MC&#34;&gt;&lt;/p&gt;
&lt;p&gt;This is happening automatically, Istio balances the traffic to both services. The key thing to notice here is that there is a concept called namespace sameness in Istio that is very important when planning our multicluster setup.&lt;/p&gt;
&lt;p&gt;In both clusters, we can see that we have the same namespaces. They are called the same in both. Also, we can see that the services in both clusters need to exist and be called the same.&lt;/p&gt;
&lt;p&gt;When we created the west’s namespaces, they are called the same, and also notice that even if we do not have instances of insurances or cars, we created the services. This is because travel services from the cluster will try to communicate with these services, not caring at all if the applications are in the west or east cluster. Istio will handle the routing in the back.&lt;/p&gt;
&lt;p&gt;From this moment, we can start playing with Kiali to introduce some scenarios previously seen in the Travels tutorial.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Kiali Backstage Plugin</title>
      <link>https://v2-24.kiali.io/docs/integrations/kiali-backstage-plugin/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://v2-24.kiali.io/docs/integrations/kiali-backstage-plugin/</guid>
      <description>
        
        
        &lt;p&gt;The Kiali Backstage Plugin provides information about each Service Mesh object related with an entity in &lt;a href=&#34;https://backstage.io/docs/overview/what-is-backstage/&#34;&gt;Backstage&lt;/a&gt;, a framework for building developer portals.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/documentation/integration/kiali-tab.png&#34; alt=&#34;Kiali-Backstage-tab&#34;&gt;&lt;/p&gt;
&lt;p&gt;The plugin has different views to be included in Backstage:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Added as cards to see resource lists&lt;/li&gt;
&lt;li&gt;Added as a tab which includes all the predefined Kiali cards&lt;/li&gt;
&lt;li&gt;Added as a page, which views are not going to be filtered by entities and offer a full Kiali view&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/documentation/integration/kiali-page.png&#34; alt=&#34;Kiali-Backstage-page&#34;&gt;&lt;/p&gt;
&lt;p&gt;The Kiali Backstage plugin is released as a technology preview in &lt;a href=&#34;https://developers.redhat.com/rhdh/overview&#34;&gt;Red Hat Developer Hub&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&#34;documentation&#34;&gt;Documentation&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/backstage/community-plugins/blob/main/workspaces/kiali&#34;&gt;Plugin Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/backstage/community-plugins/tree/main/workspaces/kiali#for-users&#34;&gt;User guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://developers.redhat.com/rhdh/overview&#34;&gt;Red Hat Developer Hub&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;get-involved&#34;&gt;Get Involved&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/backstage/community-plugins/blob/main/workspaces/kiali/DEVELOPMENT.md&#34;&gt;Development guide&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Kiali Chatbot</title>
      <link>https://v2-24.kiali.io/docs/ai/kiali-chatbot/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://v2-24.kiali.io/docs/ai/kiali-chatbot/</guid>
      <description>
        
        
        &lt;p&gt;Kiali Chatbot is Kiali’s built-in AI assistant in the Kiali UI. It lets you ask questions about your service mesh and get answers backed by live data from Kiali and its configured backends (Prometheus, tracing, Kubernetes, etc.).&lt;/p&gt;
&lt;p&gt;It does &lt;strong&gt;not&lt;/strong&gt; require an external MCP server. Kiali includes its own set of MCP-style tools internally, so the AI can call them without depending on a separate MCP deployment.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/documentation/ai/kiali-chatbot.png&#34; alt=&#34;Kiali Chatbot&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;status&#34;&gt;Status&lt;/h3&gt;
&lt;p&gt;The Kiali chatbot was first released in Kiali version 2.22 and it is in &lt;strong&gt;Dev preview&lt;/strong&gt;.&lt;/p&gt;
&lt;h3 id=&#34;how-does-it-work&#34;&gt;How does it work&lt;/h3&gt;
&lt;p&gt;At a high level:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The Kiali UI sends your chat request (prompt + context + selected model) to the Kiali backend.&lt;/li&gt;
&lt;li&gt;Kiali selects the configured provider/model from &lt;code&gt;chat_ai&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The provider calls the LLM with a set of &lt;strong&gt;internal MCP tools&lt;/strong&gt; (defined in Kiali under &lt;code&gt;kiali/ai/mcp&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;The LLM may request tool calls (e.g. mesh graph, traces, resource details, workload logs, Istio config operations).&lt;/li&gt;
&lt;li&gt;Kiali executes those tool calls against Kiali/Kubernetes/Prometheus/tracing backends and returns the final answer, including optional UI navigation actions and documentation citations.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For configuration keys (enable/disable, providers/models, store), see the &lt;code&gt;chat_ai&lt;/code&gt; section in the &lt;a href=&#34;https://v2-24.kiali.io/docs/configuration/kialis.kiali.io/#.spec.chat_ai&#34;&gt;Kiali CR spec&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/documentation/ai/kiali-chatbot-architecture.png&#34; alt=&#34;Kiali Chatbot architecture&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;tool-schemas-inputsoutputs&#34;&gt;Tool schemas (inputs/outputs)&lt;/h3&gt;
&lt;p&gt;Kiali Chatbot uses internal tools with defined input schemas and structured outputs.&lt;/p&gt;
&lt;h3 id=&#34;configuring-the-kiali-chatbot&#34;&gt;Configuring the Kiali Chatbot&lt;/h3&gt;
&lt;p&gt;The Kiali Chatbot is disabled by default. To enable it, set &lt;code&gt;chat_ai.enabled: true&lt;/code&gt;.
When enabled, you will see the chatbot icon in the Kiali UI:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/documentation/ai/chatbot-icon.png&#34; alt=&#34;Kiali Chatbot icon&#34;&gt;&lt;/p&gt;
&lt;p&gt;You must also configure at least one provider and model (including an API key), and pick a default provider/model.&lt;/p&gt;
&lt;h3 id=&#34;switching-model-providers&#34;&gt;Switching model providers&lt;/h3&gt;
&lt;p&gt;Kiali Chatbot providers and models are configured in &lt;code&gt;chat_ai&lt;/code&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Providers: OpenAI-compatible (&lt;code&gt;type: openai&lt;/code&gt;) and Google (&lt;code&gt;type: google&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Models are selected by name (per-provider) and can be enabled/disabled.&lt;/li&gt;
&lt;li&gt;API keys can be set inline (not recommended) or via &lt;code&gt;secret:&amp;lt;secret-name&amp;gt;:&amp;lt;key-in-secret&amp;gt;&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Example configuration (showing an OpenAI-compatible provider using Gemini via OpenAI endpoint):&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;chat_ai&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;enabled&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;true&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;default_provider&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;openai&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;providers&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;- &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;openai&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;enabled&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;true&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;description&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;OpenAI API Provider&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;type&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;openai&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;config&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;default&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;default_model&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;gemini&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;models&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;- &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;gemini&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;          &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;enabled&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;true&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;          &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;model&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;gemini-2.5-pro&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;          &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;description&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;Model provided by Google with OpenAI API Support&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;          &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;endpoint&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;https://generativelanguage.googleapis.com/v1beta/openai&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;          &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;key&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;secret:my-key-secret:openai-gemini&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;You can also select the configured models and providers in the chatbot window:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/documentation/ai/kiali-chatbot-models.png&#34; alt=&#34;Kiali Chatbot models&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;what-you-can-ask&#34;&gt;What you can ask&lt;/h3&gt;
&lt;p&gt;Examples of tasks that work well:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Mesh/namespace topology and summaries (graph, status)&lt;/li&gt;
&lt;li&gt;Basic observability questions (metrics, traces)&lt;/li&gt;
&lt;li&gt;Troubleshooting workflows (get logs for a workload, identify failing namespaces)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;example-prompts&#34;&gt;Example prompts&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;“Show me the mesh graph for namespace &lt;code&gt;bookinfo&lt;/code&gt;.”&lt;/li&gt;
&lt;li&gt;“Which workloads in &lt;code&gt;istio-system&lt;/code&gt; look unhealthy and why?”&lt;/li&gt;
&lt;li&gt;“Get traces for service &lt;code&gt;productpage&lt;/code&gt; in &lt;code&gt;bookinfo&lt;/code&gt; for the last 30m.”&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;next-step&#34;&gt;Next step&lt;/h3&gt;
&lt;p&gt;If you want to use an AI assistant outside the Kiali UI (for example, in an IDE), see &lt;a href=&#34;https://v2-24.kiali.io/docs/ai/kiali-mcp/&#34;&gt;Kiali MCP&lt;/a&gt;.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: OpenShift</title>
      <link>https://v2-24.kiali.io/docs/configuration/multi-cluster/external/external-openshift/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://v2-24.kiali.io/docs/configuration/multi-cluster/external/external-openshift/</guid>
      <description>
        
        
        &lt;p&gt;These are specific notes for the External Kiali deployment model on OpenShift.&lt;/p&gt;
&lt;h2 id=&#34;installation&#34;&gt;Installation&lt;/h2&gt;
&lt;p&gt;It is highly recommended that the Kiali Operator be deployed on all clusters, even if the Kiali Server itself is not deployed on some clusters. This will ensure that the proper namespace and remote cluster resources can be created. Clusters without a Kiali Server will require only the remote cluster resources necessary for remote Kiali Server authentication. To install these resources, configure the Kiali CR with:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;spec.deployment.remote_cluster_resources_only: true&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This Kiali CR will result in an installation requiring very limited resources.&lt;/p&gt;
&lt;h2 id=&#34;authorization-strategy&#34;&gt;Authorization Strategy&lt;/h2&gt;
&lt;p&gt;When using the &lt;code&gt;openshift&lt;/code&gt; authentication strategy on OpenShift, make sure to read and apply any guidance found in the notes for &lt;a href=&#34;https://v2-24.kiali.io/docs/configuration/authentication/openshift/#multi-cluster&#34;&gt;multi-cluster&lt;/a&gt;.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: OSSM Console</title>
      <link>https://v2-24.kiali.io/docs/integrations/ossm-console/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://v2-24.kiali.io/docs/integrations/ossm-console/</guid>
      <description>
        
        
        &lt;p&gt;OpenShift Service Mesh Console (OSSMC) is a Kiali integration for OpenShift Console based on OpenShift &lt;a href=&#34;https://docs.openshift.com/container-platform/4.11/web_console/dynamic-plugin/dynamic-plugin-overview.html&#34;&gt;dynamic plugins&lt;/a&gt; technology.
It integrates part of the Kiali UI functionality into the OpenShift Console, providing visibility of the Service Mesh.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/documentation/installation/installation-guide/20-overview.png&#34; alt=&#34;OSSMC&#34;&gt;&lt;/p&gt;
&lt;p&gt;OSSMC was &lt;a href=&#34;https://cloud.redhat.com/blog/introducing-the-openshift-service-mesh-console-a-developer-preview&#34;&gt;first released&lt;/a&gt; in September 2022 as a developer preview. It has since be released GA in October 2023.&lt;/p&gt;
&lt;h3 id=&#34;documentation&#34;&gt;Documentation&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://v2-24.kiali.io/docs/ossmc/users-guide&#34;&gt;User guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://v2-24.kiali.io/docs/installation/installation-guide/creating-updating-ossmconsole-cr/&#34;&gt;Install via OSSMConsole CR&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;get-involved&#34;&gt;Get Involved&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/openshift-servicemesh-plugin/blob/main/README.md&#34;&gt;Development guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/openshift-servicemesh-plugin/issues/new&#34;&gt;Create a bug report or an Improvement Request&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/openshift-servicemesh-plugin/issues&#34;&gt;Contribute with an existing issue&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;releases&#34;&gt;Releases&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiali/openshift-servicemesh-plugin/releases&#34;&gt;Release list&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: OSSMC User Guide</title>
      <link>https://v2-24.kiali.io/docs/ossmc/users-guide/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://v2-24.kiali.io/docs/ossmc/users-guide/</guid>
      <description>
        
        
        &lt;p&gt;The OpenShift Service Mesh Console (OSSMC) is an extension to the OpenShift Console which provides visibility into your Service Mesh. With the OSSMC plugin installed, a new &lt;strong&gt;Service Mesh&lt;/strong&gt; menu category is available in the navigation menu on the left side of the web console, as well as new &lt;strong&gt;Service Mesh&lt;/strong&gt; tabs that enhance the existing &lt;strong&gt;Workloads&lt;/strong&gt; and &lt;strong&gt;Services&lt;/strong&gt; OpenShift console detail pages.&lt;/p&gt;
&lt;p&gt;The features of the OSSMC plugin are the same as those of the standalone Kiali Console, but the pages are organized differently to better integrate with the OpenShift console. The OSSMC plugin does not replace the Kiali Console, and after installing the OSSMC plugin, you can still access the standalone Kiali Console. This User Guide, however, will discuss the extensions you see from within the OpenShift Console itself.&lt;/p&gt;


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


    The OSSMC &lt;a href=&#34;https://github.com/kiali/openshift-servicemesh-plugin/issues/187&#34;&gt;only supports a single tenant today&lt;/a&gt;. Whether that tenant is configured to access only a subset of OpenShift projects or has access cluster-wide to all projects does not matter, however, only a single tenant can be accessed.

&lt;/div&gt;

&lt;h2 id=&#34;overview&#34;&gt;Overview&lt;/h2&gt;
&lt;p&gt;The &lt;strong&gt;Overview&lt;/strong&gt; page provides a summary of your mesh by showing cards representing the namespaces participating in the mesh. Each namespace card has summary metric graphs and additional health details. There are links in the cards that take you to other pages within OSSMC.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/documentation/installation/installation-guide/20-overview.png&#34; alt=&#34;Overview&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;traffic-graph&#34;&gt;Traffic Graph&lt;/h2&gt;
&lt;p&gt;The &lt;strong&gt;Traffic Graph&lt;/strong&gt; page provides the full topology view of your mesh. The mesh is represented by nodes and edges - each node representing a component of the mesh and each edge representing traffic flowing through the mesh between components.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/documentation/installation/installation-guide/21-graph.png&#34; alt=&#34;Graph&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;istio-config&#34;&gt;Istio Config&lt;/h2&gt;
&lt;p&gt;The &lt;strong&gt;Istio Config&lt;/strong&gt; page provides a list of all Istio configuration files in your mesh with a column that provides a quick way to know if the configuration for each resource is valid.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/documentation/installation/installation-guide/22-istioconfig.png&#34; alt=&#34;Istio Config&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;mesh&#34;&gt;Mesh&lt;/h2&gt;
&lt;p&gt;The &lt;strong&gt;Mesh&lt;/strong&gt; page provides detailed information about the Istio infrastructure status. It shows an infrastructure topology view with core and add-on components, their health, and how they are connected to each other.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/documentation/installation/installation-guide/22-mesh.png&#34; alt=&#34;Istio Config&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;workload&#34;&gt;Workload&lt;/h2&gt;
&lt;p&gt;The &lt;strong&gt;Workloads&lt;/strong&gt; view has a tab &lt;strong&gt;Service Mesh&lt;/strong&gt; that provides a lot of mesh-related detail for the selected workload. The details are grouped into several sub-tabs: Overview, Traffic, Logs, Inbound Metrics, Outbound Metrics, Traces, and Envoy.&lt;/p&gt;
&lt;h3 id=&#34;workload-overview&#34;&gt;Workload: Overview&lt;/h3&gt;
&lt;p&gt;The &lt;strong&gt;Workload: Overview&lt;/strong&gt; sub-tab provides a summary of the selected workload including a localized topology graph showing the workload with all inbound and outbound edges and nodes.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/documentation/installation/installation-guide/23-workload.png&#34; alt=&#34;Workload: Overview&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;workload-traffic&#34;&gt;Workload: Traffic&lt;/h3&gt;
&lt;p&gt;The &lt;strong&gt;Workload: Traffic&lt;/strong&gt; sub-tab provides information about all inbound and outbound traffic to the workload.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/documentation/installation/installation-guide/24-workload-traffic.png&#34; alt=&#34;Workload: Traffic&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;workload-logs&#34;&gt;Workload: Logs&lt;/h3&gt;
&lt;p&gt;The &lt;strong&gt;Workload: Logs&lt;/strong&gt; sub-tab provides the logs for the workload&amp;rsquo;s containers. You can view container logs individually or in a unified fashion, ordered by log time. This is especially helpful to see how the Envoy sidecar proxy logs relate to your workload&amp;rsquo;s application logs. You can enable the tracing span integration which then allows you to see which logs correspond to trace spans.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/documentation/installation/installation-guide/25-workload-logs.png&#34; alt=&#34;Workload: Logs&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;workload-metrics&#34;&gt;Workload: Metrics&lt;/h3&gt;
&lt;p&gt;You can see both inbound and outbound metric graphs in the corresponding sub-tabs. All the workload metrics can be displayed here, providing you with a detail view of the performance of your workload. You can enable the tracing span integration which allows you to see which spans occurred at the same time as the metrics. You can then click on a span marker in the graph to view the specific spans associated with that timeframe.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/documentation/installation/installation-guide/26-workload-metrics.png&#34; alt=&#34;Workload: Metrics&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;workload-traces&#34;&gt;Workload: Traces&lt;/h3&gt;
&lt;p&gt;The &lt;strong&gt;Traces&lt;/strong&gt; sub-tab provides a chart showing the trace spans collected over the given timeframe. Click on a bubble to drill down into those trace spans; the trace spans can provide you the most low-level detail within your workload application, down to the individual request level.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/documentation/installation/installation-guide/27-workload-traces.png&#34; alt=&#34;Workload: Traces&#34;&gt;&lt;/p&gt;
&lt;p&gt;The trace details view will give further details, including heatmaps that provide you with a comparison of one span in relation to other requests and spans in the same timeframe.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/documentation/installation/installation-guide/28-workload-traces-details.png&#34; alt=&#34;Workload: Traces Details&#34;&gt;&lt;/p&gt;
&lt;p&gt;If you hover over a cell in a heatmap, a tooltip will give some details on the cell data:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/documentation/installation/installation-guide/29-workload-traces-heatmap.png&#34; alt=&#34;Workload: Traces Heatmap&#34;&gt;&lt;/p&gt;
&lt;p&gt;When the OpenShift tracing UI plugin is enabled, Kiali will try to auto discover the plugin settings and the &lt;code&gt;View in Tracing&lt;/code&gt; Kiali link will redirect to the plugin (for Kiali 2.8.0+).
If the plugin config needs to be adjusted, the following settings should be included in the &lt;code&gt;plugin-conf&lt;/code&gt; ConfigMap:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;...&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;observability&amp;#34;: &lt;/span&gt;{&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;instance&amp;#34;: &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;sample&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;namespace&amp;#34;: &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;tempo&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;tenant&amp;#34;: &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;default&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;}&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;}&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;workload-envoy&#34;&gt;Workload: Envoy&lt;/h3&gt;
&lt;p&gt;The &lt;strong&gt;Envoy&lt;/strong&gt; sub-tab provides information about the Envoy sidecar configuration. This is useful when you need to dig down deep into the sidecar configuration when debugging things such as connectivity issues.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/documentation/installation/installation-guide/30-workload-envoy.png&#34; alt=&#34;Workload: Envoy&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;services&#34;&gt;Services&lt;/h2&gt;
&lt;p&gt;The &lt;strong&gt;Services&lt;/strong&gt; view has a tab &lt;strong&gt;Service Mesh&lt;/strong&gt; that provides mesh-related detail for the selected service. The details are grouped into several sub-tabs: Overview, Traffic, Inbound Metrics, Traces. These sub-tabs are similar in nature as the Workload sub-tabs with the same names and serve the same functions.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/documentation/installation/installation-guide/31-services-overview.png&#34; alt=&#34;Services: Overview&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;projects&#34;&gt;Projects&lt;/h2&gt;
&lt;p&gt;The &lt;strong&gt;Projects&lt;/strong&gt; view has a tab &lt;strong&gt;Service Mesh&lt;/strong&gt; that provides traffic graph information about that project. It is the same information shown in the &lt;a href=&#34;#traffic-graph&#34;&gt;&lt;strong&gt;Traffic Graph&lt;/strong&gt;&lt;/a&gt; page but specific to that project.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/documentation/installation/installation-guide/32-projects-graph.png&#34; alt=&#34;Projects: Overview&#34;&gt;&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: TLS Configuration</title>
      <link>https://v2-24.kiali.io/docs/configuration/p8s-jaeger-grafana/tls-configuration/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://v2-24.kiali.io/docs/configuration/p8s-jaeger-grafana/tls-configuration/</guid>
      <description>
        
        
        &lt;h2 id=&#34;overview&#34;&gt;Overview&lt;/h2&gt;
&lt;p&gt;When Kiali connects to external services (Prometheus, Grafana, Jaeger/Tempo, Perses) over HTTPS, it needs to verify the TLS certificates presented by those services. By default, Kiali trusts the system certificate authorities (CAs) that are built into the container image.&lt;/p&gt;
&lt;p&gt;If your external services use certificates issued by a private CA (such as an internal corporate CA, a service mesh CA, or self-signed certificates), you need to configure Kiali to trust those additional CAs.&lt;/p&gt;
&lt;h2 id=&#34;adding-custom-certificate-authorities&#34;&gt;Adding Custom Certificate Authorities&lt;/h2&gt;
&lt;p&gt;Kiali uses a &lt;strong&gt;global CA bundle&lt;/strong&gt; mechanism to trust additional certificate authorities. All custom CAs are added to a single certificate pool that applies to all HTTPS connections Kiali makes to external services.&lt;/p&gt;
&lt;h3 id=&#34;on-kubernetes&#34;&gt;On Kubernetes&lt;/h3&gt;
&lt;p&gt;To add custom CAs, create a ConfigMap named &lt;code&gt;&amp;lt;kiali-instance-name&amp;gt;-cabundle&lt;/code&gt; in the Kiali namespace. The default instance name is &lt;code&gt;kiali&lt;/code&gt;, so the ConfigMap would be named &lt;code&gt;kiali-cabundle&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;apiVersion&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;v1&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;kind&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;ConfigMap&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;metadata&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;kiali-cabundle&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;namespace&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;istio-system &lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Or your Kiali namespace&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;data&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;additional-ca-bundle.pem&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;|&lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;    -----BEGIN CERTIFICATE-----
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;    MIIDxTCCAq2gAwIBAgIQAqxcJmoLQ...
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;    ... (your CA certificate) ...
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;    -----END CERTIFICATE-----
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;    -----BEGIN CERTIFICATE-----
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;    MIIDyTCCArGgAwIBAgIRAJ4K...
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;    ... (additional CA certificates if needed) ...
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;    -----END CERTIFICATE-----&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

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


    &lt;p&gt;&lt;strong&gt;Key name&lt;/strong&gt;: The key must be &lt;code&gt;additional-ca-bundle.pem&lt;/code&gt;. You can include multiple CA certificates in PEM format in the same file.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Alternative keys&lt;/strong&gt;: You can also use &lt;code&gt;openid-server-ca.crt&lt;/code&gt; or (on OpenShift) &lt;code&gt;oauth-server-ca.crt&lt;/code&gt; as key names. While these names suggest specific purposes, all CAs are loaded into Kiali&amp;rsquo;s global certificate pool and trusted for all TLS connections. Using &lt;code&gt;additional-ca-bundle.pem&lt;/code&gt; is recommended for clarity.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;For OpenShift OAuth authentication&lt;/strong&gt;: On OpenShift, you can alternatively create a separate ConfigMap named &lt;code&gt;&amp;lt;instance-name&amp;gt;-oauth-cabundle&lt;/code&gt; with the key &lt;code&gt;oauth-server-ca.crt&lt;/code&gt;. See the &lt;a href=&#34;https://v2-24.kiali.io/docs/configuration/authentication/openshift/#using-an-internal-or-self-signed-certificate&#34;&gt;OpenShift authentication&lt;/a&gt; documentation for details. However, adding your CA to &lt;code&gt;kiali-cabundle&lt;/code&gt; under &lt;code&gt;additional-ca-bundle.pem&lt;/code&gt; achieves the same result.&lt;/p&gt;


&lt;/div&gt;

&lt;h3 id=&#34;on-openshift&#34;&gt;On OpenShift&lt;/h3&gt;
&lt;p&gt;On OpenShift, the Kiali Operator automatically creates a ConfigMap named &lt;code&gt;&amp;lt;kiali-instance-name&amp;gt;-cabundle-openshift&lt;/code&gt; (e.g., &lt;code&gt;kiali-cabundle-openshift&lt;/code&gt;) with the annotation &lt;code&gt;service.beta.openshift.io/inject-cabundle: &amp;quot;true&amp;quot;&lt;/code&gt;. This tells OpenShift to automatically inject the cluster&amp;rsquo;s service CA into the ConfigMap.&lt;/p&gt;
&lt;p&gt;This means that by default, Kiali on OpenShift already trusts:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The system CAs&lt;/li&gt;
&lt;li&gt;The OpenShift service CA (used by services with serving certificates)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you need to add additional CAs beyond the OpenShift service CA, create a separate ConfigMap named &lt;code&gt;&amp;lt;kiali-instance-name&amp;gt;-cabundle&lt;/code&gt; (e.g., &lt;code&gt;kiali-cabundle&lt;/code&gt;):&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;apiVersion&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;v1&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;kind&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;ConfigMap&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;metadata&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;kiali-cabundle&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;namespace&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;istio-system &lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Or your Kiali namespace&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;data&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;additional-ca-bundle.pem&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;|&lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;    -----BEGIN CERTIFICATE-----
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;    MIIDxTCCAq2gAwIBAgIQAqxcJmoLQ...
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;    ... (your CA certificate) ...
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;    -----END CERTIFICATE-----&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The operator uses a projected volume that automatically combines both ConfigMaps, so your custom CAs work alongside the OpenShift service CA.&lt;/p&gt;
&lt;h2 id=&#34;how-it-works&#34;&gt;How It Works&lt;/h2&gt;
&lt;p&gt;When Kiali starts, it loads certificates from:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;System certificate pool&lt;/strong&gt;: The default trusted CAs from the container&amp;rsquo;s operating system&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Additional CA bundle&lt;/strong&gt;: Certificates from &lt;code&gt;/kiali-cabundle/additional-ca-bundle.pem&lt;/code&gt; (if present)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;OpenShift service CA&lt;/strong&gt; (OpenShift only): Certificates from &lt;code&gt;/kiali-cabundle/service-ca.crt&lt;/code&gt; (automatically injected from the &lt;code&gt;&amp;lt;instance-name&amp;gt;-cabundle-openshift&lt;/code&gt; ConfigMap)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;OpenID server CA&lt;/strong&gt; (OpenID auth only): Certificates from &lt;code&gt;/kiali-cabundle/openid-server-ca.crt&lt;/code&gt; (if present)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;OAuth CA bundle&lt;/strong&gt; (OpenShift with OAuth auth): Certificates from &lt;code&gt;/kiali-cabundle/oauth-server-ca.crt&lt;/code&gt; (if the &lt;code&gt;&amp;lt;instance-name&amp;gt;-oauth-cabundle&lt;/code&gt; ConfigMap exists)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;All these certificates are combined into a single certificate pool used for all HTTPS connections to external services.&lt;/p&gt;


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


    &lt;strong&gt;On OpenShift&lt;/strong&gt;: The operator uses a projected volume that automatically combines multiple ConfigMap sources (&lt;code&gt;&amp;lt;instance-name&amp;gt;-cabundle-openshift&lt;/code&gt;, &lt;code&gt;&amp;lt;instance-name&amp;gt;-cabundle&lt;/code&gt;, and &lt;code&gt;&amp;lt;instance-name&amp;gt;-oauth-cabundle&lt;/code&gt;) into the &lt;code&gt;/kiali-cabundle&lt;/code&gt; mount path. This means you don&amp;rsquo;t need to manually merge ConfigMaps - each ConfigMap can be managed independently.

&lt;/div&gt;



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


    &lt;strong&gt;Automatic refresh&lt;/strong&gt;: Kiali watches CA bundle files for changes using filesystem notifications (fsnotify) and automatically refreshes the certificate pool without requiring a pod restart. When you update the ConfigMap, Kubernetes propagates the changes to the mounted volume based on the kubelet&amp;rsquo;s sync interval (default: 60 seconds). Once the files are updated on disk, Kiali detects and applies them immediately. Total propagation time is typically 0-90 seconds after the ConfigMap update.

&lt;/div&gt;

&lt;h2 id=&#34;skipping-certificate-verification&#34;&gt;Skipping Certificate Verification&lt;/h2&gt;
&lt;p&gt;If you need to temporarily skip certificate verification (for testing purposes only), you can set &lt;code&gt;insecure_skip_verify: true&lt;/code&gt; in the authentication configuration for each external service:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;spec&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;external_services&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;prometheus&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;auth&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;insecure_skip_verify&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;true&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;grafana&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;auth&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;insecure_skip_verify&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;true&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;tracing&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;auth&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;insecure_skip_verify&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;true&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

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


    &lt;strong&gt;Security warning&lt;/strong&gt;: Disabling certificate verification makes Kiali vulnerable to man-in-the-middle attacks. Only use this option for testing purposes, never in production.

&lt;/div&gt;

&lt;h2 id=&#34;common-scenarios&#34;&gt;Common Scenarios&lt;/h2&gt;
&lt;h3 id=&#34;internal-corporate-ca&#34;&gt;Internal Corporate CA&lt;/h3&gt;
&lt;p&gt;If your organization has an internal CA that issues certificates for internal services:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Obtain the root CA certificate (public part only) from your security team&lt;/li&gt;
&lt;li&gt;Create the ConfigMap with the CA certificate as shown above&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;self-signed-certificates&#34;&gt;Self-Signed Certificates&lt;/h3&gt;
&lt;p&gt;For development or testing environments using self-signed certificates:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Export the certificate from your service (usually the same certificate that was generated)&lt;/li&gt;
&lt;li&gt;Create the ConfigMap with that certificate&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;istio-service-mesh-mtls&#34;&gt;Istio Service Mesh mTLS&lt;/h3&gt;
&lt;p&gt;If your external services are part of the Istio service mesh and use Istio&amp;rsquo;s mTLS:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Kiali typically accesses these services through their Kubernetes service names, which may bypass the sidecar&lt;/li&gt;
&lt;li&gt;If you need to go through the mesh, you may need to add Istio&amp;rsquo;s root CA to the bundle&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;cert-manager-issued-certificates&#34;&gt;cert-manager Issued Certificates&lt;/h3&gt;
&lt;p&gt;If you use cert-manager with a private CA:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;The CA certificate is typically stored in a Secret (e.g., &lt;code&gt;my-ca-secret&lt;/code&gt; with key &lt;code&gt;ca.crt&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Extract the CA and add it to the ConfigMap:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;kubectl get secret my-ca-secret -n cert-manager -o &lt;span style=&#34;color:#000&#34;&gt;jsonpath&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;{.data.ca\.crt}&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;|&lt;/span&gt; base64 -d &amp;gt; ca.crt
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;kubectl create configmap kiali-cabundle -n istio-system --from-file&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;additional-ca-bundle.pem&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;ca.crt
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;troubleshooting&#34;&gt;Troubleshooting&lt;/h2&gt;
&lt;h3 id=&#34;certificate-errors-in-logs&#34;&gt;Certificate Errors in Logs&lt;/h3&gt;
&lt;p&gt;If you see errors like &lt;code&gt;x509: certificate signed by unknown authority&lt;/code&gt; in Kiali logs:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Verify the ConfigMap exists and has the correct name&lt;/li&gt;
&lt;li&gt;Check that the key is exactly &lt;code&gt;additional-ca-bundle.pem&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Ensure the certificate is in valid PEM format&lt;/li&gt;
&lt;li&gt;Verify the CA certificate is the correct one (the root or intermediate CA that signed the service&amp;rsquo;s certificate)&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;verifying-the-configmap-is-mounted&#34;&gt;Verifying the ConfigMap is Mounted&lt;/h3&gt;
&lt;p&gt;Check that the ConfigMap is properly mounted in the Kiali pod:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;kubectl &lt;span style=&#34;color:#204a87&#34;&gt;exec&lt;/span&gt; -n istio-system deploy/kiali -- ls -la /kiali-cabundle/
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;You should see your CA bundle file listed.&lt;/p&gt;
&lt;h3 id=&#34;testing-certificate-chain&#34;&gt;Testing Certificate Chain&lt;/h3&gt;
&lt;p&gt;To verify your CA certificate is correct, you can test it outside of Kiali:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Get the server&amp;#39;s certificate chain&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;openssl s_client -connect prometheus.istio-system:9090 -showcerts
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Verify against your CA&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;openssl verify -CAfile your-ca.pem server-cert.pem
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
      </description>
    </item>
    
    <item>
      <title>Docs: Kiali Chatbot tools (schemas)</title>
      <link>https://v2-24.kiali.io/docs/ai/kiali-chatbot-tools/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://v2-24.kiali.io/docs/ai/kiali-chatbot-tools/</guid>
      <description>
        
        
        &lt;p&gt;Kiali Chatbot uses &lt;strong&gt;internal MCP-style tools&lt;/strong&gt; (implemented inside Kiali) to fetch live data and perform safe actions. These are &lt;strong&gt;not&lt;/strong&gt; external MCP server tools.&lt;/p&gt;
&lt;p&gt;The tool &lt;strong&gt;input schemas&lt;/strong&gt; are defined in Kiali under &lt;code&gt;kiali/ai/mcp/tools/*.yaml&lt;/code&gt;. The tool &lt;strong&gt;outputs&lt;/strong&gt; are JSON structures returned by the Kiali backend and consumed by the model and/or UI.&lt;/p&gt;
&lt;h3 id=&#34;tool-list&#34;&gt;Tool list&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;get_action_ui&lt;/code&gt;: returns UI navigation actions (buttons/links).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;get_citations&lt;/code&gt;: returns documentation links relevant to the user query.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;get_mesh_graph&lt;/code&gt;: returns mesh health/topology summaries (and supporting raw payloads).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;get_resource_detail&lt;/code&gt;: returns service/workload details or lists (same payload shapes as existing Kiali APIs).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;get_pod_performance&lt;/code&gt;: returns usage vs requests/limits summary (CPU/memory).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;get_traces&lt;/code&gt;: returns a compact trace summary (bottlenecks/errors).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;get_logs&lt;/code&gt;: returns workload/pod logs with optional filtering.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;manage_istio_config&lt;/code&gt;: list/get/create/patch/delete Istio objects (with a confirmation gate for sensitive actions).&lt;/li&gt;
&lt;/ul&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Prerequisites</title>
      <link>https://v2-24.kiali.io/docs/installation/installation-guide/prerequisites/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://v2-24.kiali.io/docs/installation/installation-guide/prerequisites/</guid>
      <description>
        
        
        &lt;h2 id=&#34;istio&#34;&gt;Istio&lt;/h2&gt;
&lt;p&gt;Before you install Kiali you must have already installed Istio along with its
telemetry storage addon (e.g. Prometheus). You might also consider installing
Istio&amp;rsquo;s optional tracing addon (e.g. Tempo) and optional Grafana addon but
those are not required by Kiali. Refer to the
&lt;a href=&#34;https://istio.io/docs/setup/getting-started&#34;&gt;Istio documentation&lt;/a&gt; for details.&lt;/p&gt;
&lt;h3 id=&#34;optionally-enable-the-debug-interface&#34;&gt;Optionally Enable the Debug Interface&lt;/h3&gt;
&lt;p&gt;Like &lt;code&gt;istioctl&lt;/code&gt;, Kiali can make use of Istio&amp;rsquo;s port 8080 &amp;ldquo;Debug Interface&amp;rdquo; API. Despite the naming, this is required for accessing the status of the proxies.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;ENABLE_DEBUG_ON_HTTP&lt;/code&gt; setting controls the relevant API access. Istio suggests to disable this for security, but Kiali requires &lt;code&gt;ENABLE_DEBUG_ON_HTTP=true&lt;/code&gt;,
which is the default.&lt;/p&gt;
&lt;p&gt;If you prefer not to enable the Istio API then certain Kiali features will be unavailable. If disabled, set &lt;code&gt;spec.external_services.istio.istio_api_enabled: false&lt;/code&gt; in the Kiali CR.&lt;/p&gt;
&lt;p&gt;For more information, see the &lt;a href=&#34;https://istio.io/latest/docs/ops/best-practices/security/#control-plane&#34;&gt;Istio documentation&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&#34;version-compatibility&#34;&gt;Version Compatibility&lt;/h3&gt;


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


    It is always recommended that users run a supported version of Istio.
&lt;a href=&#34;https://istio.io/news/&#34;&gt;The Istio news page&lt;/a&gt; posts end-of-support (EOL)
dates. Supported Kiali versions include only the Kiali versions associated with
supported Istio versions.

&lt;/div&gt;

&lt;p&gt;Starting with Kiali v2.4, each Kiali release is tested against the &lt;a href=&#34;https://istio.io/latest/news&#34;&gt;currently supported Istio releases&lt;/a&gt;.
Unless otherwise noted, a Kiali release will be compatible with those releases. Older, untested Istio versions may also be compatible.
Known incompatibilities will be noted in the table below. Prior to Kiali v2.4, compatibility is guaranteed only against the latest
Istio release at the time. Although compatibility may be fine with other versions.&lt;/p&gt;


&lt;table border=&#34;1&#34;&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th style=&#34;width:50px&#34;&gt;Istio&lt;/th&gt;
      &lt;th style=&#34;width:200px&#34;&gt;Tested Kiali Versions&lt;/th&gt;
      &lt;th&gt;Notes&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    
    &lt;tr&gt;
      &lt;td&gt;1.28&lt;/td&gt;
      &lt;td&gt;2.17 and higher&lt;/td&gt;
      &lt;td&gt;&lt;/td&gt;
    &lt;/tr&gt;
    
    &lt;tr&gt;
      &lt;td&gt;1.27&lt;/td&gt;
      &lt;td&gt;2.12 and higher&lt;/td&gt;
      &lt;td&gt;&lt;/td&gt;
    &lt;/tr&gt;
    
    &lt;tr&gt;
      &lt;td&gt;1.26&lt;/td&gt;
      &lt;td&gt;2.9 and higher&lt;/td&gt;
      &lt;td&gt;&lt;/td&gt;
    &lt;/tr&gt;
    
    &lt;tr&gt;
      &lt;td&gt;1.25&lt;/td&gt;
      &lt;td&gt;2.5-2.16&lt;/td&gt;
      &lt;td&gt;Istio 1.25 is out of support.&lt;/td&gt;
    &lt;/tr&gt;
    
    &lt;tr&gt;
      &lt;td&gt;1.24&lt;/td&gt;
      &lt;td&gt;2.0-2.13&lt;/td&gt;
      &lt;td&gt;Istio 1.24 is out of support.&lt;/td&gt;
    &lt;/tr&gt;
    
    &lt;tr&gt;
      &lt;td&gt;1.23&lt;/td&gt;
      &lt;td&gt;1.87, 2.4-2.8&lt;/td&gt;
      &lt;td&gt;Istio 1.23 is out of support. Kiali v2 requires migration from Kiali v1 non-default namespace management (i.e. accessible_namespaces) to Discovery Selectors.&lt;/td&gt;
    &lt;/tr&gt;
    
    &lt;tr&gt;
      &lt;td&gt;1.22&lt;/td&gt;
      &lt;td&gt;1.87, 2.4-2.5&lt;/td&gt;
      &lt;td&gt;Istio 1.22 is out of support. Kiali v1.86 is the recommended minimum for Istio Ambient users. Starting with Kiali v1.86,.1 Istio v1.22 is required.&lt;/td&gt;
    &lt;/tr&gt;
    
    &lt;tr&gt;
      &lt;td&gt;1.21&lt;/td&gt;
      &lt;td&gt;1.81&lt;/td&gt;
      &lt;td&gt;Istio 1.21 is out of support.&lt;/td&gt;
    &lt;/tr&gt;
    
    &lt;tr&gt;
      &lt;td&gt;1.20&lt;/td&gt;
      &lt;td&gt;1.78&lt;/td&gt;
      &lt;td&gt;Istio 1.20 is out of support.&lt;/td&gt;
    &lt;/tr&gt;
    
    &lt;tr&gt;
      &lt;td&gt;1.19&lt;/td&gt;
      &lt;td&gt;1.75&lt;/td&gt;
      &lt;td&gt;Istio 1.19 is out of support.&lt;/td&gt;
    &lt;/tr&gt;
    
    &lt;tr&gt;
      &lt;td&gt;1.18&lt;/td&gt;
      &lt;td&gt;1.73&lt;/td&gt;
      &lt;td&gt;Istio 1.18 is out of support.&lt;/td&gt;
    &lt;/tr&gt;
    
    &lt;tr&gt;
      &lt;td&gt;1.17&lt;/td&gt;
      &lt;td&gt;1.66&lt;/td&gt;
      &lt;td&gt;Istio 1.17 is out of support. Avoid 1.63.0,1.63.1 due to a regression.&lt;/td&gt;
    &lt;/tr&gt;
    
    &lt;tr&gt;
      &lt;td&gt;1.16&lt;/td&gt;
      &lt;td&gt;1.63&lt;/td&gt;
      &lt;td&gt;Istio 1.16 is out of support. Avoid 1.62.0,1.63.0,1.63.1 due to a regression.&lt;/td&gt;
    &lt;/tr&gt;
    
    &lt;tr&gt;
      &lt;td&gt;1.15&lt;/td&gt;
      &lt;td&gt;1.59&lt;/td&gt;
      &lt;td&gt;Istio 1.15 is out of support.&lt;/td&gt;
    &lt;/tr&gt;
    
    &lt;tr&gt;
      &lt;td&gt;1.14&lt;/td&gt;
      &lt;td&gt;1.54&lt;/td&gt;
      &lt;td&gt;Istio 1.14 is out of support.&lt;/td&gt;
    &lt;/tr&gt;
    
    &lt;tr&gt;
      &lt;td&gt;1.13&lt;/td&gt;
      &lt;td&gt;1.49&lt;/td&gt;
      &lt;td&gt;Istio 1.13 is out of support.&lt;/td&gt;
    &lt;/tr&gt;
    
    &lt;tr&gt;
      &lt;td&gt;1.12&lt;/td&gt;
      &lt;td&gt;1.44&lt;/td&gt;
      &lt;td&gt;Istio 1.12 is out of support.&lt;/td&gt;
    &lt;/tr&gt;
    
    &lt;tr&gt;
      &lt;td&gt;1.11&lt;/td&gt;
      &lt;td&gt;1.41&lt;/td&gt;
      &lt;td&gt;Istio 1.11 is out of support.&lt;/td&gt;
    &lt;/tr&gt;
    
    &lt;tr&gt;
      &lt;td&gt;1.10&lt;/td&gt;
      &lt;td&gt;1.37&lt;/td&gt;
      &lt;td&gt;Istio 1.10 is out of support.&lt;/td&gt;
    &lt;/tr&gt;
    
    &lt;tr&gt;
      &lt;td&gt;1.9&lt;/td&gt;
      &lt;td&gt;1.33&lt;/td&gt;
      &lt;td&gt;Istio 1.9 is out of support.&lt;/td&gt;
    &lt;/tr&gt;
    
    &lt;tr&gt;
      &lt;td&gt;1.8&lt;/td&gt;
      &lt;td&gt;1.28&lt;/td&gt;
      &lt;td&gt;Istio 1.8 is out of support. It removes all support for mixer/telemetry V1, as does Kiali 1.26.0. Use earlier versions of Kiali for mixer.&lt;/td&gt;
    &lt;/tr&gt;
    
    &lt;tr&gt;
      &lt;td&gt;1.7&lt;/td&gt;
      &lt;td&gt;1.25&lt;/td&gt;
      &lt;td&gt;Istio 1.7 is out of support. Istioctl no longer installs Kiali. Use the Istio samples/addons for quick demo installs.&lt;/td&gt;
    &lt;/tr&gt;
    
    &lt;tr&gt;
      &lt;td&gt;1.6&lt;/td&gt;
      &lt;td&gt;1.21&lt;/td&gt;
      &lt;td&gt;Istio 1.6 is out of support. Kiali 1.17 is recommended for Istio &amp;lt; 1.6.&lt;/td&gt;
    &lt;/tr&gt;
    
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;br /&gt;
&lt;h2 id=&#34;openshift-service-mesh-version-compatibility&#34;&gt;OpenShift Service Mesh Version Compatibility&lt;/h2&gt;


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

    If you are running Red Hat OpenShift Service Mesh (OSSM), use only the bundled, supported version of Kiali.

&lt;/div&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;div style=&#34;width:100px&#34;&gt;OSSM&lt;/div&gt;&lt;/th&gt;
&lt;th&gt;&lt;div style=&#34;width:100px&#34;&gt;Kiali&lt;/div&gt;&lt;/th&gt;
&lt;th&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;3.2&lt;/td&gt;
&lt;td&gt;2.17&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3.1&lt;/td&gt;
&lt;td&gt;2.11&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3.0&lt;/td&gt;
&lt;td&gt;2.4&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2.6&lt;/td&gt;
&lt;td&gt;1.73&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2.5&lt;/td&gt;
&lt;td&gt;1.73&lt;/td&gt;
&lt;td&gt;OSSM 2.5 is out of support&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2.4&lt;/td&gt;
&lt;td&gt;1.65&lt;/td&gt;
&lt;td&gt;OSSM 2.4 is out of support&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2.3&lt;/td&gt;
&lt;td&gt;1.57&lt;/td&gt;
&lt;td&gt;OSSM 2.3 is out of support&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2.2&lt;/td&gt;
&lt;td&gt;1.48&lt;/td&gt;
&lt;td&gt;OSSM 2.2 is out of support&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;br /&gt;
&lt;h2 id=&#34;openshift-console-plugin-ossmc-version-compatibility&#34;&gt;OpenShift Console Plugin (OSSMC) Version Compatibility&lt;/h2&gt;
&lt;p&gt;Kiali server with the same version of OSSMC plugin must be installed previously in your OpenShift cluster.&lt;/p&gt;


&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th style=&#34;width: 100px&#34;&gt;OpenShift&lt;/th&gt;
      &lt;th style=&#34;width: 120px&#34;&gt;OSSMC Min&lt;/th&gt;
      &lt;th style=&#34;width: 120px&#34;&gt;OSSMC Max&lt;/th&gt;
      &lt;th&gt;Notes&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    
    &lt;tr&gt;
      &lt;td&gt;4.19&amp;#43;&lt;/td&gt;
      &lt;td&gt;2.20&lt;/td&gt;
      &lt;td&gt;&lt;/td&gt;
      &lt;td&gt;&lt;/td&gt;
    &lt;/tr&gt;
    
    &lt;tr&gt;
      &lt;td&gt;4.15&amp;#43;&lt;/td&gt;
      &lt;td&gt;1.84&lt;/td&gt;
      &lt;td&gt;2.19&lt;/td&gt;
      &lt;td&gt;&lt;/td&gt;
    &lt;/tr&gt;
    
    &lt;tr&gt;
      &lt;td&gt;4.12-4.18&lt;/td&gt;
      &lt;td&gt;1.73&lt;/td&gt;
      &lt;td&gt;1.83&lt;/td&gt;
      &lt;td&gt;All OSSMC versions from v1.73 to v1.83 are only compatible with Kiali server v1.73&lt;/td&gt;
    &lt;/tr&gt;
    
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;br /&gt;
&lt;h2 id=&#34;maistra-version-compatibility&#34;&gt;Maistra Version Compatibility&lt;/h2&gt;


&lt;table border=&#34;1&#34;&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th style=&#34;width:80px&#34;&gt;Maistra&lt;/th&gt;
      &lt;th style=&#34;width:80px&#34;&gt;SMCP CR&lt;/th&gt;
      &lt;th style=&#34;width:70px&#34;&gt;Kiali&lt;/th&gt;
      &lt;th&gt;Notes&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    
    &lt;tr&gt;
      &lt;td&gt;2.6&lt;/td&gt;
      &lt;td&gt;2.6&lt;/td&gt;
      &lt;td&gt;1.73&lt;/td&gt;
      &lt;td&gt;Using Maistra 2.6 to install service mesh control plane 2.6 requires Kiali Operator v1.73. Other versions are not compatible.&lt;/td&gt;
    &lt;/tr&gt;
    
    &lt;tr&gt;
      &lt;td&gt;2.6&lt;/td&gt;
      &lt;td&gt;2.5&lt;/td&gt;
      &lt;td&gt;1.73&lt;/td&gt;
      &lt;td&gt;Using Maistra 2.6 to install service mesh control plane 2.5 requires Kiali Operator v1.73. Other versions are not compatible.&lt;/td&gt;
    &lt;/tr&gt;
    
    &lt;tr&gt;
      &lt;td&gt;2.6&lt;/td&gt;
      &lt;td&gt;2.4&lt;/td&gt;
      &lt;td&gt;1.65&lt;/td&gt;
      &lt;td&gt;Using Maistra 2.6 to install service mesh control plane 2.4 requires Kiali Operator v1.73. Other versions are not compatible.&lt;/td&gt;
    &lt;/tr&gt;
    
    &lt;tr&gt;
      &lt;td&gt;2.5&lt;/td&gt;
      &lt;td&gt;2.5&lt;/td&gt;
      &lt;td&gt;1.73&lt;/td&gt;
      &lt;td&gt;Using Maistra 2.5 to install service mesh control plane 2.5 requires Kiali Operator v1.73. Other versions are not compatible.&lt;/td&gt;
    &lt;/tr&gt;
    
    &lt;tr&gt;
      &lt;td&gt;2.5&lt;/td&gt;
      &lt;td&gt;2.4&lt;/td&gt;
      &lt;td&gt;1.65&lt;/td&gt;
      &lt;td&gt;Using Maistra 2.5 to install service mesh control plane 2.4 requires Kiali Operator v1.73. Other versions are not compatible.&lt;/td&gt;
    &lt;/tr&gt;
    
    &lt;tr&gt;
      &lt;td&gt;2.4&lt;/td&gt;
      &lt;td&gt;2.4&lt;/td&gt;
      &lt;td&gt;1.65&lt;/td&gt;
      &lt;td&gt;Using Maistra 2.4 to install service mesh control plane 2.4 requires Kiali Operator v1.65. Other versions are not compatible.&lt;/td&gt;
    &lt;/tr&gt;
    
    &lt;tr&gt;
      &lt;td&gt;n/a&lt;/td&gt;
      &lt;td&gt;2.3&lt;/td&gt;
      &lt;td&gt;n/a&lt;/td&gt;
      &lt;td&gt;Service mesh control plane 2.3 is out of support.&lt;/td&gt;
    &lt;/tr&gt;
    
    &lt;tr&gt;
      &lt;td&gt;n/a&lt;/td&gt;
      &lt;td&gt;2.2&lt;/td&gt;
      &lt;td&gt;n/a&lt;/td&gt;
      &lt;td&gt;Service mesh control plane 2.2 is out of support.&lt;/td&gt;
    &lt;/tr&gt;
    
    &lt;tr&gt;
      &lt;td&gt;n/a&lt;/td&gt;
      &lt;td&gt;2.1&lt;/td&gt;
      &lt;td&gt;n/a&lt;/td&gt;
      &lt;td&gt;Service mesh control plane 2.1 is out of support.&lt;/td&gt;
    &lt;/tr&gt;
    
    &lt;tr&gt;
      &lt;td&gt;n/a&lt;/td&gt;
      &lt;td&gt;2.0&lt;/td&gt;
      &lt;td&gt;n/a&lt;/td&gt;
      &lt;td&gt;Service mesh control plane 2.0 is out of support.&lt;/td&gt;
    &lt;/tr&gt;
    
    &lt;tr&gt;
      &lt;td&gt;n/a&lt;/td&gt;
      &lt;td&gt;1.1&lt;/td&gt;
      &lt;td&gt;n/a&lt;/td&gt;
      &lt;td&gt;Service mesh control plane 1.1 is out of support.&lt;/td&gt;
    &lt;/tr&gt;
    
    &lt;tr&gt;
      &lt;td&gt;n/a&lt;/td&gt;
      &lt;td&gt;1.0&lt;/td&gt;
      &lt;td&gt;n/a&lt;/td&gt;
      &lt;td&gt;Service mesh control plane 1.0 is out of support.&lt;/td&gt;
    &lt;/tr&gt;
    
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;br /&gt;
&lt;h2 id=&#34;supported-browsers&#34;&gt;Browser Compatibility&lt;/h2&gt;
&lt;p&gt;Kiali requires a modern web browser and supports the last two versions of Chrome, Firefox, Safari or Edge.&lt;/p&gt;
&lt;h2 id=&#34;hardware-requirements&#34;&gt;Hardware Requirements&lt;/h2&gt;
&lt;p&gt;Any machine capable of running a Kubernetes based cluster should also be able
to run Kiali.&lt;/p&gt;
&lt;p&gt;However, Kiali tends to grow in resource usage as your cluster grows. Usually
the more namespaces and workloads you have in your cluster, the more memory you
will need to allocate to Kiali.&lt;/p&gt;
&lt;h2 id=&#34;platform-specific-requirements&#34;&gt;Platform-specific requirements&lt;/h2&gt;
&lt;h3 id=&#34;openshift&#34;&gt;OpenShift&lt;/h3&gt;
&lt;p&gt;If you are installing on OpenShift, you must grant the &lt;code&gt;cluster-admin&lt;/code&gt; role to the user that is installing Kiali. If OpenShift is installed locally on the machine you are using, the following command should log you in as user &lt;code&gt;system:admin&lt;/code&gt; which has this &lt;code&gt;cluster-admin&lt;/code&gt; role:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ oc login -u system:admin
&lt;/code&gt;&lt;/pre&gt;

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


    For most commands listed on this documentation, the Kubernetes CLI command &lt;code&gt;kubectl&lt;/code&gt; is used to interact with the cluster environment. On OpenShift you can simply replace &lt;code&gt;kubectl&lt;/code&gt; with &lt;code&gt;oc&lt;/code&gt;, unless otherwise noted.

&lt;/div&gt;

&lt;h3 id=&#34;google-prereqs&#34;&gt;Google Cloud Private Cluster&lt;/h3&gt;
&lt;p&gt;Private clusters on Google Cloud have network restrictions. Kiali needs your cluster&amp;rsquo;s firewall to allow access from the Kubernetes API to the Istio Control Plane namespace, for both the &lt;code&gt;8080&lt;/code&gt; and &lt;code&gt;15000&lt;/code&gt; ports.&lt;/p&gt;
&lt;p&gt;To review the master access firewall rule:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;gcloud compute firewall-rules list --filter=&amp;#34;name~gke-${CLUSTER_NAME}-[0-9a-z]*-master&amp;#34;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;To replace the existing rule and allow master access:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;gcloud compute firewall-rules update &amp;lt;firewall-rule-name&amp;gt; --allow &amp;lt;previous-ports&amp;gt;,tcp:8080,tcp:15000
&lt;/code&gt;&lt;/pre&gt;

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


    Istio deployments on private clusters also need extra ports to be opened. Check the &lt;a href=&#34;https://istio.io/latest/docs/setup/platform-setup/gke/&#34;&gt;Istio installation page for GKE&lt;/a&gt; to see all the extra installation steps for this platform.

&lt;/div&gt;


      </description>
    </item>
    
    <item>
      <title>Docs: ACM Observability</title>
      <link>https://v2-24.kiali.io/docs/configuration/multi-cluster/acm-observability/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://v2-24.kiali.io/docs/configuration/multi-cluster/acm-observability/</guid>
      <description>
        
        
        

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


    &lt;strong&gt;OpenShift Only&lt;/strong&gt;: This guide is specifically for Red Hat OpenShift environments using Red Hat Advanced Cluster Management (ACM) for Kubernetes. ACM is an OpenShift-specific product.

&lt;/div&gt;

&lt;h2 id=&#34;overview&#34;&gt;Overview&lt;/h2&gt;
&lt;p&gt;Red Hat Advanced Cluster Management (ACM) provides centralized observability for multi-cluster OpenShift environments through its Observability Service. When ACM Observability is enabled, metrics from all managed clusters (including the hub cluster itself) are collected and aggregated into a central Thanos-based storage system.&lt;/p&gt;
&lt;p&gt;Kiali can query these aggregated metrics either through ACM&amp;rsquo;s external Observatorium API (using mTLS authentication) or directly through internal Thanos services. This guide explains both options, with detailed steps for the Observatorium API approach.&lt;/p&gt;
&lt;h2 id=&#34;architecture&#34;&gt;Architecture&lt;/h2&gt;
&lt;h3 id=&#34;components&#34;&gt;Components&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;On the Hub Cluster:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;ACM Observability Service&lt;/strong&gt;: Centralized observability platform
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Observatorium API&lt;/strong&gt;: External HTTPS endpoint with mTLS authentication&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Thanos&lt;/strong&gt;: Metrics storage and query engine (Query, Query Frontend, Receive, Store)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;On Managed Clusters (Hub + Spokes):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;User Workload Monitoring (UWM)&lt;/strong&gt;: OpenShift&amp;rsquo;s Prometheus for user workloads&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;PodMonitor/ServiceMonitor&lt;/strong&gt;: Scrape Istio metrics from:
&lt;ul&gt;
&lt;li&gt;Sidecar proxies (in application namespaces)&lt;/li&gt;
&lt;li&gt;Control plane (istiod in istio-system)&lt;/li&gt;
&lt;li&gt;Ztunnel (in ztunnel namespace, for L4 metrics in Ambient mode)&lt;/li&gt;
&lt;li&gt;Waypoint proxies (in application namespaces, for L7 metrics in Ambient mode)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Metrics Allowlist ConfigMaps&lt;/strong&gt;: Define which metrics ACM should collect&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Metrics Collector&lt;/strong&gt;: Runs on each managed cluster and pushes its Prometheus metrics to the hub cluster&amp;rsquo;s Thanos every 5 minutes (default)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Kiali Deployment Location:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Kiali can be deployed on &lt;strong&gt;any cluster with network access&lt;/strong&gt; to:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;The hub cluster&amp;rsquo;s metrics backend (Observatorium API or internal Thanos services)&lt;/li&gt;
&lt;li&gt;Each managed cluster&amp;rsquo;s Kubernetes API (for workload and configuration data)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Common deployment locations:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Hub cluster&lt;/strong&gt; (recommended): Co-located with ACM for lower latency metric queries and simplified networking. Can use internal Thanos services (HTTP) or external Observatorium API (HTTPS). Typically requires external deployment mode (&lt;code&gt;ignore_home_cluster: true&lt;/code&gt;) since the hub usually doesn&amp;rsquo;t run mesh workloads or an Istio control plane.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Spoke/managed cluster&lt;/strong&gt;: Kiali deployed alongside the mesh workloads or the Istio control plane. Must use external Observatorium API route.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Separate management cluster&lt;/strong&gt;: Kiali deployed externally in dedicated &amp;ldquo;external deployment&amp;rdquo; mode (see &lt;a href=&#34;https://v2-24.kiali.io/docs/configuration/multi-cluster/external/&#34;&gt;External Kiali&lt;/a&gt;). Must use external Observatorium API route.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This guide assumes Kiali is deployed on the hub cluster in external deployment mode, but the configuration applies to any deployment location.&lt;/p&gt;
&lt;h3 id=&#34;metrics-flow&#34;&gt;Metrics Flow&lt;/h3&gt;
&lt;p&gt;There are two independent flows:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ingestion (managed cluster → hub):&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Istio data plane components&lt;/strong&gt; (sidecars, ztunnel, or waypoint proxies) expose metrics at &lt;code&gt;:15020/stats/prometheus&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;User Workload Monitoring Prometheus&lt;/strong&gt; scrapes those metrics (typically every 30s).&lt;/li&gt;
&lt;li&gt;The &lt;strong&gt;ACM observability collector/agent&lt;/strong&gt; on the managed cluster reads from Prometheus and ships metrics to the hub (typically every 5 minutes).&lt;/li&gt;
&lt;li&gt;The hub stores them in &lt;strong&gt;Thanos Receive/Store&lt;/strong&gt; and serves them through &lt;strong&gt;Thanos Query Frontend&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Query (Kiali → hub):&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Kiali can query metrics through either of these paths:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Via Observatorium API Route (HTTPS with mTLS):&lt;/em&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Kiali&lt;/strong&gt; queries the external Observatorium API route.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Observatorium&lt;/strong&gt; forwards the request to Thanos Query Frontend.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Thanos Query Frontend&lt;/strong&gt; reads from Thanos Store/Receive and returns the result back through Observatorium to Kiali.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;em&gt;Via Internal Thanos Service (HTTP):&lt;/em&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Kiali&lt;/strong&gt; queries the internal Thanos Query Frontend service directly within the cluster, bypassing Observatorium.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Expected Latency&lt;/strong&gt;: 5-6 minutes from traffic generation to visibility in Kiali due to the 5-minute (default) push interval.&lt;/p&gt;
&lt;h2 id=&#34;prerequisites&#34;&gt;Prerequisites&lt;/h2&gt;
&lt;h3 id=&#34;1-acm-observability-service&#34;&gt;1. ACM Observability Service&lt;/h3&gt;
&lt;p&gt;ACM MultiClusterObservability must be installed on the hub cluster:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Verify ACM Observability is running&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;oc get mco observability
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Check Observatorium API route&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;oc get route observatorium-api -n open-cluster-management-observability
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;2-user-workload-monitoring&#34;&gt;2. User Workload Monitoring&lt;/h3&gt;
&lt;p&gt;User Workload Monitoring must be enabled on all clusters (hub and spokes):&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Enable UWM by editing cluster-monitoring-config&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;oc -n openshift-monitoring edit configmap cluster-monitoring-config
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Add:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# data:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;#   config.yaml: |&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;#     enableUserWorkload: true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Verify UWM pods are running&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;oc get pods -n openshift-user-workload-monitoring
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;See: &lt;a href=&#34;https://docs.redhat.com/en/documentation/monitoring_stack_for_red_hat_openshift/4.20/html-single/configuring_user_workload_monitoring/index&#34;&gt;Enabling monitoring for user-defined projects&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;3-istio-metrics-collection&#34;&gt;3. Istio Metrics Collection&lt;/h3&gt;
&lt;p&gt;Create ServiceMonitor and PodMonitor resources to collect Istio metrics. The &lt;strong&gt;PodMonitor for sidecars&lt;/strong&gt; must be created in &lt;strong&gt;each namespace&lt;/strong&gt; with Istio sidecars because OpenShift monitoring ignores &lt;code&gt;namespaceSelector&lt;/code&gt; in these resources. The &lt;strong&gt;ServiceMonitor for &lt;code&gt;istiod&lt;/code&gt;&lt;/strong&gt; is created once in &lt;code&gt;istio-system&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;ServiceMonitor for istiod&lt;/strong&gt; (in istio-system):&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;apiVersion&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;monitoring.coreos.com/v1&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;kind&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;ServiceMonitor&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;metadata&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;istiod-monitor&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;namespace&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;istio-system&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;spec&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;targetLabels&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;- &lt;span style=&#34;color:#000&#34;&gt;app&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;selector&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;matchLabels&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;istio&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;pilot&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;endpoints&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;- &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;port&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;http-monitoring&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;interval&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;30s&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;PodMonitor for Istio proxies&lt;/strong&gt; (must be applied in every mesh namespace):&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;apiVersion&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;monitoring.coreos.com/v1&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;kind&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;PodMonitor&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;metadata&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;istio-proxies-monitor&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;namespace&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;&amp;lt;your-mesh-namespace&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;spec&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;selector&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;matchExpressions&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;- &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;key&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;istio-prometheus-ignore&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;operator&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;DoesNotExist&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;podMetricsEndpoints&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;- &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;path&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;/stats/prometheus&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;interval&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;30s&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;relabelings&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;- &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;action&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;keep&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;sourceLabels&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;__meta_kubernetes_pod_container_name&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;]&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;regex&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;istio-proxy&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;- &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;action&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;keep&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;sourceLabels&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;__meta_kubernetes_pod_annotationpresent_prometheus_io_scrape&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;]&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;- &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;action&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;replace&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;regex&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;(\d+);(([A-Fa-f0-9]{1,4}::?){1,7}[A-Fa-f0-9]{1,4})&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;replacement&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;[$2]:$1&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;sourceLabels&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;__meta_kubernetes_pod_annotation_prometheus_io_port&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;__meta_kubernetes_pod_ip&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;]&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;targetLabel&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;__address__&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;- &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;action&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;replace&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;regex&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;(\d+);((([0-9]+?)(\.|$)){4})&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;replacement&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;$2:$1&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;sourceLabels&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;__meta_kubernetes_pod_annotation_prometheus_io_port&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;__meta_kubernetes_pod_ip&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;]&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;targetLabel&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;__address__&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;- &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;sourceLabels&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;__meta_kubernetes_pod_label_app_kubernetes_io_name&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;__meta_kubernetes_pod_label_app&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;]&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;separator&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;targetLabel&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;app&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;action&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;replace&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;regex&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;(.+);.*|.*;(.+)&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;replacement&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;${1}${2}&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;- &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;sourceLabels&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;__meta_kubernetes_pod_label_app_kubernetes_io_version&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;__meta_kubernetes_pod_label_version&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;]&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;separator&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;targetLabel&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;version&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;action&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;replace&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;regex&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;(.+);.*|.*;(.+)&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;replacement&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;${1}${2}&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;- &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;sourceLabels&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;__meta_kubernetes_namespace&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;]&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;action&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;replace&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;targetLabel&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;namespace&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;- &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;action&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;replace&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;replacement&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&amp;lt;your-mesh-identification-string&amp;gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;targetLabel&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;mesh_id&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;See: &lt;a href=&#34;https://docs.redhat.com/en/documentation/red_hat_openshift_service_mesh/3.0/html-single/observability/index&#34;&gt;Configuring OpenShift Monitoring with Service Mesh&lt;/a&gt;&lt;/p&gt;
&lt;h4 id=&#34;ambient-mode-metrics&#34;&gt;Ambient Mode Metrics&lt;/h4&gt;
&lt;p&gt;If you are using Istio&amp;rsquo;s &lt;strong&gt;Ambient mode&lt;/strong&gt; instead of (or in addition to) sidecar mode, you need additional PodMonitors to collect metrics from the Ambient data plane components.&lt;/p&gt;
&lt;h5 id=&#34;understanding-ambient-mode-metrics&#34;&gt;Understanding Ambient Mode Metrics&lt;/h5&gt;
&lt;p&gt;Ambient mode uses a layered architecture with two metric sources:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ztunnel (L4 metrics only)&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Runs as a DaemonSet (namespace varies by installation)&lt;/li&gt;
&lt;li&gt;Handles all L4 traffic for pods enrolled in ambient mode&lt;/li&gt;
&lt;li&gt;Produces TCP-level metrics:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;istio_tcp_sent_bytes_total&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;istio_tcp_received_bytes_total&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;istio_tcp_connections_opened_total&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;istio_tcp_connections_closed_total&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Does not produce HTTP metrics&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Waypoint proxies (L7 metrics)&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Run as Deployments in application namespaces&lt;/li&gt;
&lt;li&gt;Optional L7 proxies deployed per-namespace or per-service&lt;/li&gt;
&lt;li&gt;Produce full HTTP metrics (same as sidecars):
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;istio_requests_total&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;istio_request_duration_milliseconds_*&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;istio_request_bytes_*&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;istio_response_bytes_*&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Plus all TCP metrics listed above&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you only use ztunnel (no waypoints), Kiali will show TCP traffic but not HTTP-level details like response codes or latency histograms.&lt;/p&gt;
&lt;h5 id=&#34;podmonitor-for-ztunnel&#34;&gt;PodMonitor for Ztunnel&lt;/h5&gt;
&lt;p&gt;Create a PodMonitor in the namespace where ztunnel runs. Ztunnel pods expose metrics using the same interface as sidecars:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Container name: &lt;code&gt;istio-proxy&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Annotation: &lt;code&gt;prometheus.io/scrape: &amp;quot;true&amp;quot;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Metrics path: &lt;code&gt;/stats/prometheus&lt;/code&gt; on port 15020&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Because ztunnel uses the same metrics interface, you can use the same PodMonitor configuration shown in the &lt;a href=&#34;#3-istio-metrics-collection&#34;&gt;Istio Metrics Collection&lt;/a&gt; section above, changing only the &lt;code&gt;namespace&lt;/code&gt; field to match your ztunnel namespace.&lt;/p&gt;


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


    &lt;strong&gt;Note&lt;/strong&gt;: The ztunnel namespace location depends on your Istio installation method. Verify your ztunnel namespace with: &lt;code&gt;oc get pods -l app=ztunnel -A&lt;/code&gt;

&lt;/div&gt;

&lt;h5 id=&#34;podmonitor-for-waypoint-proxies&#34;&gt;PodMonitor for Waypoint Proxies&lt;/h5&gt;
&lt;p&gt;Create a PodMonitor in &lt;strong&gt;each namespace with a waypoint&lt;/strong&gt;. Waypoint pods also expose metrics using the same interface as sidecars:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Container name: &lt;code&gt;istio-proxy&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Annotation: &lt;code&gt;prometheus.io/scrape: &amp;quot;true&amp;quot;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Metrics path: &lt;code&gt;/stats/prometheus&lt;/code&gt; on port 15020&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Because waypoints use the same metrics interface, you can use the same PodMonitor configuration shown in the &lt;a href=&#34;#3-istio-metrics-collection&#34;&gt;Istio Metrics Collection&lt;/a&gt; section above.&lt;/p&gt;
&lt;h3 id=&#34;4-metrics-allowlist-configuration&#34;&gt;4. Metrics Allowlist Configuration&lt;/h3&gt;
&lt;p&gt;ACM only collects metrics that are explicitly allowlisted. For Istio metrics to be collected, create a ConfigMap named &lt;code&gt;observability-metrics-custom-allowlist&lt;/code&gt; in the &lt;strong&gt;source namespace&lt;/strong&gt; (see note below) with key &lt;code&gt;uwl_metrics_list.yaml&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;apiVersion&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;v1&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;kind&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;ConfigMap&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;metadata&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;observability-metrics-custom-allowlist&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;namespace&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;&amp;lt;your-mesh-namespace&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;data&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;uwl_metrics_list.yaml&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;|&lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;    names:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;    # Core Istio metrics below. For additional metrics that Kiali uses,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;    # see: https://kiali.io/docs/faq/general/#requiredmetrics
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;    #
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;    # L7 (HTTP) metrics - from sidecars and waypoint proxies
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;    - istio_requests_total
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;    - istio_request_duration_milliseconds_bucket
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;    - istio_request_duration_milliseconds_sum
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;    - istio_request_duration_milliseconds_count
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;    - istio_request_bytes_bucket
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;    - istio_request_bytes_sum
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;    - istio_request_bytes_count
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;    - istio_response_bytes_bucket
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;    - istio_response_bytes_sum
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;    - istio_response_bytes_count
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;    # L4 (TCP) metrics - from sidecars, waypoint proxies, AND ztunnel
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;    - istio_tcp_sent_bytes_total
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;    - istio_tcp_received_bytes_total
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;    - istio_tcp_connections_opened_total
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;    - istio_tcp_connections_closed_total&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Critical&lt;/strong&gt;: The ConfigMap must be in the &lt;strong&gt;source namespace&lt;/strong&gt; where metrics originate (e.g., &lt;code&gt;istio-system&lt;/code&gt;, application namespaces), &lt;strong&gt;NOT&lt;/strong&gt; in &lt;code&gt;open-cluster-management-observability&lt;/code&gt;.&lt;/p&gt;


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


    &lt;strong&gt;Ambient Mode&lt;/strong&gt;: The same allowlist works for all Istio data plane components. However, ztunnel only produces TCP metrics (&lt;code&gt;istio_tcp_*&lt;/code&gt;), so HTTP metrics in the allowlist will have no data from ztunnel. Waypoints produce both TCP and HTTP metrics, same as sidecars. Create the allowlist ConfigMap in each namespace where you have a PodMonitor, including the namespace where ztunnel runs and any namespaces with waypoint proxies.

&lt;/div&gt;

&lt;p&gt;See: &lt;a href=&#34;https://docs.redhat.com/en/documentation/red_hat_advanced_cluster_management_for_kubernetes/2.12/html-single/observability/index#adding-user-workload-metrics&#34;&gt;Adding user workload metrics&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;configuring-kiali-for-acm-observability&#34;&gt;Configuring Kiali for ACM Observability&lt;/h2&gt;
&lt;h3 id=&#34;choosing-between-observatorium-api-and-internal-thanos-services&#34;&gt;Choosing Between Observatorium API and Internal Thanos Services&lt;/h3&gt;
&lt;p&gt;You have two options for connecting Kiali to ACM metrics:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Option 1: Observatorium API Route (HTTPS with mTLS)&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;external_services&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;prometheus&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;url&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;https://observatorium-api-&amp;lt;namespace&amp;gt;.&amp;lt;apps-domain&amp;gt;/api/metrics/v1/default&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;auth&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;type&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;none&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;cert_file&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;secret:acm-observability-certs:tls.crt&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;key_file&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;secret:acm-observability-certs:tls.key&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Provides:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;HTTPS with mTLS authentication and encryption&lt;/li&gt;
&lt;li&gt;External access (can be accessed from outside the cluster if needed)&lt;/li&gt;
&lt;li&gt;RBAC enforcement via Observatorium&lt;/li&gt;
&lt;li&gt;Multi-tenant isolation&lt;/li&gt;
&lt;li&gt;Requires certificate setup&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Option 2: Internal Thanos Service (HTTP)&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;external_services&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;prometheus&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;url&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;http://observability-thanos-query-frontend.open-cluster-management-observability.svc:9090&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;auth&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;type&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;none&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Provides:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Simpler setup (no certificates required)&lt;/li&gt;
&lt;li&gt;Direct access to Thanos (potentially lower latency)&lt;/li&gt;
&lt;li&gt;Internal cluster networking only&lt;/li&gt;
&lt;li&gt;HTTP only (no encryption between Kiali and Thanos)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Recommendation&lt;/strong&gt;: Use the Observatorium API for production environments where you want encrypted connections and proper authentication. Use internal services for development/testing environments where simplicity is preferred or where network security is already provided by the cluster infrastructure.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The rest of this guide focuses on the Observatorium API approach with mTLS authentication.&lt;/strong&gt;&lt;/p&gt;
&lt;h3 id=&#34;step-1-obtain-mtls-certificates-from-acm&#34;&gt;Step 1: Obtain mTLS Certificates from ACM&lt;/h3&gt;
&lt;p&gt;ACM automatically creates long-lived client certificates (1 year validity) for accessing the Observatorium API. Extract these from the hub cluster:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Extract client certificate (for authentication)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;oc get secret observability-grafana-certs &lt;span style=&#34;color:#4e9a06&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&lt;/span&gt;  -n open-cluster-management-observability &lt;span style=&#34;color:#4e9a06&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&lt;/span&gt;  -o &lt;span style=&#34;color:#000&#34;&gt;jsonpath&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;{.data.tls\.crt}&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;|&lt;/span&gt; base64 -d &amp;gt; tls.crt
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Extract client key (for authentication)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;oc get secret observability-grafana-certs &lt;span style=&#34;color:#4e9a06&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&lt;/span&gt;  -n open-cluster-management-observability &lt;span style=&#34;color:#4e9a06&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&lt;/span&gt;  -o &lt;span style=&#34;color:#000&#34;&gt;jsonpath&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;{.data.tls\.key}&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;|&lt;/span&gt; base64 -d &amp;gt; tls.key
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: These certificates are created automatically when ACM MultiClusterObservability is deployed and are already trusted by the Observatorium API.&lt;/p&gt;


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


    &lt;p&gt;&lt;strong&gt;ACM Version Note&lt;/strong&gt;: Secret names may vary depending on your ACM version. Before proceeding, verify the secret exists:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;oc get secrets -n open-cluster-management-observability &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;|&lt;/span&gt; grep -i cert
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;If &lt;code&gt;observability-grafana-certs&lt;/code&gt; doesn&amp;rsquo;t exist, look for similar secrets containing client certificates.&lt;/p&gt;


&lt;/div&gt;

&lt;h3 id=&#34;step-2-extract-server-ca-certificate&#34;&gt;Step 2: Extract Server CA Certificate&lt;/h3&gt;
&lt;p&gt;Extract the CA certificate that signed the Observatorium API server certificate. This is used by Kiali to validate the server&amp;rsquo;s TLS certificate.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;First, identify which CA issued the server certificate:&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Get the Observatorium API route hostname&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000&#34;&gt;HOST&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;$(&lt;/span&gt;oc get route observatorium-api -n open-cluster-management-observability -o &lt;span style=&#34;color:#000&#34;&gt;jsonpath&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;{.spec.host}&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Check who issued the server certificate&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87&#34;&gt;echo&lt;/span&gt; &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;|&lt;/span&gt; openssl s_client -connect &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;HOST&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;:443&amp;#34;&lt;/span&gt; -servername &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;HOST&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt; -showcerts 2&amp;gt;/dev/null &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;|&lt;/span&gt; openssl x509 -noout -issuer
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Example output:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;issuer=C=US, O=Red Hat, Inc., CN=observability-server-ca-certificate
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Then, extract the matching CA certificate based on the issuer CN:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;If the issuer CN is &lt;code&gt;observability-server-ca-certificate&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;oc get secret observability-server-ca-certs &lt;span style=&#34;color:#4e9a06&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&lt;/span&gt;  -n open-cluster-management-observability &lt;span style=&#34;color:#4e9a06&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&lt;/span&gt;  -o &lt;span style=&#34;color:#000&#34;&gt;jsonpath&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;{.data.ca\.crt}&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;|&lt;/span&gt; base64 -d &amp;gt; server-ca.crt
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;If the issuer CN is &lt;code&gt;observability-client-ca-certificate&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;oc get secret observability-client-ca-certs &lt;span style=&#34;color:#4e9a06&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&lt;/span&gt;  -n open-cluster-management-observability &lt;span style=&#34;color:#4e9a06&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&lt;/span&gt;  -o &lt;span style=&#34;color:#000&#34;&gt;jsonpath&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;{.data.ca\.crt}&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;|&lt;/span&gt; base64 -d &amp;gt; server-ca.crt
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: Both secrets are in the &lt;code&gt;open-cluster-management-observability&lt;/code&gt; namespace. The exact CA used may vary depending on your ACM version and configuration.&lt;/p&gt;
&lt;h3 id=&#34;step-3-create-kubernetes-resources&#34;&gt;Step 3: Create Kubernetes Resources&lt;/h3&gt;


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


    &lt;strong&gt;Note&lt;/strong&gt;: &lt;code&gt;&amp;lt;kiali-namespace&amp;gt;&lt;/code&gt; and &lt;code&gt;${KIALI_NAMESPACE}&lt;/code&gt; are used as a placeholder for the namespace where Kiali is deployed. This is commonly &lt;code&gt;istio-system&lt;/code&gt; but is not required to be - replace with your actual Kiali namespace.

&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Create the mTLS certificate secret&lt;/strong&gt; in Kiali&amp;rsquo;s namespace:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000&#34;&gt;KIALI_NAMESPACE&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;istio-system&amp;#34;&lt;/span&gt;  &lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Replace with your Kiali namespace&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;oc create secret generic acm-observability-certs &lt;span style=&#34;color:#4e9a06&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&lt;/span&gt;  -n &lt;span style=&#34;color:#4e9a06&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;KIALI_NAMESPACE&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;}&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&lt;/span&gt;  --from-file&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;tls.crt&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;tls.crt &lt;span style=&#34;color:#4e9a06&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&lt;/span&gt;  --from-file&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;tls.key&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;tls.key
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Create the CA bundle ConfigMap&lt;/strong&gt; in Kiali&amp;rsquo;s namespace:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;oc create configmap kiali-cabundle &lt;span style=&#34;color:#4e9a06&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&lt;/span&gt;  -n &lt;span style=&#34;color:#4e9a06&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;KIALI_NAMESPACE&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;}&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&lt;/span&gt;  --from-file&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;additional-ca-bundle.pem&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;server-ca.crt
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

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


    &lt;strong&gt;On OpenShift&lt;/strong&gt;: The Kiali Operator (or Helm chart) automatically creates a separate ConfigMap named &lt;code&gt;kiali-cabundle-openshift&lt;/code&gt; for the OpenShift service CA, then uses a projected volume to combine it with your custom &lt;code&gt;kiali-cabundle&lt;/code&gt; ConfigMap. You only need to create/manage &lt;code&gt;kiali-cabundle&lt;/code&gt; with your ACM CA - the system handles merging.

&lt;/div&gt;

&lt;p&gt;For more details about CA bundle configuration, see &lt;a href=&#34;https://v2-24.kiali.io/docs/configuration/p8s-jaeger-grafana/tls-configuration/&#34;&gt;TLS Configuration&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&#34;step-4-get-observatorium-api-url&#34;&gt;Step 4: Get Observatorium API URL&lt;/h3&gt;
&lt;p&gt;Find the external Observatorium API route URL:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;oc get route observatorium-api &lt;span style=&#34;color:#4e9a06&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&lt;/span&gt;  -n open-cluster-management-observability &lt;span style=&#34;color:#4e9a06&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&lt;/span&gt;  -o &lt;span style=&#34;color:#000&#34;&gt;jsonpath&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;https://{.spec.host}/api/metrics/v1/default&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The URL format is: &lt;code&gt;https://observatorium-api-&amp;lt;namespace&amp;gt;.&amp;lt;apps-domain&amp;gt;/api/metrics/v1/default&lt;/code&gt;&lt;/p&gt;
&lt;h3 id=&#34;step-5-configure-kiali&#34;&gt;Step 5: Configure Kiali&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Using Kiali Operator (Kiali CR):&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;spec&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;external_services&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;prometheus&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Use Observatorium API route&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;url&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&amp;lt;observatorium-api-url&amp;gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;auth&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;type&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;none &lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# mTLS authentication at TLS layer, no Authorization header&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;cert_file&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;secret:acm-observability-certs:tls.crt&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;key_file&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;secret:acm-observability-certs:tls.key&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Enable Thanos proxy mode&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;thanos_proxy&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;enabled&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;true&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;retention_period&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;14d&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;scrape_interval&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;5m&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Using Server Helm Chart:&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000&#34;&gt;OBSERVATORIUM_API_URL&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;$(&lt;/span&gt;oc get route observatorium-api -n open-cluster-management-observability -o &lt;span style=&#34;color:#000&#34;&gt;jsonpath&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;https://{.spec.host}/api/metrics/v1/default&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;)&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;helm install kiali kiali-server &lt;span style=&#34;color:#4e9a06&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&lt;/span&gt;  --namespace &lt;span style=&#34;color:#4e9a06&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;KIALI_NAMESPACE&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;}&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&lt;/span&gt;  --set external_services.prometheus.url&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;OBSERVATORIUM_API_URL&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&lt;/span&gt;  --set external_services.prometheus.auth.type&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;none&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&lt;/span&gt;  --set external_services.prometheus.auth.cert_file&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;secret:acm-observability-certs:tls.crt&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&lt;/span&gt;  --set external_services.prometheus.auth.key_file&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;secret:acm-observability-certs:tls.key&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&lt;/span&gt;  --set external_services.prometheus.thanos_proxy.enabled&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;true&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&lt;/span&gt;  --set external_services.prometheus.thanos_proxy.retention_period&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;14d&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&lt;/span&gt;  --set external_services.prometheus.thanos_proxy.scrape_interval&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;5m&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;important-configuration-notes&#34;&gt;Important Configuration Notes&lt;/h2&gt;
&lt;h3 id=&#34;metrics-latency&#34;&gt;Metrics Latency&lt;/h3&gt;
&lt;p&gt;ACM collects metrics from each cluster&amp;rsquo;s Prometheus and pushes to Thanos &lt;strong&gt;every 5 minutes&lt;/strong&gt; (default). This means, by default, there is a 5-6 minute delay before new metrics appear in Kiali. This latency is inherent to ACM&amp;rsquo;s architecture and applies to all managed clusters.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: This interval is configurable via the &lt;code&gt;spec.observabilityAddonSpec.interval&lt;/code&gt; field (in seconds) in the &lt;code&gt;MultiClusterObservability&lt;/code&gt; CR on the hub cluster.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Initial warm-up period&lt;/strong&gt;: After deploying a new application, it takes approximately &lt;strong&gt;twice the collection interval&lt;/strong&gt; before data appears in Kiali&amp;rsquo;s graph and metrics tab. This is because Kiali uses PromQL &lt;code&gt;rate()&lt;/code&gt; functions which require at least two data points to compute a result, and with ACM&amp;rsquo;s collection interval, two data points take at least two collection cycles to accumulate. For example, with the default 5-minute interval, expect a ~10-minute warm-up period. After this initial warm-up, all time ranges in Kiali should display data normally. However, keep in mind that the most recent data visible in Kiali will always be at least one collection interval old, since metrics must complete a full collection cycle before they appear in Thanos.&lt;/p&gt;
&lt;h3 id=&#34;thanos-proxy-mode&#34;&gt;Thanos Proxy Mode&lt;/h3&gt;
&lt;p&gt;Enable &lt;code&gt;thanos_proxy&lt;/code&gt; when using ACM/Thanos:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;external_services&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;prometheus&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;thanos_proxy&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;enabled&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;true&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;retention_period&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;14d&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Should match your ACM Thanos retention&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;scrape_interval&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;5m&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;   &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Must match ACM&amp;#39;s metrics collection interval&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;When &lt;code&gt;enabled: true&lt;/code&gt;, Kiali uses the configured &lt;code&gt;scrape_interval&lt;/code&gt; and &lt;code&gt;retention_period&lt;/code&gt; values directly, rather than querying Prometheus&amp;rsquo;s &lt;code&gt;/api/v1/status/config&lt;/code&gt; and &lt;code&gt;/api/v1/status/runtimeinfo&lt;/code&gt; endpoints to discover them. This is necessary because Thanos does not expose these Prometheus configuration endpoints.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Why these values matter:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;scrape_interval&lt;/code&gt;&lt;/strong&gt;: Kiali&amp;rsquo;s UI uses this value to compute PromQL &lt;code&gt;rate()&lt;/code&gt; intervals and query step sizes. The rate interval must be large enough to contain at least two data points for &lt;code&gt;rate()&lt;/code&gt; to produce results. With ACM, data points arrive in Thanos at the ACM collection interval (default 5 minutes), &lt;strong&gt;not&lt;/strong&gt; at the local Prometheus scrape interval (typically 15-30 seconds). If &lt;code&gt;scrape_interval&lt;/code&gt; is set too low (e.g., &amp;ldquo;30s&amp;rdquo;), the computed rate windows will be too narrow to capture two ACM data points, causing Kiali&amp;rsquo;s metrics tab to show empty charts even though data exists in Thanos.&lt;/li&gt;
&lt;/ul&gt;


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


    &lt;strong&gt;Critical&lt;/strong&gt;: Set &lt;code&gt;scrape_interval&lt;/code&gt; to match the &lt;strong&gt;ACM metrics collection interval&lt;/strong&gt; (default &lt;code&gt;&amp;quot;5m&amp;quot;&lt;/code&gt;), not the local Prometheus scrape interval. The ACM collection interval is configured via &lt;code&gt;spec.observabilityAddonSpec.interval&lt;/code&gt; in the &lt;code&gt;MultiClusterObservability&lt;/code&gt; CR on the hub cluster. If you have customized this value, set &lt;code&gt;scrape_interval&lt;/code&gt; to match.

&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;retention_period&lt;/code&gt;&lt;/strong&gt;: Used to limit time range queries to available data. ACM defaults to 365d retention when &lt;code&gt;spec.advanced.retentionConfig&lt;/code&gt; is not explicitly configured in the &lt;code&gt;MultiClusterObservability&lt;/code&gt; CR. If using the default, set &lt;code&gt;retention_period&lt;/code&gt; to &amp;ldquo;365d&amp;rdquo;. If configuring custom retention, use at least 10d minimum (a Thanos requirement for downsampling to function). Always match &lt;code&gt;retention_period&lt;/code&gt; to your actual ACM retention configuration. The &amp;ldquo;14d&amp;rdquo; value shown in examples here is used for demonstration.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;multi-cluster-setup&#34;&gt;Multi-Cluster Setup&lt;/h2&gt;
&lt;p&gt;For multi-cluster service mesh deployments with ACM:&lt;/p&gt;
&lt;h3 id=&#34;1-metrics-aggregation-handled-by-acm&#34;&gt;1. Metrics Aggregation (Handled by ACM)&lt;/h3&gt;
&lt;p&gt;ACM automatically aggregates metrics from all managed clusters. Each cluster&amp;rsquo;s metrics include a &lt;code&gt;cluster&lt;/code&gt; label with the cluster name (the &lt;code&gt;metadata.name&lt;/code&gt; of the ManagedCluster resource). To get a list of all the clusters managed by ACM, run &lt;code&gt;oc get managedcluster&lt;/code&gt; on the hub cluster.&lt;/p&gt;
&lt;p&gt;Kiali can filter metrics by cluster using &lt;code&gt;query_scope&lt;/code&gt;. The &lt;code&gt;query_scope&lt;/code&gt; configuration adds label filters to every Prometheus query:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;external_services&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;prometheus&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Example 1: Filter to a single cluster&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;query_scope&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;cluster&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;east-cluster&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Example 2: Filter by mesh_id and cluster&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;query_scope&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;mesh_id&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;mesh-1&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;cluster&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;east-cluster&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Each key-value pair in &lt;code&gt;query_scope&lt;/code&gt; is added as &lt;code&gt;key=&amp;quot;value&amp;quot;&lt;/code&gt; to every query. For example, &lt;code&gt;cluster: &amp;quot;east-cluster&amp;quot;&lt;/code&gt; adds &lt;code&gt;cluster=&amp;quot;east-cluster&amp;quot;&lt;/code&gt; to all PromQL queries.&lt;/p&gt;
&lt;h3 id=&#34;2-remote-cluster-access-for-workloadconfig-data&#34;&gt;2. Remote Cluster Access (For Workload/Config Data)&lt;/h3&gt;
&lt;p&gt;While metrics come from ACM&amp;rsquo;s central Thanos, Kiali still needs direct API access to each cluster for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Workload and service discovery&lt;/li&gt;
&lt;li&gt;Istio configuration validation&lt;/li&gt;
&lt;li&gt;Kubernetes resource details&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Create remote cluster secrets as described in the &lt;a href=&#34;https://v2-24.kiali.io/docs/configuration/multi-cluster/&#34;&gt;multi-cluster setup guide&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&#34;3-external-deployment-model&#34;&gt;3. External Deployment Model&lt;/h3&gt;
&lt;p&gt;For multi-cluster with ACM, if you deploy Kiali on the hub cluster (or on a separate management cluster), you will typically want to run Kiali in &lt;strong&gt;external deployment mode&lt;/strong&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;clustering&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;ignore_home_cluster&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;true&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Kiali is external to mesh&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;kubernetes_config&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;cluster_name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&amp;lt;management-cluster-name&amp;gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Unique name for the cluster where Kiali runs&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;See the &lt;a href=&#34;https://v2-24.kiali.io/docs/configuration/multi-cluster/external/&#34;&gt;External Kiali&lt;/a&gt; guide for complete external deployment instructions.&lt;/p&gt;
&lt;h2 id=&#34;certificate-management&#34;&gt;Certificate Management&lt;/h2&gt;
&lt;h3 id=&#34;automatic-rotation&#34;&gt;Automatic Rotation&lt;/h3&gt;
&lt;p&gt;ACM-issued certificates (stored in the &lt;code&gt;observability-grafana-certs&lt;/code&gt; secret in the ACM observability namespace) have 1-year validity and are automatically rotated by ACM before expiration. When certificates are rotated:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;ACM updates the &lt;code&gt;observability-grafana-certs&lt;/code&gt; secret in &lt;code&gt;open-cluster-management-observability&lt;/code&gt; namespace&lt;/li&gt;
&lt;li&gt;You must update the &lt;code&gt;acm-observability-certs&lt;/code&gt; secret in Kiali&amp;rsquo;s namespace with the new certificate data. Options include:
&lt;ul&gt;
&lt;li&gt;Re-run the extraction commands from &lt;a href=&#34;#step-1-obtain-mtls-certificates-from-acm&#34;&gt;Step 1: Obtain mTLS Certificates from ACM&lt;/a&gt; manually&lt;/li&gt;
&lt;li&gt;Use an ACM &lt;code&gt;ConfigurationPolicy&lt;/code&gt; with hub cluster templating to automatically distribute and update the secret to the cluster where Kiali runs (see &lt;a href=&#34;https://docs.redhat.com/en/documentation/red_hat_advanced_cluster_management_for_kubernetes/2.13/html/governance/policy-deployment&#34;&gt;ACM Governance documentation&lt;/a&gt; for details)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Kubernetes updates the mounted files in Kiali pod (within 60 seconds after the secret update)&lt;/li&gt;
&lt;li&gt;Kiali automatically uses new certificates on next connection (no pod restart needed)&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;using-custom-certificates&#34;&gt;Using Custom Certificates&lt;/h3&gt;
&lt;p&gt;If you prefer to use your own certificate infrastructure instead of ACM&amp;rsquo;s certificates:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Generate/obtain certificates signed by a CA trusted by ACM Observatorium API&lt;/li&gt;
&lt;li&gt;Configure ACM to trust your CA (consult ACM documentation)&lt;/li&gt;
&lt;li&gt;Create the &lt;code&gt;acm-observability-certs&lt;/code&gt; secret with your certificates&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;verification&#34;&gt;Verification&lt;/h2&gt;
&lt;h3 id=&#34;check-certificate-configuration&#34;&gt;Check Certificate Configuration&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Verify secret exists&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;oc get secret acm-observability-certs -n &lt;span style=&#34;color:#4e9a06&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;KIALI_NAMESPACE&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Check certificate expiration&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;oc get secret acm-observability-certs -n &lt;span style=&#34;color:#4e9a06&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;KIALI_NAMESPACE&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;}&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&lt;/span&gt;  -o &lt;span style=&#34;color:#000&#34;&gt;jsonpath&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;{.data.tls\.crt}&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;|&lt;/span&gt; base64 -d &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;|&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&lt;/span&gt;  openssl x509 -noout -enddate
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Verify CA bundle&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;oc get configmap kiali-cabundle -n &lt;span style=&#34;color:#4e9a06&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;KIALI_NAMESPACE&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;}&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&lt;/span&gt;  -o &lt;span style=&#34;color:#000&#34;&gt;jsonpath&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;{.data.additional-ca-bundle\.pem}&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;|&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&lt;/span&gt;  openssl x509 -noout -subject
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;check-kiali-logs&#34;&gt;Check Kiali Logs&lt;/h3&gt;
&lt;p&gt;Verify certificates are loaded successfully:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;oc logs -n &lt;span style=&#34;color:#4e9a06&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;KIALI_NAMESPACE&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;}&lt;/span&gt; deployment/kiali &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;|&lt;/span&gt; grep -i &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;credential\|certificate&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Expected output (at &amp;#34;info&amp;#34; log level):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# INF Loaded [1] valid CA certificate(s) from [/kiali-cabundle/additional-ca-bundle.pem]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;#&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Additional output (at &amp;#34;debug&amp;#34; log level):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# DBG Credential file path configured: [/kiali-override-secrets/prometheus-cert/tls.crt]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# DBG Credential file path configured: [/kiali-override-secrets/prometheus-key/tls.key]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;test-metrics&#34;&gt;Test Metrics&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Generate mesh traffic&lt;/strong&gt; in one of your managed clusters&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Wait for the initial warm-up period&lt;/strong&gt; (approximately twice the ACM collection interval; default ~10 minutes) for metrics to propagate to Thanos and for enough data points to accumulate for rate calculations. The graph may appear sooner (after ~5 minutes).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Access Kiali UI&lt;/strong&gt; and navigate to a workload&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Verify metrics&lt;/strong&gt; appear in the Metrics tab and traffic graph&lt;/li&gt;
&lt;/ol&gt;


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


    &lt;p&gt;&lt;strong&gt;Ambient Mode&lt;/strong&gt;: If you are using Ambient mode:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Ztunnel-only traffic&lt;/strong&gt; (no waypoint): You&amp;rsquo;ll see TCP metrics and traffic edges in the graph, but HTTP details (response codes, latency) will not be available.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Traffic through waypoints&lt;/strong&gt;: You&amp;rsquo;ll see full L7 metrics, same as sidecar mode.&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;

&lt;h3 id=&#34;verify-metrics-in-thanos-directly&#34;&gt;Verify Metrics in Thanos Directly&lt;/h3&gt;
&lt;p&gt;Test that metrics exist in Thanos (from within the hub cluster). The following are different queries you can run to obtain metrics data from the backend metric datastore used by ACM.&lt;/p&gt;


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


    &lt;strong&gt;Note&lt;/strong&gt;: These commands use &lt;code&gt;jq&lt;/code&gt; to format JSON output. If you don&amp;rsquo;t have jq installed, simply omit &lt;code&gt;| jq .&lt;/code&gt; to see the full, unfiltered and raw JSON.

&lt;/div&gt;

&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# List available metric names (Kiali uses istio_*, pilot_*, and envoy_* metrics)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;oc get --raw &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;/api/v1/namespaces/open-cluster-management-observability/services/http:observability-thanos-query-frontend:9090/proxy/api/v1/label/__name__/values&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;|&lt;/span&gt; jq -r &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;.data[] | select(startswith(&amp;#34;istio_&amp;#34;) or startswith(&amp;#34;pilot_&amp;#34;) or startswith(&amp;#34;envoy_&amp;#34;))&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Count timeseries for key Istio metrics (shows which metrics have data and how many unique timeseries)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;oc get --raw &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;/api/v1/namespaces/open-cluster-management-observability/services/http:observability-thanos-query-frontend:9090/proxy/api/v1/query?query=count%20by%20(__name__)%20({__name__=~%22istio_requests_total|istio_tcp.*total%22})&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;|&lt;/span&gt; jq -r &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;.data.result[] | &amp;#34;\(.metric.__name__): \(.value[1])&amp;#34;&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Query Istio request metrics with full details (limited to first result to show structure)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;oc get --raw &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;/api/v1/namespaces/open-cluster-management-observability/services/http:observability-thanos-query-frontend:9090/proxy/api/v1/query?query=istio_requests_total&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;|&lt;/span&gt; jq &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;.data.result |= .[0:1]&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;troubleshooting&#34;&gt;Troubleshooting&lt;/h2&gt;
&lt;h3 id=&#34;empty-graph-or-no-metrics&#34;&gt;Empty Graph or No Metrics&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Symptom&lt;/strong&gt;: Kiali shows an empty graph, &amp;ldquo;No metrics&amp;rdquo; in the metrics tab, or both.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Causes and Solutions&lt;/strong&gt;:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;scrape_interval&lt;/code&gt; too low&lt;/strong&gt;: If &lt;code&gt;thanos_proxy.scrape_interval&lt;/code&gt; is set lower than the ACM collection interval (e.g., &amp;ldquo;30s&amp;rdquo; instead of &amp;ldquo;5m&amp;rdquo;), Kiali&amp;rsquo;s rate calculations will use windows too narrow to capture enough data points from Thanos&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Solution&lt;/strong&gt;: Set &lt;code&gt;thanos_proxy.scrape_interval&lt;/code&gt; to match the ACM collection interval (default &amp;ldquo;5m&amp;rdquo;). See &lt;a href=&#34;#thanos-proxy-mode&#34;&gt;Thanos Proxy Mode&lt;/a&gt; for details&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Still in warm-up period&lt;/strong&gt;: After deploying a new application, it takes approximately twice the ACM collection interval (~10 minutes by default) before enough data points exist for rate calculations&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Solution&lt;/strong&gt;: Wait for the warm-up period to elapse&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Metrics not allowlisted&lt;/strong&gt;: ACM doesn&amp;rsquo;t collect metrics by default&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Solution&lt;/strong&gt;: Create &lt;code&gt;observability-metrics-custom-allowlist&lt;/code&gt; ConfigMap with &lt;code&gt;uwl_metrics_list.yaml&lt;/code&gt; key in &lt;strong&gt;source namespace&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;PodMonitor missing&lt;/strong&gt;: Prometheus not scraping Istio data plane components&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Solution&lt;/strong&gt;: Create &lt;code&gt;istio-proxies-monitor&lt;/code&gt; PodMonitor in &lt;strong&gt;each mesh namespace&lt;/strong&gt; (including the ztunnel namespace and namespaces with waypoint proxies if using Ambient mode)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;UWM not enabled&lt;/strong&gt;: User Workload Monitoring not configured&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Solution&lt;/strong&gt;: Enable &lt;code&gt;enableUserWorkload: true&lt;/code&gt; in &lt;code&gt;cluster-monitoring-config&lt;/code&gt; ConfigMap in &lt;code&gt;openshift-monitoring&lt;/code&gt; namespace&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Missing source/destination labels&lt;/strong&gt;: The graph builds its topology from workload and namespace labels in the metrics. Verify Istio metrics have proper labels&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Namespace not selected&lt;/strong&gt;: Ensure the namespace is selected in the graph&amp;rsquo;s namespace dropdown&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Query scope mismatch&lt;/strong&gt;: Check &lt;code&gt;query_scope&lt;/code&gt; cluster names match actual &lt;code&gt;cluster&lt;/code&gt; label values&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;See also the &lt;a href=&#34;https://v2-24.kiali.io/docs/faq/graph/#emptygraph&#34;&gt;Why is my graph empty?&lt;/a&gt; FAQ for additional troubleshooting information.&lt;/p&gt;
&lt;h3 id=&#34;tlscertificate-errors&#34;&gt;TLS/Certificate Errors&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Symptom&lt;/strong&gt;: Kiali logs show &amp;ldquo;x509: certificate signed by unknown authority&amp;rdquo; or &amp;ldquo;tls: bad certificate&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Solutions&lt;/strong&gt;:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Verify CA bundle&lt;/strong&gt;: Ensure &lt;code&gt;kiali-cabundle&lt;/code&gt; ConfigMap has the correct CA&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;oc get configmap kiali-cabundle -n &lt;span style=&#34;color:#4e9a06&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;KIALI_NAMESPACE&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;}&lt;/span&gt; -o yaml
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Check certificate chain&lt;/strong&gt;: Verify client cert is signed by expected CA&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;oc get secret acm-observability-certs -n &lt;span style=&#34;color:#4e9a06&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;KIALI_NAMESPACE&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;}&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&lt;/span&gt;  -o &lt;span style=&#34;color:#000&#34;&gt;jsonpath&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;{.data.tls\.crt}&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;|&lt;/span&gt; base64 -d &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;|&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&lt;/span&gt;  openssl x509 -noout -issuer
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Verify projected volume&lt;/strong&gt;: Check both ConfigMaps are mounted&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;oc &lt;span style=&#34;color:#204a87&#34;&gt;exec&lt;/span&gt; -n &lt;span style=&#34;color:#4e9a06&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;KIALI_NAMESPACE&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;}&lt;/span&gt; deploy/kiali -- ls -la /kiali-cabundle/
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Should show: additional-ca-bundle.pem, service-ca.crt&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;connection-refused--timeout&#34;&gt;Connection Refused / Timeout&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Symptom&lt;/strong&gt;: Kiali cannot reach Observatorium API&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Solutions&lt;/strong&gt;:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Verify route exists&lt;/strong&gt;:
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;oc get route observatorium-api -n open-cluster-management-observability
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Check ACM is ready&lt;/strong&gt; (should return &amp;ldquo;True&amp;rdquo;):
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;oc get mco observability -o &lt;span style=&#34;color:#000&#34;&gt;jsonpath&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;{.status.conditions[?(@.type==&amp;#34;Ready&amp;#34;)].status}{&amp;#34;\n&amp;#34;}&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Test connectivity&lt;/strong&gt; (should return &amp;ldquo;OK&amp;rdquo;):
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;oc get --raw &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;/api/v1/namespaces/open-cluster-management-observability/services/http:observability-thanos-query-frontend:9090/proxy/-/ready&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Check NetworkPolicies&lt;/strong&gt;: Ensure no policies block egress from Kiali&amp;rsquo;s namespace&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;ambient-mode-no-http-metrics&#34;&gt;Ambient Mode: No HTTP Metrics&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Symptom&lt;/strong&gt;: Ambient mode workloads show TCP traffic in Kiali but no HTTP metrics (response codes, latency)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Possible causes&lt;/strong&gt;:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;No waypoint deployed&lt;/strong&gt;: Ztunnel only provides L4 (TCP) metrics. Deploy a waypoint proxy for L7 (HTTP) visibility.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Missing waypoint PodMonitor&lt;/strong&gt;: Even with a waypoint, metrics won&amp;rsquo;t be collected without a PodMonitor:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Verify waypoint pod exists: &lt;code&gt;oc get pods -n &amp;lt;namespace&amp;gt; -l gateway.networking.k8s.io/gateway-class-name=istio-waypoint&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Create PodMonitor in the waypoint&amp;rsquo;s namespace (same config as sidecar PodMonitor)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Missing allowlist in waypoint namespace&lt;/strong&gt;: Create a ConfigMap with the name &lt;code&gt;observability-metrics-custom-allowlist&lt;/code&gt; in the namespace where the waypoint runs (see &lt;a href=&#34;#4-metrics-allowlist-configuration&#34;&gt;Metrics Allowlist Configuration&lt;/a&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;ambient-mode-no-ztunnel-metrics&#34;&gt;Ambient Mode: No Ztunnel Metrics&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Symptom&lt;/strong&gt;: Ambient mode workloads show no traffic at all in Kiali&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Possible causes&lt;/strong&gt;:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Missing ztunnel PodMonitor&lt;/strong&gt;: Create &lt;code&gt;istio-proxies-monitor&lt;/code&gt; PodMonitor in the ztunnel namespace&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Wrong ztunnel namespace&lt;/strong&gt;: Verify ztunnel location: &lt;code&gt;oc get pods -l app=ztunnel -A&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Missing allowlist&lt;/strong&gt;: Create a ConfigMap with the name &lt;code&gt;observability-metrics-custom-allowlist&lt;/code&gt; in the ztunnel namespace (see &lt;a href=&#34;#4-metrics-allowlist-configuration&#34;&gt;Metrics Allowlist Configuration&lt;/a&gt;)&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;reference&#34;&gt;Reference&lt;/h2&gt;
&lt;p&gt;This example represents a fully configured Kiali installation using ACM Observability via the Observatorium API with mTLS:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;apiVersion&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;kiali.io/v1alpha1&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;kind&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;Kiali&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;metadata&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;kiali&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;namespace&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;&amp;lt;kiali-namespace&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;spec&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;clustering&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;ignore_home_cluster&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;true&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# External deployment&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;kubernetes_config&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;cluster_name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&amp;lt;management-cluster-name&amp;gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;external_services&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;prometheus&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;url&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&amp;lt;observatorium-api-url&amp;gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;auth&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;type&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;none&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;cert_file&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;secret:acm-observability-certs:tls.crt&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;key_file&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;secret:acm-observability-certs:tls.key&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;thanos_proxy&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;enabled&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;true&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;retention_period&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;14d&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;scrape_interval&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;5m&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Required Kubernetes resources:&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000&#34;&gt;---&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# mTLS client certificates (from ACM)&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Data extracted from Secret observability-grafana-certs in namespace open-cluster-management-observability&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;apiVersion&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;v1&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;kind&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;Secret&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;metadata&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;acm-observability-certs&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;namespace&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;&amp;lt;kiali-namespace&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;type&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;Opaque&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;data&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;tls.crt&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;&amp;lt;base64-encoded-certificate&amp;gt; &lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# From observability-grafana-certs secret, tls.crt key&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;tls.key&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;&amp;lt;base64-encoded-key&amp;gt;         &lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# From observability-grafana-certs secret, tls.key key&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;---&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Server CA trust (from ACM)&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Data extracted from Secret observability-client-ca-certs (or observability-server-ca-certs) in namespace open-cluster-management-observability&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;apiVersion&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;v1&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;kind&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;ConfigMap&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;metadata&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;kiali-cabundle&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;namespace&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;&amp;lt;kiali-namespace&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;data&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;additional-ca-bundle.pem&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;|&lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;    -----BEGIN CERTIFICATE-----
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;    &amp;lt;ACM Observability CA certificate&amp;gt;  # From ca.crt or tls.crt key (see Step 2 for extraction commands)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;    -----END CERTIFICATE-----&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;additional-resources&#34;&gt;Additional Resources&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://docs.redhat.com/en/documentation/red_hat_advanced_cluster_management_for_kubernetes/2.12/html-single/observability/index&#34;&gt;Red Hat ACM Observability Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://docs.redhat.com/en/documentation/monitoring_stack_for_red_hat_openshift/4.20/html-single/configuring_user_workload_monitoring/&#34;&gt;Configuring User Workload Monitoring&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://docs.redhat.com/en/documentation/red_hat_openshift_service_mesh/3.0/html-single/observability/&#34;&gt;OpenShift Service Mesh Observability&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://istio.io/latest/docs/reference/config/metrics/&#34;&gt;Istio Standard Metrics&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://istio.io/latest/docs/ambient/usage/troubleshoot-ztunnel/&#34;&gt;Troubleshoot Ztunnel Connectivity (Istio Ambient Mode)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.redhat.com/en/blog/how-your-grafana-can-fetch-metrics-from-red-hat-advanced-cluster-management-observability-observatorium-and-thanos&#34;&gt;Connecting Grafana to ACM Observability (Red Hat Blog)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://v2-24.kiali.io/docs/configuration/multi-cluster/&#34;&gt;Kiali Multi-cluster Setup&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://v2-24.kiali.io/docs/configuration/multi-cluster/external/&#34;&gt;External Kiali Deployment&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://v2-24.kiali.io/docs/configuration/p8s-jaeger-grafana/tls-configuration/&#34;&gt;TLS Configuration&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Header strategy</title>
      <link>https://v2-24.kiali.io/docs/configuration/authentication/header/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://v2-24.kiali.io/docs/configuration/authentication/header/</guid>
      <description>
        
        
        &lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;The &lt;code&gt;header&lt;/code&gt; strategy assumes a reverse proxy is in front of Kiali, such as
OpenUnison or OAuth2 Proxy, injecting the user&amp;rsquo;s identity into each request to
Kiali as an &lt;code&gt;Authorization&lt;/code&gt; header. This token can be an OpenID Connect
token or any other token the cluster recognizes.&lt;/p&gt;
&lt;p&gt;In addition to a user token, the &lt;code&gt;header&lt;/code&gt; strategy supports impersonation
headers. If the impersonation headers are present in the request, then Kiali
will act on behalf of the user specified by the impersonation (assuming the
token supplied in the &lt;code&gt;Authorization&lt;/code&gt; header is authorized to do so).&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;header&lt;/code&gt; strategy allows for &lt;a href=&#34;https://v2-24.kiali.io/docs/configuration/rbac/&#34;&gt;namespace access control&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;header&lt;/code&gt; strategy is only supported for single cluster.&lt;/p&gt;
&lt;h2 id=&#34;set-up&#34;&gt;Set-up&lt;/h2&gt;
&lt;p&gt;The &lt;code&gt;header&lt;/code&gt; strategy will work with any Kubernetes cluster. The token provided
must be supported by that cluster. For instance, most &amp;ldquo;on-prem&amp;rdquo; clusters support
OpenID Connect, but cloud hosted clusters do not. For clusters that don&amp;rsquo;t support
a token, the &lt;a href=&#34;https://kubernetes.io/docs/reference/access-authn-authz/authentication/#user-impersonation&#34;&gt;impersonation&lt;/a&gt;
headers can be injected by the reverse proxy.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;spec&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;auth&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;strategy&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;header&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The &lt;code&gt;header&lt;/code&gt; strategy doesn&amp;rsquo;t have any additional configuration.&lt;/p&gt;
&lt;h2 id=&#34;http-header&#34;&gt;HTTP Header&lt;/h2&gt;
&lt;p&gt;The &lt;code&gt;header&lt;/code&gt; strategy looks for a token in the &lt;code&gt;Authorization&lt;/code&gt; HTTP header with the
&lt;code&gt;Bearer&lt;/code&gt; prefix. The HTTP header should look like:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Authorization: Bearer TOKEN
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Where &lt;code&gt;TOKEN&lt;/code&gt; is the appropriate token for your cluster. This &lt;code&gt;TOKEN&lt;/code&gt; will be
submitted to the API server via a &lt;code&gt;TokenReview&lt;/code&gt; to validate the token &lt;em&gt;ONLY&lt;/em&gt;
on the first access to Kiali. On subsequent calls the &lt;code&gt;TOKEN&lt;/code&gt; is passed through
directly to the API server.&lt;/p&gt;
&lt;h2 id=&#34;security-considerations&#34;&gt;Security Considerations&lt;/h2&gt;
&lt;h3 id=&#34;network-policies&#34;&gt;Network Policies&lt;/h3&gt;
&lt;p&gt;A policy should be put in place to make sure that the only &amp;ldquo;client&amp;rdquo; for Kiali is
the authenticating reverse proxy. This helps limit potential abuse and ensures
that the authenticating reverse proxy is the source of truth for who accessed
Kiali.&lt;/p&gt;
&lt;h3 id=&#34;short-lived-tokens&#34;&gt;Short Lived Tokens&lt;/h3&gt;
&lt;p&gt;The authenticating reverse proxy should inject a short lived token in the
&lt;code&gt;Authorization&lt;/code&gt; header. A shorter lived token is less likely to be abused if
leaked. Kiali will take whatever token is passed into the reqeuest, so as tokens
are regenerated Kiali will use the new token.&lt;/p&gt;
&lt;h3 id=&#34;impersonation&#34;&gt;Impersonation&lt;/h3&gt;
&lt;h4 id=&#34;tokenrequest-api&#34;&gt;TokenRequest API&lt;/h4&gt;
&lt;p&gt;The authenticating reverse proxy should use the TokenRequest API instead of static
&lt;code&gt;ServiceAccount&lt;/code&gt; tokens when possible while using impersonation. The
&lt;code&gt;ServiceAccount&lt;/code&gt; that can impersonate users and groups is privileged and having it
be short lived cuts down on the possibility of a token being leaked while it&amp;rsquo;s being
passed between different parts of the infrastructure.&lt;/p&gt;
&lt;h4 id=&#34;drop-incoming-impersonation-headers&#34;&gt;Drop Incoming Impersonation Headers&lt;/h4&gt;
&lt;p&gt;The authenticating proxy &lt;em&gt;MUST&lt;/em&gt; drop any headers it receives from a remote client
that match the impersonation headers. Not only do you want to make sure that the
authenticating proxy can&amp;rsquo;t be overriden on which user to authenticate, but also
what groups they&amp;rsquo;re a member of.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Install via Helm</title>
      <link>https://v2-24.kiali.io/docs/installation/installation-guide/install-with-helm/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://v2-24.kiali.io/docs/installation/installation-guide/install-with-helm/</guid>
      <description>
        
        
        &lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://helm.sh/&#34;&gt;Helm&lt;/a&gt; is a popular tool that lets you manage Kubernetes
applications. Applications are defined in a package named &lt;em&gt;Helm chart&lt;/em&gt;, which
contains all of the resources needed to run an application.&lt;/p&gt;
&lt;p&gt;Kiali has a Helm Charts Repository at
&lt;a href=&#34;https://kiali.org/helm-charts&#34;&gt;https://kiali.org/helm-charts&lt;/a&gt;. Two Helm
Charts are provided:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The &lt;code&gt;kiali-operator&lt;/code&gt; Helm Chart installs the Kiali operator which in turn
installs Kiali when you create a Kiali CR.&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;kiali-server&lt;/code&gt; Helm Chart installs a standalone Kiali without the need of
the Operator nor a Kiali CR.&lt;/li&gt;
&lt;/ul&gt;


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


    The &lt;code&gt;kiali-server&lt;/code&gt; Helm Chart does not provide all the functionality that the Kiali Operator
provides. Some features you read about in the documentation may only be available if
you install the Kiali Server using the Kiali Operator (see this &lt;a href=&#34;https://v2-24.kiali.io/docs/faq/installation/#what-is-the-difference-between-the-operator-and-the-server-helm-chart&#34;&gt;FAQ&lt;/a&gt; for details).
Therefore, although the &lt;code&gt;kiali-server&lt;/code&gt; Helm Chart
is actively maintained, it is not recommended and is only provided for convenience.
If using Helm, the recommended method is to install the &lt;code&gt;kiali-operator&lt;/code&gt; Helm Chart
and then create a Kiali CR to let the Operator deploy Kiali.

&lt;/div&gt;

&lt;p&gt;Make sure you have the &lt;code&gt;helm&lt;/code&gt; command available by following the
&lt;a href=&#34;https://helm.sh/docs/intro/install/&#34;&gt;Helm installation docs&lt;/a&gt;.&lt;/p&gt;


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


    Helm version 3.10 is the minimum required Helm version. Older versions will not work. Newer versions have not been tested.

&lt;/div&gt;

&lt;h2 id=&#34;adding-the-kiali-helm-charts-repository&#34;&gt;Adding the Kiali Helm Charts repository&lt;/h2&gt;
&lt;p&gt;Add the Kiali Helm Charts repository with the following command:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ helm repo add kiali https://kiali.org/helm-charts
&lt;/code&gt;&lt;/pre&gt;

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


    All &lt;code&gt;helm&lt;/code&gt; commands in this page assume that you added the Kiali Helm Charts repository as shown.

&lt;/div&gt;

&lt;p&gt;If you already added the repository, you may want to update your local cache to
fetch latest definitions by running:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ helm repo update
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;install-with-operator&#34;&gt;Installing Kiali using the Kiali operator&lt;/h2&gt;


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


    This installation method gives Kiali access to existing namespaces as
well as namespaces created later. See &lt;a href=&#34;https://v2-24.kiali.io/docs/configuration/namespace-management/&#34;&gt;Namespace Management&lt;/a&gt; for more information.

&lt;/div&gt;

&lt;p&gt;Once you&amp;rsquo;ve added the Kiali Helm Charts repository, you can install the latest
Kiali Operator along with the latest Kiali server by running the following
command:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ helm install \
    --set cr.create=true \
    --set cr.namespace=istio-system \
    --set cr.spec.auth.strategy=&amp;#34;anonymous&amp;#34; \
    --namespace kiali-operator \
    --create-namespace \
    kiali-operator \
    kiali/kiali-operator
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The &lt;code&gt;--namespace kiali-operator&lt;/code&gt; and &lt;code&gt;--create-namespace&lt;/code&gt; flags instructs to
create the &lt;code&gt;kiali-operator&lt;/code&gt; namespace (if needed), and deploy the Kiali
operator on it.  The &lt;code&gt;--set cr.create=true&lt;/code&gt; and &lt;code&gt;--set cr.namespace=istio-system&lt;/code&gt; flags instructs to create a Kiali CR in the
&lt;code&gt;istio-system&lt;/code&gt; namespace. Since the Kiali CR is created in advance, as soon as
the Kiali operator starts, it will process it to deploy Kiali. After Kiali has started,
you can access Kiali UI through &amp;lsquo;http://localhost:20001&amp;rsquo; by executing
&lt;code&gt;kubectl port-forward service/kiali -n istio-system 20001:20001&lt;/code&gt;
because of &lt;code&gt;--set cr.spec.auth.strategy=&amp;quot;anonymous&amp;quot;&lt;/code&gt;. But realize that anonymous mode will allow anyone to be able to see and use Kiali. If you wish to require users to authenticate themselves by logging into Kiali, use one of the other &lt;a href=&#34;https://v2-24.kiali.io/docs/configuration/authentication/&#34;&gt;auth strategies&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The Kiali Operator Helm Chart is configurable. Check available options and default values by running:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ helm show values kiali/kiali-operator
&lt;/code&gt;&lt;/pre&gt;

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


    You can pass the &lt;code&gt;--version X.Y.Z&lt;/code&gt; flag to the &lt;code&gt;helm install&lt;/code&gt; and &lt;code&gt;helm show values&lt;/code&gt; commands to work with a specific version of Kiali.

&lt;/div&gt;

&lt;p&gt;The &lt;code&gt;kiali-operator&lt;/code&gt; Helm Chart mirrors all settings of the Kiali CR as chart
values that you can configure using regular &lt;code&gt;--set&lt;/code&gt; flags. For example, the
Kiali CR has a &lt;code&gt;spec.server.web_root&lt;/code&gt; setting which you can configure in the
&lt;code&gt;kiali-operator&lt;/code&gt; Helm Chart by passing &lt;code&gt;--set cr.spec.server.web_root=/your-path&lt;/code&gt;
to the &lt;code&gt;helm install&lt;/code&gt; command.&lt;/p&gt;
&lt;p&gt;For more information about the Kiali CR, see the &lt;a href=&#34;https://v2-24.kiali.io/docs/installation/installation-guide/creating-updating-kiali-cr/&#34;&gt;Creating and updating the Kiali CR page&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&#34;operator-only-install&#34;&gt;Operator-Only Install&lt;/h3&gt;
&lt;p&gt;To install only the Kiali Operator, omit the &lt;code&gt;--set cr.create&lt;/code&gt; and
&lt;code&gt;--set cr.namespace&lt;/code&gt; flags of the helm command previously shown. For example:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ helm install \
    --namespace kiali-operator \
    --create-namespace \
    kiali-operator \
    kiali/kiali-operator
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This will omit creation of the Kiali CR, which you will need to &lt;a href=&#34;https://v2-24.kiali.io/docs/installation/installation-guide/creating-updating-kiali-cr/&#34;&gt;create later to install Kiali Server&lt;/a&gt;.  This
option is good if you plan to do large customizations to the installation.&lt;/p&gt;
&lt;h3 id=&#34;installing-multiple-instances-of-kiali&#34;&gt;Installing Multiple Instances of Kiali&lt;/h3&gt;
&lt;p&gt;By installing a single Kiali operator in your cluster, you can install multiple instances of Kiali by simply creating multiple Kiali CRs. For example, if you have two Istio control planes in namespaces &lt;code&gt;istio-system&lt;/code&gt; and &lt;code&gt;istio-system2&lt;/code&gt;, you can create a Kiali CR in each of those namespaces to install a Kiali instance in each control plane.&lt;/p&gt;
&lt;p&gt;If you wish to install multiple Kiali instances in the same namespace, or if you need the Kiali instance to have different resource names than the default of &lt;code&gt;kiali&lt;/code&gt;, you can specify &lt;code&gt;spec.deployment.instance_name&lt;/code&gt; in your Kiali CR. The value for that setting will be used to create a unique instance of Kiali using that instance name rather than the default &lt;code&gt;kiali&lt;/code&gt;. One use-case for this is to be able to have unique Kiali service names across multiple Kiali instances in order to be able to use certain routers/load balancers that require unique service names.&lt;/p&gt;


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


    Since the &lt;code&gt;spec.deployment.instance_name&lt;/code&gt; field is used for the Kiali resource names, including the Service name, you must ensure the value you assign this setting follows the &lt;a href=&#34;https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#dns-label-names&#34;&gt;Kubernetes DNS Label Name rules&lt;/a&gt;. If it does not, the operator will abort the installation. And note that because Kiali uses this as a prefix (it may append additional characters for some resource names) its length is limited to 40 characters.

&lt;/div&gt;

&lt;h2 id=&#34;standalone-kiali-installation&#34;&gt;Standalone Kiali installation&lt;/h2&gt;
&lt;p&gt;To install the Kiali Server without the operator, use the &lt;code&gt;kiali-server&lt;/code&gt; Helm Chart:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ helm install \
    --namespace istio-system \
    kiali-server \
    kiali/kiali-server
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The &lt;code&gt;kiali-server&lt;/code&gt; Helm Chart mirrors all settings of the Kiali CR as chart
values that you can configure using regular &lt;code&gt;--set&lt;/code&gt; flags. For example, the
Kiali CR has a &lt;code&gt;spec.server.web_fqdn&lt;/code&gt; setting which you can configure in the
&lt;code&gt;kiali-server&lt;/code&gt; Helm Chart by passing the &lt;code&gt;--set server.web_fqdn&lt;/code&gt; flag as
follows:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ helm install \
    --namespace istio-system \
    --set server.web_fqdn=example.com \
    kiali-server \
    kiali/kiali-server
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;upgrading-helm-installations&#34;&gt;Upgrading Helm installations&lt;/h2&gt;
&lt;p&gt;If you want to upgrade to a newer Kiali version (or downgrade to older
versions), you can use the regular &lt;code&gt;helm upgrade&lt;/code&gt; commands. For example, the
following command should upgrade the Kiali Operator to the latest version:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ helm upgrade \
    --namespace kiali-operator \
    --reuse-values \
    kiali-operator \
    kiali/kiali-operator
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;WARNING: No migration paths are provided. However, Kiali is a stateless
application and if the &lt;code&gt;helm upgrade&lt;/code&gt; command fails, please uninstall the
previous version and then install the new desired version.&lt;/p&gt;


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


    By upgrading the Kiali Operator, existent Kiali Server installations
managed with a Kiali CR will also be upgraded once the updated operator starts.

&lt;/div&gt;

&lt;h2 id=&#34;managing-installation-config&#34;&gt;Managing configuration of Helm installations&lt;/h2&gt;
&lt;p&gt;After installing either the &lt;code&gt;kiali-operator&lt;/code&gt; or the &lt;code&gt;kiali-server&lt;/code&gt; Helm Charts,
you may be tempted to manually modify the created resources to modify the
installation. However, we recommend using &lt;code&gt;helm upgrade&lt;/code&gt; to update your
installation.&lt;/p&gt;
&lt;p&gt;For example, assuming you have the following installation:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ helm list -n kiali-operator
NAME            NAMESPACE       REVISION        UPDATED                                 STATUS          CHART                   APP VERSION
kiali-operator  kiali-operator  1               2021-09-14 18:00:45.320351026 -0500 CDT deployed        kiali-operator-1.40.0   v1.40.0
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Notice that the current installation is version &lt;code&gt;1.40.0&lt;/code&gt; of the
&lt;code&gt;kiali-operator&lt;/code&gt;.  Let&amp;rsquo;s assume you want to use your own mirrors of the Kiali
Operator container images. You can update your installation with the following
command:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ helm upgrade \
    --namespace kiali-operator \
    --reuse-values \
    --set image.repo=your_mirror_registry_url/owner/kiali-operator-repo \
    --set image.tag=your_mirror_tag \
    --version 1.40.0 \
    kiali-operator \
    kiali/kiali-operator
&lt;/code&gt;&lt;/pre&gt;

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


    Make sure that you specify the &lt;code&gt;--reuse-values&lt;/code&gt; flag to take the
configuration of your current installation. Then, you only need to specify the
new settings you want to change using &lt;code&gt;--set&lt;/code&gt; flags.

&lt;/div&gt;



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


    Make sure that you specify the &lt;code&gt;--version X.Y.Z&lt;/code&gt; flag with the
version of your current installation. Otherwise, you may end up upgrading to a
new version.

&lt;/div&gt;

&lt;h2 id=&#34;uninstalling&#34;&gt;Uninstalling&lt;/h2&gt;
&lt;h3 id=&#34;removing-the-kiali-operator-and-managed-kialis&#34;&gt;Removing the Kiali operator and managed Kialis&lt;/h3&gt;
&lt;p&gt;If you used the &lt;code&gt;kiali-operator&lt;/code&gt; Helm chart, first you must ensure that all
Kiali CRs are deleted. For example, the following command will agressively
delete all Kiali CRs in your cluster:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ kubectl delete kiali --all --all-namespaces
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The previous command may take some time to finish while the Kiali operator
removes all Kiali installations.&lt;/p&gt;
&lt;p&gt;Then, remove the Kiali operator using a standard &lt;code&gt;helm uninstall&lt;/code&gt; command. For
example:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ helm uninstall --namespace kiali-operator kiali-operator
$ kubectl delete crd kialis.kiali.io
&lt;/code&gt;&lt;/pre&gt;

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


    You have to manually delete the &lt;code&gt;kialis.kiali.io&lt;/code&gt; CRD because
&lt;a href=&#34;https://helm.sh/docs/topics/charts/#limitations-on-crds&#34;&gt;Helm won&amp;rsquo;t delete it.&lt;/a&gt;

&lt;/div&gt;



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


    If you fail to delete the Kiali CRs before uninstalling the operator,
a proper cleanup may not be done.

&lt;/div&gt;

&lt;h4 id=&#34;known-problem-uninstall-hangs-unable-to-delete-the-kiali-cr&#34;&gt;Known problem: uninstall hangs (unable to delete the Kiali CR)&lt;/h4&gt;
&lt;p&gt;Typically this happens if not all Kiali CRs are deleted prior to uninstalling
the operator. To force deletion of a Kiali CR, you need to clear its finalizer.
For example:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ kubectl patch kiali kiali -n istio-system -p &amp;#39;{&amp;#34;metadata&amp;#34;:{&amp;#34;finalizers&amp;#34;: []}}&amp;#39; --type=merge
&lt;/code&gt;&lt;/pre&gt;

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


    This forces deletion of the Kiali CR and will skip uninstallation of
the Kiali Server. Remnants of the Kiali Server may still exist in your cluster
which you will need to manually remove.

&lt;/div&gt;

&lt;h3 id=&#34;removing-standalone-kiali&#34;&gt;Removing standalone Kiali&lt;/h3&gt;
&lt;p&gt;If you installed a standalone Kiali by using the &lt;code&gt;kiali-server&lt;/code&gt; Helm chart, use
the standard &lt;code&gt;helm uninstall&lt;/code&gt; commands. For example:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ helm uninstall --namespace istio-system kiali-server
&lt;/code&gt;&lt;/pre&gt;
      </description>
    </item>
    
    <item>
      <title>Docs: Kiali MCP</title>
      <link>https://v2-24.kiali.io/docs/ai/kiali-mcp/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://v2-24.kiali.io/docs/ai/kiali-mcp/</guid>
      <description>
        
        
        &lt;p&gt;Kiali MCP is an integration that allows MCP-capable AI assistants to query (and optionally manage) Kiali-related data by calling tools exposed by an MCP server.&lt;/p&gt;
&lt;p&gt;The implementation is provided as part of the &lt;a href=&#34;https://github.com/containers/kubernetes-mcp-server&#34;&gt;Kubernetes MCP Server&lt;/a&gt; upstream and also for &lt;a href=&#34;https://github.com/openshift/openshift-mcp-server&#34;&gt;Openshift MCP server&lt;/a&gt;. It exposes a &lt;strong&gt;&lt;code&gt;kiali&lt;/code&gt; toolset&lt;/strong&gt; (see upstream guide: &lt;a href=&#34;https://github.com/containers/kubernetes-mcp-server/blob/main/docs/KIALI.md&#34;&gt;docs/KIALI.md&lt;/a&gt;).&lt;/p&gt;
&lt;h3 id=&#34;prerequisites&#34;&gt;Prerequisites&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;A reachable Kiali endpoint (Route/Ingress/Service URL).&lt;/li&gt;
&lt;li&gt;Kubernetes credentials available to the MCP server (kubeconfig or in-cluster config).&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;enable-the-kiali-toolset&#34;&gt;Enable the &lt;code&gt;kiali&lt;/code&gt; toolset&lt;/h3&gt;
&lt;p&gt;Create a TOML config file and enable &lt;code&gt;kiali&lt;/code&gt; in &lt;code&gt;toolsets&lt;/code&gt;.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-toml&#34; data-lang=&#34;toml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000&#34;&gt;toolsets&lt;/span&gt; &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;core&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;kiali&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;toolset_configs&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;kiali&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000&#34;&gt;url&lt;/span&gt; &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;https://kiali.example&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Endpoint/route to reach the Kiali console&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# insecure = true  # optional: allow insecure TLS (not recommended in production)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# certificate_authority = &amp;#34;/path/to/ca.crt&amp;#34;  # CA bundle for Kiali&amp;#39;s TLS cert&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Notes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;If &lt;code&gt;url&lt;/code&gt; is &lt;code&gt;https://&lt;/code&gt; and &lt;code&gt;insecure = false&lt;/code&gt;, you must provide &lt;code&gt;certificate_authority&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Authentication to Kiali is performed using the server&amp;rsquo;s Kubernetes credentials (it obtains/uses a bearer token for Kiali calls).&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;connect-from-an-mcp-client&#34;&gt;Connect from an MCP client&lt;/h3&gt;
&lt;p&gt;How you wire this into a specific client depends on the client, but the core idea is the same: start the MCP server with your kubeconfig and your TOML config.&lt;/p&gt;
&lt;p&gt;Example (conceptual) command:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;kubernetes-mcp-server --config /path/to/config.toml --read-only
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Once connected, your assistant can use the Kiali tools (for example: mesh graph, metrics, traces, workload logs) to power a chatbot-like experience outside the Kiali UI (for example, in an IDE).&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Deployment Options</title>
      <link>https://v2-24.kiali.io/docs/installation/deployment-options/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://v2-24.kiali.io/docs/installation/deployment-options/</guid>
      <description>
        
        
        &lt;p&gt;There are other, more complex deployment settings, described in dedicated pages:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://v2-24.kiali.io/docs/configuration/authentication/&#34;&gt;Authentication&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://v2-24.kiali.io/docs/installation/installation-guide/accessing-kiali/#ingress-access&#34;&gt;Customization of the Ingress resource&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://v2-24.kiali.io/docs/installation/installation-guide/accessing-kiali/#accessing-kiali-through-a-loadbalancer-or-a-nodeport&#34;&gt;Customization of the service type (LoadBalancer or
NodePort)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://v2-24.kiali.io/docs/configuration/namespace-management/&#34;&gt;Namespace management (configuring namespaces accessible and visible to
Kiali)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


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


    All examples on this page are focused
on the Kiali CR (when installing via the Kiali operator). Remember
that Helm charts mirror all these configurations.

&lt;/div&gt;

&lt;h2 id=&#34;kiali-and-istio-installation-namespaces&#34;&gt;Kiali and Istio installation namespaces&lt;/h2&gt;
&lt;p&gt;By default, the Kiali operator installs Kiali in the same namespace where the Kiali CR is created. However, it is possible to specify a different namespace for installation:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;spec&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;deployment&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;namespace&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;custom-kiali-namespace&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;log-level-and-format&#34;&gt;Log level and format&lt;/h2&gt;
&lt;p&gt;By default, Kiali will print up to &lt;code&gt;INFO&lt;/code&gt;-level messages in simple text format.
You can change the log level, output format, and time format as in the
following example:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;spec&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;deployment&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;logger&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Supported values are &amp;#34;trace&amp;#34;, &amp;#34;debug&amp;#34;, &amp;#34;info&amp;#34;, &amp;#34;warn&amp;#34;, &amp;#34;error&amp;#34; and &amp;#34;fatal&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;log_level&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;error  &lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Supported values are &amp;#34;text&amp;#34; and &amp;#34;json&amp;#34;.&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;log_format&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;json  &lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;time_field_format&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;2006-01-02T15:04:05Z07:00&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The syntax for the &lt;code&gt;time_field_format&lt;/code&gt; is the same as the &lt;a href=&#34;https://pkg.go.dev/time#pkg-constants&#34;&gt;&lt;code&gt;Time.Format&lt;/code&gt;
function of the Go language&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;json&lt;/code&gt; format is useful if you are parsing logs of your applications for
further processing.&lt;/p&gt;
&lt;p&gt;In Kiali, there are some special logs called &lt;em&gt;audit logs&lt;/em&gt; that are emitted each time a user creates, updates or deletes a resource through Kiali. Audit logs are INFO-level messages and are enabled by default. If audit logs are too verbose, you can disable them without reducing the log level as follows:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;spec&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;server&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;audit_log&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;false&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;kiali-instance-name&#34;&gt;Kiali instance name&lt;/h2&gt;
&lt;p&gt;If you plan to install more than one Kiali instance on the same cluster, you
may need to configure an instance name to avoid conflicts on created resources:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;spec&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;deployment&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;instance_name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;secondary&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The &lt;code&gt;instance_name&lt;/code&gt; will be used as a prefix for all created Kiali resources.
The exception is the &lt;a href=&#34;https://v2-24.kiali.io/docs/configuration/authentication/session-configs/&#34;&gt;&lt;code&gt;kiali-signing-key&lt;/code&gt; secret&lt;/a&gt; which will always have
the same name and will be shared on all deployments of the same namespace,
unless you specify a custom secret name.&lt;/p&gt;


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


    Since the &lt;code&gt;instance_name&lt;/code&gt; will be used as a name prefix in resources, it must
follow &lt;a href=&#34;https://kubernetes.io/docs/concepts/overview/working-with-objects/names/&#34;&gt;Kubernetes naming
constraints&lt;/a&gt;.

&lt;/div&gt;



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


    Since Kubernetes resources cannot be renamed, you cannot change the
&lt;code&gt;instance_name&lt;/code&gt; of an existing Kiali installation. The workaround is to
uninstall Kiali and re-install with the desired &lt;code&gt;instance_name&lt;/code&gt;.

&lt;/div&gt;

&lt;h2 id=&#34;resource-requests-and-limits&#34;&gt;Resource requests and limits&lt;/h2&gt;
&lt;p&gt;You can set the amount of resources available to Kiali using the
&lt;code&gt;spec.deployment.resources&lt;/code&gt; attribute, like in the following example:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;spec&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;deployment&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;resources&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;requests&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;memory&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;128Mi&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;cpu&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;100m&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;limits&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;memory&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;1Gi&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;cpu&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;500m&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Please, read the &lt;a href=&#34;https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/&#34;&gt;Managing Resources for Containers section in the Kubernetes
documentation&lt;/a&gt;
for more details about possible configurations.&lt;/p&gt;
&lt;h2 id=&#34;custom-labels-and-annotations-on-the-kiali-pod-and-service&#34;&gt;Custom labels and annotations on the Kiali pod and service&lt;/h2&gt;
&lt;p&gt;Although some labels and annotations are set on the Kiali pod and on its
service (depending on configurations), you can add additional ones. For the
pod, use the &lt;code&gt;spec.deployment.pod_labels&lt;/code&gt; and &lt;code&gt;spec.deployment.pod_annotations&lt;/code&gt;
attributes. For the service, you can only add annotations using the
&lt;code&gt;spec.deployment.service_annotations&lt;/code&gt; attribute. For example:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;spec&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;deployment&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;pod_annotations&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;a8r.io/repository&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;https://github.com/kiali/kiali&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;pod_labels&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;sidecar.istio.io/inject&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;true&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;service_annotations&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;a8r.io/documentation&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;https://kiali.io/docs/installation/deployment-configuration&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;kiali-page-title-browser-title-bar&#34;&gt;Kiali page title (browser title bar)&lt;/h2&gt;
&lt;p&gt;If you have several Kiali installations and you are using them at the same
time, there are good chances that you will want to identify each Kiali by
simply looking at the browser&amp;rsquo;s title bar. You can set a custom text in the
title bar with the following configuration:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;spec&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;installation_tag&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;Kiali West&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The &lt;code&gt;installation_tag&lt;/code&gt; is any human readable text of your desire.&lt;/p&gt;
&lt;h2 id=&#34;kubernetes-scheduler-settings&#34;&gt;Kubernetes scheduler settings&lt;/h2&gt;
&lt;h3 id=&#34;replicas-and-automatic-scaling&#34;&gt;Replicas and automatic scaling&lt;/h3&gt;
&lt;p&gt;By default, only one replica of Kiali is deployed. If needed, you can change the
replica count like in the following example:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;spec&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;deployment&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;replicas&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;2&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;If you prefer automatic scaling, creation of an &lt;code&gt;HorizontalPodAutoscaler&lt;/code&gt;
resource is supported. For example, the following configuration automatically
scales Kiali based on CPU utilization:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;spec&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;deployment&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;hpa&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;api_version&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;autoscaling/v1&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;spec&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;minReplicas&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;maxReplicas&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;2&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;targetCPUUtilizationPercentage&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;80&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

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


    You must omit the &lt;code&gt;scaleTargetRef&lt;/code&gt; field of the HPA spec, because this field
will be populated by the Kiali operator (or by Helm) depending on other
configuration.

&lt;/div&gt;

&lt;p&gt;Read the &lt;a href=&#34;https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/&#34;&gt;Kubernetes Horizontal Pod Autoscaler
documentation&lt;/a&gt;
to learn more about the HPA.&lt;/p&gt;
&lt;h3 id=&#34;allocating-the-kiali-pod-to-specific-nodes-of-the-cluster&#34;&gt;Allocating the Kiali pod to specific nodes of the cluster&lt;/h3&gt;
&lt;p&gt;You can constrain the Kiali pod to run on a specific set of nodes by using
some of the standard Kubernetes scheduler configurations.&lt;/p&gt;
&lt;p&gt;The simplest option is to use &lt;a href=&#34;https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#nodeselector&#34;&gt;the
&lt;code&gt;nodeSelector&lt;/code&gt;&lt;/a&gt;
configuration which you can configure like in the following example:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;spec&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;deployment&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;node_selector&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;worker-type&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;infra&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;You can also use the &lt;a href=&#34;https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#affinity-and-anti-affinity&#34;&gt;affinity/anti-affinity native Kubernetes
feature&lt;/a&gt;
if you prefer its more expressive syntax, or if you need more complex matching
rules. The following is an example for configuring node affinity:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;spec&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;deployment&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;affinity&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;node&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;requiredDuringSchedulingIgnoredDuringExecution&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;          &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;nodeSelectorTerms&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;          &lt;/span&gt;- &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;matchExpressions&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;            &lt;/span&gt;- &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;key&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;worker-type&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;              &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;operator&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;In&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;              &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;values&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;              &lt;/span&gt;- &lt;span style=&#34;color:#000&#34;&gt;infra&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Similarly, you can also configure pod affinity and pod anti-affinity using the
&lt;code&gt;spec.deployment.affinity.pod&lt;/code&gt; and &lt;code&gt;spec.deployment.affinity.pod_anti&lt;/code&gt;
attributes.&lt;/p&gt;
&lt;p&gt;Finally, if you want to run Kiali in a node with taints, the following is an
example to configure tolerations:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;spec&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;deployment&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;tolerations&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Allow to run Kiali in a tainted master node&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;- &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;key&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;node-role.kubernetes.io/master&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;operator&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;Exists&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;effect&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;NoSchedule&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Read the following Kubernetes documentation to learn more about these configurations:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/&#34;&gt;Assigning Pods to Nodes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/&#34;&gt;Taints and Tolerations&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;priority-class-of-the-kiali-pod&#34;&gt;Priority class of the Kiali pod&lt;/h3&gt;
&lt;p&gt;If you are using priority classes in your cluster, you can specify the
priority class that will be set on the Kiali pod. For example:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;spec&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;deployment&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;priority_class_name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;high-priority&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;For more information about priority classes, read &lt;a href=&#34;https://kubernetes.io/docs/concepts/scheduling-eviction/pod-priority-preemption/&#34;&gt;Pod Priority and Preemption
in the Kubernetes
documentation&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;adding-host-aliases-to-the-kiali-pod&#34;&gt;Adding host aliases to the Kiali pod&lt;/h2&gt;
&lt;p&gt;If you need to provide some static hostname resolution in the Kiali pod, you
can use &lt;a href=&#34;https://kubernetes.io/docs/tasks/network/customize-hosts-file-for-pods/&#34;&gt;HostAliases to add entries to the &lt;code&gt;/etc/hosts&lt;/code&gt;
file&lt;/a&gt;
of the Kiali pod, like in the following example:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;spec&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;deployment&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;   &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;host_aliases&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;   &lt;/span&gt;- &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;ip&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;192.168.1.100&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;     &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;hostnames&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;     &lt;/span&gt;- &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;foo.local&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;     &lt;/span&gt;- &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;bar.local&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;http-server&#34;&gt;HTTP server&lt;/h2&gt;
&lt;p&gt;Kiali is served over HTTP. You can configure a few options of the HTTP server.
The following are the defaults, but you can change them to suit your needs.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;spec&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;server&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Listen/bind address of the HTTP server. By default it is empty, which means to&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# listen on all interfaces.&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;address&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Listening port of the HTTP server. If you change it, also Kiali&amp;#39;s Kubernetes&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Service is affected to use this port.&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;port&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;20001&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Use GZip compression for responses larger than 1400 bytes. You may want to disable&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# compression if you are exposing Kiali via a reverse proxy that is already&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# doing compression.&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;gzip_enabled&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;true&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# For development purposes only. Controls if &amp;#34;Cross-Origin Resourse Sharing&amp;#34; is&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# enabled. &lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;cors_allow_all&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;false&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;There is one additional &lt;code&gt;spec.server.web_root&lt;/code&gt; option that affects the HTTP
server, but that one is described in the &lt;a href=&#34;https://v2-24.kiali.io/docs/installation/installation-guide/accessing-kiali/#route-configs&#34;&gt;&lt;em&gt;Specifying route settings&lt;/em&gt; section
of the Instalation guide.&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;metrics-server&#34;&gt;Metrics server&lt;/h2&gt;
&lt;p&gt;Kiali emits metrics that can be collected by Prometheus. Most of these metrics
are performance measurements.&lt;/p&gt;
&lt;p&gt;The metrics server is enabled by default and listens on port 9090:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;spec&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;server&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;metrics_enabled&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;true&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;metrics_port&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;9090&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The bind address is the same as the HTTP server. Thus, make sure that the HTTP
Server and the metrics server are not configured to the same port.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Install via OperatorHub</title>
      <link>https://v2-24.kiali.io/docs/installation/installation-guide/installing-with-operatorhub/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://v2-24.kiali.io/docs/installation/installation-guide/installing-with-operatorhub/</guid>
      <description>
        
        
        &lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;The &lt;a href=&#34;https://operatorhub.io/&#34;&gt;OperatorHub&lt;/a&gt; is a website that contains a
catalog of &lt;a href=&#34;https://kubernetes.io/docs/concepts/extend-kubernetes/operator/&#34;&gt;Kubernetes Operators&lt;/a&gt;.
Its aim is to be the central location to find Operators.&lt;/p&gt;
&lt;p&gt;The OperatorHub relies in the &lt;a href=&#34;https://github.com/operator-framework/operator-lifecycle-manager&#34;&gt;Operator Lifecycle Manager (OLM)&lt;/a&gt;
to install, manage and update Operators on any Kubernetes cluster.&lt;/p&gt;
&lt;p&gt;The Kiali Operator is being published to the OperatorHub. So, you can use the
OLM to install and manage the Kiali Operator installation.&lt;/p&gt;
&lt;h2 id=&#34;installing-the-kiali-operator-using-the-olm&#34;&gt;Installing the Kiali Operator using the OLM&lt;/h2&gt;
&lt;p&gt;Go to the Kiali Operator page in the OperatorHub: &lt;a href=&#34;https://operatorhub.io/operator/kiali&#34;&gt;https://operatorhub.io/operator/kiali&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;You will see an &lt;em&gt;Install&lt;/em&gt; button at the right of the page. Press it and you
will be presented with the installation instructions. Follow these instructions
to install and manage the Kiali Operator installation using OLM.&lt;/p&gt;
&lt;p&gt;Afterwards, you can &lt;a href=&#34;https://v2-24.kiali.io/docs/installation/installation-guide/creating-updating-kiali-cr/&#34;&gt;create the Kiali CR&lt;/a&gt; to install Kiali.&lt;/p&gt;
&lt;h2 id=&#34;installing-the-kiali-operator-in-openshift&#34;&gt;Installing the Kiali Operator in OpenShift&lt;/h2&gt;
&lt;p&gt;The OperatorHub is bundled in the OpenShift console. To install the Kiali
Operator, simply go to the OperatorHub in the OpenShift console and search for
the Kiali Operator. Then, click on the &lt;em&gt;Install&lt;/em&gt; button and follow the
instruction on the screen.&lt;/p&gt;
&lt;p&gt;Afterwards, you can &lt;a href=&#34;https://v2-24.kiali.io/docs/installation/installation-guide/creating-updating-kiali-cr/&#34;&gt;create the Kiali CR&lt;/a&gt; to install Kiali.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: OpenID Connect strategy</title>
      <link>https://v2-24.kiali.io/docs/configuration/authentication/openid/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://v2-24.kiali.io/docs/configuration/authentication/openid/</guid>
      <description>
        
        
        &lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;The &lt;code&gt;openid&lt;/code&gt; authentication strategy lets you integrate Kiali to an external
identity provider that implements &lt;a href=&#34;https://openid.net/connect/&#34;&gt;OpenID Connect&lt;/a&gt;, and allows
users to login to Kiali using their existing accounts of a
third-party system.&lt;/p&gt;
&lt;p&gt;If your
&lt;a href=&#34;https://kubernetes.io/docs/reference/access-authn-authz/authentication/#openid-connect-tokens&#34;&gt;Kubernetes cluster is also integrated with your OpenId provider&lt;/a&gt;,
then Kiali&amp;rsquo;s &lt;code&gt;openid&lt;/code&gt; strategy can offer
&lt;a href=&#34;https://v2-24.kiali.io/docs/configuration/rbac/&#34;&gt;namespace access control&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Kiali only supports the &lt;em&gt;authorization code flow&lt;/em&gt; of the &lt;a href=&#34;https://openid.net/connect/&#34;&gt;OpenId Connect spec&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;requirements&#34;&gt;Requirements&lt;/h2&gt;
&lt;p&gt;The &lt;a href=&#34;https://v2-24.kiali.io/docs/configuration/authentication/session-configs/&#34;&gt;Kiali&amp;rsquo;s signing key&lt;/a&gt; needs to be 16, 24
or 32 byte long. If you install Kiali via the operator and don&amp;rsquo;t set a custom
signing key, the operator should create a 16 byte long signing key.&lt;/p&gt;
&lt;p&gt;If you &lt;em&gt;&lt;em&gt;don&amp;rsquo;t need&lt;/em&gt;&lt;/em&gt; namespace access control support, you can use any
working OpenId Server where Kiali can be configured as a client application.&lt;/p&gt;
&lt;p&gt;If you &lt;em&gt;&lt;em&gt;do need&lt;/em&gt;&lt;/em&gt; namespace access control support, you need either:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A &lt;a href=&#34;https://kubernetes.io/docs/reference/access-authn-authz/authentication/#openid-connect-tokens&#34;&gt;Kubernetes cluster configured with OpenID connect integration&lt;/a&gt;,
which results in the API server accepting tokens issued by your identity provider.&lt;/li&gt;
&lt;li&gt;A replacement or reverse proxy for the Kubernetes cluster API capable of handling the OIDC authentication.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The first option is preferred if you can manipulate your cluster API server
startup flags, which will result in your cluster to also be integrated with the
external OpenID provider.&lt;/p&gt;
&lt;p&gt;The second option is provided for cases where you are using a managed
Kubernetes and your cloud provider does not support configuring OpenID
integration. Kiali assumes an implementation of a Kubernetes API server. For
example, a community user has reported to successfully configure Kiali&amp;rsquo;s OpenID
strategy by using
&lt;a href=&#34;https://github.com/jetstack/kube-oidc-proxy&#34;&gt;&lt;code&gt;kube-oidc-proxy&lt;/code&gt;&lt;/a&gt; which is a
reverse proxy that handles the OpenID authentication and forwards the
authenticated requests to the Kubernetes API.&lt;/p&gt;
&lt;h2 id=&#34;setup-with-rbac&#34;&gt;Set-up with namespace access control support&lt;/h2&gt;
&lt;p&gt;Assuming you already have a working Kubernetes cluster with OpenId integration
(or a working alternative like &lt;code&gt;kube-oidc-proxy&lt;/code&gt;), you should already had
configured an &lt;em&gt;application&lt;/em&gt; or a &lt;em&gt;client&lt;/em&gt; in your OpenId server (some cloud
providers configure this app/client automatically for you). You must re-use
this existing &lt;em&gt;application/client&lt;/em&gt; by adding the root path of your Kiali
instance as an allowed/authorized callback URL. If the OpenID server provided
you a &lt;em&gt;client secret&lt;/em&gt; for the application/client, or if you had manually set a
&lt;em&gt;client secret&lt;/em&gt;, issue the following command to create a Kubernetes secret
holding the OpenId client secret:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;kubectl create secret generic kiali --from-literal=&amp;#34;oidc-secret=$CLIENT_SECRET&amp;#34; -n $NAMESPACE
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;where &lt;code&gt;$NAMESPACE&lt;/code&gt; is the namespace where you installed Kiali and
&lt;code&gt;$CLIENT_SECRET&lt;/code&gt; is the secret you configured or provided by your OpenId
Server. If Kiali is already running, you may need to restart the Kiali pod so
that the secret is mounted in Kiali.&lt;/p&gt;


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


    It&amp;rsquo;s worth emphasizing that to configure OpenID
integration you must re-use the OpenID application/client that you created for
your Kubernetes cluster. If you create a new application/client for Kiali in
your OpenId server, Kiali will fail to properly authenticate users.

&lt;/div&gt;

&lt;p&gt;Then, to enable the OpenID Connect strategy, the minimal configuration you need to
set in the Kiali CR is like the following:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;spec&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;auth&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;strategy&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;openid&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;openid&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;client_id&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;kiali-client&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;issuer_uri&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;https://openid.issuer.com&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This assumes that your Kubernetes cluster is configured with OpenID Connect
integration. In this case, the &lt;code&gt;client-id&lt;/code&gt; and &lt;code&gt;issuer_uri&lt;/code&gt; attributes must
match the &lt;code&gt;--oidc-client-id&lt;/code&gt; and &lt;code&gt;--oidc-issuer-url&lt;/code&gt; flags
&lt;a href=&#34;https://kubernetes.io/docs/reference/access-authn-authz/authentication/#configuring-the-api-server&#34;&gt;used to start the cluster API server&lt;/a&gt;.
If these values don&amp;rsquo;t match, users will fail to login to Kiali.&lt;/p&gt;
&lt;p&gt;If you are using a replacement or a reverse proxy for the Kubernetes API
server, the minimal configuration is like the following:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;spec&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;auth&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;strategy&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;openid&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;openid&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;api_proxy&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;https://proxy.domain.com:port&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;api_proxy_ca_data&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;...&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;client_id&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;kiali-client&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;issuer_uri&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;https://openid.issuer.com&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The value of &lt;code&gt;client-id&lt;/code&gt; and &lt;code&gt;issuer_uri&lt;/code&gt; must match the values of the
configuration of your reverse proxy or cluster API replacement. The &lt;code&gt;api_proxy&lt;/code&gt;
attribute is the URI of the reverse proxy or cluster API replacement (only
HTTPS is allowed). The &lt;code&gt;api_proxy_ca_data&lt;/code&gt; is the public certificate authority
file encoded in a base64 string, to trust the secure connection.&lt;/p&gt;
&lt;h2 id=&#34;set-up-with-no-namespace-access-control-support&#34;&gt;Set-up with no namespace access control support&lt;/h2&gt;
&lt;p&gt;Register Kiali as a client application in your OpenId Server. Use the root path
of your Kiali instance as the callback URL. If the OpenId Server provides you a
&lt;em&gt;client secret&lt;/em&gt;, or if you manually set a &lt;em&gt;client secret&lt;/em&gt;, issue the following
command to create a Kubernetes secret holding the OpenId client secret:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;kubectl create secret generic kiali --from-literal=&amp;#34;oidc-secret=$CLIENT_SECRET&amp;#34; -n $NAMESPACE
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;where &lt;code&gt;$NAMESPACE&lt;/code&gt; is the namespace where you installed Kiali and
&lt;code&gt;$CLIENT_SECRET&lt;/code&gt; is the secret you configured or provided by your OpenId
Server. If Kiali is already running, you may need to restart the Kiali pod so
that the secret is mounted in Kiali.&lt;/p&gt;
&lt;p&gt;Then, to enable the OpenID Connect strategy, the minimal configuration you need
to set in the Kiali CR is like the following:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;spec&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;auth&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;strategy&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;openid&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;openid&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;client_id&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;kiali-client&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;disable_rbac&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;true&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;issuer_uri&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;https://openid.issuer.com&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

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


    As namespace access control is disabled, all users logging into Kiali
will share the same cluster-wide privileges.

&lt;/div&gt;

&lt;h2 id=&#34;additional-configurations&#34;&gt;Additional configurations&lt;/h2&gt;
&lt;h3 id=&#34;configuring-the-displayed-user-name&#34;&gt;Configuring the displayed user name&lt;/h3&gt;
&lt;p&gt;The Kiali front-end will, by default, retrieve the string of the &lt;code&gt;sub&lt;/code&gt; claim of
the OpenID token and display it as the user name. You can customize which field
to display as the user name by setting the &lt;code&gt;username_claim&lt;/code&gt; attribute of the
Kiali CR. For example:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;spec&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;auth&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;openid&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;username_claim&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;email&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;If you enabled namespace access control, you will want the &lt;code&gt;username_claim&lt;/code&gt;
attribute to match the &lt;code&gt;--oidc-username-claim&lt;/code&gt; flag used to start the
Kubernetes API server, or the equivalent option if you are using a replacement
or reverse proxy of the API server. Else, any user-friendly claim will be OK as
it is purely informational.&lt;/p&gt;
&lt;h3 id=&#34;configure-scopes&#34;&gt;Configuring requested scopes&lt;/h3&gt;
&lt;p&gt;By default, Kiali will request access to the &lt;code&gt;openid&lt;/code&gt;, &lt;code&gt;profile&lt;/code&gt; and &lt;code&gt;email&lt;/code&gt;
standard scopes. If you need a different set of scopes, you can set the
&lt;code&gt;scopes&lt;/code&gt; attribute in the Kiali CR. For example:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;spec&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;auth&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;openid&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;scopes&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;- &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;openid&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;- &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;email&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;- &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;groups&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The &lt;code&gt;openid&lt;/code&gt; scope is forced. If you don&amp;rsquo;t add it to the list of scopes to
request, Kiali will still request it from the identity provider.&lt;/p&gt;
&lt;h3 id=&#34;configuring-authentication-timeout&#34;&gt;Configuring authentication timeout&lt;/h3&gt;
&lt;p&gt;When the user is redirected to the external authentication system, by default
Kiali will wait at most 5 minutes for the user to authenticate. After that time
has elapsed, Kiali will reject authentication. You can adjust this timeout by
setting the &lt;code&gt;authentication_timeout&lt;/code&gt; with the number of seconds that Kiali
should wait at most. For example:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;spec&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;auth&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;openid&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;authentication_timeout&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;60&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Wait only one minute.&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;configuring-allowed-domains&#34;&gt;Configuring allowed domains&lt;/h3&gt;
&lt;p&gt;Some identity providers use a shared login and regardless of configuring your
own application under your domain (or organization account), login can succeed
even if the user that is logging in does not belong to your account or
organization. Google is an example of this kind of provider.&lt;/p&gt;
&lt;p&gt;To prevent foreign users from logging into your Kiali instance, you can
configure a list of allowed domains:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;spec&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;auth&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;openid&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;allowed_domains&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;- &lt;span style=&#34;color:#000&#34;&gt;example.com&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;- &lt;span style=&#34;color:#000&#34;&gt;foo.com&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The e-mail reported by the identity provider is used for the validation. Login
will be allowed if the domain part of the e-mail is listed as an allowed
domain; else, the user will be rejected. Naturally, you will need to
&lt;a href=&#34;#configure-scopes&#34;&gt;configure the &lt;code&gt;email&lt;/code&gt; scope to be requested&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;There is a special case: some identity providers include a &lt;code&gt;hd&lt;/code&gt; claim in the
&lt;code&gt;id_token&lt;/code&gt;. If this claim is present, this is used instead of extracting the
domain from the user e-mail.  For example, Google Workspace (aka G Suite)
&lt;a href=&#34;https://developers.google.com/identity/protocols/oauth2/openid-connect#an-id-tokens-payload&#34;&gt;includes this &lt;code&gt;hd&lt;/code&gt; claim for hosted
domains&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&#34;using-an-openid-provider-with-a-self-signed-certificate&#34;&gt;Using an OpenID provider with a self-signed certificate&lt;/h3&gt;
&lt;p&gt;If your OpenID provider is using a self-signed certificate, you can disable
certificate validation by setting the &lt;code&gt;insecure_skip_verify_tls&lt;/code&gt; to &lt;code&gt;true&lt;/code&gt; in
the Kiali CR:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;spec&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;auth&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;openid&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;insecure_skip_verify_tls&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;true&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

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


    You should use self-signed certificates only for
testing purposes.

&lt;/div&gt;

&lt;p&gt;However, if your organization or internal network has an internal trusted
certificate authority (CA), and your OpenID server is using a certificate
issued by this CA, you can configure Kiali to trust certificates from this CA
rather than disabling verification.&lt;/p&gt;
&lt;p&gt;See the &lt;a href=&#34;https://v2-24.kiali.io/docs/configuration/p8s-jaeger-grafana/tls-configuration/&#34;&gt;TLS Configuration&lt;/a&gt;
page for detailed instructions on configuring custom CA certificates. You can use either
the global &lt;code&gt;additional-ca-bundle.pem&lt;/code&gt; key (which makes the CA trusted for all
HTTPS connections) or the OpenID-specific &lt;code&gt;openid-server-ca.crt&lt;/code&gt; key in the
&lt;code&gt;kiali-cabundle&lt;/code&gt; ConfigMap.&lt;/p&gt;
&lt;h3 id=&#34;using-an-httphttps-proxy&#34;&gt;Using an HTTP/HTTPS Proxy&lt;/h3&gt;
&lt;p&gt;In some network configurations, there is the need to use proxies to connect to
the outside world. OpenID requires outside world connections to get metadata and
do key validation, so you can configure it by setting the &lt;code&gt;http_proxy&lt;/code&gt; and
&lt;code&gt;https_proxy&lt;/code&gt; keys in the Kiali CR. They use the same format as the &lt;code&gt;HTTP_PROXY&lt;/code&gt;
and &lt;code&gt;HTTPS_PROXY&lt;/code&gt; environment variables.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;spec&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;auth&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;openid&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;http_proxy&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;http://USERNAME:PASSWORD@10.0.1.1:8080/&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;https_proxy&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;https://USERNAME:PASSWORD@10.0.0.1:8080/&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;passing-additional-options-to-the-identity-provider&#34;&gt;Passing additional options to the identity provider&lt;/h3&gt;
&lt;p&gt;When users click on the &lt;em&gt;Login&lt;/em&gt; button on Kiali, a redirection occurs to the
authentication page of the external identity provider. Kiali sends a fixed set
of parameters to the identity provider to enable authentication. If you need to
add an additional set of parameters to your identity provider, you can use the
&lt;code&gt;additional_request_params&lt;/code&gt; setting of the Kiali CR, which accepts key-value
pairs. For example:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;spec&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;auth&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;openid&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;additional_request_params&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;prompt&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;login&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The &lt;code&gt;prompt&lt;/code&gt; parameter is a
&lt;a href=&#34;https://openid.net/specs/openid-connect-core-1_0.html#AuthRequest&#34;&gt;standard OpenID parameter&lt;/a&gt;.
When the &lt;code&gt;login&lt;/code&gt; value is passed in this parameter, the
identity provider is instructed to ask for user credentials regardless if the
user already has an active session because of a previous login in some other
system.&lt;/p&gt;
&lt;p&gt;If your OpenId provider supports other non-standard parameters, you can specify
the ones you need in this &lt;code&gt;additional_request_params&lt;/code&gt; setting.&lt;/p&gt;
&lt;p&gt;Take into account that you should &lt;em&gt;not&lt;/em&gt; add the &lt;code&gt;client_id&lt;/code&gt;, &lt;code&gt;response_type&lt;/code&gt;,
&lt;code&gt;redirect_uri&lt;/code&gt;, &lt;code&gt;scope&lt;/code&gt;, &lt;code&gt;nonce&lt;/code&gt; nor &lt;code&gt;state&lt;/code&gt; parameters to this list. These are
already in use by Kiali and some already have a dedicated setting.&lt;/p&gt;
&lt;h2 id=&#34;provider-specific-instructions&#34;&gt;Provider-specific instructions&lt;/h2&gt;
&lt;h3 id=&#34;using-with-keycloak&#34;&gt;Using with Keycloak&lt;/h3&gt;
&lt;p&gt;When using OpenId with Keycloak, you will need to enable the &lt;code&gt;Standard Flow Enabled&lt;/code&gt;
option on the Client (in the Administration Console):&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/documentation/authentication/keycloak-implicit-client.png&#34; alt=&#34;Client configuration screen on Keycloak&#34;&gt;&lt;/p&gt;
&lt;p&gt;The &lt;em&gt;Standard Flow&lt;/em&gt; described on the options is the same as the &lt;em&gt;authorization
code flow&lt;/em&gt; from the rest of the documentation.&lt;/p&gt;
&lt;h3 id=&#34;using-with-google-cloud-platform--gke-oauth2&#34;&gt;Using with Google Cloud Platform / GKE OAuth2&lt;/h3&gt;
&lt;p&gt;If you are using Google Cloud Platform (GCP) and its products such as
Google Kubernetes Engine (GKE), it should be straightforward to configure Kiali&amp;rsquo;s OpenID
strategy to authenticate using your Google credentials.&lt;/p&gt;
&lt;p&gt;First, you&amp;rsquo;ll need to go to your GCP Project and to the Credentials screen which
is available at &lt;code&gt;(Menu Icon) &amp;gt; APIs &amp;amp; Services &amp;gt; Credentials&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/documentation/authentication/gcp-credentials-screen.png&#34; alt=&#34;Credentials Screen on in GCP Project&#34;&gt;&lt;/p&gt;
&lt;p&gt;On the Credentials screen you can select to create a new OAuth client ID.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/documentation/authentication/gcp-select-oauth.png&#34; alt=&#34;Select OAuth on Credentials Screen&#34;&gt;&lt;/p&gt;


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


    If you&amp;rsquo;ve never setup the OAuth consent screen you will need to
do that before you can create an OAuth client ID. On screen you&amp;rsquo;ll have multiple
warnings and prompts to walk you through this.

&lt;/div&gt;

&lt;p&gt;On the &lt;em&gt;Create OAuth client ID&lt;/em&gt; screen, set the &lt;em&gt;Application type&lt;/em&gt; to &lt;code&gt;Web Application&lt;/code&gt;
and enter a name for your key.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/documentation/authentication/gcp-select-web-app.png&#34; alt=&#34;Select Web Application&#34;&gt;&lt;/p&gt;
&lt;p&gt;Then enter in the &lt;em&gt;Authorized Javascript origins&lt;/em&gt; and &lt;em&gt;Authorized redirect URIs&lt;/em&gt; for your project.
You can enter in &lt;code&gt;localhost&lt;/code&gt; as appropriate during testing. You can also enter multiple URIs as appropriate.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/documentation/authentication/gcp-enter-urls.png&#34; alt=&#34;Enter URLs&#34;&gt;&lt;/p&gt;
&lt;p&gt;After clicking &lt;em&gt;Create&lt;/em&gt; you&amp;rsquo;ll be shown your newly minted client id and secret. These are important
and needed for your Kiali CR yaml and Kiali secrets files.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/documentation/authentication/gcp-get-credentials.png&#34; alt=&#34;Get Credentials&#34;&gt;&lt;/p&gt;
&lt;p&gt;You&amp;rsquo;ll need to update your Kiali CR file to include the following &lt;code&gt;auth&lt;/code&gt; block.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;spec&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;auth&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;strategy&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;openid&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;openid&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;client_id&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&amp;lt;your client id from GCP&amp;gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;disable_rbac&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;true&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;issuer_uri&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;https://accounts.google.com&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;scopes&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;openid&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;email&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;]&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;username_claim&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;email&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

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


    Don&amp;rsquo;t get creative here. The &lt;code&gt;issuer_uri&lt;/code&gt; should be &lt;code&gt;https://accounts.google.com&lt;/code&gt;.

&lt;/div&gt;

&lt;p&gt;Finally you will need to create a secret, if you don&amp;rsquo;t have one already, that sets the &lt;code&gt;oidc-secret&lt;/code&gt; for the openid flow.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;apiVersion&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;v1&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;kind&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;Secret&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;metadata&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;kiali&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;namespace&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;istio-system&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;labels&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;app&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;kiali&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;type&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;Opaque&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;data&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;oidc-secret&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&amp;lt;base64 encode your client secret from GCP and enter here&amp;gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Once all these settings are complete just set your Kiali CR and the Kiali secret to your cluster. You may need to
refresh your Kiali Pod to &lt;em&gt;set&lt;/em&gt; the Secret if you add the Secret after the Kiali pod is created.&lt;/p&gt;
&lt;h3 id=&#34;openshift-oidc&#34;&gt;Using with OpenShift and an external OIDC provider&lt;/h3&gt;
&lt;p&gt;Starting with OpenShift 4.20, you can configure your OpenShift cluster to
authenticate users against an external OpenID Connect (OIDC) provider instead
of using the built-in OAuth server. This is sometimes called
&amp;ldquo;Bring Your Own OIDC&amp;rdquo; (BYO OIDC). When OpenShift is configured this way, Kiali
can use the &lt;code&gt;openid&lt;/code&gt; authentication strategy with full namespace access control
support.&lt;/p&gt;


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


    This section applies when you want to use an external OIDC provider (such as
Keycloak, Okta, Auth0, or others) with OpenShift. If you want to use
OpenShift&amp;rsquo;s built-in OAuth server, use the &lt;a href=&#34;https://v2-24.kiali.io/docs/configuration/authentication/openshift/&#34;&gt;&lt;code&gt;openshift&lt;/code&gt; authentication
strategy&lt;/a&gt; instead.

&lt;/div&gt;

&lt;h4 id=&#34;prerequisites&#34;&gt;Prerequisites&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;OpenShift 4.20 or later&lt;/li&gt;
&lt;li&gt;An external OIDC provider configured and accessible from your OpenShift cluster&lt;/li&gt;
&lt;li&gt;The OIDC provider must be configured as an authentication source for both
OpenShift and Kiali (they share the same provider)&lt;/li&gt;
&lt;li&gt;A certificate-based kubeconfig or long-lived service account token for
emergency cluster access (the built-in OAuth will be disabled)&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;step-1-configure-openshift-for-external-oidc-authentication&#34;&gt;Step 1: Configure OpenShift for external OIDC authentication&lt;/h4&gt;
&lt;p&gt;First, configure your OpenShift cluster to use your external OIDC provider.
This involves modifying the cluster&amp;rsquo;s &lt;code&gt;Authentication&lt;/code&gt; resource to specify your
OIDC provider details.&lt;/p&gt;
&lt;p&gt;Refer to the official OpenShift documentation for detailed instructions:
&lt;a href=&#34;https://docs.redhat.com/en/documentation/openshift_container_platform/4.20/html/authentication_and_authorization/external-auth&#34;&gt;Enabling direct authentication with an external OIDC identity provider&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The key configuration elements include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Issuer URL&lt;/strong&gt;: The URL of your OIDC provider&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Client ID&lt;/strong&gt;: The OAuth2 client ID registered with your OIDC provider&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Audiences&lt;/strong&gt;: The list of acceptable audiences for tokens (must include your Kiali client ID)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Username claim mapping&lt;/strong&gt;: How the OIDC token claims map to Kubernetes usernames&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Username prefix&lt;/strong&gt;: Optional prefix to distinguish OIDC users (e.g., &lt;code&gt;oidc:&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CA certificate&lt;/strong&gt;: If your OIDC provider uses a private CA&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;webhookTokenAuthenticator: null&lt;/code&gt;&lt;/strong&gt;: Must be set when &lt;code&gt;type&lt;/code&gt; is &lt;code&gt;OIDC&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;


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


    &lt;p&gt;When OpenShift is configured with external OIDC authentication, the built-in
OAuth server is disabled. This means:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Users cannot log in using OpenShift&amp;rsquo;s standard login page&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;OAuthClient&lt;/code&gt; API becomes unavailable&lt;/li&gt;
&lt;li&gt;Keep a certificate-based kubeconfig (or other long-lived admin credentials) available for emergency access because the normal OAuth login paths and OAuth APIs are unavailable in this mode&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ensure your OIDC provider is properly configured and you have set up RBAC
policies &lt;strong&gt;before&lt;/strong&gt; enabling external OIDC authentication.&lt;/p&gt;


&lt;/div&gt;

&lt;h4 id=&#34;step-2-configure-user-rbac&#34;&gt;Step 2: Configure user RBAC&lt;/h4&gt;
&lt;p&gt;When using external OIDC with OpenShift, user identities in Kubernetes are
derived from the OIDC token claims. OpenShift typically adds a configurable
prefix to the username (e.g., &lt;code&gt;oidc:&lt;/code&gt;) to distinguish OIDC users from other
identity sources.&lt;/p&gt;
&lt;p&gt;For example, if your OIDC provider returns &lt;code&gt;user@example.com&lt;/code&gt; in the email
claim and you configured a prefix of &lt;code&gt;oidc:&lt;/code&gt;, the Kubernetes username becomes
&lt;code&gt;oidc:user@example.com&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Create RBAC resources to grant users access to the namespaces they need. See
&lt;a href=&#34;https://v2-24.kiali.io/docs/configuration/rbac/&#34;&gt;Namespace access control&lt;/a&gt; for details on the required
privileges.&lt;/p&gt;
&lt;p&gt;Example &lt;code&gt;Role&lt;/code&gt; and &lt;code&gt;RoleBinding&lt;/code&gt; to grant a user access to the &lt;code&gt;istio-system&lt;/code&gt; namespace:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;apiVersion&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;rbac.authorization.k8s.io/v1&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;kind&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;Role&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;metadata&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;kiali-user-access&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;namespace&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;istio-system&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;rules&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;- &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;apiGroups&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;]&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;resources&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;- &lt;span style=&#34;color:#000&#34;&gt;namespaces&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;- &lt;span style=&#34;color:#000&#34;&gt;pods/log&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;verbs&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;- &lt;span style=&#34;color:#000&#34;&gt;get&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;---&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;apiVersion&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;rbac.authorization.k8s.io/v1&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;kind&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;RoleBinding&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;metadata&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;kiali-user-access&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;namespace&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;istio-system&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;subjects&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;- &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;kind&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;User&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;oidc:user@example.com&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Use the prefixed username&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;apiGroup&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;rbac.authorization.k8s.io&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;roleRef&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;kind&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;Role&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;kiali-user-access&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;apiGroup&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;rbac.authorization.k8s.io&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

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


    The username prefix (e.g., &lt;code&gt;oidc:&lt;/code&gt;) is configured in OpenShift&amp;rsquo;s
&lt;code&gt;Authentication&lt;/code&gt; resource under &lt;code&gt;spec.oidcProviders[].claimMappings.username.prefix.prefixString&lt;/code&gt;.
Make sure your RBAC resources use the same prefixed username format.

&lt;/div&gt;

&lt;h4 id=&#34;step-3-create-the-oidc-client-secret&#34;&gt;Step 3: Create the OIDC client secret&lt;/h4&gt;
&lt;p&gt;If your OIDC provider requires a client secret, create a Kubernetes secret to
store it:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;oc create secret generic kiali --from-literal&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;oidc-secret=&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$CLIENT_SECRET&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt; -n istio-system
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Replace &lt;code&gt;$CLIENT_SECRET&lt;/code&gt; with the client secret from your OIDC provider.&lt;/p&gt;
&lt;h4 id=&#34;step-4-configure-the-ca-certificate-if-needed&#34;&gt;Step 4: Configure the CA certificate (if needed)&lt;/h4&gt;
&lt;p&gt;If your OIDC provider uses a certificate issued by a private CA (not a public
CA), you need to configure Kiali to trust it. Create a ConfigMap with the CA
certificate:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;apiVersion&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;v1&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;kind&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;ConfigMap&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;metadata&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;kiali-cabundle&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;namespace&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;istio-system&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;data&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;openid-server-ca.crt&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;|&lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;    -----BEGIN CERTIFICATE-----
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;    MIIDxTCCAq2gAwIBAgIQAqxcJmoLQ...
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;    ... (your OIDC provider&amp;#39;s CA certificate) ...
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;    -----END CERTIFICATE-----&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;See &lt;a href=&#34;https://v2-24.kiali.io/docs/configuration/p8s-jaeger-grafana/tls-configuration/&#34;&gt;TLS Configuration&lt;/a&gt;
for more details on configuring custom CA certificates.&lt;/p&gt;
&lt;h4 id=&#34;step-5-configure-the-kiali-cr&#34;&gt;Step 5: Configure the Kiali CR&lt;/h4&gt;
&lt;p&gt;Configure Kiali to use the &lt;code&gt;openid&lt;/code&gt; authentication strategy. The &lt;code&gt;client_id&lt;/code&gt;
and &lt;code&gt;issuer_uri&lt;/code&gt; must match the values configured in OpenShift&amp;rsquo;s
&lt;code&gt;Authentication&lt;/code&gt; resource:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;spec&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;auth&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;strategy&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;openid&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;openid&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;client_id&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;kiali-client&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;issuer_uri&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;https://your-oidc-provider.example.com&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;scopes&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;- &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;openid&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;- &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;email&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;username_claim&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;email&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

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


    The &lt;code&gt;client_id&lt;/code&gt; must be listed in the &lt;code&gt;audiences&lt;/code&gt; array of your OpenShift OIDC
configuration, and the &lt;code&gt;issuer_uri&lt;/code&gt; must exactly match the issuer URL configured
in OpenShift. If these don&amp;rsquo;t match, authentication will fail.

&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Important configuration notes:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;username_claim&lt;/code&gt;&lt;/strong&gt;: Should match the claim mapping configured in OpenShift
(commonly &lt;code&gt;email&lt;/code&gt; or &lt;code&gt;preferred_username&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;scopes&lt;/code&gt;&lt;/strong&gt;: Request the scopes that provide the claims you need (typically
&lt;code&gt;openid&lt;/code&gt; and &lt;code&gt;email&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;disable_rbac&lt;/code&gt;&lt;/strong&gt;: Do &lt;strong&gt;not&lt;/strong&gt; set this to &lt;code&gt;true&lt;/code&gt; if you want per-user
namespace access control. When &lt;code&gt;disable_rbac&lt;/code&gt; is &lt;code&gt;false&lt;/code&gt; (the default), Kiali
uses the user&amp;rsquo;s OIDC token for Kubernetes API calls, enabling per-user RBAC.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;complete-example&#34;&gt;Complete example&lt;/h4&gt;
&lt;p&gt;Here&amp;rsquo;s a complete example of the Kiali CR configuration for OpenShift with an
external OIDC provider:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;apiVersion&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;kiali.io/v1alpha1&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;kind&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;Kiali&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;metadata&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;kiali&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;namespace&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;istio-system&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;spec&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;auth&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;strategy&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;openid&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;openid&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;client_id&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;kiali-client&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;issuer_uri&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;https://your-oidc-provider.example.com&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;scopes&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;- &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;openid&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;- &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;email&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;username_claim&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;email&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;With the supporting resources:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# OIDC client secret (if required by your provider)&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;apiVersion&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;v1&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;kind&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;Secret&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;metadata&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;kiali&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;namespace&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;istio-system&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;type&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;Opaque&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;stringData&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;oidc-secret&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;your-client-secret-here&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;---&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# CA certificate (if using a private CA)&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;apiVersion&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;v1&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;kind&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;ConfigMap&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;metadata&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;kiali-cabundle&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;namespace&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;istio-system&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;data&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;openid-server-ca.crt&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;|&lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;    -----BEGIN CERTIFICATE-----
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;    ... (your CA certificate) ...
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;    -----END CERTIFICATE-----&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;---&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# RBAC for a user (repeat for each user/namespace combination)&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;apiVersion&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;rbac.authorization.k8s.io/v1&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;kind&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;Role&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;metadata&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;kiali-user-access&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;namespace&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;istio-system&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;rules&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;- &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;apiGroups&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;]&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;resources&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;- &lt;span style=&#34;color:#000&#34;&gt;namespaces&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;- &lt;span style=&#34;color:#000&#34;&gt;pods/log&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;verbs&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;- &lt;span style=&#34;color:#000&#34;&gt;get&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;---&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;apiVersion&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;rbac.authorization.k8s.io/v1&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;kind&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;RoleBinding&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;metadata&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;kiali-user-access&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;namespace&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;istio-system&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;subjects&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;- &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;kind&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;User&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;oidc:user@example.com&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;apiGroup&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;rbac.authorization.k8s.io&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;roleRef&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;kind&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;Role&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;kiali-user-access&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;apiGroup&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;rbac.authorization.k8s.io&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;using-with-azure-aks-and-aad&#34;&gt;Using with Azure: AKS and AAD&lt;/h3&gt;


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


    The OpenID authentication strategy can be used
with Azure Kubernetes Service (AKS) and Azure Active Directory (AAD) with Kiali
versions 1.33 and later. Prior Kiali versions do not support namespace access control on Azure.

&lt;/div&gt;

&lt;p&gt;AKS has support for a feature named &lt;em&gt;AKS-managed Azure Active Directory&lt;/em&gt;, which
enables integration between AKS and AAD. This has the advantage that users can
use their AAD credentials to access AKS clusters and can also use Kubernetes
RBAC features to assign privileges to AAD users.&lt;/p&gt;
&lt;p&gt;However, Azure is implementing this integration via the
&lt;a href=&#34;https://kubernetes.io/docs/reference/access-authn-authz/authentication/#webhook-token-authentication&#34;&gt;Kubernetes Webhook Token Authentication&lt;/a&gt;
rather than via the &lt;a href=&#34;https://kubernetes.io/docs/reference/access-authn-authz/authentication/#openid-connect-tokens&#34;&gt;Kubernetes OpenID Connect Tokens authentication&lt;/a&gt;
(see &lt;a href=&#34;https://docs.microsoft.com/en-us/azure/aks/concepts-identity#azure-ad-integration&#34;&gt;the Azure AD integration section in AKS Concepts documentation&lt;/a&gt;).
Because of this difference, authentication in AKS behaves slightly different from a standard
OpenID setup, but Kiali&amp;rsquo;s OpenID authentication strategy can still be used with
namespace access control support by following the next steps.&lt;/p&gt;
&lt;p&gt;First, enable the AAD integration on your AKS cluster. See the
&lt;a href=&#34;https://docs.microsoft.com/en-us/azure/aks/managed-aad&#34;&gt;official AKS documentation to learn how&lt;/a&gt;.
Once it is enabled, your AKS panel should show the following:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/documentation/authentication/azure-managed-aad-enabled.png&#34; alt=&#34;AKS-managed AAD is enabled,700&#34;&gt;&lt;/p&gt;
&lt;p&gt;Create a web application for Kiali in your Azure AD panel:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Go to &lt;em&gt;AAD &amp;gt; App Registration&lt;/em&gt;, create an application with a redirect url like &lt;code&gt;https://&amp;lt;your-kiali-url&amp;gt;/kiali&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Go to &lt;em&gt;Certificates &amp;amp; secrets&lt;/em&gt; and create a client secret.
&lt;ol&gt;
&lt;li&gt;After creating the client secret, take note of the provided secret. Create a
Kubernetes secret in your cluster as mentioned in the &lt;a href=&#34;#setup-with-rbac&#34;&gt;Set-up
with namespace access control support&lt;/a&gt; section. Please, note that the suggested name for the
Kubernetes Secret is &lt;code&gt;kiali&lt;/code&gt;. If you want to customize the secret name, you
will have to specify your custom name in the Kiali CR. See: &lt;a href=&#34;https://v2-24.kiali.io/docs/configuration/kialis.kiali.io/#.spec.deployment.secret_name&#34;&gt;secret_name in Kial CR Reference&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;Go to &lt;em&gt;API Permissions&lt;/em&gt; and press the &lt;em&gt;Add a permission&lt;/em&gt; button. In the new page that appears, switch to the
&lt;em&gt;APIs my organization uses&lt;/em&gt; tab.&lt;/li&gt;
&lt;li&gt;Type the following ID in the search field:
&lt;code&gt;6dae42f8-4368-4678-94ff-3960e28e3630&lt;/code&gt; (this is a shared ID for all Azure
clusters). And select the resulting entry.&lt;/li&gt;
&lt;li&gt;Select the &lt;em&gt;Delegated permissions&lt;/em&gt; square.&lt;/li&gt;
&lt;li&gt;Select the &lt;code&gt;user.read&lt;/code&gt; permission.&lt;/li&gt;
&lt;li&gt;Go to &lt;em&gt;Authentication&lt;/em&gt; and make sure that the &lt;em&gt;Access tokens&lt;/em&gt; checkbox is ticked.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/documentation/authentication/azure-access-token-ticked.png&#34; alt=&#34;Access tokens enabled&#34;&gt;&lt;/p&gt;
&lt;p&gt;Then, create or modify your Kiali CR and include the following settings:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;spec&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;auth&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;strategy&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;openid&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;openid&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;client_id&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&amp;lt;your Kiali application client id from Azure&amp;gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;issuer_uri&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;https://sts.windows.net/&amp;lt;your AAD tenant id&amp;gt;/&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;username_claim&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;preferred_username&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;api_token&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;access_token&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;additional_request_params&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;resource&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;6dae42f8-4368-4678-94ff-3960e28e3630&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;You can find your &lt;code&gt;client_id&lt;/code&gt; and &lt;code&gt;tenant_id&lt;/code&gt; in the Overview page of the Kiali
App registration that you just created. See &lt;a href=&#34;https://docs.microsoft.com/en-us/azure/digital-twins/how-to-create-app-registration#collect-client-id-and-tenant-id&#34;&gt;this documentation for more information&lt;/a&gt;.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: OpenShift strategy</title>
      <link>https://v2-24.kiali.io/docs/configuration/authentication/openshift/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://v2-24.kiali.io/docs/configuration/authentication/openshift/</guid>
      <description>
        
        
        &lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;The &lt;code&gt;openshift&lt;/code&gt; authentication strategy is the preferred and default strategy
when Kiali is deployed on an OpenShift cluster.&lt;/p&gt;
&lt;p&gt;When using the &lt;code&gt;openshift&lt;/code&gt; strategy, a user logging into Kiali will be
redirected to the login page of the OpenShift console. Once the user provides
his OpenShift credentials, he will be redireted back to Kiali and will be
logged in if the user has enough privileges.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;openshift&lt;/code&gt; strategy supports &lt;a href=&#34;https://v2-24.kiali.io/docs/configuration/rbac/&#34;&gt;namespace access control&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;openshift&lt;/code&gt; strategy is supported for single and multi-cluster deployments.&lt;/p&gt;
&lt;h2 id=&#34;set-up&#34;&gt;Set-up&lt;/h2&gt;
&lt;p&gt;Since &lt;code&gt;openshift&lt;/code&gt; is the default strategy when deploying Kiali in OpenShift,
you shouldn&amp;rsquo;t need to configure anything. If you want to be verbose, use the
following configuration in the Kiali CR:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;spec&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;auth&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;strategy&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;openshift&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The Kiali operator will make sure to setup the needed OpenShift OAuth resources to register
Kiali as a client for the most common use-cases. The &lt;code&gt;openshift&lt;/code&gt; strategy does have a few
configuration settings that most people will never need but are available in case you have
a situation where the customization is needed. See the Kiali CR Reference page for the
documentation on those settings.&lt;/p&gt;
&lt;h3 id=&#34;multi-cluster&#34;&gt;Multi-Cluster&lt;/h3&gt;
&lt;p&gt;There are some things to know when using the &lt;code&gt;openshift&lt;/code&gt; strategy with Kiali in a multi-cluster environment.&lt;/p&gt;
&lt;h4 id=&#34;consistent-kiali-namespace-and-instance-name&#34;&gt;Consistent Kiali Namespace and Instance-Name&lt;/h4&gt;
&lt;p&gt;The default namespace for Kiali is &lt;code&gt;istio-system&lt;/code&gt;. But many users prefer to use a dedicated namespace for Kiali, such as &lt;code&gt;kiali&lt;/code&gt;, &lt;code&gt;kiali-server&lt;/code&gt;, etc. In a multi-cluster environment Kiali must be deployed in the same namespace on each cluster. Clusters that don&amp;rsquo;t have a Kiali deployment must still provide the namespace, to hold the remote cluster resources.&lt;/p&gt;
&lt;p&gt;The default instance-name for kiali is &lt;code&gt;kiali&lt;/code&gt;. Any change to the default must also be made consistently across all clusters.&lt;/p&gt;
&lt;p&gt;Assuming Kiali is installed via the Kiali Operator. Any customization would be done via the following CR settings:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;spec.deployment.namespace&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;spec.deployment.instance_name&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;


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


    &lt;p&gt;It is recommended that the Kiali Operator be deployed on all clusters, even if Kiali itself is not deployed. This will ensure that the proper namespace and remote cluster resources are created. For clusters without Kiali, requiring only the remote cluster resources (for auth), configure the CR with:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;spec.deployment.remote_cluster_resources_only: true&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;

&lt;h4 id=&#34;openshift-oauthclient-naming&#34;&gt;OpenShift OAuthClient Naming&lt;/h4&gt;
&lt;p&gt;OpenShift OAuth requires an &lt;code&gt;OAuthClient&lt;/code&gt; resource on each cluster to be named &lt;code&gt;&amp;lt;instance-name&amp;gt;-&amp;lt;namespace&amp;gt;&lt;/code&gt;. For example, if Kiali is installed with the default instance name &lt;code&gt;kiali&lt;/code&gt; in namespace &lt;code&gt;istio-system&lt;/code&gt;, the OAuthClient on every cluster must be named &lt;code&gt;kiali-istio-system&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Both the Kiali Operator and the Kiali Server helm chart automatically create the &lt;code&gt;OAuthClient&lt;/code&gt; with the correct name when they create the remote cluster resources. The &lt;code&gt;kiali-prepare-remote-cluster.sh&lt;/code&gt; script also delegates to the Kiali Server helm chart for resource creation and will produce a correctly-named &lt;code&gt;OAuthClient&lt;/code&gt;, provided you pass &lt;code&gt;--kiali-resource-name&lt;/code&gt; and &lt;code&gt;--remote-cluster-namespace&lt;/code&gt; values that match the Kiali instance name and namespace on the cluster where Kiali is deployed. If you are managing resources entirely manually, ensure the &lt;code&gt;OAuthClient&lt;/code&gt; on the remote cluster is named consistently with the Kiali instance name and namespace.&lt;/p&gt;
&lt;p&gt;If the &lt;code&gt;OAuthClient&lt;/code&gt; names do not match across clusters, OAuth authentication will fail.&lt;/p&gt;
&lt;h4 id=&#34;oauthclient-redirect-uris-for-remote-cluster-resources&#34;&gt;OAuthClient Redirect URIs for Remote Cluster Resources&lt;/h4&gt;
&lt;p&gt;When using &lt;code&gt;remote_cluster_resources_only: true&lt;/code&gt; on a remote cluster with the &lt;code&gt;openshift&lt;/code&gt; auth strategy, the Kiali Operator must create an &lt;code&gt;OAuthClient&lt;/code&gt; resource but cannot automatically determine the redirect URI (since there is no Kiali server or route on the remote cluster). You must explicitly specify the redirect URI in the Kiali CR on the remote cluster via &lt;code&gt;spec.auth.openshift.redirect_uris&lt;/code&gt;. Without this, the Kiali Operator will fail to reconcile with the error:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Redirect URIs for the Kiali Server OAuthClient are not specified via auth.openshift.redirect_uris;
this is required when creating remote cluster resources with auth.strategy of openshift.
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The redirect URI must point back to the Kiali server on the cluster where Kiali is deployed. Critically, the URI must include the remote cluster&amp;rsquo;s name as a path suffix in the form &lt;code&gt;https://&amp;lt;kiali-route-host&amp;gt;/api/auth/callback/&amp;lt;remote-cluster-name&amp;gt;&lt;/code&gt;. This is required so that the OAuth callback can correctly identify which cluster the login is for. Using the base &lt;code&gt;/api/auth/callback&lt;/code&gt; path (without the cluster name) will result in the login failing with a &lt;code&gt;http: named cookie not present&lt;/code&gt; error.&lt;/p&gt;
&lt;p&gt;To determine the correct URI:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;If Kiali is already deployed, run this on the cluster where Kiali is deployed: &lt;code&gt;oc get route -l app.kubernetes.io/name=kiali -n &amp;lt;kiali-namespace&amp;gt; -o jsonpath=&#39;{..spec.host}&#39;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;If Kiali is not yet deployed, you can predict the route hostname from the cluster&amp;rsquo;s app domain by running this on the cluster where Kiali will be deployed: &lt;code&gt;oc get ingresses.config.openshift.io cluster -o jsonpath=&#39;{.spec.domain}&#39;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The Kiali route hostname will be something like &lt;code&gt;kiali-&amp;lt;namespace&amp;gt;.&amp;lt;app-domain&amp;gt;&lt;/code&gt;, so the full redirect URI will be something like &lt;code&gt;https://kiali-&amp;lt;namespace&amp;gt;.&amp;lt;app-domain&amp;gt;/api/auth/callback/&amp;lt;remote-cluster-name&amp;gt;&lt;/code&gt;, where &lt;code&gt;&amp;lt;remote-cluster-name&amp;gt;&lt;/code&gt; is the Istio cluster name of the remote cluster.&lt;/p&gt;
&lt;p&gt;For example, if Kiali is deployed in namespace &lt;code&gt;istio-system&lt;/code&gt; with instance_name &lt;code&gt;kiali&lt;/code&gt;, the app domain is &lt;code&gt;apps.east.example.com&lt;/code&gt;, and the remote cluster&amp;rsquo;s Istio cluster name is &lt;code&gt;west&lt;/code&gt;, the Kiali CR on the remote cluster should include:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;spec&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;auth&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;openshift&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;redirect_uris&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;- &lt;span style=&#34;color:#000&#34;&gt;https://kiali-istio-system.apps.east.example.com/api/auth/callback/west&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;deployment&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;remote_cluster_resources_only&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;true&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;user-login-flow-for-multi-cluster&#34;&gt;User Login Flow for Multi-Cluster&lt;/h4&gt;
&lt;p&gt;When using the &lt;code&gt;openshift&lt;/code&gt; strategy with multiple clusters, users must be logged into each cluster in order to access resources on that cluster. The Kiali UI provides a mechanism to log into remote clusters:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;In your browser, navigate to the Kiali UI and log in using your credentials for the cluster where Kiali is deployed.&lt;/li&gt;
&lt;li&gt;Once logged in, use the user profile dropdown in the Kiali UI to initiate login to each remote cluster. Kiali will redirect you to the remote cluster&amp;rsquo;s OpenShift login page.&lt;/li&gt;
&lt;li&gt;Log in with your credentials for that remote cluster. You will be redirected back to the Kiali UI. Repeat step 2 for each additional remote cluster until you are logged into all clusters.&lt;/li&gt;
&lt;/ol&gt;


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


    Currently, OpenShift OAuth does not provide SSO across clusters. Each cluster requires its own login. If you are having trouble logging into a remote cluster from within Kiali, try starting a fresh private/incognito browser tab to ensure there are no stale OAuth cookies from prior logins to the remote cluster&amp;rsquo;s OpenShift console.

&lt;/div&gt;

&lt;h4 id=&#34;using-an-internal-or-self-signed-certificate&#34;&gt;Using an internal or self-signed certificate&lt;/h4&gt;
&lt;p&gt;If you have a multi-cluster Kiali deployment and the OAuth server is configured with an external IdP that uses an internal or self-signed certificate, you can configure Kiali to trust the server&amp;rsquo;s certificate by creating a ConfigMap named &lt;code&gt;kiali-oauth-cabundle&lt;/code&gt; containing the CA certificate bundle for the server under the &lt;code&gt;oauth-server-ca.crt&lt;/code&gt; key:&lt;/p&gt;


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


    Note that if you are deploying Kiali with &lt;code&gt;spec.deployment.instance_name&lt;/code&gt; set to a value that is different than the default of &lt;code&gt;kiali&lt;/code&gt;, your ConfigMap name needs to be that instance name appended with &amp;ldquo;-oauth-bundle&amp;rdquo;. For example, if your instance name is &amp;ldquo;myserver&amp;rdquo; then the name of the ConfigMap must be &lt;code&gt;myserver-oauth-cabundle&lt;/code&gt;.

&lt;/div&gt;

&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;apiVersion&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;v1&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;kind&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;ConfigMap&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;metadata&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;kiali-oauth-cabundle&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;namespace&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;istio-system&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# This is Kiali&amp;#39;s install namespace&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;data&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;oauth-server-ca.crt&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;&amp;lt;PEM encoded CA root certificate&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Kiali will automatically trust this root certificate for all HTTPS requests (not just OAuth). The certificate is loaded into Kiali&amp;rsquo;s global certificate pool. Kiali watches for changes to the CA bundle and automatically refreshes without requiring a pod restart. If you have multiple different CAs, for different clusters, include each as a separate block in the bundle.&lt;/p&gt;


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


    For most use cases, you can simply add your CA to the &lt;code&gt;kiali-cabundle&lt;/code&gt; ConfigMap under the &lt;code&gt;additional-ca-bundle.pem&lt;/code&gt; key instead of creating a separate &lt;code&gt;kiali-oauth-cabundle&lt;/code&gt; ConfigMap. Both approaches result in the CA being trusted globally.

&lt;/div&gt;

&lt;h4 id=&#34;insecure-setting&#34;&gt;Insecure setting&lt;/h4&gt;


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


    You should only use this setting for testing and not in a production environment.

&lt;/div&gt;

&lt;p&gt;You can disable certificate validation between Kiali and the remote OAuth server(s) by setting &lt;code&gt;insecure_skip_verify_tls&lt;/code&gt; to &lt;code&gt;true&lt;/code&gt; in
the Kiali CR:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;spec&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;auth&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;openshift&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;insecure_skip_verify_tls&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;true&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
      </description>
    </item>
    
    <item>
      <title>Docs: The Kiali CR</title>
      <link>https://v2-24.kiali.io/docs/installation/installation-guide/creating-updating-kiali-cr/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://v2-24.kiali.io/docs/installation/installation-guide/creating-updating-kiali-cr/</guid>
      <description>
        
        
        &lt;p&gt;The Kiali Operator watches the &lt;em&gt;Kiali Custom Resource&lt;/em&gt; (&lt;a href=&#34;https://v2-24.kiali.io/docs/configuration/kialis.kiali.io&#34;&gt;Kiali CR&lt;/a&gt;), a custom resource that  contains the Kiali Server deployment configuration. Creating, updating, or removing a
Kiali CR will trigger the Kiali Operator to install, update, or remove Kiali.&lt;/p&gt;


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


    &lt;p&gt;If you want the operator to re-process the Kiali CR (called &amp;ldquo;reconciliation&amp;rdquo;) without having to change the Kiali CR&amp;rsquo;s &lt;code&gt;spec&lt;/code&gt; fields, you can modify any annotation on the Kiali CR itself. This will trigger the operator to reconcile the current state of the cluster with the desired state defined in the Kiali CR, modifying cluster resources if necessary to get them into their desired state. Here is an example illustrating how you can modify an annotation on a Kiali CR:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ kubectl annotate kiali my-kiali -n istio-system --overwrite kiali.io/reconcile=&amp;#34;$(date)&amp;#34;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;The Operator provides comprehensive defaults for all properties of the Kiali
CR. Hence, the minimal Kiali CR does not have a &lt;code&gt;spec&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;apiVersion&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;kiali.io/v1alpha1&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;kind&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;Kiali&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;metadata&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;kiali&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Assuming you saved the previous YAML to a file named &lt;code&gt;my-kiali-cr.yaml&lt;/code&gt;, and that you are
installing Kiali in the same default namespace as Istio, create the resource with the following command:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ kubectl apply -f my-kiali-cr.yaml -n istio-system
&lt;/code&gt;&lt;/pre&gt;

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


    Often, but not always, Kiali is installed in the same namespace as Istio, thus the Kiali CR is also created in the Istio namespace.

&lt;/div&gt;

&lt;p&gt;Once created, the Kiali Operator should shortly be notified and will process the resource,  performing the Kiali
installation. You can wait for the Kiali Operator to finish the reconcilation by using the standard &lt;code&gt;kubectl wait&lt;/code&gt;
command and ask for it to wait for the Kiali CR to achieve the condition of &lt;code&gt;Successful&lt;/code&gt;. For example:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;kubectl wait --for=condition=Successful kiali kiali -n istio-system
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;You can check the installation progress by inspecting the &lt;code&gt;status&lt;/code&gt; attribute of the created Kiali CR:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ kubectl describe kiali kiali -n istio-system
Name:         kiali
Namespace:    istio-system
Labels:       &amp;lt;none&amp;gt;
Annotations:  &amp;lt;none&amp;gt;
API Version:  kiali.io/v1alpha1
Kind:         Kiali

  (...some output is removed...)

Status:
  Conditions:
    Last Transition Time:  2021-09-15T17:17:40Z
    Message:               Running reconciliation
    Reason:                Running
    Status:                True
    Type:                  Running
  Deployment:
    Instance Name:  kiali
    Namespace:      istio-system
  Environment:
    Is Kubernetes:       true
    Kubernetes Version:  1.27.3
    Operator Version:    v1.89.0
  Progress:
    Duration:    0:00:16
    Message:     5. Creating core resources
  Spec Version:  default
Events:        &amp;lt;none&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

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


    &lt;em&gt;Never&lt;/em&gt; manually edit resources created by the Kiali Operator; only edit the Kiali CR.

&lt;/div&gt;

&lt;p&gt;You may want to check the &lt;a href=&#34;https://v2-24.kiali.io/docs/installation/installation-guide/example-install/&#34;&gt;example install page&lt;/a&gt; to see some examples where the Kiali CR has a &lt;code&gt;spec&lt;/code&gt; and to better
understand its structure. Most available attributes of the Kiali CR are
described in the pages of the &lt;a href=&#34;https://v2-24.kiali.io/docs/installation/&#34;&gt;Installation&lt;/a&gt; and
&lt;a href=&#34;https://v2-24.kiali.io/docs/configuration/&#34;&gt;Configuration&lt;/a&gt; sections of the
documentation. For a complete list, see the &lt;a href=&#34;https://v2-24.kiali.io/docs/configuration/kialis.kiali.io&#34;&gt;Kiali CR Reference&lt;/a&gt;.&lt;/p&gt;


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


    It is important to understand the &lt;code&gt;spec.deployment.cluster_wide_access&lt;/code&gt; setting in the CR. See the
&lt;a href=&#34;https://v2-24.kiali.io/docs/configuration/namespace-management/&#34;&gt;Namespace Management page&lt;/a&gt;
for more information.

&lt;/div&gt;

&lt;p&gt;Once you created a Kiali CR, you can manage your Kiali installation by editing
the resource using the usual Kubernetes tools:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ kubectl edit kiali kiali -n istio-system
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;To confirm your Kiali CR is valid, you can utilize the &lt;a href=&#34;https://v2-24.kiali.io/docs/configuration/kialis.kiali.io/#validating-your-kiali-cr&#34;&gt;Kiali CR validation tool&lt;/a&gt;.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: The OSSMConsole CR</title>
      <link>https://v2-24.kiali.io/docs/installation/installation-guide/creating-updating-ossmconsole-cr/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://v2-24.kiali.io/docs/installation/installation-guide/creating-updating-ossmconsole-cr/</guid>
      <description>
        
        
        &lt;p&gt;OpenShift ServiceMesh Console (aka OSSMC) provides a Kiali integration with the OpenShift Console; in other words it provides Kiali functionality within the context of the OpenShift Console. OSSMC is applicable only within OpenShift environments.&lt;/p&gt;
&lt;p&gt;The main component of OSSMC is a plugin that gets installed inside the OpenShift Console. Prior to installing this plugin, you are required to have already installed the Kiali Operator and Kiali Server in your OpenShift environment. Please the &lt;a href=&#34;https://v2-24.kiali.io/docs/installation/installation-guide/&#34;&gt;Installation Guide&lt;/a&gt; for details.&lt;/p&gt;


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


    There are no helm charts available to install OSSMC. You must utilize the Kiali Operator to install it. Installing the Kiali Operator on OpenShift is very easy due to the Operator Lifecycle Manager (OLM) functionality that comes with OpenShift out-of-box. Simply elect to install the Kiali Operator from the Red Hat or Community Catalog from the OperatorHub page in OpenShift Console.

&lt;/div&gt;

&lt;p&gt;The Kiali Operator watches the &lt;em&gt;OSSMConsole Custom Resource&lt;/em&gt; (&lt;a href=&#34;https://v2-24.kiali.io/docs/configuration/ossmconsoles.kiali.io&#34;&gt;OSSMConsole CR&lt;/a&gt;), a custom resource that contains the OSSMC deployment configuration. Creating, updating, or removing a OSSMConsole CR will trigger the Kiali Operator to install, update, or remove OSSMC.&lt;/p&gt;


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


    &lt;em&gt;Never&lt;/em&gt; manually edit resources created by the Kiali Operator, only edit the OSSMConsole CR.

&lt;/div&gt;

&lt;h2 id=&#34;creating-the-ossmconsole-cr-to-install-the-ossmc-plugin&#34;&gt;Creating the OSSMConsole CR to Install the OSSMC Plugin&lt;/h2&gt;
&lt;p&gt;With the Kiali Operator and Kial Server installed and running, you can install the OSSMC plugin in one of two ways - either via the OpenShift Console or via the &amp;ldquo;oc&amp;rdquo; CLI. Both methods are described below. You choose the method you want to use.&lt;/p&gt;


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


    You should specify the &lt;code&gt;spec.version&lt;/code&gt; field of the OSSMConsole CR, and its value must be the same version as that of the Kiali Server (i.e. it must match the &lt;code&gt;spec.version&lt;/code&gt; of the Kiali Server&amp;rsquo;s Kiali CR). Normally, you can just set &lt;code&gt;spec.version&lt;/code&gt; to &lt;code&gt;default&lt;/code&gt; which tells the Kiali Operator to install OSSMC whose version is the same as that of the operator itself. Alternatively, you may specify one of the
&lt;a href=&#34;https://github.com/kiali/kiali-operator/blob/master/playbooks/ossmconsole-default-supported-images.yml&#34;&gt;supported versions&lt;/a&gt; in the format &lt;code&gt;vX.Y&lt;/code&gt;.

&lt;/div&gt;

&lt;h3 id=&#34;installing-via-openshift-console&#34;&gt;Installing via OpenShift Console&lt;/h3&gt;
&lt;p&gt;From the Kiali Operator details page in the OpenShift Console, create an instance of the &amp;ldquo;OpenShift Service Mesh Console&amp;rdquo; resource. Accept the defaults on the installation form and press &amp;ldquo;Create&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/documentation/installation/installation-guide/01-ui-install-cr.png&#34; alt=&#34;Install Plugin&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;installing-via-oc-cli&#34;&gt;Installing via &amp;ldquo;oc&amp;rdquo; CLI&lt;/h3&gt;
&lt;p&gt;To instruct the Kiali Operator to install the plugin, simply create a small OSSMConsole CR. A minimal CR can be created like this:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cat &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;lt;&amp;lt;EOM | oc apply -f -
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;apiVersion: kiali.io/v1alpha1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;kind: OSSMConsole
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;metadata:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;  namespace: openshift-operators
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;  name: ossmconsole
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;spec:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;  version: default
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;EOM&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Note that the operator will deploy the plugin resources in the same namespace where you create this OSSMConsole CR - in this case &lt;code&gt;openshift-operators&lt;/code&gt; but you can create the CR in any namespace.&lt;/p&gt;
&lt;p&gt;For a complete list of configuration options available within the OSSMConsole CR, see the &lt;a href=&#34;https://v2-24.kiali.io/docs/configuration/ossmconsoles.kiali.io&#34;&gt;OSSMConsole CR Reference&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;To confirm your OSSMConsole CR is valid, you can utilize the &lt;a href=&#34;https://v2-24.kiali.io/docs/configuration/ossmconsoles.kiali.io/#validating-your-ossmconsole-cr&#34;&gt;OSSMConsole CR validation tool&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&#34;installation-status&#34;&gt;Installation Status&lt;/h3&gt;
&lt;p&gt;After the plugin is installed, you can see the &amp;ldquo;OSSMConsole&amp;rdquo; resource that was created in the OpenShift Console UI. Within the operator details page in the OpenShift Console UI, select the &lt;em&gt;OpenShift Service Mesh Console&lt;/em&gt; tab to view the resource that was created and its status. The CR status field will provide you with any error messages should the deployment of OSSMC fail.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/documentation/installation/installation-guide/02-ui-installed-cr.png&#34; alt=&#34;Installed Plugin&#34;&gt;&lt;/p&gt;
&lt;p&gt;Once the operator has finished processing the OSSMConsole CR, you must then wait for the OpenShift Console to load and initialize the plugin. This may take a minute or two. You will know when the plugin is ready when the OpenShift Console pops up this message - when you see this message, refresh the browser window to reload the OpenShift Console:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/documentation/installation/installation-guide/03-ui-installed-cr-plugin-ready.png&#34; alt=&#34;Plugin Ready&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;uninstalling-ossmc&#34;&gt;Uninstalling OSSMC&lt;/h2&gt;
&lt;p&gt;This section will describe how to uninstall the OpenShift Service Mesh Console plugin. You can uninstall the plugin in one of two ways - either via the OpenShift Console or via the &amp;ldquo;oc&amp;rdquo; CLI. Both methods are described in the sections below. You choose the method you want to use.&lt;/p&gt;


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


    If you intend to also uninstall the Kiali Operator, it is very important to first uninstall the OSSMConsole CR and then uninstall the operator. If you uninstall the operator before ensuring the OSSMConsole CR is deleted then you may have difficulty removing that CR and its namespace. If this occurs then you must manually remove the finalizer on the CR in order to delete it and its namespace. You can do this via: &lt;code&gt;oc patch ossmconsoles &amp;lt;CR name&amp;gt; -n &amp;lt;CR namespace&amp;gt; -p &#39;{&amp;quot;metadata&amp;quot;:{&amp;quot;finalizers&amp;quot;: []}}&#39; --type=merge &lt;/code&gt;

&lt;/div&gt;

&lt;h3 id=&#34;uninstalling-via-openshift-console&#34;&gt;Uninstalling via OpenShift Console&lt;/h3&gt;
&lt;p&gt;Remove the OSSMConsole CR by navigating to the operator details page in the OpenShift Console UI. From the operator details page, select the &lt;em&gt;OpenShift Service Mesh Console&lt;/em&gt; tab and then select the Delete option in the kebab menu.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://v2-24.kiali.io/images/documentation/installation/installation-guide/04-ui-uninstall-cr.png&#34; alt=&#34;Uninstall Plugin&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;uninstalling-via-oc-cli&#34;&gt;Uninstalling via &amp;ldquo;oc&amp;rdquo; CLI&lt;/h3&gt;
&lt;p&gt;Remove the OSSMConsole CR via &lt;code&gt;oc delete ossmconsoles &amp;lt;CR name&amp;gt; -n &amp;lt;CR namespace&amp;gt;&lt;/code&gt;. To make sure any and all CRs are deleted from any and all namespaces, you can run this command:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;for&lt;/span&gt; r in &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;$(&lt;/span&gt;oc get ossmconsoles --ignore-not-found&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#204a87&#34;&gt;true&lt;/span&gt; --all-namespaces -o custom-columns&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;NS:.metadata.namespace,N:.metadata.name --no-headers &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;|&lt;/span&gt; sed &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;s/  */:/g&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;)&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;;&lt;/span&gt; &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;do&lt;/span&gt; oc delete ossmconsoles -n &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;$(&lt;/span&gt;&lt;span style=&#34;color:#204a87&#34;&gt;echo&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;$r&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;|&lt;/span&gt;cut -d: -f1&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;)&lt;/span&gt; &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;$(&lt;/span&gt;&lt;span style=&#34;color:#204a87&#34;&gt;echo&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;$r&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;|&lt;/span&gt;cut -d: -f2&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;)&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;;&lt;/span&gt; &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;done&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
      </description>
    </item>
    
    <item>
      <title>Docs: Accessing Kiali</title>
      <link>https://v2-24.kiali.io/docs/installation/installation-guide/accessing-kiali/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://v2-24.kiali.io/docs/installation/installation-guide/accessing-kiali/</guid>
      <description>
        
        
        &lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;After Kiali is succesfully installed you will need to make Kiali accessible to users. This page describes some popular methods of exposing Kiali for use.&lt;/p&gt;
&lt;p&gt;If exposing Kiali in a custom way, you may need to &lt;a href=&#34;#route-configs&#34;&gt;set some configurations&lt;/a&gt;
to make Kiali aware of how users will access Kiali.&lt;/p&gt;


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


    The examples on this page assume that you followed the &lt;a href=&#34;https://v2-24.kiali.io/docs/installation/installation-guide/&#34;&gt;Installation guide&lt;/a&gt; to install Kiali, and that you
installed Kiali in the &lt;code&gt;istio-system&lt;/code&gt; namespace.

&lt;/div&gt;

&lt;h2 id=&#34;accessing-kiali-using-port-forwarding&#34;&gt;Accessing Kiali using port forwarding&lt;/h2&gt;


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


    This method should work in any kind of Kubernetes cluster.

&lt;/div&gt;

&lt;p&gt;You can use port-forwarding to access Kiali by running any of these commands:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;# If you have oc command line tool
oc port-forward svc/kiali 20001:20001 -n istio-system
# If you have kubectl command line tool
kubectl port-forward svc/kiali 20001:20001 -n istio-system
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;These commands will block. Access Kiali by visiting &lt;code&gt;https://localhost:20001/&lt;/code&gt; in
your preferred web browser.&lt;/p&gt;


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


    Please note that this method exposes Kiali &lt;em&gt;only&lt;/em&gt; to the local machine, no external users. You must
have the necessary privileges to perform port forwarding.

&lt;/div&gt;

&lt;h2 id=&#34;ingress-access&#34;&gt;Accessing Kiali through an Ingress&lt;/h2&gt;
&lt;p&gt;You can configure Kiali to be installed with an
&lt;a href=&#34;https://github.com/kiali/kiali-operator/blob/master/roles/default/kiali-deploy/templates/kubernetes/ingress.yaml&#34;&gt;Ingress resource&lt;/a&gt;
defined, allowing you to access
the Kiali UI through the Ingress. By default, an Ingress will not be created. You can
enable a simple Ingress by setting &lt;code&gt;spec.deployment.ingress.enabled&lt;/code&gt; to &lt;code&gt;true&lt;/code&gt; in the Kiali
CR (a similar setting for the server Helm chart is available if you elect to install Kiali
via Helm as opposed to the Kiali Operator).&lt;/p&gt;
&lt;p&gt;Exposing Kiali externally through this &lt;code&gt;spec.deployment.ingress&lt;/code&gt; mechanism is a
convenient way of exposing Kiali externally but it will not necessarily work or
be the best way to do it because the way in which you should expose Kiali
externally will be highly dependent on your specific cluster environment and
how services are exposed generally for that environment.&lt;/p&gt;


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


    When installing on an OpenShift cluster, an OpenShift Route will be installed (not an Ingress).
This Route &lt;em&gt;will&lt;/em&gt; be installed by default unless you explicitly
disable it via &lt;code&gt;spec.deployment.ingress.enabled: false&lt;/code&gt;. Note that the Route is required
if you configure Kiali to use the auth strategy of &lt;code&gt;openshift&lt;/code&gt; (which is the default
auth strategy Kiali will use when installed on OpenShift).

&lt;/div&gt;

&lt;p&gt;The default Ingress that is created will be configured for a typical NGinx implementation. If you have your own
Ingress implementation you want to use, you can override the default configuration through
the settings &lt;code&gt;spec.deployment.ingress.override_yaml&lt;/code&gt; and &lt;code&gt;spec.deployment.ingress.class_name&lt;/code&gt;.
More details on customizing the Ingress can be found below.&lt;/p&gt;
&lt;p&gt;The Ingress IP or domain name should then be used to access the Kiali UI. To find your Ingress IP or domain name, as per
&lt;a href=&#34;https://minikube.sigs.k8s.io/docs/start/#Ingress&#34;&gt;the minikube documentation&lt;/a&gt;,
try the following command (though this may not work if using Minikube without the ingress addon):&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;kubectl get ingress kiali -n istio-system -o jsonpath=&amp;#39;{.status.loadBalancer.ingress[0].ip}&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;If it doesn&amp;rsquo;t work, unfortunately, it depends on how and where you had setup
your cluster. There are several Ingress controllers available and some cloud
providers have their own controller or preferred exposure method. Check
the documentation of your cloud provider. You may need to customize the
pre-installed Ingress rule or expose Kiali using a different method.&lt;/p&gt;
&lt;h3 id=&#34;customizing-the-ingress-resource&#34;&gt;Customizing the Ingress resource&lt;/h3&gt;
&lt;p&gt;The created Ingress resource will route traffic to Kiali regardless of the domain in the URL.
You may need a more specific Ingress resource that routes traffic
to Kiali only on a specific domain or path. To do this, you can &lt;a href=&#34;#route-configs&#34;&gt;specify route settings&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Alternatively, and for more advanced Ingress configurations, you can provide your own
Ingress declaration in the Kiali CR. For example:&lt;/p&gt;


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


    When installing on an OpenShift cluster, the &lt;code&gt;deployment.ingress.override_yaml&lt;/code&gt; will be applied
to the created Route. The &lt;code&gt;deployment.ingress.class_name&lt;/code&gt; is ignored on OpenShift.

&lt;/div&gt;

&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;spec&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;deployment&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;ingress&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;class_name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;nginx&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;enabled&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;true&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;override_yaml&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;metadata&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;          &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;annotations&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;            &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;nginx.ingress.kubernetes.io/secure-backends&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;true&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;            &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;nginx.ingress.kubernetes.io/backend-protocol&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;HTTPS&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;spec&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;          &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;rules&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;            &lt;/span&gt;- &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;http&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;                &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;paths&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;                  &lt;/span&gt;- &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;path&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;/kiali&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;                    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;backend&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;                      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;serviceName&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;kiali&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;                      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;servicePort&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;20001&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;accessing-kiali-in-minikube&#34;&gt;Accessing Kiali in Minikube&lt;/h2&gt;
&lt;p&gt;If you &lt;a href=&#34;https://minikube.sigs.k8s.io/docs/start/#Ingress&#34;&gt;enabled the Ingress addon&lt;/a&gt;,
the default Ingress resource created by the installation (mentioned in the previous section) should be enough to access
Kiali. The following command should open Kiali in your default web browser:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;xdg-open https://$(minikube ip)/kiali
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;accessing-kiali-through-a-loadbalancer-or-a-nodeport&#34;&gt;Accessing Kiali through a LoadBalancer or a NodePort&lt;/h2&gt;
&lt;p&gt;By default, the Kiali service is created with the &lt;code&gt;ClusterIP&lt;/code&gt; type. To use a
&lt;code&gt;LoadBalancer&lt;/code&gt; or a &lt;code&gt;NodePort&lt;/code&gt;, you can change the service type in the Kiali CR as
follows:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;spec&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;deployment&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;service_type&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;LoadBalancer&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Once the Kiali operator updates the installation, you should be able to use
the &lt;code&gt;kubectl get svc -n istio-system kiali&lt;/code&gt; command to retrieve the external
address (or port) to access Kiali. For example, in the following output Kiali
is assigned the IP &lt;code&gt;192.168.49.201&lt;/code&gt;, which means that you can access Kiali by
visiting &lt;code&gt;http://192.168.49.201:20001&lt;/code&gt; in a browser:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;NAME    TYPE           CLUSTER-IP       EXTERNAL-IP      PORT(S)                          AGE
kiali   LoadBalancer   10.105.236.127   192.168.49.201   20001:31966/TCP,9090:30128/TCP   34d
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;If you are using the &lt;code&gt;LoadBalancer&lt;/code&gt; service type to directly expose the Kiali
service, you may want to check the available options for the
&lt;a href=&#34;https://v2-24.kiali.io/docs/installation/deployment-options/#http-server&#34;&gt;HTTP Server&lt;/a&gt; and
&lt;a href=&#34;https://v2-24.kiali.io/docs/installation/deployment-options/#metrics-server&#34;&gt;Metrics server&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;accessing-kiali-through-an-istio-ingress-gateway&#34;&gt;Accessing Kiali through an Istio Ingress Gateway&lt;/h2&gt;
&lt;p&gt;If you want to take advantage of Istio&amp;rsquo;s infrastructure, you can expose Kiali
using an Istio Ingress Gateway. The Istio documentation provides a
&lt;a href=&#34;https://istio.io/latest/docs/tasks/observability/gateways/&#34;&gt;good guide explaining how to expose the sample add-ons&lt;/a&gt;.
Even if the Istio guide is focused on the sample add-ons, the steps are the same to expose a Kiali
installed using this &lt;a href=&#34;https://v2-24.kiali.io/docs/installation/installation-guide/&#34;&gt;Installation guide&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;accessing-kiali-in-openshift&#34;&gt;Accessing Kiali in OpenShift&lt;/h2&gt;
&lt;p&gt;By default, Kiali is exposed through a Route if installed on OpenShift. The following command
should open Kiali in your default web browser:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;xdg-open https://$(oc get routes -n istio-system kiali -o jsonpath=&amp;#39;{.spec.host}&amp;#39;)/console
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;route-configs&#34;&gt;Specifying route settings&lt;/h2&gt;
&lt;p&gt;If you are using your own exposure method or if you are using one of
the methods mentioned in this page, you may need to configure the route that is
being used to access Kiali.&lt;/p&gt;
&lt;p&gt;In the Kiali CR, route settings are broken in several attributes. For example,
to specify that Kiali is being accessed under the
&lt;code&gt;https://apps.example.com:8080/dashboards/kiali&lt;/code&gt; URI, you would need to set the
following:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;spec&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;server&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;web_fqdn&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;apps.example.com&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;web_port&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;8080&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;web_root&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;/dashboards/kiali&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;web_schema&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;https&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;If you are letting the installation create an &lt;a href=&#34;#ingress-access&#34;&gt;Ingress resource for you&lt;/a&gt;,
the Ingress will be adjusted to match these route settings.
If you are using your own exposure method, these spec.server settings are only making Kiali aware
of what its public endpoint is.&lt;/p&gt;
&lt;p&gt;It is possible to omit these settings and Kiali may be able to discover some of
these configurations, depending on your exposure method. For example, if you
are exposing Kiali via &lt;code&gt;LoadBalancer&lt;/code&gt; or &lt;code&gt;NodePort&lt;/code&gt; service types, Kiali can
discover most of these settings. If you are using some kind of Ingress, Kiali
will honor &lt;code&gt;X-Forwarded-Proto&lt;/code&gt;, &lt;code&gt;X-Forwarded-Host&lt;/code&gt; and &lt;code&gt;X-Forwarded-Port&lt;/code&gt; HTTP
headers if they are properly injected in the request.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;web_root&lt;/code&gt; receives special treatment, because this is the path where Kiali
will serve itself (both the user interface and its api). This is useful if you
are serving multiple applications under the same domain. It must begin with a
slash and trailing slashes must be omitted. The default value is &lt;code&gt;/kiali&lt;/code&gt; for
Kubernetes and &lt;code&gt;/&lt;/code&gt; for OpenShift.&lt;/p&gt;


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


    Usually, these settings can be omitted. However, a few features require
that the Kiali&amp;rsquo;s public route be properly discoverable or that it is properly
configured; most notably, the &lt;a href=&#34;https://v2-24.kiali.io/docs/configuration/authentication/openid/&#34;&gt;OpenID authentication&lt;/a&gt;.

&lt;/div&gt;


      </description>
    </item>
    
    <item>
      <title>Docs: Token strategy</title>
      <link>https://v2-24.kiali.io/docs/configuration/authentication/token/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://v2-24.kiali.io/docs/configuration/authentication/token/</guid>
      <description>
        
        
        &lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;The &lt;code&gt;token&lt;/code&gt; authentication strategy allows a user to login to Kiali using the
token of a Kubernetes ServiceAccount. This is similar to the
&lt;a href=&#34;https://github.com/kubernetes/dashboard/blob/master/docs/user/access-control/README.md#login-view&#34;&gt;login view of Kubernetes Dashboard&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;token&lt;/code&gt; strategy supports &lt;a href=&#34;https://v2-24.kiali.io/docs/configuration/rbac/&#34;&gt;namespace access control&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;token&lt;/code&gt; strategy is only supported for single cluster.&lt;/p&gt;
&lt;h2 id=&#34;set-up&#34;&gt;Set-up&lt;/h2&gt;
&lt;p&gt;Since &lt;code&gt;token&lt;/code&gt; is the default strategy when deploying Kiali in Kubernetes, you
shouldn&amp;rsquo;t need to configure anything, unless your cluster is OpenShift. If you
want to be verbose or if you need to enable the &lt;code&gt;token&lt;/code&gt; strategy in OpenShift,
use the following configuration in the Kiali CR:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;spec&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;auth&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;strategy&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;token&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The &lt;code&gt;token&lt;/code&gt; strategy doesn&amp;rsquo;t have any additional configuration other than the
&lt;a href=&#34;https://v2-24.kiali.io/docs/configuration/authentication/session-configs/&#34;&gt;session expiration time&lt;/a&gt;.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Advanced Install</title>
      <link>https://v2-24.kiali.io/docs/installation/installation-guide/advanced-install-options/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://v2-24.kiali.io/docs/installation/installation-guide/advanced-install-options/</guid>
      <description>
        
        
        &lt;h2 id=&#34;canary-upgrades&#34;&gt;Canary upgrades&lt;/h2&gt;
&lt;p&gt;During a canary upgrade where multiple controlplanes are present, Kiali will automatically
detect both controlplanes. You can visit the &lt;a href=&#34;https://v2-24.kiali.io/docs/features/istio-component-status/#mesh-page&#34;&gt;mesh page&lt;/a&gt;
to visualize your controlplanes during a canary upgrade.&lt;/p&gt;
&lt;h2 id=&#34;installing-a-kiali-server-of-a-different-version-than-the-operator&#34;&gt;Installing a Kiali Server of a different version than the Operator&lt;/h2&gt;
&lt;p&gt;When you install the Kiali Operator, it will be configured to install a Kiali
Server that is the same version as the operator itself. For example, if you
have Kiali Operator v1.34.0 installed, that operator will install Kiali Server
v1.34.0. If you upgrade (or downgrade) the Kiali Operator, the operator will in
turn upgrade (or downgrade) the Kiali Server.&lt;/p&gt;
&lt;p&gt;There are certain use-cases in which you want the Kiali Operator to install a
Kiali Server whose version is different than the operator version. Read the
following section &lt;em&gt;&amp;laquo;Using a custom image registry&amp;raquo;&lt;/em&gt; section to learn how to
configure this setup.&lt;/p&gt;
&lt;h2 id=&#34;using-a-custom-image-registry&#34;&gt;Using a custom image registry&lt;/h2&gt;
&lt;p&gt;Kiali is released and published to the &lt;a href=&#34;https://quay.io/&#34;&gt;Quay.io container image registry&lt;/a&gt;. There is a &lt;a href=&#34;https://quay.io/repository/kiali/kiali-operator&#34;&gt;repository hosting the Kiali operator images&lt;/a&gt; and &lt;a href=&#34;https://quay.io/repository/kiali/kiali&#34;&gt;another one for the Kiali server images&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;If you need to mirror the Kiali container images to some other registry, you still can use Helm to install the Kiali operator as follows:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ helm install \
    --namespace kiali-operator \
    --create-namespace \
    --set image.repo=your.custom.registry/owner/kiali-operator-repo
    --set image.tag=your_custom_tag
    --set allowAdHocKialiImage=true
    kiali-operator \
    kiali/kiali-operator
&lt;/code&gt;&lt;/pre&gt;

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


    Notice the &lt;code&gt;--set allowAdHocKialiImage=true&lt;/code&gt; which allows specifying a
custom image in the Kiali CR. For security reasons, this is disabled by
default.

&lt;/div&gt;

&lt;p&gt;Then, when creating the Kiali CR, use the following attributes:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;spec&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;deployment&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;image_name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;your.custom.registry/owner/kiali-server-repo&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;image_version&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;your_custom_tag&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;change-the-default-image&#34;&gt;Change the default image&lt;/h3&gt;
&lt;p&gt;As explained earlier, when you install the Kiali Operator, it will be
configured to install a Kiali Server whose image will be pulled from quay.io
and whose version will be the same as the operator. You can ask the operator to
use a different image by setting &lt;code&gt;spec.deployment.image_name&lt;/code&gt; and
&lt;code&gt;spec.deployment.image_version&lt;/code&gt; within the Kiali CR (as explained above).&lt;/p&gt;
&lt;p&gt;However, you may wish to alter this default behavior exhibited by the operator.
In other words, you may want the operator to install a different Kiali Server
image by default. For example, if you have an air-gapped environment with its
own image registry that contains its own copy of the Kiali Server image, you
will want the operator to install a Kiali Server that uses that image by
default, as opposed to &lt;code&gt;quay.io/kiali/kiali&lt;/code&gt;. By configuring the operator to do
this, you will not force the authors of Kiali CRs to have to explicitly define
the &lt;code&gt;spec.deployment.image_name&lt;/code&gt; setting and you will not need to enable the
&lt;code&gt;allowAdHocKialiImage&lt;/code&gt; setting in the operator.&lt;/p&gt;
&lt;p&gt;To change the default Kiali Server image installed by the operator, set the
environment variable &lt;code&gt;RELATED_IMAGE_kiali_default&lt;/code&gt; in the Kiali Operator
deployment. The value of that environment variable must be the full image tag
in the form &lt;code&gt;repoName/orgName/imageName:versionString&lt;/code&gt; (e.g.
&lt;code&gt;my.internal.registry.io/mykiali/mykialiserver:v1.50.0&lt;/code&gt;). You can do this when
you install the operator via helm:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ helm install \
    --namespace kiali-operator \
    --create-namespace \
    --set &amp;#34;env[0].name=RELATED_IMAGE_kiali_default&amp;#34; \
    --set &amp;#34;env[0].value=my.internal.registry.io/mykiali/mykialiserver:v1.50.0&amp;#34; \
    kiali-operator \
    kiali/kiali-operator
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;development-install&#34;&gt;Development Install&lt;/h2&gt;
&lt;p&gt;This option installs the &lt;em&gt;latest&lt;/em&gt; Kiali Operator and Kiali Server images which
are built from the master branches of Kiali GitHub repositories. This option is
good for demo and development installations.&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;helm install \
  --set cr.create=true \
  --set cr.namespace=istio-system \
  --set cr.spec.deployment.image_version=latest \
  --set image.tag=latest \
  --namespace kiali-operator \
  --create-namespace \
  kiali-operator \
  kiali/kiali-operator
&lt;/code&gt;&lt;/pre&gt;
      </description>
    </item>
    
    <item>
      <title>Docs: Session options</title>
      <link>https://v2-24.kiali.io/docs/configuration/authentication/session-configs/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://v2-24.kiali.io/docs/configuration/authentication/session-configs/</guid>
      <description>
        
        
        &lt;p&gt;There are two settings that are available for the user&amp;rsquo;s session. The first one
is the &lt;strong&gt;session expiration time&lt;/strong&gt;, which is only applicable to
&lt;a href=&#34;https://v2-24.kiali.io/docs/configuration/authentication/token/&#34;&gt;token&lt;/a&gt; and &lt;a href=&#34;https://v2-24.kiali.io/docs/configuration/authentication/header/&#34;&gt;header&lt;/a&gt;
authentication strategies:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;spec&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;login_token&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# By default, users session expires in 24 hours.&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;expiration_seconds&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;86400&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The session expiration time is the amount of time before the user is asked to
extend his session by another cycle. It does not matter if the user is actively
using Kiali, the user will be asked if the session should be extended.&lt;/p&gt;
&lt;p&gt;The second available option is the &lt;strong&gt;signing key&lt;/strong&gt; configuration, which is unset by
default, meaning that a random 16-character signing key will be generated
and stored to a secret named &lt;code&gt;kiali-signing-key&lt;/code&gt;, in Kiali&amp;rsquo;s installation
namespace:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;spec&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;login_token&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# By default, create a random signing key and store it in&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# a secret named &amp;#34;kiali-signing-key&amp;#34;.&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;signing_key&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;If the secret already exists (which may mean a previous Kiali installation was
present), then the secret is reused.&lt;/p&gt;
&lt;p&gt;The signing key is used on security sensitive data. For example, one of the
usages is to sign HTTP cookies related to the user session to prevent session
forgery.&lt;/p&gt;
&lt;p&gt;If you need to set a custom fixed key, you can pre-create or modify the
&lt;code&gt;kiali-signing-key&lt;/code&gt; secret:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;apiVersion&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;v1&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;kind&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;Secret&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;metadata&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;namespace&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;kiali-installation-namespace&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;kiali-signing-key&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;type&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;Opaque&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;data&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;key&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&amp;lt;your signing key encoded in base64&amp;gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

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


    The signing key must be 16, 24 or 32 bytes length. Otherwise, Kiali will fail to start.

&lt;/div&gt;

&lt;p&gt;If you prefer a different secret name for the signing key and/or a different
key-value pair of the secret, you can specify your preferred names in the Kiali
CR:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;spec&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;login_token&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;signing_key&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;secret:&amp;lt;secretName&amp;gt;:&amp;lt;secretDataKey&amp;gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

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


    It is possible to specify the signing key directly in the Kiali CR, in the
&lt;code&gt;spec.login_token.signing_key&lt;/code&gt; attribute. However, this should be only for
testing purposes. The signing key is sensitive and should be treated like a
password that must be protected.

&lt;/div&gt;


      </description>
    </item>
    
    <item>
      <title>Docs: Example Install</title>
      <link>https://v2-24.kiali.io/docs/installation/installation-guide/example-install/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://v2-24.kiali.io/docs/installation/installation-guide/example-install/</guid>
      <description>
        
        
        &lt;p&gt;This is a quick example of installing Kiali. This example will install the operator and two Kiali Servers - one server will require the user to enter credentials at a login screen in order to obtain read-write access and the second server will allow anonymous read-only access.&lt;/p&gt;
&lt;p&gt;For this example, assume there is a Minikube Kubernetes cluster running with an
Istio control plane installed in the namespace &lt;code&gt;istio-system&lt;/code&gt; and
the Istio Bookinfo Demo installed in the namespace &lt;code&gt;bookinfo&lt;/code&gt;:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ kubectl get deployments.apps -n istio-system
NAME                   READY   UP-TO-DATE   AVAILABLE   AGE
grafana                1/1     1            1           8h
istio-egressgateway    1/1     1            1           8h
istio-ingressgateway   1/1     1            1           8h
istiod                 1/1     1            1           8h
jaeger                 1/1     1            1           8h
prometheus             1/1     1            1           8h

$ kubectl get deployments.apps -n bookinfo
NAME             READY   UP-TO-DATE   AVAILABLE   AGE
details-v1       1/1     1            1           21m
productpage-v1   1/1     1            1           21m
ratings-v1       1/1     1            1           21m
reviews-v1       1/1     1            1           21m
reviews-v2       1/1     1            1           21m
reviews-v3       1/1     1            1           21m
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;install-kiali-operator-via-helm-chart&#34;&gt;Install Kiali Operator via Helm Chart&lt;/h2&gt;
&lt;p&gt;First, the Kiali Operator will be installed in the &lt;code&gt;kiali-operator&lt;/code&gt; namespace using the &lt;a href=&#34;https://v2-24.kiali.io/docs/installation/installation-guide/install-with-helm/#operator-only-install&#34;&gt;operator helm chart&lt;/a&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ helm repo add kiali https://kiali.org/helm-charts
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ helm repo update kiali
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ helm install &lt;span style=&#34;color:#4e9a06&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&lt;/span&gt;    --namespace kiali-operator &lt;span style=&#34;color:#4e9a06&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&lt;/span&gt;    --create-namespace &lt;span style=&#34;color:#4e9a06&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&lt;/span&gt;    kiali-operator &lt;span style=&#34;color:#4e9a06&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&lt;/span&gt;    kiali/kiali-operator
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;install-kiali-server-via-operator&#34;&gt;Install Kiali Server via Operator&lt;/h2&gt;
&lt;p&gt;Next, the first Kiali Server will be installed. This server will require the user to enter a Kubernetes token in order to log into the Kiali dashboard and will provide the user with read-write access. To do this, a Kiali CR will be created that looks like this (file: &lt;code&gt;kiali-cr-token.yaml&lt;/code&gt;):&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;apiVersion&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;kiali.io/v1alpha1&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;kind&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;Kiali&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;metadata&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;kiali&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;namespace&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;istio-system&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;spec&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;auth&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;strategy&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;token&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;deployment&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;cluster_wide_access&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;false&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;discovery_selectors&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;default&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;- &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;matchLabels&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;          &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;kubernetes.io/metadata.name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;bookinfo&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;view_only_mode&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;false&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;server&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;web_root&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;/kiali&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This Kiali CR will command the operator to deploy the Kiali Server in the same namespace where the Kiali CR is (&lt;code&gt;istio-system&lt;/code&gt;). The operator will configure the server to: respond to requests to the web root path of &lt;code&gt;/kiali&lt;/code&gt;, enable read-write access, use the authentication strategy of &lt;code&gt;token&lt;/code&gt;, and be given access to the &lt;code&gt;bookinfo&lt;/code&gt; namespace:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ kubectl apply -f kiali-cr-token.yaml
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;get-the-status-of-the-installation&#34;&gt;Get the Status of the Installation&lt;/h2&gt;
&lt;p&gt;The status of a particular Kiali Server installation can be found by examining the &lt;code&gt;status&lt;/code&gt; field of its corresponding Kiali CR. For example:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ kubectl get kiali kiali -n istio-system -o &lt;span style=&#34;color:#000&#34;&gt;jsonpath&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;{.status}&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;When the installation has successfully completed, the &lt;code&gt;status&lt;/code&gt; field will look something like this (when formatted):&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a40000&#34;&gt;$&lt;/span&gt; &lt;span style=&#34;color:#a40000&#34;&gt;kubectl&lt;/span&gt; &lt;span style=&#34;color:#a40000&#34;&gt;get&lt;/span&gt; &lt;span style=&#34;color:#a40000&#34;&gt;kiali&lt;/span&gt; &lt;span style=&#34;color:#a40000&#34;&gt;kiali&lt;/span&gt; &lt;span style=&#34;color:#a40000&#34;&gt;-n&lt;/span&gt; &lt;span style=&#34;color:#a40000&#34;&gt;istio-system&lt;/span&gt; &lt;span style=&#34;color:#a40000&#34;&gt;-o&lt;/span&gt; &lt;span style=&#34;color:#a40000&#34;&gt;jsonpath=&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#a40000&#34;&gt;.status&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#a40000&#34;&gt;&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#a40000&#34;&gt;|&lt;/span&gt; &lt;span style=&#34;color:#a40000&#34;&gt;jq&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;conditions&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;ansibleResult&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;changed&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;21&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;completion&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;2021-10-20T19:17:35.519131&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;failures&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;0&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;ok&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;102&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;skipped&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;90&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;lastTransitionTime&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;2021-10-20T19:17:12Z&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;message&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;Awaiting next reconciliation&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;reason&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;Successful&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;status&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;True&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;Running&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;deployment&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;discoverySelectorNamespaces&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;bookinfo,istio-system&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;instanceName&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;kiali&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;namespace&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;istio-system&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;environment&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;isKubernetes&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;true&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;kubernetesVersion&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;1.28.0&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;operatorVersion&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;v1.88.0&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;progress&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;duration&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;0:00:14&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;message&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;7. Finished all resource creation&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;access-the-kiali-server-ui&#34;&gt;Access the Kiali Server UI&lt;/h2&gt;
&lt;p&gt;The Kiali Server UI is accessed by pointing a browser to the Kiali Server endpoint and requesting the web root &lt;code&gt;/kiali&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;xdg-open http://&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;$(&lt;/span&gt;minikube ip&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;)&lt;/span&gt;/kiali
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Because the &lt;code&gt;auth.strategy&lt;/code&gt; was set to &lt;code&gt;token&lt;/code&gt;, that URL will display the Kiali login screen that will require a Kubernetes token in order to authenticate with the server. For this example, you can use the token that belongs to the Kiali service account itself:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ kubectl get secret -n istio-system &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;$(&lt;/span&gt;kubectl get sa kiali-service-account -n istio-system -o &lt;span style=&#34;color:#000&#34;&gt;jsonpath&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;{.secrets[0].name}&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;)&lt;/span&gt; -o &lt;span style=&#34;color:#000&#34;&gt;jsonpath&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;{.data.token}&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;|&lt;/span&gt; base64 -d
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The output of that command above can be used to log into the Kiali login screen.&lt;/p&gt;
&lt;h2 id=&#34;install-a-second-kiali-server&#34;&gt;Install a Second Kiali Server&lt;/h2&gt;
&lt;p&gt;The second Kiali Server will next be installed. This server will not require the user to enter any login credentials but will only provide a view-only look at the service mesh. To do this, a Kiali CR will be created that looks like this (file: &lt;code&gt;kiali-cr-anon.yaml&lt;/code&gt;):&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;apiVersion&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;kiali.io/v1alpha1&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;kind&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;Kiali&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;metadata&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;kiali&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;namespace&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;kialianon&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;spec&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;installation_tag&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;Kiali - View Only&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;auth&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;strategy&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;anonymous&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;deployment&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;cluster_wide_access&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;false&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;discovery_selectors&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;default&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;- &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;matchLabels&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;          &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;kubernetes.io/metadata.name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;bookinfo&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;view_only_mode&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;true&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;instance_name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;kialianon&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;server&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;web_root&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;/kialianon&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This Kiali CR will command the operator to deploy the Kiali Server in the same namespace where the Kiali CR is (&lt;code&gt;kialianon&lt;/code&gt;). The operator will configure the server to: respond to requests to the web root path of &lt;code&gt;/kialianon&lt;/code&gt;, disable read-write access, not require the user to authenticate, have a unique instance name of &lt;code&gt;kialianon&lt;/code&gt; and be given access to the &lt;code&gt;bookinfo&lt;/code&gt; namespace. The Kiali UI will also show a custom title in the browser tab so the user is aware they are looking at a &amp;ldquo;view only&amp;rdquo; Kiali dashboard. The unique &lt;code&gt;deployment.instance_name&lt;/code&gt; is needed in order for this Kiali Server to be able to share access to the Bookinfo application with the first Kiali Server.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ kubectl create namespace kialianon
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ kubectl apply -f kiali-cr-anon.yaml
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The UI for this second Kiali Server is accessed by pointing a browser to the Kiali Server endpoint and requesting the web root &lt;code&gt;/kialianon&lt;/code&gt;. Note that no credentials are required to gain access to this Kiali Server UI because &lt;code&gt;auth.strategy&lt;/code&gt; was set to &lt;code&gt;anonymous&lt;/code&gt;; however, the user will not be able to modify anything via the Kiali UI - it is strictly &amp;ldquo;view only&amp;rdquo;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;xdg-open http://&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;$(&lt;/span&gt;minikube ip&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;)&lt;/span&gt;/kialianon
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;reconfigure-kiali-server&#34;&gt;Reconfigure Kiali Server&lt;/h2&gt;
&lt;p&gt;A Kiali Server can be reconfigured by simply editing its Kiali CR. The Kiali Operator will perform all the necessary tasks to complete the reconfiguration and reboot the Kiali Server pod when necessary. For example, to change the web root for the Kiali Server:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ kubectl patch kiali kiali -n istio-system --type merge --patch &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;{&amp;#34;spec&amp;#34;:{&amp;#34;server&amp;#34;:{&amp;#34;web_root&amp;#34;:&amp;#34;/specialkiali&amp;#34;}}}&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The Kiali Operator will update the necessary resources (such as the Kiali ConfigMap) and will reboot the Kiali Server pod to pick up the new configuration.&lt;/p&gt;
&lt;h2 id=&#34;uninstall-kiali-server&#34;&gt;Uninstall Kiali Server&lt;/h2&gt;
&lt;p&gt;To uninstall a Kiali Server installation, simply delete the Kiali CR. The Kiali Operator will then perform all the necessary tasks to remove all remnants of the associated Kiali Server.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;kubectl delete kiali kiali -n istio-system
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;uninstall-kiali-operator&#34;&gt;Uninstall Kiali Operator&lt;/h2&gt;
&lt;p&gt;To uninstall the Kiali Operator, use &lt;code&gt;helm uninstall&lt;/code&gt; and then manually remove the Kiali CRD.&lt;/p&gt;


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


    You must delete all Kiali CRs in the cluster prior to uninstalling the Kiali Operator. If you fail to do this, uninstalling the operator will hang and remnants of Kiali Server installations will remain in your cluster and you will be required to perform some &lt;a href=&#34;https://v2-24.kiali.io/docs/installation/installation-guide/install-with-helm/#known-problem-uninstall-hangs-unable-to-delete-the-kiali-cr&#34;&gt;manual steps&lt;/a&gt; to clean it up.

&lt;/div&gt;

&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ kubectl delete kiali --all --all-namespaces
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ helm uninstall --namespace kiali-operator kiali-operator
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ kubectl delete crd kialis.kiali.io
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
      </description>
    </item>
    
  </channel>
</rss>
