cloud:2017:tp_intro

Prise en main d'openstack

Objectifs :

Cette première séance de TP a pour objectifs de vous familiariser avec l’interface Horizon qui permet d’exploiter simplement une plateforme Cloud Openstack (financée par le département informatique et la région ). Nous utiliserons pour cette séance une image système « clé en main », que vous pourrez instancier et sur laquelle vous devrez vous connecter via SSH.

En plus de la prise en main, ce TP met en place une machine que vous allez utilisez par la suite. Il se fait en binôme et vous devez indiquer sur tomuss :

  • l'adresse ID de la machine crée
  • le nom de votre binôme
  • la clef ssh utilisée (attention, il y a 2 fichiers un contenant la clef publique et un autre avec la clef privée).
Remarque

Un certain nombre d'entre vous ont déjà une certaine expérience avec notre plateforme. Ils seront donc tenté de terminer ce TP au plus tôt. Ce TP n'est d’ailleurs pas noté. Mais les suivants le seront et utiliseront une partie du travail d'aujourd'hui, avant de partir, assurez-vous d'avoir créé votre VM et installé docker dessus. N'oubliez pas non plus de déposer vos information sur tomuss.

Étape préliminaire :

Vous pouvez utiliser sur votre poste de travail le système linux ou windows. De préférence le système linux (Xubuntu 16.04).

Connectez vous à la plateforme d’administration Horizon de Openstack via votre navigateur en saisissant dans la barre de navigation l’URL suivante :

Pour vous connecter à votre instance de machine virtuelle vous aurez besoin d’un jeu de clé SSH (clés publique/privée). Deux solutions s’offre à vous :

  • (a) Générer un jeu de clé via l’outil sshkey-gen que vous importerez (selectionnez l’onglet « Access and security → Key Pair → Import Key Pair » puis copier/coller la clé publique (.ssh/id_rsa.pub)) ou,
  • (b) Générer une clef lors de la création de votre première VM. Pour cela l'onglet de gestion de clef lors de la création de la VM est assez simple d'utilisation. Attention, il faut bien télécharger la clef privée lors de la création car c'est la seul fois où vous y aurez accès. De plus, vous devez récupérer la clef publique (en cliquant sur la petite clef a coté de l'empreinte de la clef crée. Ces deux clefs doivent être déposées sur tomuss.

Le logiciel ssh est disponible directement sur tous les linux. Pour windows, vous aurez besoin d'installer un logiciel client. Pour ce TP nous vous conseillons MobaXterm qui peut s'utiliser sans installation et dispose d'un serveur graphique intégré permettant l'export d'affichage. Sous MACOS, le système contient déjà le client ssh, mais il n'y a pas de serveur graphique. Vous devez installer ce serveur (logiciel XQuartz).

Dans le cadre de ce TP nous vous proposons de sélectionner une « petite » image système pré-configurée. Pour cela, allez sur l’onglet instances puis Launch Instance. Nous vous demandons d'utiliser une machine basée sur une image sans créer de volume. Vous utiliserez une machine standard juste préparée pour fonctionner à l'université basée sur une ubuntu 16.04. Lorsque l'interface vous demande de définir la source (l'image de départ) vous devez :

  • sélectionner une image comme source de démarrage;
  • ne pas créer de nouveau volume en cochant non (l'interface ne doit alors pas vous demander la taille du volume);
  • choisir comme source l'image Ubuntu 16.04 LTS Xenial

Sélectionnez ensuite un type (aussi appelé flavor) de machine virtuelle qui sera adaptée à l’image sélectionnée précédemment et à l’usage que vous en ferez. Toujours dans le contexte de ce TP, un flavor m1.xxsmall proposant 5GB d’espace disque, 512 Mio de RAM et 1 vCPU. Oui, il est possible d'avoir moins de 1Go de mémoire ! Bien qu'il soit possible pour ce TP d'utiliser une machine comportant peu de mémoire, certains des suivant réclamerons un valeur plus grande. Utilisez donc la flavor m1.xsmall proposant 10GB d’espace disque, 1Go de RAM et 1 vCPU.

Finalement, avant de créer l’instance et de la lancer (Launch instance), assurez-vous de créer une clef à votre nom ou, si vous en avez déjà une, que votre clé publique à bien été sélectionnée (Remarque : Cette clé sera copiée dans la VM au moment de sa création. Cela vous permettra de vous connecter à votre VM sans avoir à saisir de mot de passe). Nommez l’instance et lancer là, puis patientez… Lorsque celle-ci sera opérationnelle, notez l’adresse IP fixe qui lui a été associée (cf. interface Horizon) et connectez-vous via SSH en spécifiant le nom de votre clé privée à l’aide de l’option –i de SSH le cas échéant. Exemple :

$ ssh -XCi /chemin/vers/maCleSsh ubuntu@adresseIPdeVotreVM

Remarque 1 : Le nom de votre clé SSH est celui du fichier qui la contient. Il peut être id_rsa ou id_dsa, ou nomcle.pem.

Remarque 2 : Le nom d’utilisateur par défaut est ubuntu pour cette image système mais sera très probablement différent sur une image issue d’une distribution autre que Ubuntu.

Toutes les VM sont, dans le cadre de ce TP, situées dans le même sous réseau. Vérifiez en « pingant » la VM d’un de vos camarades (vous aurez besoin de son adresse IP).

Vous avez réussi à vous connectez à votre VM ? Pinger une autre VM à partir de votre VM ? Félicitation ! Entrez les informations sur votre VM et les clefs ssh dans tomuss et passez à l’étape suivante.

Usage de la VM : Nous allons à présent utiliser la VM. Vous remarquerez par vous même qu’il n’y a pas différences avec l’administration d’une machine physique classique. Pour nous en convaincre nous allons vous demander d’y installer Apache2 (Pourquoi pas ?).

$ sudo apt-get update
$ sudo apt-get install apache2 libapache2-mod-php7.0

Une fois installé, ouvrir un nouvel onglet de votre navigateur et connectez vous à votre serveur web Apache fraichement installé.

 http://adresseIPdeVotreVM/]] (exemple : http://192.168.74.136)

Ça fonctione ? Bravo !

L'interface que vous utilisez est en ligne de commande. Sous linux tout est possible via ce moyen, il est conseillé de l'utiliser en priorité car les échanges entre votre poste de travail et la VM sont alors limités à quelques caractères. Mais cela est parfois difficile à utiliser, c'est pourquoi vous pouvez utiliser l'export graphique.

  • sous linux il faut vous déconnecter et utiliser les options -X (export graphique) et -C (compression) de ssh.

Par exemple:

  $ ssh -XCi /chemin/vers/maCleSsh ubuntu@adresseIPdeVotreVM
  • sous windows, ces options sont activées par défaut pour le logiciel MobaXterm

Installez un logiciel d'édition graphique comme gedit et lancez le depuis la VM. Lorsque cela fonctionne, vous pouvez passer à la suite

La VM créée contient 2 utilisateurs :

  • root l'administrateur qui a tous les droits.
  • ubuntu l'utilisateur normal.

Ces deux utilisateur n'ont pas les même droit, il est donc important de savoir quel utilisateur fait quel opération. Assez souvent les problèmes que vous aurez viendront simplement du fait que utilisateur concerné n'en a pas le droit.

sudo

L'utilisateur ubuntu n'a pas de droit spéciaux. Certains fichiers sont interdits en lecture (par exemple /etc/shadow) la pluspart est interdit en écriture … Pour faire des configurations, vous devez exécuter des commandes en tant qu'administrateur. Pour cela, vous pouvez :

  • Exécuter une commande particulière en tant qu'administrateur grâce au sudo. Par exemple:
## commande interdite
$ cat /etc/shadow
## commande autorisée
$ sudo cat /etc/shadow
  • Passer totalement administrateur :
$ sudo su
Utilisateur root

C'est souvent plus simple de se connecter directement en tant que root, mais traditionnellement ce n'est pas possible sur les VM openstack. En effet, si vous essayez de le faire :

$ ssh -i votreclef root@192.168...

Le système vous refuse l'accès. Par contre, cela est modifiable, ils suffit de supprimer la commande no-port-[…] echo;sleep 10“ dans la première ligne du fichier qui contient les clefs publiques authorisées pour l'administrateur : /root/.ssh/authorized_keys.

Utilisateur ubuntu

L'utilisateur ubuntu n'a pas de mot de passe. Ce n'est pas très grave car vous pouvez y accéder par la clef. Mais cela n'est pas toujours pratique car si vous perdez la clef, vous n'aurez plus accès a votre machine. De plus, les outils graphiques ne permettent pas toujours simplement d'utiliser la clef. Pour éviter cela, vous allez mettre un mot de passe à cet utilisateur.

  • Vérifiez le contenu du fichier /etc/shadow le mot de passe de l'utilisateur est normalement le 2ème champs.
  • Modifier le mot de passe par la commande sudo passwd ubuntu
  • Autorisez les utilisateur normaux à se connecter via ssh en modifiant le contenu du fichier de configuration du serveur ssh :

Dans /etc/ssh/sshd_config remplacez

PermitRootLogin without-password
PasswordAuthentication no

par (respectivement)

PermitRootLogin yes
PasswordAuthentication yes

Vous pouvez le faire par une simple commande :

sed -i.old "{s/^PasswordAuthentication no/PasswordAuthentication yes/; s/PermitRootLogin without-password/PermitRootLogin yes/}" /etc/ssh/sshd_config
  • relancer le serveur ssh
systemctl restart ssh
  • essayez de vous connecter sans utiliser la clef (et donc avec le mot de passe)
$ ssh ubuntu@192.168....

Vous allez utiliser ssh pour copier des fichier à distance. Par exemple vous devez ajouter le fichier php suivant sur votre serveur web index.zip (attention, le php étant un langage utilisé par le serveur web, pour le distribué il a été zippé, il faut le dézipper avant de le copier).

Pour copier le fichier à distance vous pouvez utiliser plusieurs moyens. Dans les exemples, nous supposons que vous voulez copier des fichiers depuis votre poste de travail vers le répertoire /tmp/ de la machine 192.168.241.1 en utilisant l'utilisateur distant 'ubuntu'. A vous de modifier les commandes pour les adapter à une autre situation. Attention, ce que vous pouvez faire dépend de ce que l'utilisateur local et l'utilisateur distant on le droit de faire sur les machines respective. Par exemple, pour copier le fichier '/etc/shadow' de la machine locale vers le répertoire '/' de la machine distante, il faut que l'utilisateur local ai le droit de lire le fichier et que le distant ai le droit d'écrire dans le répertoire '/'

Vous pouvez utiliser :

  • La commande scp sous linux ou pscp sous windows :
$ scp -i votreclef fichierACopier ubuntu@192.168.246.1:/tmp/
  • Des logiciels graphiques comme winscp sous windows ou l'explorateur de fichier sous linux. L'interface de winscp est assez intuitive, si vous utiliser l'explorateur de fichiers, vous n'avez qu'à taper sftp://ubuntu@192.168.246.1/ pour accéder au disque de la VM
  • Des logiciels de synchronisation comme rsync :
$ rsync -avuz -e ssh /repertoire/départ/ ubuntu@192.168.246.1:/repertoire/arrive/

Vous devez essayer de copier le fichier php en utilisant 2 des 3 méthodes proposée. Il faut placer le fichier dans le repertoire racine du site web /var/www/html/ et ouvrir l'url http://votrevm/index.php

Sur les machines nous avons installé le logiciel wireshark qui permet d'éccouter ce qui se passe sur le réseau. Une fois connecté en mode graphique, vous pouvez le lancer par la commande

$ wireshark &

Pour écouter le réseau, vous devez sélectionner l'interface que vous souhaitez écouter (sans doute eth0), puis cliquer sur start. Mais si vous faites cela, vous observerez de nombreux échanges de paquets du protocole SSH.

  • D'où ces paquets viennent-ils ?

Pour éviter ce problème, il est possible d'ajouter des filtres en ne capturant par exemple que les paquets qui ne sont pas lié au port de SSH. Le plus simple est de refaire une capture en sélectionnant la bonne interface, mais en passant par le menu capture→options pour démarer la capture. Dans ce cas vous pouvez observer qu'un filtre s'ajoute automatiquement et qu'il n'affichera pas les paquets incriminés.

Grâce à ce logiciel observez l'échange entre votre poste de travail et le serveur web apache de la VM http://votre_vm/index.php :

  • Dessinez le chronogramme des échanges.
  • Pouvez-vous décortiquer la requête faite par votre navigateur ? A quoi peuvent servir les informations envoyées ? Par exemple :
    • le champs Referer:
    • le champs Accept encoding
    • le champs host
  • Comment sont transmis les informations de login et mot de passe.

Vous devez installer docker sur votre VM, il y a 2 version de docker utilisable sur ubuntu : docker.io un paquet directement instalable via apt-get et docker-ce qui demande de suivre une procédure décrite ici. docker-ce contient en plus de docker les utilitaires nécessaire à l'orchestration que vous utiliserez dans les TPs suivants.

  • Installez docker-ce en utilisant l'explication ici.

Docker n'est pas encore fonctionnel dans cet environnement, car il a besoin d'accéder au réseau et il faut le configurer pour utiliser le proxy de l'université. Cette configuration n'est pas simple car elle doit modifier le service docker de la machine et dépend donc du gestionnaire de service. Elle n'est nécessaire que dans des réseaux utilisant un proxy comme celui des machines virtuelles de notre université. Elle n'est pas nécessaire si docker est installé sur une machine ayant directement accès au réseau (comme votre PC). La configuration est expliquée ici. Vous pouvez suivres bêtement les instructions suivantes (qui ne seront pas expliquées car hors du champ de ce TP).

  • Créez un répertoire pour stocker les configurations du service docker
sudo mkdir -p /etc/systemd/system/docker.service.d
  • Créez un fichier de configuration /etc/systemd/system/docker.service.d/http-proxy.conf contenant :
[Service]
Environment="HTTP_PROXY=http://proxy.univ-lyon1.fr:3128/"
  • relancer le gestionnaire de service
sudo systemctl daemon-reload
  • Vérifier que la modification est prise en compte
sudo systemctl show docker | grep -i proxy
# la liste des options doit contenir un élément Environment="HTTP_PROXY=http://proxy.univ-lyon1.fr:3128/"
  • Relancer le service docker
sudo systemctl restart docker
  • Vous pouvez normalement utiliser docker par exemple en recherchant un docker contenant un serveur sql:
docker search mysql 
 

La platforme ne permet pas encore de faire cette partie.

Il peut arriver de faire une fausse manœuvre qui empêche la machine de redémarrer. Dans ce cas pour une machine réelle ou avec un hyperviseur standard, il est possible d'utiliser un disque de récupération pour booter et tenter de réparer le système. Ici, vous n'avez pas accès au système de boot de la VM, ni a une console évoluée. Par contre, il est toujours possible de récupérer le disque de la VM, de modifier ou réparer le système qu'il contient, puis de relancer un serveur. La méthode la plus simple, si le disque de la VM est un volume, est d'utiliser une autre VM pour ouvrir ce disque. <hi #ff9f9f>Attention, sous openstack, cela n'est possible que pour les VM dont le disque est un volume</hi> commencez tout d'abord par allez dans la description de votre VM (via l'onglet instance de l'interface horizon). En bas de la description, dans le champ volumes attached vous devez voir un identifiant de volume. Par exemple Attached To f7026996-4b4c-4011-a6a4-b209ef637bb6 on /dev/vda Vous devez notez cet identifiant pour retrouver le volume dans la suite. Si aucun volume n'est mentionné, recréez une nouvelle VM mais ne détruisez pas celle que vous êtes en train d'utiliser. Un fois que vous avez relevé le nom de votre volume, vous pouvez effacer le fichier /boot/vmlinuz-3.19.0-47-generic) c'est le fichier contenant le noyau du système d'exploitation. Une fois effacé, redémarrez la VM et constatez qu'elle n'est plus fonctionnelle. Pour réparer le système vous devez trouve un moyen de remettre ce noyau sur le disque de votre machine : * Terminez (détruire) la VM depuis le menu instance * Créez une autre VM temporaire ou utiliser celle de vos voisin. * Dans le menu volumes, retrouvez votre volume et attachez le a la VM temporaire (il vous propose normalement de l'appeler vdc). * Depuis la VM temporaire vous pouver maintenant monter le disque. Pour cela utilisez la commande mount. Par exemple : $ mkdir /mnt/sauv $ mount /dev/vdc1 /mnt/sauv * Vous pouvez maintenant naviguer dans le disque de la VM détruite et recopier le noyau au bon endroit. * Enfin démontez le disque (commande umount), détachez le de la VM temporaire puis lancer une nouvelle instance depuis ce volume. Vous pouvez constater que le mot de passe de ubuntu sur cette machine a été modifié : * Que signifie la modification ? * À quel moment a-t-il été modifié, comment et par qui ? * Pourquoi est faite cette modification ?

Toujours à l’aide de l’interface Horizon, réalisez un snapshot de votre instance (bouton « Create Snapshot » ou « Créez un instantané »). C'est assez rapide et semble créer un snapshot de taille vide, mais ce dernier est utilisable (c'est donc sans doute un bug d'affichage).

Démarrez une seconde VM à partir du snapshot réalisé dans l’étape précédente (Boot from snapshot, Launch Instance, cf. Étape #1). Vous observerez que les modifications faites sont reportées sur la nouvelle machine (sauf les mots de passe bien sur).

  • cloud/2017/tp_intro.txt
  • Dernière modification : 2018/09/14 17:36
  • de fabien.rico