Cloud Prive OpenStack

Concepts de cloud computing

Le cloud computing est un modele de livraison de ressources informatiques a la demande, mesurables et accessibles via le reseau.

IaaS vs PaaS vs SaaS

graph TB
    subgraph IAAS["IaaS<br/>Infrastructure as a Service"]
        I1["Vous gerez : OS, Middleware, Apps, Donnees"]
        I2["Le fournisseur gere : Serveurs, Stockage, Reseau, Virtualisation"]
    end

    subgraph PAAS["PaaS<br/>Platform as a Service"]
        P1["Vous gerez : Apps, Donnees"]
        P2["Le fournisseur gere : OS, Middleware, Runtime, Infra"]
    end

    subgraph SAAS["SaaS<br/>Software as a Service"]
        S1["Vous gerez : Configuration, Donnees utilisateur"]
        S2["Le fournisseur gere : Tout le reste"]
    end
Modele Controle client Exemple Equivalent INDIO
IaaS OS + Applications AWS EC2, Azure VMs OpenStack Nova
PaaS Application uniquement Heroku, Azure App Service Heat + Octavia
SaaS Configuration Office 365, Gmail Nextcloud (auto-heberge)

Cloud prive vs public vs hybride

Type Avantages Inconvenients
Public (Azure, AWS) Elasticite, pas d'investissement initial, services manages Dependance fournisseur, cout variable, souverainete
Prive (OpenStack) Controle total, souverainete des donnees, couts previsibles Investissement initial, maintenance, expertise requise
Hybride (les deux) Meilleur des deux mondes, burst vers le public Complexite, integration reseau/identite

Pourquoi un cloud souverain ?

La souverainete numerique garantit que les donnees restent sous juridiction locale. Pour une entreprise manipulant des donnees sensibles, un cloud prive evite les risques lies au Cloud Act americain ou a l'extraterritorialite du droit etranger. OpenStack est la seule solution open source offrant une alternative credible aux hyperscalers.


OpenStack : presentation

OpenStack est une plateforme open source de cloud computing IaaS, geree par l'OpenStack Foundation. Elle permet de creer et gerer un cloud prive ou public a partir de ressources physiques (serveurs, stockage, reseau).

Principes de fonctionnement

  • Chaque fonction (compute, reseau, stockage, identite) est un service independant
  • Les services communiquent entre eux via des API REST standardisees
  • Un catalogue de services (Keystone) permet la decouverte dynamique des endpoints
  • Le deploiement suit un cycle de releases semestrielles (nommees par ordre alphabetique)

Releases recentes

Release Date Nom Nouveautes majeures
27 Mars 2023 Antelope OVN par defaut, Cinder multi-attach
28 Oct 2023 Bobcat Ironic improvements, Nova live migration
29 Avril 2024 Caracal Nova unified limits, Neutron OVN improvements
30 Oct 2024 Dalmatian Keystone OIDC, Nova PCI passthrough

Notre choix : Caracal (2024.1)

La release Caracal apporte des ameliorations importantes sur OVN (notre backend SDN) et les quotas unifies de Nova, essentiels pour le multi-tenancy.


Architecture deployee

L'architecture suit le modele de reference a 3 plans : controle, donnees (compute) et reseau.

graph TB
    subgraph CONTROL["Plan de Controle (3 noeuds HA)"]
        C1["Controller 1"]
        C2["Controller 2"]
        C3["Controller 3"]
        VIP["VIP Keepalived<br/>+ HAProxy LB"]
        C1 --- VIP
        C2 --- VIP
        C3 --- VIP

        subgraph SERVICES_CTRL["Services"]
            API["APIs (Nova, Neutron, ...)"]
            MDB["MariaDB Galera (quorum 3)"]
            RMQ["RabbitMQ (mirrored queues)"]
            MEM["Memcached (sessions)"]
        end
    end

    subgraph COMPUTE["Plan Compute (scalable)"]
        N1["Compute 1<br/>KVM/Libvirt<br/>Nova-compute"]
        N2["Compute 2<br/>KVM/Libvirt<br/>Nova-compute"]
        N3["Compute N...<br/>(ajout a chaud)"]
    end

    subgraph NETWORK["Plan Reseau"]
        OVN["OVN Controllers<br/>Routage distribue"]
        FIP["Floating IPs<br/>Provider Networks"]
    end

    subgraph STORAGE["Stockage"]
        CEPH["Ceph Cluster<br/>RBD Pools"]
    end

    VIP --> N1
    VIP --> N2
    VIP --> N3
    N1 --> CEPH
    N2 --> CEPH
    OVN --> N1
    OVN --> N2

Plan de controle (3 noeuds)

La haute disponibilite repose sur :

Composant Mecanisme HA Quorum
API endpoints HAProxy round-robin + VIP Keepalived 2/3 noeuds
MariaDB Galera Replication synchrone multi-master 2/3 noeuds (quorum)
RabbitMQ Mirrored queues avec politique ha-all 2/3 noeuds
Memcached Sessions distribuees N/A (stateless)

Noeuds Compute

Les noeuds compute sont stateless : ils n'hebergent aucune donnee persistante. Si un noeud tombe, les VMs sont evacuees vers les autres noeuds via live migration.

Caracteristique Detail
Hyperviseur KVM avec Libvirt
Ajout a chaud Un nouveau noeud compute peut etre ajoute sans interruption
CPU pinning Affectation de coeurs physiques dedies pour les workloads sensibles a la latence
Overcommit Ratio configurable (par defaut 16:1 CPU, 1.5:1 RAM)

Services OpenStack

Service Nom de code Fonction Backend / Detail
Dashboard Horizon Interface web d'administration et self-service Apache HTTP, theming personnalise
Compute Nova Gestion du cycle de vie des VMs (create, resize, migrate, shelve) KVM/Libvirt, scheduler multi-criteres
Reseau Neutron SDN : reseaux virtuels, sous-reseaux, routeurs, firewall OVN (Open Virtual Network)
Stockage bloc Cinder Volumes persistants attaches aux VMs Ceph RBD, multi-attach supporte
Images Glance Catalogue d'images (ISO, templates, snapshots) Ceph RBD, formats qcow2/raw
Identite Keystone Authentification, autorisation, catalogue de services Federation AD/LDAP via LDAPS
Orchestration Heat Deploiement par templates (stacks de ressources) Compatible HOT et Terraform
Load Balancer Octavia Repartition de charge L4 (TCP) et L7 (HTTP/HTTPS) VMs Amphora, health monitors

Keystone et Active Directory

La federation Keystone-AD via LDAPS permet le SSO, mais necessite un mapping precis entre les groupes AD et les roles OpenStack (admin, member, reader). Un mapping incorrect peut donner des privileges excessifs.


Deploiement Kolla-Ansible

Le deploiement est entierement automatise via Kolla-Ansible, qui utilise des conteneurs Docker pour chaque service OpenStack.

Pourquoi Kolla-Ansible ?

Avantage Detail
Conteneurisation Chaque service tourne dans son conteneur Docker, isolation et rollback facile
Reproductibilite Configuration declarative en YAML, deploiement identique a chaque fois
Mise a jour Upgrade release par release (rolling upgrade sans interruption)
Simplicite Un seul outil pour deployer l'ensemble de la plateforme

Fichiers cles

Fichier Contenu
globals.yml Configuration globale (VIP, backend reseau, options de services)
passwords.yml Mots de passe generes (chiffres avec Ansible Vault)
inventory Liste des noeuds et leurs roles (control, compute, network, storage)
kolla-ansible deploy Commande de deploiement complet
kolla-ansible reconfigure Application de changements de configuration

Integration avec l'infrastructure

graph LR
    subgraph OPENSTACK["OpenStack"]
        NOVA["Nova (Compute)"]
        NEUTRON["Neutron (Reseau)"]
        CINDER["Cinder (Bloc)"]
        GLANCE["Glance (Images)"]
        KEYSTONE["Keystone (Identite)"]
        OCTAVIA["Octavia (LB)"]
    end

    CEPH["Ceph RBD"] --> CINDER
    CEPH --> GLANCE
    OVN["OVN SDN"] --> NEUTRON
    AD["Active Directory<br/>LDAPS"] --> KEYSTONE
    VAULT["HashiCorp Vault<br/>Certificats TLS"] --> NOVA
Integration Detail technique
Ceph RBD Pools dedies pour Cinder (volumes) et Glance (images), replication facteur 3
OVN Remplace Open vSwitch classique, routage distribue directement sur les computes
AD/LDAPS Federation Keystone, mapping groupes AD vers projets OpenStack
CPU pinning Flavors dediees (m1.pinned) pour les workloads HPC et bases de donnees
Octavia Load balancer as a Service, health checks HTTP/TCP, SSL termination
Vault Certificats TLS pour les endpoints API (via PKI intermediaire)

Isolation des tenants

OpenStack supporte le multi-tenancy : plusieurs equipes ou projets partagent la meme plateforme tout en etant isoles les uns des autres.

Mecanisme Fonction Granularite
Projets Isolation logique des ressources (VMs, reseaux, volumes) Par equipe ou application
Quotas Limitation des ressources par projet (vCPU, RAM, stockage, IPs) Configurable par projet
Security Groups Pare-feu par VM (regles ingress/egress par port/protocole) Par instance ou groupe
Floating IPs Adresses publiques attribuees dynamiquement aux VMs Par instance
RBAC Roles (admin, member, reader) par projet et par domaine Par utilisateur

Bonnes pratiques multi-tenancy

  • Creer un projet par equipe ou par application metier
  • Definir des quotas avant d'autoriser les utilisateurs (eviter la surconsommation)
  • Utiliser des Security Groups restrictifs par defaut (deny all, puis ouvrir au besoin)
  • Attribuer les Floating IPs uniquement aux services exposes