Visualisation des microservices dans un mesh avec Kiali


 

Dans les articles précédents nous avions parlés de tracing distribués et d’observabilité. Dans le présent article, nous allons aborder la visualisation des traces avec Kiali.

Kiali est une solution open source utilisée pour observer les interactions entre les différents microservices dans un service mesh.

Selon le mode de déploiement d’ISTIO, Kiali peut-être déployé par défaut avec ISTIO, ou indépendamment avec certains paramètres bien définis, selon le besoin. 

Parmi les fonctionnalités les plus essentielles de Kiali, on peut citer :

  • Visualisation de la topologie d’une architecture de microservices gérée par ISTIO.
  • Monitoring du trafic qui transite entre les microservices
  • Visualisation du statut et les métriques des microservices.
  • Visualisation et gestion de la configuration des règles et des politiques pour chaque service du mesh
  • Affichage des informations détaillées pour chaque service : charge de travail, réseau, virtual services,  destinations rules etc …

Architecture et composants de kiali:

Kiali est constitué de deux composants de base : La front-end et le backend.

  • Kiali front-end

Il s’agit simplement de la page web Kiali, développée en Typescript, qui offre une UI assez riche à l’administrateur.  L’administrateur interagit ainsi avec le front-end pour visualiser et manipuler les informations fournies par le back-end.

  • Kiali back-end

C’est le composant qui va  récupérer les données depuis des services externes, puis les traiter, pour offrir différentes fonctionnalités proposées sur le UI de Kiali ( monitoring du trafic entre les microservices, visualisation des graphes de dépendance, etc ). Ainsi, le back-end Kiali  sera l’intermédiaire entre le front-end et ISTIO. 

 

A cela s’ajoute des dépendances essentielles au bon fonctionnement du back-end Kiali. C’est à travers ces dépendances que ISTIO fournit à Kiali des informations dont il a besoin sur le service mesh. Et parmi ces dépendances on peut citer :

  • Prometheus

Prometheus est un élément essentiel dont dépend Kiali. Kiali va “puller” les métriques des applications gérées par ISTIO car il utilise les données de prometheus pour afficher la topologie des meshes, les métriques … et bien d’autres informations. 

Kiali va utiliser la configuration par défaut du Prometheus installé par ISTIO. Si toutefois on veut utiliser un Prometheus externe, il est essentiel de :

  • Ajouter une configuration kubernetes_sd_config sur la configmap du pod Prometheus, pour “scraper” les métriques de chaque composant d’ISTIO.
  • Ajouter le lien vers le serveur Prometheus externe sur la Custom Resource (CR) de Kiali: 
Copy to Clipboard

  • API Kubernetes

Puisque notre service mesh contrôlé par ISTIO tourne sur un cluster kubernetes, Kiali va donc solliciter le Cluster API afin d’avoir des informations sur des objets kubernetes tels que : le namespace, le service, les pods, etc… Le cluster API permet aussi de récupérer des informations sur des objets ISTIO tels que : les gateways, les virtualServices, les serviceEntry, etc.. utilisés pour la configuration du service mesh.

 

On peut aussi citer des plugins non essentiels au fonctionnement de Kiali, mais qui peuvent être ajoutés comme options supplémentaires pour la UI de Kiali.

  • Jaeger

Quand le tracing est activé sur ISTIO, Kiali permet (optionnellement) d’intégrer toutes les fonctionnalités desservies par Jaeger sur sa UI. Offrant ainsi à l’utilisateur la possibilité de visualiser les informations de tracing distribué générées par Jaeger sur la UI de Kiali.

  • Grafana

Kiali permet de fournir le monitoring à travers quelques métriques de base : services, charge de travail etc … Kiali permet aussi (optionnellement) une intégration avec Grafana, afin d’offrir à l’utilisateur un lien de redirection vers la dashboard Grafana.

Installation de Kiali

Dans un déploiement d’ISTIO avec le profil démo, on n’aura pas à installer ni à configurer Kiali. Car dans le profil démo utilisé pour les tests et le développement, ISTIO va installer Kiali pour vous et va configurer un secret kubernetes contenant des credentials par défaut pour s’authentifier à la UI de Kiali, et qui sont (admin/admin).

Si c’est le cas pour vous, je vous invite à passer à la prochaine partie pour voir comment utiliser Kiali.

Pour le reste de cette partie, nous allons déployer Kiali sur le namespace istio-system où sont installés les autres composants du control-plane d’ISTIO

Tout d’abord, on commence par configurer un secret kubernetes où on va spécifier le username et la passphrase. Ce secret va nous permettre d’accéder à la page d’admin de Kiali. On a  choisi la paire ( kiali / xVnmdxMhSH ):

Copy to Clipboard

On va  utiliser ces identifiants par la suite pour créer un secret Kubernetes:

Copy to Clipboard

A cette étape, on est prêt à déployer kiali. Et cela, avec la commande istioctl, en paramétrant l’installation avec l’argument suivant, qui va activer kiali :

Copy to Clipboard

Les fonctionnalités de Kiali

Une fois Kiali installé, il va automatiquement détecter, pour chaque namespace, les déploiements, les services, les configurations de règles et de politiques d’ISTIO etc..

Ces informations vont être par la suite traitées et affichées sur la UI de Kiali.

Dans cette partie nous allons découvrir les fonctionnalités offertes sur la UI de Kiali. 

Pour cela, nous allons tout d’abord déployer l’application bookinfo, et nous allons voir par la suite comment on peut utiliser les fonctionnalités présentées sur la UI de Kiali pour visualiser et gérer les éléments détectés depuis le mesh.

Install bookinfo:

On va déployer l’application bookinfo sur le namespace default. Nous allons donc activer le sidecar injection sur ce namespace :

Copy to Clipboard

Par la suite nous allons lancer le déploiement de l’application bookinfo depuis le manifest qui se trouve sur le repo git d’ISTIO:

Copy to Clipboard

Il ne faut surtout pas oublier de déployer une gateway ISTIO qui permet d’exposer l’application bookinfo. Cela nous permettra d’y accéder depuis l’extérieur.

Copy to Clipboard

Une fois l’application bookinfo déployée, il ne nous reste plus qu’à lancer la UI de Kiali. il suffit de taper la commande :

Copy to Clipboard

Fonctionnalités:

 

  • Overview

 

Sur cet onglet on a une vision globale sur les namespaces impliqués dans notre mesh, et le nombre de services ou de pods qui tournent sur chaque namespace, ainsi que le statut de ces services.

Kiali permet de fournir l’état de santé de tous les services tournant sur notre mesh, y compris les composants d’ISTIO qui tournent sur le namespace istio-system.

  • Graph

Sur l’onglet graph on peut voir une représentation topologique de toutes les interactions entre tous les services qui ont été déployés par l’application booking.

On remarque aussi la présence de istio-ingressgateway qui est un service ISTIO de type  load balancer. Il est le point d’entrée de notre mesh, il reçoit le trafic entrant vers l’application bookinfo.

  • Aplications

Sur cet onglet nous pouvons suivre l’état du trafic entrant ou sortant de notre application, à travers différentes métriques :

  • Workloads

Sur cet onglet nous pouvons voir des services concernés par la charge de travail. On peut aussi voir sur quel pod tourne cette charge de travail. On peut aussi visualiser les logs de ce pod.

  • Services

Sur cet onglet nous avons une liste de tous les services déployés sur notre mesh affichés par namespace. Et pour chaque service nous pouvons voir des informations détaillées sur le statut du service ou les caractéristiques réseaux. On peut aussi voir les configurations du trafic assignées à chaque service, et qu’on peut modifier sur l’onglet suivant : Istio Config.

  • Istio Config

Sur cet onglet, nous avons une liste de toutes les configurations des règles et des politiques d’ISTIO pour tous les services de notre mesh.. On peut manipuler ces configs directement sur la UI en cliquant sur le service concerné, et modifier directement si on le souhaite le manifest YAML.

Kiali permet aussi d’afficher l’état de la configuration en indiquant si celle ci est en statut valid ou en statut warning.

Conclusion:

Nous avons fait le tour de la UI Kiali, qui comme nous l’avons vu, est assez riche en informations sur notre mesh. Nous avons pu visualiser certaines métriques concernant le trafic transitant sur le mesh, voir les logs des pods liés à chaque service et finalement grâce au tracing de nos services nous avons pu avoir un graphe topologique des interactions entre ces services.

Et par cela,  nous auront fait le tour de tous les aspects de l’observabilité, à savoir : Le monitoring avec métriques, le logging et le tracing distribué.

Et de ce fait, Kiali fournit une observabilité granulaire à travers une image bien détaillée des services qui tournent dans notre service  mesh. Il permet ainsi une meilleure visibilité et une réponse plus rapide aux incidents qui peuvent affecter le bon fonctionnement de notre mesh.