Kiali releases 1.29 and 1.30 — Improved graph, improved trace pages, multi-cluster support and more

Edgar Hernandez
Kiali
Published in
11 min readFeb 23, 2021

Two new Kiali versions have been released since the last feature update blog post. We are almost at the end of February, and this is the first feature update post! ;-) In the meantime, other posts have been published that focus on specific features on Kiali:

Both posts authored by Joel Takvorian. I encourage to read them if you are interested in these features.

I would like to invite you to the IstioCon. The event started on February 22 and last day is February 26 (one week!). Lucas Ponce from the Kiali team is doing a Kiali Workshop on February 25th.

Talking about the last two Kiali releases, the feature update presentation happened as scheduled. Here are the recordings:

In the past, the Jaeger team was also doing their presentation together with the Kiali team. However, the Jaeger team has changed their sprint schedule and the consequence is that there is no longer a joint presentation. The presentation will now focus only on Kiali.

Alright, if you prefer to read rather than to watch. Let’s start with the written feature updates.

Notification when Kiali can’t find Istio

Sometimes, Kiali can’t find Istio. But why? Is it that Istio is failing? Is it that it’s not installed? But if Istio is good, why Kiali can’t find it? As it turns out, it is possible to misconfigure Kiali to point to the wrong namespace for the Istio installation. Kiali simply logged errors that didn’t give any insight.

We cannot blame people for misconfigurations; making mistakes is part of our human nature 😉 But surely Kiali can help, and is why this new notification was added:

It will be logged in the message center that you can open by clicking on the bell in the header at the right.

Discussions on GitHub

Recently, the GitHub Discussions were enabled on the main Kiali repository. This is one more place where people can seek for assistance for Kiali.

In the past, people sometimes were using GitHub Issues to ask questions. But the Kiali team is using issues as a project management tool. Now, the aim is to keep the issues list clean. It’s just to better management. New issues with questions may be closed and converted to a discussion.

Remember the other channels of contact:

New display option in graph: Show idle edges

The graph sometimes will show gray colored edges. These edges don’t have traffic for the selected time span, but did in the past. If needed, some idle nodes are also added for completeness of the graph.

Absence of traffic could be expected, or could be not. But, something is sure: these idle edges and the associated idle nodes tend to add noise to the graph. So, a new Idle Edges option in the Display drop-down was added to let you show or hide these edges without traffic. It’s turned off by default.

Zoom in the graph into a selection

Zoom capabilities have been available in Kiali since its early versions, even before version 1.0. In the bottom toolbar you can use the magnifying glass buttons to either zoom in or zoom out. Also, you can use the mouse wheel.

Can zoom be made easier? Yes! Why not? Hold down the Control key on your keyboard (or the Shift key) and, then, this will let you draw a rectangle with your mouse (click and drag while holding the Control/Shift key). Finish your selection and, voila! The pan and zoom are adjusted to your selection.

New Header authentication: fully manage authentication to 3rd party services

The new Header authentication mechanism allows you to completely decouple authentication from Kiali. When using this mechanism, Kiali expects an HTTP Header with a valid token that can be used to make requests to the Kubernetes API. Since Kiali will passively read the HTTP Header, you need something that injects the required HTTP Header. Commonly, this is achieved by exposing Kiali through a reverse proxy; for example, through oauth2-proxy.

Although Kiali has support for OpenID authentication and has been useful for lots of people, there are still some limitations. By using the new Header authentication you get the benefit that you can do any customization that you want, because you fully control how authentication is done.

Thanks to Marc Boorshtein, who was the contributor for this authentication mechanism. Marc did an explanation and demo of this new authentication strategy in the recording for Kiali 1.29 demo.

Initial experimental multi-cluster support

In the last release, Kiali started to include some features focused on support of multi-cluster environments.

If you have enabled a multi-cluster configuration on Istio, Kiali will show a new Mesh page in the main navigation. This page will list the discovered clusters that are part of your mesh:

This initial support is focused on Istio’s multi-primary, multiple networks setup. Under this setup, it’s assumed that you would be deploying both the Control Plane and any add-ons on each cluster, which means you may want to deploy Kiali on each cluster. Because of this, you will find an indicator in Kiali’s masthead showing the name of the “home cluster” — that is the cluster where Kiali is installed on.

In addition to this, there are two new display options in the graph: Cluster Boxes and Namespaces Boxes. When you enable the Cluster Boxes option, the graph will group together the nodes that belong to each cluster:

Currently, the graph is NOT showing the whole view of the mesh. It’s only the portion of the mesh whose metrics are stored in the Prometheus instance fetching metrics from the adjacent Istio control plane. This is the reason why you will find that boxes for remote cluster will contain only “border” services: because those are the visible ones for the control plane.

The Namespace Boxes display option is not related to multi-cluster support. You can use it even if you don’t have a multi-cluster setup. It is a new addition to group nodes that belong to the same namespace. Quite useful if you are generating a graph for more than one namespace.

This initial multi-cluster support is experimental. If you try it, we will appreciate any feedback you can give. There was a live demo of the multi-cluster features in the recording for Kiali 1.29 demo.

Horizontal pod autoscaler support

The default installation of Kiali is deploying a single replica of Kiali. So, if Kiali is widely used in your team, this would mean some degraded performance. Adding replicas helps, but you needed to do this manually, and also would need to downscale manually when the additional replicas are no longer needed.

However, Kubernetes already offers an Horizontal Pod Autoscaler (HPA) to automatically add or remove replicas, based on observed resource usage. So, support for configuring the HPA was added to both the Kiali Operator and to the Kiali Helm Charts.

For now, this is only documented in the sample Kiali CR available in the operator repository.

If you are installing Kiali Server via Helm rather than using the operator, you simply pass the HPA spec via — set flags, a values file, or any other alternative that Helm provides; e.g.:

helm install \
--namespace istio-system \
--set deployment.hpa.spec.maxReplicas=2 \
--set deployment.hpa.spec.minReplicas=1 \
--set deployment.hpa.spec.targetCPUUtilizationPercentage=80 \
--repo https://kiali.org/helm-charts \
kiali-server \
kiali-server

Envoy config dialog enhancements

The Envoy Config dialog that was recently added has got filtering capabilities for its table views (when the Resource drop-down has selected clusters, listeners, or routes):

Something to keep in mind: the filtering is case sensitive.

There is also a new Copy button which is available in the YAML editor views (the bootstrap and all resources). It will copy to the OS clipboard the whole YAML text.

Can you also notice in the image that entries in the Service FQDN column are blue-colored? They are links. It’s also something new in this dialog. When possible, and if Kiali has a page for the resource, links will be provided to let you navigate to the detail page of the resource.

Improved trace section in graph side panel

A few Kiali versions ago, Kiali got the ability to show traces in the main graph. Also, if you select a node, the side panel has a Traces tab that will list traces relevant to the selected node. You can go further and select a trace in this list and Kiali will provide some details of the trace in a sub-panel. In this sub-panel you could navigate to other spans. This is a sample screenshot:

The provided spans navigation was confusing for some people. The idea is that the previous/next arrows could be interpreted as navigating to previous/next spans. But the reality is that the spans didn’t necessarily have any direct relationship. So, this view was revised and the result is this new one:

Arrows were replaced with a drop-down, hoping this will be understood as spans for the node without any implied relationship.

Also, Related spans are listed, which do have relationships with the selected span (parent and children). If you hover the mouse cursor on the links, you will see more details of these spans. Click on them, and Kiali will navigate to the span. If needed, the graph will automatically select the new node associated with the span.

As a bonus, a few more details about the span were added: the duration of the span, and some data of the request and the response.

Custom Health as annotations

A few Kiali versions ago, configurations of health indicators were introduced. In the initial implementation, customization of health indicators was set in the Kiali CR.

But users provided the feedback that at times it would be convenient to use annotations on the desired resources. This feedback was good and now configuration is possible via annotations. For example:

kubectl annotate svc productpage \
-n bookinfo \
kiali='{"health_config": '`
`'{"rate": [{'`
`'"code": "^4\\d\\d$", '`
`'"degraded": 10, '`
`'"failure": 20, '`
`'"protocol": "http"}]'`
`'}}'

As you can see, the annotation is a JSON. Its format is the same as the one accepted in the Kiali CR. See the documentation in the website for more details.

Customization of UI default selections

There are a few controls in Kiali which provide some defaults which are probably OK for most people. For example, look at these controls in the graph page:

You can see there is the namespaces drop-down, the refresh interval drop-down, and the metrics duration drop-down. The selections that you are seeing in the image aren’t the default ones, but these are the controls that you can now customize by setting its values on the Kiali CR.

This is a partial sample spec of the Kiali CR that you can use as a reference:

kiali_feature_flags:
ui_defaults:
metrics_per_refresh: "30m"
namespaces: ["bookinfo"]
refresh_interval: "30s"

Remember that these are only default selections. If the user has already accessed Kiali and set custom selections, these will take priority to keep a consistent experience as in the past.

Documentation of this feature is in the provided Kiali CR in the operator repository.

New configurations to control discovery of Custom Dashboards

This is for performance reasons, where sometimes the discovery of Custom Dashboards can result in long response times from Kiali.

The new configurations let you skip discovery under a certain threshold of number of pods is reached, or to turn off discovery completely.

This is documented in the provided sample Kiali CR in the operator repository. There is also a related FAQ entry in the Kiali website.

Tracing toolbar re-designed

Specifically, this is for the Traces tab that is available in detail pages of Applications, Workloads and Services. This is the screenshot of its past state:

As part of the re-design, the Interval Trace, the Status Code and the Adjust time were removed. In turn, Filters by percentile and axis options were added.

The new toolbar adopted a minimalist design, like the one present in the main Graph:

The new Value axis option should help to get a better idea about performance. Previously, only full duration of traces could be displayed, which accounts for the time from its first span to its last span. However this is not always a good indicator of performance, especially for heterogeneous traces with a variable number of spans. In that case, showing the spans average duration per trace could be a better indicator.

Envoy flags in traces

The side panel of the Kiali graph is already providing Envoy flags when you select an edge. However, in order to better help in diagnosing issues, these Envoy flags are also relevant for traces and are now being shown in two places (if any Envoy flags were recorded):

1) The traces sub-panel in the graph:

2) In the detail pages, you fill find then in the Spans Details list (under the Traces tab):

It may be a small addition. But this information could be valuable when it’s time to diagnose issues.

Stay in touch

This is it for this blog post. Thanks for reading up to the end of this post.

As usual, my kindly reminder that Kiali is OpenSource and you can contribute to the project! Something that has been mentioned very little is that you too can contribute to posts in the Kiali blog! If you have some written content that you would like to share in our blog, contact us and we will make it happen.

Follow us on Twitter, provide feedback, spread to the world about Kiali.

--

--