OpenStack 2025.1 : Le Guide Ultime pour OVN IPsec avec Kayobe et FreeIPA
La sécurité “Zero Trust” n’est plus une option pour les clouds privés modernes. Si vous déployez OpenStack après 2025.1, vous utilisez sûrement OVN (Open Virtual Network) pour le SDN (Software Defined Network). Mais par défaut, le trafic entre vos hyperviseurs circule en clair.
Dans ce guide, nous allons implémenter le chiffrement IPsec pour les tunnels Geneve (Generic Network Virtualization Encapsulation). Nous allons construire une chaîne automatisée robuste :
- FreeIPA fournit et renouvelle les certificats automatiquement.
- Certmonger surveille ces certificats sur l’OS de l’hôte.
- Kayobe orchestre la configuration en injectant les clés dans les conteneurs Kolla.
L’Architecture : Le défi du Conteneur
C’est là que réside la complexité. Dans un déploiement Kolla/Kayobe :
- La PKI (Certificats) doit être gérée par l’OS hôte (pour que Certmonger fonctionne).
- Le service OVS tourne dans un conteneur isolé (openvswitch_vswitchd).
- Le chiffrement IPsec est effectué par le Kernel Linux de l’hôte.
Nous devons donc générer les clés sur l’hôte, les monter dans le conteneur, et piloter la configuration depuis l’extérieur.
1. Prérequis Réseau : la MTU
C’est non-négociable. L’encapsulation (Geneve) + le chiffrement (ESP) ajoutent environ 100 à 130 octets d’overhead. Pour que vos VMs aient une vie normale (MTU 1500), le réseau physique (“Underlay”) doit être en Jumbo Frames.
Dans kayobe/inventory/group_vars/all/network :
network_interfaces:
- device: eth1
mtu: 9000
description: "Tunnel Interface"
Dans kayobe/kolla/globals.yml :
network_mtu: 9000
kolla_enable_neutron_mtu: "yes"
neutron_tenant_network_mtu: 1500
2. Préparation Kolla : Monter les Volumes
Puisque OVS est enfermé dans un conteneur, il ne voit pas vos certificats par défaut. Il faut “monter” le dossier des clés.
Créez le fichier kayobe/kolla/config/openvswitch.yml :
# On monte le dossier des clés de l'hôte vers le conteneur en lecture seule
openvswitch_vswitchd_extra_volumes:
- "/etc/openvswitch/keys:/etc/openvswitch/keys:ro"
3. Le Hook Ansible : Automatisation PKI & Firewall
Ce playbook va transformer chaque nœud en client FreeIPA, ouvrir le pare-feu et préparer les certificats.
Fichier : etc/kayobe/ansible/hooks/setup-host-pki.yml
---
- name: Configure Host PKI and Firewall for OVN IPsec
hosts: overcloud
become: true
vars:
ovs_keys_dir: /etc/openvswitch/keys
ipa_domain: "internal.corp.net"
# Astuce: utilisez kayobe-vault pour ce mot de passe
ipa_join_password: ""
tasks:
# --- Étape A : Firewall (Crucial !) ---
- name: Allow IPsec protocols (IKE, NAT-T, ESP)
firewalld:
service: ipsec
permanent: yes
state: enabled
immediate: yes
when: ansible_os_family == 'RedHat'
# --- Étape B : Installation FreeIPA ---
- name: Install IPA client and tools
package:
name:
- ipa-client
- firewalld
state: present
- name: Register node to FreeIPA
command: >
ipa-client-install --unattended
--domain=
--realm=
--principal=admin
--password=
--mkhomedir
args:
creates: /etc/ipa/default.conf
# --- Étape C : Certificats via Certmonger ---
- name: Ensure keys directory exists
file:
path: ""
state: directory
owner: root # Sur l'hôte, root gère ça. Dans le conteneur, ce sera monté.
mode: '0755'
- name: Request Certificates using Certmonger
# Cette commande génère les clés et configure le renouvellement auto
# Le -C redémarre le conteneur si le certif change
command: >
ipa-getcert request
-f /system.pem
-k /system-privkey.pem
-N CN=
-D
-K host/@
-C "docker restart openvswitch_vswitchd"
args:
creates: "/system.pem"
- name: Copy IPA CA cert to OVS keys dir
copy:
src: /etc/ipa/ca.crt
dest: "/ca-cert.pem"
remote_src: yes
4. Le Hook de Configuration OVS (Post-Deploy)
Une fois que Kolla a déployé les conteneurs, nous devons dire à OVS d’utiliser ces clés. Ce hook intervient après le démarrage des services.
Fichier : etc/kayobe/ansible/hooks/configure-ovs-container.yml
---
- name: Configure OVS Container for IPsec
hosts: overcloud
become: true
tasks:
- name: Wait for Open vSwitch container
command: docker inspect -f '' openvswitch_vswitchd
register: ovs_status
until: ovs_status.stdout == "true"
retries: 20
delay: 5
ignore_errors: true
- name: Set OVS SSL config inside container
# On utilise docker exec car ovs-vsctl n'est pas sur l'hôte
command: >
docker exec openvswitch_vswitchd ovs-vsctl set Open_vSwitch .
other_config:certificate=/etc/openvswitch/keys/system.pem
other_config:private_key=/etc/openvswitch/keys/system-privkey.pem
other_config:ca_cert=/etc/openvswitch/keys/ca-cert.pem
when: ovs_status.stdout == "true"
(Note : Si vous utilisez podman, remplacez docker par podman)
5. Intégration dans Kayobe
Modifiez etc/kayobe/hooks.yml pour insérer ces étapes au bon moment du cycle de vie.
# 1. Préparer l'hôte et les certs AVANT que Kolla ne touche à tout
pre_overcloud_host_configure:
- ansible/hooks/setup-host-pki.yml
# 2. Configurer OVS une fois que les conteneurs sont lancés
post_overcloud_service_deploy:
- ansible/hooks/configure-ovs-container.yml
6. L’Interrupteur Général
Tout est prêt, les certificats sont là, OVS les connaît. Il ne reste plus qu’à activer le chiffrement globalement dans la base OVN Northbound.
Fichier : etc/kayobe/ansible/hooks/enable-ovn-global.yml (à lancer manuellement ou en post-deploy final)
- name: Enable IPsec Globally in OVN NB
hosts: controllers[0]
become: true
tasks:
- name: Enable IPsec
command: docker exec ovn_nb_db ovn-nbctl set NB_Global . ipsec=true
ignore_errors: yes # Ignore si déjà activé
Le Test de Vérité
Une fois le déploiement terminé :
- Connectez-vous sur un Compute Node.
- Interrogez le démon OVS (dans le conteneur) :
docker exec openvswitch_vswitchd ovs-appctl -t ovs-monitor-ipsec tunnels/show - Vérifiez le kernel de l’hôte :
ip xfrm state
Si vous voyez des clés rfc4106(gcm(aes)), félicitations. Votre cloud OpenStack est chiffré, “Zero Trust”, et vos certificats se renouvelleront tout seuls sans casser la prod.