Comment rapidement mettre en place Istio sur Kubernetes

Dans cet article nous allons voir comment installer Istio de la façon la plus simple possible sur un cluster kubernetes et comment le configurer pour qu’il prenne en charge les applications déployées.

Avant de parler d’Istio nous allons revenir sur  la notion de service mesh.

Un service mesh signifie littéralement un maillage de service. C’est une notion qui est très présente dans le monde du micro-service. Aujourd’hui, pour plusieurs raisons telles que la résilience, la performance ou la  montée en charge, les applications ne sont plus constituées d’un seul composant qui fait tout, mais sont plutôt divisées en plusieurs petits composants appelés services ou micro-services. Ces services, pour accomplir une action doivent interagir les uns avec les autres. De cette interaction découlent plusieurs problématiques telles que l’authentification entre services ou l’authentification de bout en bout sur l’ensemble de la chaîne de services, l’équilibrage et la gestion du trafic, la sécurité etc…. Toutes ces interactions avec toutes ces problématiques constituent le maillage de service.  La gestion du maillage de services ne peux pas être faite par les services eux-mêmes. Car aucun d’entre eux n’est bien placé pour cela.  

Un service mesh c’est donc un outil ou une infrastructure qui va gérer la communication et les interactions entre les microservices d’une application. Il permet ainsi de faciliter la vie des développeurs d’applications qui se concentrent sur la logique métier et n’ont pas à gérer toute la complexité autour de l’interaction entre microservices.

Istio étant un service mesh, il permet donc de gérer et simplifier le service discovery, le routage et la gestion du trafic, le chiffrement, l’authentification et les autorisations ainsi que  le monitoring et la télémétrie. Il est conçu pour s’intégrer facilement avec les services sans nécessiter de changement de code.

Istio et ses composants 

Istio fournit une couche d’abstraction qui facilite la prise de décisions de haut niveau sur le trafic réseau dans le cluster: les politiques de contrôle, les métriques et les logs, la découverte de services, les communications sécurisées inter-services etc.

                          v

Les composants d’istio se regroupent en deux groupes :

  • Un Control Plane, qui regroupe les composants centraux : configuration, policies, authentification, expositions des métriques, etc.
  • Un Data Plane, constitué de proxys, qui pourront être présents :
    • au niveau d’un nœud ; on parle alors de Shared host proxy, déployé par un DaemonSet.
    • au niveau de chaque pod ; on parle alors de sidecar proxy, déployé par injection auprès d’un conteneur existant.

Le Control Plane est constitué de composants tels que:

  • Mixer : gère la collecte de métriques et  le contrôle d’accès depuis Envoy.
  • Pilot : gère le routage intelligent.
  • Citadel : gère l’authentification entre service ainsi que les autorisations.
  • Galley : Il s’occupe de la validation, l’ingestion, du traitement et est chargé d’isoler le reste des composants d’Istio des détails de la plateforme sous-jacente (par exemple Kubernetes).

Le Data Plane quant à lui est constitué de:

  • Envoy : C’est le proxy, déployé comme sidecar, qui permet de gérer tout le trafic du service concerné. Il apporte de nombreuses fonctionnalités (load balancing, TLS, health checks etc.).

Avec les proxys injectés, Istio peut gérer le traffic  HTTP/1.1 ou HTTP/2.0; Le protocole HTTP/1.0 n’est pas supporté.

Prérequis et installation

Dans cette partie nous allons nous focaliser sur l’installation d’istio sur un cluster kubernetes.

Pour cette installation il faut:

  • Un cluster Kubernetes 1.10+ avec la gestion des RBAC activée. Pour des informations sur comment mettre en place un cluster rapidement vous  pouvez suivre ce lien:

 https://istio.io/docs/setup/platform-setup 

  • La commande kubectl  doit être installée sur une machine et configurée pour être connectée au cluster kubernetes. Suivre ce lien pour des informations sur comment installer et configurer la  commande kubectl:

 https://kubernetes.io/fr/docs/tasks/tools/install-kubectl/

Préparation

On suppose  que vous disposez d’un  cluster kubernetes compatible avec istio. Pour cette installation nous allons utiliser la commande istioctl pour installer la version 1.4.4. Chaque release d’istio contient les fichiers d’installation nécessaires, ainsi que des exemples et les binaires.

Pour  télécharger la commande istioctl, il suffit de se rendre sur la page des releases d’Istio et télécharger la version compatible avec son os: 

https://github.com/istio/istio/releases.

Alternativement, sur un système linux ou macOS, on peut le faire en exécutant les commandes suivantes:

1. On commence par spécifier la version en variable d’environnement:

Copy to Clipboard

2. Puis on exécute cette commande qui va télécharger les fichiers compatibles avec l’os:

Copy to Clipboard

3. Entrer dans le dossier istio-1.4.4:

Copy to Clipboard

Ce répertoire contient:

    • Dans install/kubernetes: Les fichiers  YAML d’Installation sur Kubernetes 
    • Dans samples/: des  exemples d’applications en microservices  à tester sur istio
    • Dans  bin/: le binaire istioctl. 

4. Ajouter  istioctl dans votre path:

Copy to Clipboard

Installation

Maintenant nous allons installer istio sur le cluster kubernetes. Pour une installation rapide, nous allons utiliser les profils de configuration déjà présents dans istio. Les profils istio fournissent une customization du control plane et des sidecars pour le data plane Istio.

Le tableau suivant montre les différents composants installés pour chaque profils présents:

Nous allons utiliser le profil demo qui est préconfiguré pour installer les composants principaux d’istio mais aussi les composants de télémétrie: 

  • grafana: le dashboard pour les métriques liées au mesh
  • prometheus: pour les métriques du mesh
  • kiali: qui est un interface web qui montre le graphe de service du mesh
  • jaeger: pour le tracing des différentes requêtes du service mesh

Pour installer istio avec le profil demo, on utilise la commande suivante:

Copy to Clipboard

Ensuite on vérifie que l’installation s’est bien passée en s’assurant  que les services kubernetes ont bien été créés:

Copy to Clipboard
Copy to Clipboard

Puis on vérifie les pods:

Copy to Clipboard

vv

Vu que tous les pods sont Running, Istio est installé  et prêt à être utilisé.

Configuration

Pour qu’Istio gère les pods d’une application, il a besoin de rajouter un sidecar dans ceux-ci. Il le fait grâce au composant sidecar injector. Ce composant va rajouter le sidecar à tous les pods des namespaces contrôlés par istio.  Pour autoriser istio à contrôler un namespace il suffit de placer le label istio-injection=enabled:

Copy to Clipboard

Puis lancer son application dans le namespace:

Copy to Clipboard

Il est possible d’avoir l’injection seulement sur certains  pods du namespace. Ceci est possible grâce à l’option kube-inject d’istioctl pour ajouter le sidecar Envoy dans le template de l’application:

Copy to Clipboard

  Et Maintenant?

A ce stade nous disposons d’un kubernetes fonctionnel et d’un istio installé en mode démo avec des outils de métrologie et de tracing. Il est donc temps de déployer notre application et de tester les différentes fonctionnalités d’Istio.

Istio fournit par ailleurs des exemples d’applications pour aller vite: https://istio.io/docs/examples/bookinfo/

Cissé ABDELHAFIZ
Cissé ABDELHAFIZ