La véritable intégration de la virtualisation dans le réseau

tech-presentation-2J’ai déjà eu l’occasion de parler à travers différents articles de virtualisation de systèmes d’exploitation. Je vais bien entendu continuer cette série d’articles afin de faire le tour de tous les types majeurs de virtualisation cependant je souhaiterais faire une petite parenthèse. Cet article fait suite à une démonstration technologique à laquelle j’ai pu assister dans le cadre de mon stage.

La virtualisation est une technique qui met à mal les configurations et la conception traditionnelle du réseau. Traditionnellement, derrière un port d’un équipement réseau se trouve une machine. Sur cette machine on retrouve une adresse mac et un adresse IP. La virtualisation chamboule cette convention. On se retrouve rapidement à avoir un nombre important de d’adresses mac et d’adresses IP derrière un même port physique. De plus, traditionnellement un port sur lequel on branche une machine est un port en mode « access » en langage Cisco (non propagation des étiquettes de VLAN) alors qu’avec la virtualisation ces ports vont devoir se trouver en mode « trunk » (propagation des étiquettes de VLAN).

Les choses se compliquent de manière significative dès qu’on commence à insérer la notion de migration de machines virtuelles. Traditionnellement, un déplacement de machine nécessite le déplacement d’un technicien et la reconfiguration des équipements. Avec la virtualisation, la migration de machines virtuelles se fait en deux clics à distance et ne doit pas nécessiter l’intervention d’une personne sur site. Ce qui change fondamentalement, c’est qu’on va devoir adapter la configuration du réseau à la volée en fonction de changements applicatifs.

Le réseau est habitué à s’adapter à des changements au niveau 3 du modèle OSI avec les nombreux protocoles et algorithmes de routage. Le réseau est capable de s’adapter tant bien que mal aux changements de topologie de niveau 2 avec des technologies telles que le Spanning Tree. Cependant, il n’a pas du tout l’habitude de s’adapter à des changements applicatifs. Or dans le cas de la migration de machines virtuelles, il va falloir qu’il le fasse et qu’il le fasse vite et bien.

La virtualisation va donc s’interfacer avec le réseau pour pouvoir le commander et le faire s’adapter en fonction des migrations de machines virtuelles. L’interfaçage avec une interface de configuration du réseau sera donc indispensable. La mise en place d’un équipement réseau (virtuel ou physique peu importe) pour coordonner ces modifications et modifier les topologies va également être nécessaire.

En termes de fonctionnalités, chaque machine virtuelle va avoir son propre port virtuelle sur lequel il sera possible d’associer des configurations qui s’attribuent traditionnellement aux ports de switchs ou de routeur. L’équipement réseau virtuel pourra être capable de servir de routeur, d’IDS ou même de firewall applicatif. La gestion du réseau sera centralisé car il est indispensable de pouvoir gérer tous les équipements réseau d’un seul emplacement afin d’avoir une harmonie.

Vous allez me dire que tout ceci est bien beau et bien sympa, et vous aurez bien raison. Cependant sans implémentation pratique cela ne servirait pas à grand chose. Il n’existe, hélas, aucune implémentation libre de ce type d’application mais il en existe cependant des implémentations propriétaires. J’ai nommé Cisco Nexus 1000v mais qui n’est disponible que pour VMWare. Selon certaines informations, Citrix serait également en train de travailler sur une implémentation open source d’un telle application ce qui serait une avancée majeure pour la virtualisation open source ! De plus, la plateforme Cisco Nexus 1000v semble être prévue pour être exécutée sur plusieurs hyperviseurs étant donné qu’il est possible de spécifier le type d’hyperviseur. Aujourd’hui, seul VMWare fonctionne mais pourquoi pas Xen demain ?

Ca, c’est le futur de la virtualisation ! Et ca fait plaisir !

La virtualisation matériel assistée

tech-presentation-2Je vais continuer dans la suite logique des billets précédents. Pour rappel, j’ai précédemment parlé de l’intérêt de la virtualisation, proposé une classification des différents types de virtualisation et puis expliqué plus en détail la virtualisation totale. Je vais donc continuer cette série d’article en vous parlant de virtualisation matériel assistée.

Tout d’abord, le terme de virtualisation matériel assistée semble assez explicite. On comprend bien qu’il s’agit de virtualisation qui va être assistée par une fonctionnalité spécifique du matériel. Les détails du fonctionnement de cette technologie le sont cependant bien moins. Ce terme est une traduction de l’anglais « Hardware Assisted Virtualization ». On peut aussi trouver comme autre traduction « virtualisation assistée par matériel ». Tous ces termes sont cependant équivalents. Cependant, la virtualisation partielle n’a aucun rapport.

HAV

Comme vous pouvez le voir, le schéma d’architecture ne change que très peu par rapport à la virtualisation totale. Avec la virtualisation totale, nous parlions de couche logicielle de virtualisation alors que parlerons plutôt de « Virtual Machine Monitor » ou VMM dans le cas de la virtualisation matériel assistée.

Une extension du jeu d’instructions du processeur

Ensuite, il est important de préciser que la virtualisation matériel assistée n’est pas une technique à part entière. Il s’agit en réalité d’une extension du principe de virtualisation totale. La principale modification qui est apportée est l’ajout d’extensions processeur de virtualisation. Vous en avez surement entendu parlé, je parle bien d’Intel VT et d’AMD-V. Ces instructions ont été implémentées dans les processeurs afin de pouvoir améliorer la virtualisation totale. Ces instructions sont une extension du jeu d’instructions exécutables par le processeur similairement à SSE ou MMX.

Ces instructions apportent plusieurs améliorations. Tout d’abord, elles créent un anneau -1 qui sera l’endroit privilégié de l’exécution d’un hyperviseur. Ceci permet de garder la localisation traditionnelle des anneaux avec le système d’exploitation présent dans l’anneau 0 et les applications dans l’anneau 3. Les autres ne sont jamais utilisé à l’exception de quelques rares cas. J’aurais l’occasion de revenir plus tard sur la notion d’anneau. Le placement du système d’exploitation dans son anneau traditionnel permet de simplifier l’accès à certains instructions et donc de supprimer une partie du travail de la couche de virtualisation.

De plus, elles permettent aux machines virtuelles de gérer leurs propres interruptions et donc changements de contexte. Ceci évite à la couche logicielle de virtualisation de devoir les gérer. Egalement, elles permettent au matériel de gérer directement  les zones de mémoire vive (non forcément linéaires) disponibles au machines virtuelles. Sans les extensions, il était nécessaire que la couche de virtualisation émule et gère des zones.

Si vous souhaitez plus d’informations sur ces instructions, je vous invite à consulter la documentation d’Intel disponible ici ou ici.

Au final, les extensions processeur de virtualisation permettent d’améliorer la technique de la virtualisation totale. Ceci se fait par l’ajout d’un degré d’intelligence au niveau du matériel qui sera conscient de l’utilisation d’une couche de virtualisation. La virtualisation matériel assistée est donc une évolution du principe de virtualisation totale.

Les ingrédients du réseau local idéal

stepfinal2Comme je l’ai indiqué dans un précédent billet, je vais déménager dans une zone couverte par l’offre « fibre optique » de Numéricable. Il va être nécessaire de prévoir un réseau local afin de pouvoir utiliser au mieux cette connexion. Mon objectif ici est de proposer une configuration réseau pour un public plutôt geek passionné de logiciels libres. Cela dépassera donc largement le cadre d’un réseau local « standard ».

Le but

Dans mon cas et je pense ne pas être le seul, le but d’un réseau local est de pouvoir s’amuser. Il s’agit en quelque sorte d’un bac à sable avec lequel on peut faire tout et n’importe quoi. J’y ferais sans aucun doute des choses fortement inutiles mais tout autant indispensables et amusantes.

Revenons aux choses plus concrètes tout de même. Tout d’abord, le premier but d’un réseau local est de partager une connexion Internet haut débit (100/5 Mbit/s dans mon cas) vers plusieurs équipements. Le partage de connexion se fera via un support câblé et un support sans-fil (le Wifi). Ce réseau implémentera les deux. Si je suis de bonne humeur, je ferais même un réseau wifi supplémentaire fortement restreint pour n’importe qui passant dans le coin. Ensuite, il va falloir pouvoir mettre des serveurs de sorte à fournir différents services aux ordinateurs sur ce réseau local. Des exemples de services sont un intranet, un serveur FTP, un serveur OpenVPN, de la téléphonie sur IP. Il va falloir également prévoir un firewall pour pouvoir filtrer la connexion Internet au mieux et assurer une qualité de service pour tout le monde.

Le matériel

Une fois qu’on a décidé des fonctionnalités du réseau, il va falloir se doter de matériel. Le premier équipement que l’on pense à acheter lorsqu’on crée un réseau local c’est un switch (lire commutateur pour les anglophobes). Cet équipement va permettre d’interconnecter les équipements à haute vitesse au niveau liaison de données du modèle OSI. Dans le cas de mon réseau local j’ai choisi un Cisco Catalyst 2950 doté de 24 ports 10/100. Je l’ai acheté sur Ebay pour 50€ donc ca reste plutôt raisonnable. Il existe des versions avec des ports d’uplinks GBIC ou giga mais ces versions sont légèrement plus couteuses. L’avantage de se fournir un switch Cisco de ce type est qu’on peut être sûr de sa fiabilité et qu’il dispose d’une multitude de paramétrages avec lesquelles il sera possible de jouer.

Cisco2950

Ensuite, vu qu’on a décidé que notre réseau local ferait un partage de connexion sans-fil, il va falloir trouver une borne wifi. Les box des fournisseurs d’accès font systématiquement office de borne d’accès wifi cependant vu qu’il s’agit d’un réseau local de geek, nous nous en contenterons pas. J’ai choisi un borne Cisco Aironet 1100. Je l’ai achetée 30€ sur Ebay. Cette borne nous donne la possibilité de créer plusieurs réseaux wifi sur la même borne ce qui serait idéal pour notre réseau d’invité. De plus, elle est capable de choisir le canal le moins encombré. Tout comme le 2950, il s’agit d’un équipement Cisco qui permettra donc de jouer avec pleins d’options. Un autre choix aurait pu être une borne wifi Linksys capable de supporter OpenWRT ou DD-WRT afin de disposer également de nombreuses options de configuration.

Aironet1100

Il ne nous manque plus qu’un équipement pour pouvoir créer notre réseau local idéal, le firewall. En ce qui concerne la partie applicative, il s’agira de Pfsense dont j’ai déjà parlé dans un billet précédent. Cette distribution est tout simplement génial et va permettre d’ajouter de nombreuses fonctionnalités au réseau local. En ce qui concerne la partie matérielle, un ordinateur de récupération suffira amplement. Dans mon cas, une machine à base d’AthlonXP 1800+ fera l’affaire sans problème.

Les différents types de virtualisation : La virtualisation totale

Dans l’article précédent, j’ai proposé une classification des différents types de virtualisation de systèmes d’exploitation basée sur différents critères. Je vais continuer cette série d’articles en vous présentant la virtualisation totale qui est le type de virtualisation le plus répandu historiquement.

La virtualisation totale consiste à émuler l’intégrité d’une machine physique. Pour rappel, l’émulation est le principe qui consiste à remplacer un composant matériel par une application dont le comportement est similaire voire identique. Le cas le plus classique d’émulation est l’émulation de vieilles consoles de jeux telles que la Super Nintendo ou la Game Boy. L’objectif de la virtualisation totale est donc de faire croire au système d’exploitation invité qu’il est présent sur du matériel physique et non au dessus d’une couche applicative.

Il s’agit de l’approche la plus basique en terme de virtualisation : « On ne peut pas avoir du matériel physique du coup on va le remplacer par une application ». Il s’agit de la première approche qui a été adoptée par VMWare en 1999 lors de sa création.

Virtualisation Totale

Comme présenté dans le schéma, la base installée sur le matériel est un système d’exploitation classique. Tous les systèmes d’exploitation, à ma connaissance, sont capables d’exécuter une application de virtualisation totale. Ceci est lié à la simplicité de son fonctionnement. La « Couche Logicielle » évoquée dans le schéma est une application telle que VMWare ou VirtualBox qui s’exécute comme toute autre application. Cette couche logicielle va ensuite émuler autant de matériel qu’il y a de machines virtuelles.

Certains vendeurs telles que VMWare vendent des solutions de virtualisation nommées « Bare Metal Hypervisor ». Cependant ce que VMWare appelle hyperviseur n’est absolument pas un hyperviseur au sens de Xen. Il s’agit en réalité d’un Linux Red Hat customisé.

L’inconvénient de la virtualisation totale est la performance. Il est nécessaire d’émuler de nombreux composants physiques et de capter toutes les instructions émanants des machines virtuelles ce qui consomme beaucoup de ressources. Des tests montrent de pertes de performance de l’ordre de 20% à 80%. Il est possible d’améliorer significativement les performances en ajoutant des pilotes de paravirtualisation qui permettent un meilleur interfacage avec la couche logicielle sous-jacente.

Les différents types de virtualisation : Classification

tech-presentation-2Après avoir vu l’intérêt de la virtualisation, je vais pouvoir vous présenter les différents types de virtualisation qui existent aujourd’hui sur le marché. Ces billets sur la virtualisation reprennent le contenu de l’AC (avec Romain Hinfray) et de la TX (avec Julie Facon). Je ferais des retours vers ces deux projets en synthétisant le contenu car ca fait trop long pour un blog.

Vous avez surement entendu parler de très nombreux types de virtualisation avec un panel de noms au moins aussi nombreux. Au début, on a tendance à rapidement s’y perdre. Je vais donc essayer dans cet article proposer une classification de la virtualisation qui est celle que nous avons proposé lors de l’AC.

On virtualise quoi ?

Tout d’abord, il est essentiel de se poser la question « Qu’est ce qu’on virtualise ? ». Il est possible de virtualiser beaucoup de choses de nos jours. Un début de liste comporterait des routeurs, des switchs, des applications, des systèmes d’exploitation, de l’espace disque et ainsi de suite. La virtualisation de routeurs et de switchs se fait notamment par les VRF dans les IOS Cisco ou bien des applications telles que Nexus de Cisco (switchs virtuels pour VMWare).

La virtualisation d’application est également un secteur important du marché même si il est peu connu car il n’existe pas, à ma connaissance, d’application libre sur ce secteur. Pour vous illustrer le principe, avec la virtualisation d’application vous pouvez vous connecter sur un portail, cliquer sur l’application de votre choix et elle s’exécute en quelques secondes sans être installé sur votre poste. Je ne sais pas comment ca fonctionne mais c’est assez impressionnant à voir. Un exemple d’implémentation de cette technologie est Citrix XenApp (pas grand chose à voir avec Xen a priori).

Ce dont je vais essentiellement parler, c’est la virtualisation de système d’exploitation. C’est le type de virtualisation généralement le plus connu. Le but de ce type de virtualisation est d’exécuter simultanément plusieurs systèmes d’exploitation sur une même machine physique. Les exemples d’implémentation ne manquent pas : Xen, VMWare, KVM, Hyper-V, …

On virtualise comment ?

Nous allons nous intéresser plus particulièrement à la virtualisation de systèmes d’exploitation. Je vous propose tout d’abord un arbre qui résume bien les différents types de virtualisation. Une fois de plus, il s’agit d’une proposition de classification, il en existe surement plein d’autres.

Classification

Comme on le voit dans le schéma, la première distinction qui est faite est la distinction entre virtualisation de systèmes d’exploitation et virtualisation de processus. Il y a une différence fondamentale entre exécuter un système d’exploitation complet et effectuer un cloisonnement de processus. Des exemples de virtualisation de processus sont OpenVZ, les jails BSD ou encore les zones Solaris.

Dans la virtualisation de systèmes, nous avons distingué à nouveau deux catégories : les systèmes modifiés et les systèmes non modifiées. Cette distinction est également essentielle car elle va régir tout le fonctionnement de la virtualisation. Dans le cas de systèmes modifiées, le système d’exploitation va avoir « conscience » d’être présent au dessus d’une couche de virtualisation et va travailler efficacement avec cette dernière. Dans le cas de systèmes non modifiés, la couche de virtualisation va faire tout son possible pour faire croire au système d’exploitation qu’il est présent sur du matériel physique.

Dans la catégorie des systèmes modifiés, on va retrouver la paravirtualisation. La paravirtualisation est le type de virtualisation inventé par le projet Xen. Ce type de virtualisation a été rendu possible grâce aux logiciels libres car il a été possible de modifier et d’adapter le noyau Linux ou BSD ou Solaris. Microsoft a mis en pratique cette méthode avec son produit Hyper-V intégré à Windows Server 2008.

Dans la catégorie des systèmes non modifiées, on va retrouver la virtualisation totale et la virtualisation matérielle assistée. Cette dernière n’est qu’une amélioration de la virtualisation totale grâce aux extensions processeurs AMD-V et Intel VT.  Ce type de virtualisation est le type de virtualisation le plus utilisé grâce à la simplicité de fonctionnement des applications et à la puissance des outils d’administration existants. On retrouve dans cette catégorie VMWare, VirtualBox et Virtual PC entre autres.

Pour conclure et mettre une nuance à cette classification, il est possible de mélanger les types de virtualisation, je m’explique. Il est possible, par exemple, dans un système d’exploitation fonctionnant en virtualisation matérielle assistée de rajouter des pilotes de paravirtualisation afin d’améliorer les performances ou d’ajouter une fonctionnalité.

L’intérêt de la virtualisation

tech-presentation-2Je vous ai déjà présenté le projet Xen dans un billet précédent en vous en ventant ses mérites mais je ne vous ai même pas présenté l’intérêt de la virtualisation. Je vais donc faire le tour des avantages que peut apporter la virtualisation à une plateforme informatique existante ou bien à un projet de plateforme informatique. Ces avantages se divisent en quatre catégories principales : coût, sécurité, criticité et performances.

Constat

Dans une architecture classique (sans virtualisation donc), chaque service dispose de sa propre machine physique. Cette règle informelle ou plutôt « Best Practice » permet d’éviter que la compromission d’un service impacte d’autres services sur la machine. En conséquence, une architecture de ce type implémente une machine par service proposé sans compter les « Hot Spare ». Les « Hot Spare » sont des machines qui attendent une panne de la machine principale pour de prendre le relai et assurer la continuité du service.

Au final, les machines sont peu utilisées surtout avec les configurations matérielles d’aujourd’hui comprenant processeurs Dual-Core ou Quad-Core.

Avantages en terme de coût

La virtualisation va permettre de mutualiser les équipements physiques afin de supporter plusieurs systèmes d’exploitation sur une même machine physique. Au lieu d’avoir une machine physique pour chaque service, nous allons donc avoir un système d’exploitation pour chaque service. Les deux situations ne sont pas totalement équivalentes mais on s’en approche.

Une société va donc pouvoir héberger dans un espace moindre, avec une climatisation moindre et avec une consommation électrique moindre un même nombre de services. La variable d’ajustement sera le taux d’utilisation des machines physiques. L’architecture sera donc utilisée de manière plus efficace. De manière plus concrète, au lieu d’avoir un parc de serveurs bas de gamme hébergeant chacun un service, une société va pouvoir acheter un nombre restreint de serveurs haut de gamme plus puissants. Ceci va lui permettre de louer moins d’espace en datacentre et d’utiliser proportionnellement moins d’électricité.

Il faut cependant noter qu’une architecture virtualisée rajoute une surcharge de maintenance dans la mesure où il a été rajouté une couche applicative entre les ressources physique et le système d’exploitation. Cette couche applicative aura besoin d’être maintenue ce qui générera des coûts supplémentaires par rapport à une architecture classique.

Avantages en terme de sécurité

Etant donné que la virtualisation exécute plusieurs systèmes d’exploitation sur une même machine, il est primordiale qu’elle assure un cloisonnement parfait. Une faille dans ce dernier constituerait une faille de sécurité considérable. La virtualisation s’efforce d’arriver à un cloisonnement proche du cloisonnement physique. Le cloisonnement dans le cadre de la virtualisation reste cependant largement meilleur que dans le cas de plusieurs services sur un même système d’exploitation.

La virtualisation donne également la possibilité de créer des environnements de tests standardisés afin d’effectuer des tests de pénétration ou bien d’infection. La possibilité de mettre en pause une machine virtuelle est intéressante afin de pouvoir étudier le comportement de code malicieux par exemple. Je ne connais pas d’implémentation de cette possibilité mais la perspective me semble prometteuse.

Avantages en terme de criticité

Nous avons qualifié la possibilité d’exécuter plusieurs systèmes d’exploitation sur une même machine physique en tant qu’avantage. Il s’agit certes d’un avantage en terme de coût mais surement pas d’un avantage en terme de criticité. Une panne matérielle induit l’indisponibilité d’un grand nombre de services. La virtualisation permet de palier à cette problématique en fournissant de nombreux outils.

Dans le cadre d’un système d’exploitation classique, il est simple de sauvegarder des applications, des données ou des fichiers de configuration. Cependant, la virtualisation va permettre de faire une sauvegarde de la totalité des données d’une machine. Dans le cas d’une restauration de sauvegarde, il sera possible de restaurer un système d’exploitation fonctionnel rapidement sans devoir tout réinstaller. Ceci est un gros avantage de la virtualisation.

La virtualisation permet également de migrer des systèmes d’exploitation d’une machine physique à une autre en moins d’une seconde. Ceci permet d’éviter une indisponibilité en cas de modification de la configuration matérielle d’un équipement.

Avantages en terme de performance

Dans le cadre d’une architecture classique, si une machine nécessite plus de mémoire vive par exemple, il est nécessaire de prévoir un temps d’indisponibilité et le déplacement d’un technicien sur site. La virtualisation va permettre d’augmenter les ressources physiques de manière instantanée et sans manipulation de matériel ni déplacement de personnel. Il suffit d’exécuter une commande afin de rajouter de la mémoire vive ou de l’espace disque. Traditionnellement, ces augmentations se faisaient dans la mesure des ressources physiques. Depuis quelques temps, il est possible d’attribuer plus de mémoire vive qu’il est disponible dans la machine. La mémoire vive non utilisée par une machine virtuelle sera ainsi attribuée à une autre.