Installation Guide
The next few sections describe the different installation methods available for Kiali.
The recommended way to deploy Kiali is via the Kiali Operator, either using Helm Charts or OperatorHub.
The Kiali Operator is a Kubernetes Operator
and manages your Kiali installation. It watches the Kiali Custom Resource
(Kiali CR), a YAML file that holds the deployment configuration.
It is only necessary to install the Kiali Operator once. After the
operator is installed you only need to
create or edit the Kiali CR.
Never manually
edit resources created by the Kiali Operator.
If you previously installed Kiali via a different mechanism, you
must first uninstall Kiali using the original mechanism’s uninstall procedures.
There is no migration path between older installation mechanisms and the
install mechanisms explained in this documentation.
1 - Prerequisites
Service Mesh Compatibility
Each Kiali release is tested against the most recent Istio release. In general,
Kiali tries to maintain compatibility with older Istio releases and Kiali
versions later than those posted in the below table may work, but such
combinations are not tested and will not be supported. Known incompatibilities
are noted in the compatibility table below.
Istio Version Compatibility
It is always recommended that users run a supported version of Istio.
The Istio news page posts end-of-support (EOL)
dates. Supported Kiali versions include only the Kiali versions associated with
supported Istio versions.
Istio |
Kiali |
Notes |
1.11 |
1.38.1 or later |
|
1.10 |
1.34.1 to 1.37.x |
|
1.9 |
1.29.1 to 1.33.x |
|
1.8 |
1.26.0 to 1.28.x |
Istio 1.8 removes all support for mixer/telemetry V1, as does Kiali 1.26.0. Use earlier versions of Kiali for mixer support. |
1.7 |
1.22.1 to 1.25.x |
Istio 1.7 istioctl will no longer install Kiali. Use the Istio samples/addons all-in-one yaml or the Kiali Helm Chart for quick demo installs. Istio 1.7 is out of support. |
1.6 |
1.18.1 to 1.21.x |
Istio 1.6 introduces CRD and Config changes, Kiali 1.17 is recommended for Istio < 1.6. |
Maistra Version Compatibility
OpenShift
If you are running Red Hat OpenShift Service Mesh (RH OSSM), use only the bundled version of Kiali.
Maistra |
SMCP CR |
Kiali |
Notes |
2.0 |
2.0 |
1.24 |
Using Maistra 2.0 to install service mesh control plane 2.0 requires Kiali Operator v1.36. Other operator versions are not compatible. |
2.0 |
1.1 |
1.12 |
Using Maistra 2.0 to install service mesh control plane 1.1 requires Kiali Operator v1.36. Other operator versions are not compatible. |
1.1 |
1.1 |
1.12 |
Using Maistra 1.1 to install service mesh control plane 1.1 requires Kiali Operator v1.36. Other operator versions are not compatible. |
n/a |
1.0 |
n/a |
Service mesh control plane 1.0 is out of support. |
Browser Version Requirements
Kiali requires a modern web browser and supports the last two versions of Chrome, Firefox, Safari or Edge.
Hardware Requirements
Any machine capable of running a Kubernetes based cluster should also be able
to run Kiali.
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.
OpenShift
If you are installing on OpenShift, you must grant the cluster-admin
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 system:admin
which has this cluster-admin
role:
$ oc login -u system:admin
For most commands listed on this documentation, the Kubernetes CLI command kubectl
is used to interact with the cluster environment. On OpenShift you can simply replace kubectl
with oc
, unless otherwise noted.
Google Cloud Private Cluster
Private clusters on Google Cloud have network restrictions. Kiali needs your cluster’s firewall to allow access from the Kubernetes API to the Istio Control Plane namespace, for both the 8080
and 15000
ports.
To review the master access firewall rule:
gcloud compute firewall-rules list --filter="name~gke-${CLUSTER_NAME}-[0-9a-z]*-master"
To replace the existing rule and allow master access:
gcloud compute firewall-rules update <firewall-rule-name> --allow <previous-ports>,tcp:8080,tcp:15000
Istio deployments on private clusters also need extra ports to be opened. Check the
Istio installation page for GKE to see all the extra installation steps for this platform.
2 - Installation via Helm
Introduction
Helm is a popular tool that lets you manage Kubernetes
applications. Applications are defined in a package named Helm chart, which
contains all of the resources needed to run an application.
Kiali has a Helm Charts Repository at
https://kiali.org/helm-charts. Two Helm
Charts are provided:
- The
kiali-operator
Helm Chart installs the Kiali operator which in turn
installs Kiali when you create a Kiali CR.
- The
kiali-server
Helm Chart installs a standalone Kiali without the need of
the Operator nor a Kiali CR.
Although the kiali-server
Helm Chart is actively maintained, it is only
provided for convenience. The recommended method to install Kiali is by using
the kiali-operator
Helm Chart to install the Operator and then creating a
Kiali CR to let the operator deploy Kiail.
Make sure you have the helm
command available by following the
Helm installation docs.
The Kiali Helm Charts have been tested only against Helm version 3. There is no guarantee that previous versions will work.
Adding the Kiali Helm Charts repository
Add the Kiali Helm Charts repository with the following command:
$ helm repo add kiali https://kiali.org/helm-charts
All helm
commands in this page assume that you added the Kiali Helm Charts repository as shown.
If you already added the repository, you may want to update your local cache to
fetch latest definitions by running:
$ helm repo update
Installing Kiali using the Kiali operator
This installation method gives Kiali access to existing namespaces as
well as namespaces created later. See
Namespace Management for more information.
Once you’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:
$ helm install \
--set cr.create=true \
--set cr.namespace=istio-system \
--namespace kiali-operator \
--create-namespace \
kiali-operator \
kiali/kiali-operator
The --namespace kiali-operator
and --create-namespace
flags instructs to
create the kiali-operator
namespace (if needed), and deploy the Kiali
operator on it. The --set cr.create=true
and --set cr.namespace=istio-system
flags instructs to create a Kiali CR in the
istio-system
namespace. Since the Kiali CR is created in advance, as soon as
the Kiali operator starts, it will process it to deploy Kiali.
The Kiali Operator Helm Chart is configurable. Check available options and default values by running:
$ helm show values kiali/kiali-operator
You can pass the --version X.Y.Z
flag to the helm install
and helm show values
commands to work with a specific version of Kiali.
The kiali-operator
Helm Chart mirrors all settings of the Kiali CR as chart
values that you can configure using regular --set
flags. For example, the
Kiali CR has a spec.namespace
setting which you can configure in the
kiali-operator
Helm Chart by passing the --set cr.namespace
flag as
shown in the previous helm install
example.
For more information about the Kiali CR, see the Creating and updating the Kiali CR page.
Operator-Only Install
To install only the Kiali Operator, omit the --set cr.create
and
--set cr.namespace
flags of the helm command previously shown. For example:
$ helm install \
--namespace kiali-operator \
--create-namespace \
kiali-operator \
kiali/kiali-operator
This will omit creation of the Kiali CR, which you will need to link:https://v1-41.kiali.io/docs/installation/installation-guide/creating-updating-kiali-cr/[create later to install Kiali Server]. This
option is good if you plan to do large customizations to the installation.
Installing Multiple Instances of Kiali
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 istio-system
and istio-system2
, you can create a Kiali CR in each of those namespaces to install a Kiali instance in each control plane.
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 kiali
, you can specify spec.deployment.instance_name
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 kiali
. 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.
Since the
spec.deployment.instance_name
field is used for the Kiali resource names, including the Service name, you must ensure the value you assign this setting follows the
Kubernetes DNS Label Name rules. 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.
Standalone Kiali installation
To install the Kiali Server without the operator, use the kiali-server
Helm Chart:
$ helm install \
--namespace istio-system \
kiali-server \
kiali/kiali-server
The kiali-server
Helm Chart mirrors all settings of the Kiali CR as chart
values that you can configure using regular --set
flags. For example, the
Kiali CR has a spec.server.web_fqdn
setting which you can configure in the
kiali-server
Helm Chart by passing the --set server.web_fqdn
flag as
follows:
$ helm install \
--namespace istio-system \
--set server.web_fqdn=example.com \
kiali-server \
kiali/kiali-server
Upgrading Helm installations
If you want to upgrade to a newer Kiali version (or downgrade to older
versions), you can use the regular helm upgrade
commands. For example, the
following command should upgrade the Kiali Operator to the latest version:
$ helm upgrade \
--namespace kiali-operator \
--reuse-values \
kiali-operator \
kiali/kiali-operator
WARNING: No migration paths are provided. However, Kiali is a stateless
application and if the helm upgrade
command fails, please uninstall the
previous version and then install the new desired version.
By upgrading the Kiali Operator, existent Kiali Server installations
managed with a Kiali CR will also be upgraded once the updated operator starts.
Managing configuration of Helm installations
After installing either the kiali-operator
or the kiali-server
Helm Charts,
you may be tempted to manually modify the created resources to modify the
installation. However, we recommend using helm upgrade
to update your
installation.
For example, assuming you have the following installation:
$ 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
Notice that the current installation is version 1.40.0
of the
kiali-operator
. Let’s assume you want to use your own mirrors of the Kiali
Operator container images. You can update your installation with the following
command:
$ 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
Make sure that you specify the --reuse-values
flag to take the
configuration of your current installation. Then, you only need to specify the
new settings you want to change using --set
flags.
Make sure that you specify the --version X.Y.Z
flag with the
version of your current installation. Otherwise, you may end up upgrading to a
new version.
Uninstalling
Removing the Kiali operator and managed Kialis
If you used the kiali-operator
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:
$ kubectl delete kiali --all --all-namespaces
The previous command may take some time to finish while the Kiali operator
removes all Kiali installations.
Then, remove the Kiali operator using a standard helm uninstall
command. For
example:
$ helm uninstall --namespace kiali-operator kiali-operator
$ kubectl delete crd kialis.kiali.io
If you fail to delete the Kiali CRs before uninstalling the operator,
a proper cleanup may not be done.
Known problem: uninstall hangs (unable to delete the Kiali CR)
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:
$ kubectl patch kiali kiali -n istio-system -p '{"metadata":{"finalizers": []}}' --type=merge
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.
Removing standalone Kiali
If you installed a standalone Kiali by using the kiali-server
Helm chart, use
the standard helm uninstall
commands. For example:
$ helm uninstall --namespace istio-system kiali-server
3 - Installation via OperatorHub
Introduction
The OperatorHub is a website that contains a
catalog of Kubernetes Operators.
Its aim is to be the central location to find Operators.
The OperatorHub relies in the Operator Lifecycle Manager (OLM)
to install, manage and update Operators on any Kubernetes cluster.
The Kiali Operator is being published to the OperatorHub. So, you can use the
OLM to install and manage the Kiali Operator installation.
Installing the Kiali Operator using the OLM
Go to the Kiali Operator page in the OperatorHub: https://operatorhub.io/operator/kiali.
You will see an Install 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.
Afterwards, you can create the Kiali CR to install Kiali.
Installing the Kiali Operator in OpenShift
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 Install button and follow the
instruction on the screen.
Afterwards, you can create the Kiali CR to install Kiali.
4 - Creating and updating the Kiali CR
The Kiali Operator watches the Kiali Custom Resource (Kiali CR), a YAML file
that holds the deployment configuration. Creating, updating, or removing a
Kiali CR will trigger the Kiali Operator to install, update, or remove Kiali.
The Operator provides comprehensive defaults for all properties of the Kiali
CR. Hence, the minimal Kiali CR does not have a spec
:
apiVersion: kiali.io/v1alpha1
kind: Kiali
metadata:
name: kiali
Assuming you saved the previous YAML to a file named my-kiali-cr.yaml
, and that you are
installing Kiali in the same default namespace as Istio, create the resource with the following command:
$ kubectl apply -f my-kiali-cr.yaml -n istio-system
Often, but not always, Kiali is installed in the same namespace as Istio, thus the Kiali CR is also created in the Istio namespace.
Once created, the Kiali Operator should shortly be notified and will process the resource, performing the Kiali
installation. You can check installation progress by inspecting the status
attribute of the created Kiali CR:
$ kubectl describe kiali -n istio-system
Name: kiali
Namespace: istio-system
Labels: <none>
Annotations: <none>
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.21.2
Operator Version: v1.40.0
Progress:
Duration: 0:00:16
Message: 5. Creating core resources
Events: <none>
Never manually edit resources created by the Kiali Operator, only the Kiali CR.
We recommended to download the example Kiali CR YAML file
that is available in the Operator’s GitHub repository. This
example file contains and describes all available settings. Then, edit the
downloaded file being very careful to maintain proper formatting. Incorrect indentation is a common problem!
The link in the previous paragraph is for the example Kiali CR hosted in
GitHub, in the master
branch. Use GitHub’s branch selector to see the example
file that matches the Kiali Operator version that you are using.
It is important to understand the
spec.deployment.accessible_namespaces
setting in the CR. See the
Namespace Management page
for more information.
Once you created a Kiali CR, you can manage your Kiali installation by editing
the resource using the usual Kubernetes tools:
$ kubectl edit kiali kiali -n istio-system
5 - Accessing and exposing Kiali
Introduction
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.
If exposing Kiali in a custom way, you may need to set some configurations
to make Kiali aware of how users will access Kiali.
The examples on this page assume that you followed the
Installation guide to install Kiali, and that you
installed Kiali in the
istio-system
namespace.
Accessing Kiali using port forwarding
This method should work in any kind of Kubernetes cluster.
You can use port-forwarding to access Kiali by running any of these commands:
# 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
These commands will block. Access Kiali by visiting \https://localhost:20001/
in
your preferred web browser.
Please note that this method exposes Kiali only to the local machine, no external users. You must
have the necessary privileges to perform port forwarding.
Accessing Kiali through an Ingress
By default, the installation exposes Kiali creating an
Ingress resource.
Find out your Ingress IP or domain name and use it to access Kiali by
visiting this URL in your web browser:
https://_your_ingress_ip_or_domain_/kiali
.
To find your Ingress IP or domain name, as per
the Kubernetes documentation,
try the following command (doesn’t work if using Minikube):
kubectl get ingress kiali -n istio-system -o jsonpath='{.status.loadBalancer.ingress[0].ip}'
If it doesn’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. Please, check
the documentation of your cloud provider. You may need to customize the
pre-installed Ingress rule, or to expose Kiali using a different method.
Customizing the Ingress resource
By default, a catch-all Ingress resource is created to route traffic to Kiali.
Most likely, you will need a more specific Ingress resource that routes traffic
to Kiali only on a specific domain or path. To do this, you can specify route settings.
Alternatively, and for more advanced Ingress configurations, you can provide your own
Ingress declaration in the Kiali CR. For example:
spec:
deployment:
override_ingress_yaml:
metadata:
annotations:
nginx.ingress.kubernetes.io/secure-backends: "true"
nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
spec:
rules:
- http:
paths:
- path: /kiali
backend:
serviceName: kiali
servicePort: 20001
Accessing Kiali in Minikube
If you [enabled the Ingress controller]https://kubernetes.io/docs/tasks/access-application-cluster/ingress-minikube/#enable-the-ingress-controller,
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:
xdg-open https://$(minikube ip)/kiali
Accessing Kiali through a LoadBalancer or a NodePort
By default, the Kiali service is created with the ClusterIP
type. To use a
LoadBalancer
or a NodePort
, you can change the service type in the Kiali CR as
follows:
spec:
deployment:
service_type: LoadBalancer
Once the Kiali operator to updates the installation, you should be able to use
the kubectl get svc -n istio-system kiali
command to retrieve the external
address (or port) to access Kiali. For example, in the following output Kiali
is assigned the IP 192.168.49.201
, which means that you can access Kiali by
visiting \http://192.168.49.201:20001 in a browser:
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
Accessing Kiali through an Istio Ingress Gateway
If you want to take advantage of Istio’s infrastructure, you can expose Kiali
using an Istio Ingress Gateway. The Istio documentation provides a
good guide explaining how to expose the sample add-ons.
Even if the Istio guide is focused on the sample add-ons, the steps are the same to expose a Kiali
installed using this Installation guide.
Accessing Kiali in OpenShift
By default, installation exposes Kiali through a Route. The following command
should open Kiali in your default web browser:
xdg-open https://$(oc get routes -n istio-system kiali -o jsonpath='{.spec.host}')/console
Specifying route settings
Either 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.
In the Kiali CR, route settings are broken in several attributes. For example,
to specify that Kiali is being accessed under the
\https://apps.example.com:8080/dashboards/kiali
URI, you would need to set the
following:
spec:
server:
web_fqdn: apps.example.com
web_port: 8080
web_root: /dashboards/kiali
web_schema: https
If you are letting the installation to create an Ingress resource for you,
the Ingress will be adjusted to match these route settings.
If you are using your own exposure method, this is only making Kiali aware
about what is its public endpoint.
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 LoadBalancer
or NodePort
service types, Kiali can
discover most of these settings. If you are using some kind of Ingress, Kiali
will honor X-Forwarded-Proto
, X-Forwarded-Host
and X-Forwarded-Port
HTTP
headers if they are properly injected in the request.
The web_root
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 /kiali
for
Kubernetes and /
for OpenShift.
Usually, these settings can be omitted. However, a few features require
that the Kiali’s public route can be properly discovered or that is properly
configured; most notably, the
OpenID authentication.
Configuring listening ports
Usually, these settings need to be changed only if you are directly
exposing the Kiali serivce (like when using a LoadBalancer
service type).
It is possible to configure the listening ports of the Kiali service to use
your preferred ones:
spec:
server:
port: 80 # Main port for accessing Kiali
metrics_port: 8080
6 - Advanced installation options
Multiple Istio control planes in the same cluster
Currently, Kiali can manage only one Istio control plane. However, there are
certain cases where you may have more than one Istio control plane in your
cluster. One of such cases is when performing a
Canary upgrade of Istio.
In these cases, you will need to configure in Kiali which control plane you
want to manage. This is done by configuring the name of the components of the
control plane. This is configured in the Kiali CR and the default values are
the following:
spec:
external_services:
istio:
config_map_name: "istio"
istiod_deployment_name: "istiod"
istio_sidecar_injector_config_map_name: "istio-sidecar-injector"
If you want to manage both Istio control planes, simply install two Kiali
instances and point each one to a different Istio control plane.
Installing a Kiali Server of a different version than the Operator
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.
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 «Using a custom image registry» section to learn how to
configure this setup.
Using a custom image registry
Kiali is released and published to the Quay.io container image registry. There is a repository hosting the Kiali operator images and another one for the Kiali server images.
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:
$ 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
Notice the --set allowAdHocKialiImage=true
which allows specifying a
custom image in the Kiali CR. For security reasons, this is disabled by
default.
Then, when creating the Kiali CR, use the following attributes:
spec:
deployment:
image_name: your.custom.registry/owner/kiali-server-repo
image_version: your_custom_tag
Development Install
This option installs the latest 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.
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