Istio

menu icon

Istio

Découvrez Istio, une technologie ouverte qui permet aux développeurs de connecter, gérer et sécuriser en toute transparence des réseaux de différents microservices.

Qu'est-ce qu'Istio ?

Istio est une couche de maillage de services open source configurable qui connecte, surveille et sécurise les conteneurs dans un cluster Kubernetes. Au moment de la rédaction de cet article, Istio fonctionne uniquement en mode natif avec Kubernetes, mais sa nature open source permet à toute personne d'écrire des extensions afin qu'Istio s'exécute sur tout logiciel cluster. Nous allons traiter de l'utilisation d'Istio avec Kubernetes, cas d'utilisation le plus courant.

Kubernetes est un outil d'orchestration de conteneur et une unité principale de Kubernetes est un nœud. Un nœud est constitué d'un ou de plusieurs conteneurs, ainsi que de systèmes de fichiers ou d'autres composants. Une architecture de microservices peut avoir une douzaine de nœuds différents, représentant chacun des microservices différents. Kubernetes gère la disponibilité et la consommation de ressources des nœuds, ajoutant des pods à mesure que la demande augmente, via le Pod Autoscaler. Istio injecte des conteneurs supplémentaires dans le pod pour ajouter de la sécurité, de la gestion et de la surveillance.

Istio étant open source, il peut s'exécuter sur n'importe quel fournisseur de cloud public qui le prend en charge et tout cloud privé doté d'administrateurs de bonne volonté.

La vidéo suivante explique en détail les concepts de base d'Istio (5:13) :

Le maillage de services réseau

Lorsque des entreprises passent aux microservices, elles doivent prendre en charge des dizaines, voire des centaines d'applications spécifiques. La gestion distincte de ces nœuds finaux entraîne la prise en charge d'un grand nombre de machines virtuelles, y compris la demande. Des logiciels cluster tels que Kubernetes peuvent créer des pods et augmenter leurs capacités, mais Kubernetes ne fournit pas de routage, de règles de trafic, ni d'outils puissants de surveillance ou de débogage.

Entrons au cœur du maillage de services.

L'augmentation du nombre de services entraîne l'accroissement exponentiel des modes de communication potentiels. Deux services n'ont que deux voies de communication. Trois services en ont six, tandis que 10 services en ont 90. Un maillage de services fournit un moyen unique de configurer ces voies de communication en créant une règle en matière de communication.

Un maillage de services instrumente les services et dirige le trafic de communications selon une configuration prédéfinie. Donc, au lieu de configurer un conteneur en cours d'exécution (ou d'écrire du code pour ce faire), un administrateur peut fournir une configuration au maillage de services qui va s'en charger. C'était auparavant inéluctable avec les serveurs Web et la communication de service à service.

Le moyen le plus courant d'y procéder dans un cluster est d'utiliser le modèle "side-car". Un side-car est un nouveau conteneur, à l'intérieur du pod, qui achemine et observe le trafic des communications entre les services et les conteneurs.

Istio et Kubernetes

Comme mentionné plus haut, Istio se superpose à Kubernetes, ajoutant des conteneurs qui sont pour l'essentiel invisibles pour le programmeur et l'administrateur. Appelés conteneurs "side-car", ils servent "d'intermédiaires", car ils dirigent le trafic et surveillent les interactions entre les composants. Ils fonctionnent ensemble dans trois domaines : configuration, surveillance et gestion.

Configuration

La méthode principale pour définir la configuration avec Kubernetes est la commande kubectl, généralement "kubectl -f <nom_fichier>", où le fichier est de type YAML. Les utilisateurs d'Istio peuvent exécuter des fichiers YAML nouveaux et de différents types avec kubectl, ou utiliser la nouvelle commande ioctl, facultative.

Surveillance

Avec Istio, vous pouvez facilement surveiller l'état de vos applications s'exécutant avec Kubernetes. L'instrumentation d'Istio peut gérer et visualiser l'état des applications, offrant ainsi plus d'éclairages que la simple surveillance générale du cluster et des nœuds de Kubernetes.

Gestion

L'interface pour Istio étant pour l'essentiel la même que Kubernetes, sa gestion ne nécessite quasiment pas de gestion supplémentaire. En fait, Istio permet à l'utilisateur de créer des règles qui impactent et gèrent l'ensemble du cluster Kubernetes, ce qui réduit le temps de gestion de chaque cluster tout en éliminant la nécessité d'un code de gestion personnalisé.

Avantages

Les principaux avantages d'un maillage de services sont les fonctionnalités de débogage amélioré, de surveillance, de routage, de sécurité et d'optimisation. Grâce à Istio, il sera plus facile de gérer un plus grand groupe de services.

Débogage amélioré

Supposons, par exemple, qu'un service possède plusieurs dépendances. Le service pay_claim d'une compagnie d'assurances appelle le service deductible_amt, qui appelle le service is_member_covered, et ainsi de suite. Une chaîne de dépendances complexe peut avoir 10 ou 12 appels de service. Lorsque l'un de ces 12 services est défectueux, il se produit des échecs en cascade qui aboutissent à un erreur de type 500 ou 400, voire même à aucune réponse.

Pour déboguer cet ensemble d'appels, vous pouvez utiliser une trace de pile. Au niveau frontal, les développeurs côté client peuvent voir quels éléments sont extraits des serveurs Web, dans quel ordre, et les examiner. Les programmeurs frontaux peuvent obtenir un diagramme en cascade pour faciliter le débogage.

L'exemple ne montre pas ce qui se passe dans le data center : callback =parselLotamaAudiences appelle quatre autres services Web et certains répondent plus lentement. Nous verrons plus loin comment Istio fournit des outils pour tracer des appels de fonction dans un diagramme très similaire à celui-ci.

Surveillance et observabilité

Les équipes DevOps et l'administration informatique peuvent vouloir observer le trafic, afin de déterminer le pourcentage de latence, le temps de service, les erreurs, etc. Le plus souvent, un tableau de bord est idéal. Un tableau de bord fournit une visualisation de la somme, ou de la moyenne, ou de ces métriques sur la durée. Il permet éventuellement d'accéder au détail d'un nœud, service ou pod spécifique. Kubernetes ne fournit pas cette fonctionnalité nativement.

Politique

Par défaut, Kubernetes permet à chaque pod d'envoyer du trafic à tous les autres pods. Istio permet aux administrateurs de créer une règle pour restreindre les services qui peuvent fonctionner les uns avec les autres. Ainsi, certains services peuvent uniquement appeler d'autres services qui sont de vraies dépendances. Une autre règle visant à maintenir le fonctionnement des services est une limite de débit qui va empêcher tout trafic excédentaire de bloquer un service et éviter les attaques par déni de service.

Routage et équilibrage de charge

Par défaut, Kubernetes fournit un équilibrage de la charge circulaire. S'il y a six pods qui fournissent un microservice, Kubernetes fournit un équilibreur de charge, ou "service", qui envoie des demandes à chaque pod dans un ordre croissant, puis recommence. Toutefois, une entreprise déploiera parfois différentes versions du même service en production.

L'exemple le plus simple peut être un déploiement bleu/vert. Dans ce cas, le logiciel peut générer une version entièrement nouvelle de l'application en production sans lui envoyer d'utilisateurs de production. Après avoir promu la nouvelle version, l'entreprise peut garder les anciens serveurs pour les réutiliser en cas d'échec.

Avec Istio, c'est aussi simple que d'utiliser du balisage dans un fichier de configuration. Les administrateurs peuvent également utiliser des libellés pour indiquer le type de service auquel se connecter et créer des règles basées sur des en-têtes. Par exemple, les bêta-testeurs peuvent être acheminés vers un pod 'canary' avec le build optimal le plus récent, tandis que les utilisateurs classiques accèdent au build de production stable.

Coupe-circuit

Si un service est surchargé ou arrêté, les demandes supplémentaires échoueront tout en continuant à surcharger le système. Istio effectuant un suivi des erreurs et des retards, il peut forcer une pause, ce qui va permettre à un service de reprendre, après un nombre spécifique de demandes définies par une règle. Vous pouvez appliquer cette règle à l'ensemble du cluster en créant un petit fichier texte et en indiquant à Istio de l'utiliser en tant que nouvelle règle.

Sécurité

Istio fournit l'identité, la règle et le chiffrement par défaut, ainsi que l'authentification, l'autorisation et l'audit (AAA). Les pods gérés qui communiquent avec d'autres utiliseront le trafic chiffré, empêchant toute observation. Le service d'identité, combiné au chiffrement, garantit qu'aucun utilisateur non autorisé ne peut faire de faux appels de service ou usurper un appel. L'AAA fournit aux professionnels de la sécurité et des opérations les outils de surveillance requis, tout en consommant moins de ressources.

Administration simplifiée

Les applications traditionnelles ont toujours besoin des fonctionnalités d'identification, de règle et de sécurité offertes par Istio. Or les programmeurs et les administrateurs travaillent au mauvais niveau d'abstraction, en réimplémentant en permanence les mêmes règles de sécurité pour chaque service. Istio leur permet de travailler au niveau adéquat, en définissant une règle pour le cluster via un seul panneau de commande. Parallèlement, grâce aux contrôles d'accès, aux tableaux de bord et aux outils de débogage d'Istio décrits ci-dessous, vous pouvez facilement ajouter un plug-in à la ligne de commande, plutôt que d'aller sur une page Web.

Exemples

Services de visualisation

Istio 1.1 inclut un nouveau module complémentaire, Kiali, qui fournit une visualisation Web. Vous pouvez l'utiliser pour effectuer le suivi des demandes de service, accéder au détail ou même exporter l'historique des demandes de service en tant que JSON pour interroger et formater comme vous le souhaitez. Le graphique de charge de travail ci-dessous présente des dépendances générées en temps réel sur la base des services qui dépendent les uns des autres. Il est généré à partir d'observations réelles du trafic.

Image du nouvel additif Kiali qui fournit une visualisation Web

Suivi des appels de service

Le service Jaeger, composant d'Istio, fournit un suivi de tout service donné. Dans cet exemple, nous avons effectué un suivi de la page produit. Chaque point de la première image représente un appel de service. Cliquer sur un point permet d'accéder au détail du diagramme en cascade pour suivre les demandes et réponses de service exactes.

Image du service The Jaeger, un composant d'Istio, fournit un service de trace pour n'importe quel service donné.  Dans cet exemple, nous avons effectué un suivi de la page produit.  Chaque point de la première image représente un appel de service.

Il est également possible d'examiner plus précisément la page produit. On constate que les erreurs se trouvent dans la page produit-même, les détails sont donc bien corrects.

Image de la page du produit.  On constate que les erreurs se trouvent dans la page produit-même, les détails sont donc bien corrects.

Tableaux de bord

Istio présente de nombreux tableaux de bord (prêts à l'emploi) pour surveiller l'état et les performances du système. Ils peuvent mesurer l'utilisation de l'unité centrale et de la mémoire, la demande de trafic, le nombre d'erreurs 400 et 500, le temps de traitement des demandes, etc. Mieux encore, afin d'y accéder, il suffit d'installer et d'exécuter Istio et d'ajouter Grafana, l'un des outils de tableau de bord open source inclus pour Istio. Istio fournit également deux autres tableaux de bord : Kiali et Jaeger.

Image des nombreux tableaux de bord d'Istio (prêts à l'emploi) pour surveiller la santé et les performances du système.

Istio versus Envoy

Istio utilise une version d'Envoy, largement étendue, pour effectuer la surveillance, la gestion et la journalisation. Chaque pod doit être suivi, et Istio doit rassembler et fournir des informations sur tous les pods. Une alternative possible à l'utilisation d'Istio serait de déployer directement Envoy dans le cluster Kubernetes et d'écrire le code de gestion. Mais au final, il s'agirait essentiellement de remanier Istio, avec tous les coûts et les bugs associés à un projet de développement personnalisé.

Tutoriels

Lesite Web Istio(lien en dehors d'IBM) contient un grand nombre de documentations et d'instructions utiles pour commencer avec Istio. 

Istio et IBM

Managed Istio est disponible dans le cadre d'IBM Cloud Kubernetes Service. Ce service permet une installation transparente d'Istio, des mises à jour automatiques et une gestion du cycle de vie des composants du plan de contrôle, ainsi que l'intégration à des outils de surveillance et de consignation de plateforme. Ajoutez l'intégration Istio gérée à vos clusters nouveaux ou existants et reprenez le contrôle de vos microservices dès aujourd'hui. Si vous souhaitez explorer Knative, consultez ce document : "Knative: An Essential Guide".

En savoir plus sur Managed Istio on IBM Cloud Kubernetes Service

Pour savoir comment le Kubernetes géré peut vous aider dans votre parcours cloud, regardez notre vidéo, "Advantages of Managed Kubernetes" :

Pour en savoir plus sur les meilleures pratiques d'activation et d'accélération du déploiement de conteneurs dans des environnements de production, consultez le rapport "Best Practices for Running Containers and Kubernetes in Production".

Découvrez comment les maillages de service peuvent vous aider à contrôler les interactions entre les services dans votre application avec le guide pratique « Istio Explained: Getting Started with Service Mesh » (PDF, 4,1 Mo).

Si vous souhaitez commencer à utiliser IBM Cloud dès aujourd'hui, inscrivez-vous ici.