commit 811789b2c15778626e752d7492b5c2fb5306bb6e Author: Your Name Date: Tue Nov 25 21:28:13 2025 +0100 Mise en ligne TPs diff --git a/README.md b/README.md new file mode 100644 index 0000000..5e44628 --- /dev/null +++ b/README.md @@ -0,0 +1,118 @@ +Pré-liminaires : + + Le cloud computing ou « informatique en nuage » est un « mode de traitement des données + d’un client, dont l’exploitation s’effectue par l’internet, sous la forme de services... » + JORF n°0129 du 6 juin 2010 + Vous utiliserez les services cloud usuels présentés en CM sur OpenStack pour + orchestrer le déploiement d’une solution simple en suivant les bonnes pratiques + pour l’infrastructure et la gestion de configuration. + Configuration de l’environnement + + 1. Cloner le répertoire https://gitea.master-oivm.fr/UPEC/Cloud_computing.git + $ git clone https://gitea.master-oivm.fr/UPEC/Cloud_computing.git + 2. Copier vos fichiers nom_prenom.yaml et nom_prenom.ovpn à la racine du projet et les + renommer clouds.yaml et lab.ovpn respectivement. + 3. Compléter le champ projet_name dans votre fichier clouds.yaml. + 4. Créer un environnement virtuel et y installer les dépendances : + # sudo nécessaire pour l'installation du client openvpn + $ sudo ./setup-env.sh + # active l'environnement virtuel + $ source .venv/bin/activate + 5. Connecter le tunnel OVPN pour accéder au lab dans une fenetre independantes que vous ne fermerez pas: + (.venv)$ sudo openvpn lab.ovpn + 6. Vérifications + • Accès via la console web : http://horizon.master-oivm.fr + • Test via la CLI : + (.venv)$ openstack project list + + +Travaux détaillée de cinq travaux pratiques de 5 heures chacun. +1. 🚀 Découverte de l'IHM Horizon et déploiement IaaS de base (5h) +Objectif : Comprendre l'architecture de base, le concept de Projet/Tenant, et maîtriser le déploiement manuel via l'interface graphique (Horizon). +Pour commencer : +Installer l'environnement : +pour linux : utiliser le script fourni +pour windows : faite vos recherches sur internet pour installer les outils nécessaire. + +TP n°1 : 🚀 Découverte de l'IHM Horizon et déploiement IaaS de base + +| Durée | Activité | Services principaux | +|---|---|---| +| 1h | Prise en main et Sécurité | Keystone, Horizon, Nova | +| | - Connexion à l'IHM, exploration des tableaux de bord. | | +| | - Gestion des clés SSH et import d'une paire de clés. | | +| | - Création d'un Groupe de Sécurité personnalisé (ports 22/SSH, 80/HTTP, 443/HTTPS, ICMP). | | +| 3h | Déploiement d'une Instance Web | Neutron, Nova, Glance | +| | - Création d'un réseau privé et d'un sous-réseau. | | +| | - Création d'un routeur et connexion au réseau public (Floating IP pool). | | +| | - Lancement d'une instance (VM) : sélection d'une image (Glance) et d'un flavor (Nova). | | +| | - Association d'une IP flottante et connexion SSH. | | +| 1h | Gestion du Stockage Bloc (Cinder) | Cinder | +| | - Création d'un Volume Cinder (ex: 10 Go). | | +| | - Attachement du volume à l'instance. | | +| | - Formatage, montage du volume sur le système d'exploitation de la VM. | | + +TP n°2. 💻 Maîtrise de l'OpenStack CLI +Objectif : Répéter les actions du TP 1 exclusivement en ligne de commande avec le client openstack, et préparer le terrain pour l'IaC. + +| Durée | Activité | Outils / Services | +|---|---|---| +| 1h | Configuration CLI | openstack client | +| | - Installation et configuration de python-openstackclient. | | +| | - Téléchargement et sourcing du fichier openrc pour l'authentification. | | +| | - Utilisation des commandes openstack help et openstack service list. | | +| 3h | Déploiement en Ligne de Commande | Nova, Neutron, Glance | +| | - Recréer un environnement complet (réseau, groupe de sécurité, clé SSH, routeur) en utilisant les commandes openstack network create, openstack security group create, etc. | | +| | - Lancement d'une instance complète via openstack server create. | | +| | - Gestion de l'état (stop/start/resize) et suppression des ressources par CLI. | | +| 1h | Introduction à Barbican (CLI) | Barbican | +| | - Stockage et récupération d'un secret (ex: un mot de passe) dans Barbican via la CLI. | | +| | - openstack secret store et openstack secret get. | | + +TP n°3. 📄 IaC avec Terraform : Architecture 2-Tier +Objectif : Découvrir l'approche déclarative de l'IaC avec Terraform et déployer une architecture multi-composants. +| Durée | Activité | Outils / Services | +|---|---|---| +| 1h | Configuration Terraform | Terraform, OpenStack Provider | +| | - Installation de Terraform et configuration du Provider OpenStack (utilisation du fichier clouds.yaml). | | +| | - Cycle de vie Terraform : init, plan, apply, destroy. | | +| 3h | Architecture 2-Tier (Web + BDD) | Nova, Neutron, Terraform | +| | - Écriture du code Terraform (fichiers .tf) pour : | | +| | - Déployer un réseau privé et deux groupes de sécurité différents. | | +| | - Déployer deux instances : un serveur Web et un serveur BDD. | | +| | - Utilisation des user_data pour installer automatiquement un serveur web (ex: Nginx) sur le serveur Web lors du déploiement. | | +| 1h | Gestion des dépendances et Output | Terraform | +| | - Utilisation des output pour afficher les adresses IP flottantes des serveurs. | | +| | - Test de la connectivité via l'IP flottante du serveur Web. | | + +TP n°4. 🌐 IaC Avancé : Intégration DNS et Clés +Objectif : Maîtriser l'intégration de services avancés (Designate et Barbican) directement dans le code Terraform. +| Durée | Activité | Outils / Services | +|---|---|---| +| 2h | Gestion DNS avec Designate | Designate, Terraform | +| | - Introduction à Designate : rôle dans l'écosystème OpenStack. | | +| | - Création d'une Zone DNS privée ou publique (openstack_dns_zone_v2). | | +| | - Création d'un enregistrement A (openstack_dns_recordset_v2) pointant vers l'IP flottante du serveur Web déployé au TP n°3. | | +| | - Vérification de la résolution DNS (ex: dig ou nslookup). | | +| 2h | Utilisation sécurisée avec Barbican | Barbican, Terraform | +| | - Stockage d'une clé privée ou d'un certificat SSL dans Barbican (via Terraform : openstack_keymanager_secret_v1). | | +| | - Modification du template IaC pour récupérer la référence du secret. | | +| | - Démonstration Conceptuelle : Expliquer comment cette référence pourrait être utilisée par un outil d'orchestration (comme Ansible) ou un service (comme Octavia/Load Balancer) pour la gestion sécurisée des identifiants/clés. | | +| 1h | Gestion des Changements | Terraform | +| | - Modifier l'architecture (ex: changer le flavor du serveur BDD ou la taille du volume) et utiliser terraform plan pour visualiser l'impact. | | +| | - Appliquer les changements et vérifier la mise à jour sans interruption du service. | | + +TP n°5. 💾 Stockage Objet, Automatisation et Test Final +Objectif : Découvrir le stockage objet (Swift) et consolider les acquis par l'automatisation et le test. +| Durée | Activité | Outils / Services | +|---|---|---| +| 2h | Swift : Le Stockage Objet | Swift, CLI, Horizon | +| | - Introduction au stockage objet (par opposition au stockage bloc). | | +| | - Création d'un Conteneur via l'IHM Horizon. | | +| | - Gestion du conteneur et téléversement/téléchargement d'objets via la CLI (openstack object store). | | +| | - Configuration des ACLs (Access Control Lists) pour rendre un objet public et le rendre accessible via son URL directe. | | +| 2h | Scripting d'Automatisation (Python/Bash) | CLI, Python, openstacksdk | +| | - Création d'un script Bash pour automatiser le déploiement d'une ressource simple (ex: créer un groupe de sécurité et une clé SSH en une commande). | | +| | - Alternative : Écriture d'un script Python utilisant openstacksdk pour lister l'état de l'infrastructure (serveurs, réseaux, conteneurs Swift). | | +| 1h | Travail Pratique Test (1h) | Tous les services | + diff --git a/intro-terraform.pdf b/intro-terraform.pdf new file mode 100644 index 0000000..906ab0c Binary files /dev/null and b/intro-terraform.pdf differ diff --git a/setup-env.sh b/setup-env.sh new file mode 100644 index 0000000..5452d0b --- /dev/null +++ b/setup-env.sh @@ -0,0 +1,107 @@ +#!/usr/bin/env bash + +OS_PUBLIC_ENDPOINT_FQDN="horizon.master-oivm.fr" +OS_PUBLIC_ENDPOINT_IPV4="10.10.0.2" + +[ -n "$DEBUG" ] && set -e +#exec 3>&1 &>/dev/null + +VENV="${1:-.venv}" +ACTIVATE="$VENV/bin/activate" +if grep -qEi 'debian|ubuntu|mint' /etc/*release; then + PKGMANAGER="apt" + PKGMANAGER_CACHE="apt update" +elif grep -qEi 'fedora|centos|redhat' /etc/*release; then + PKGMANAGER="yum" + PKGMANAGER_CACHE="yum makecache" +else + echo "OS is not supported." + exit +fi + +enter_venv () { + local VENV=${1:-".venv"} + pkg_install python3 + pkg_install build-essential + pkg_install libssl-dev + pkg_install libffi-dev + pkg_install python3-dev + [ $PKGMANAGER == "apt" ] && pkg_install python3-venv + python3 -m venv "$VENV" || exit + source "$VENV/bin/activate" +} + +pkg_exist () { + $PKGMANAGER list --installed 2>/dev/null | grep -qi "^$1" || command -v "$1" &>/dev/null +} + +pkg_install () { + for pkg in "$@"; do + if ! pkg_exist "$pkg"; then + if [ "$EUID" -ne 0 ]; then + echo "$pkg needs to be installed" + echo "Please run as root" + exit + fi + $PKGMANAGER_CACHE &>/dev/null + $PKGMANAGER -y install "$pkg" &>/dev/null && echo "[OK] $pkg" || echo "[Error] $pkg" + fi + done +} + +install_deps () { + local REQUIREMENTS=$(mktemp) +cat << EOF > "$REQUIREMENTS" +pip +setuptools +wheel +python-openstackclient +EOF + pip install --upgrade -r "$REQUIREMENTS" + rm -f "$REQUIREMENTS" + + local BIN=$(echo ${PATH%%:*}) + mkdir -p "$BIN" + + pkg_install curl unzip wget openvpn + + if ! pkg_exist terraform; then + local TEMPFILE=$(mktemp) + curl -Ls https://releases.hashicorp.com/terraform/1.8.5/terraform_1.8.5_linux_amd64.zip \ + -o "$TEMPFILE" + unzip "$TEMPFILE" -d "$BIN" + chmod +x "$BIN/terraform" + rm -f "$TEMPFILE" + else + echo "[Ok] $(which terraform)" + fi + + +} + +enter_venv "$VENV" +install_deps + +# UPEC extra config for debian +for rc in "export OS_CLOUD=openstack" \ + "export https_proxy=" \ + "export HTTPS_PROXY=" \ + "export HTTP_PROXY=" \ + "export all_proxy=" \ + "export ALL_PROXY=" \ + "export no_proxy=" \ + "export NO_PROXY=" \ + "export http_proxy=" +do + if ! grep -q "$rc" "$VENV/bin/activate"; then + echo "$rc" >> "$VENV/bin/activate" + fi +done + +if ! grep -q "$OS_PUBLIC_ENDPOINT_FQDN" /etc/hosts; then + echo "$OS_PUBLIC_ENDPOINT_IPV4 $OS_PUBLIC_ENDPOINT_FQDN" >> /etc/hosts +fi + +echo "######################################################" +echo "Enter you lab environment with the following command :" +echo "$ source $VENV/bin/activate" diff --git a/terraform/main.tf b/terraform/main.tf new file mode 100644 index 0000000..969086d --- /dev/null +++ b/terraform/main.tf @@ -0,0 +1,4 @@ +provider "openstack" { + cloud = "openstack" + use_octavia = true +} \ No newline at end of file diff --git a/terraform/versions.tf b/terraform/versions.tf new file mode 100644 index 0000000..4f9ce28 --- /dev/null +++ b/terraform/versions.tf @@ -0,0 +1,10 @@ +# Define required providers +terraform { +required_version = ">= 0.14.0" + required_providers { + openstack = { + source = "terraform-provider-openstack/openstack" + version = "~> 1.53.0" + } + } +}