User-Defined Networks (UDN) : IP Persistantes et Micro-segmentation
Avec les versions récentes d’OpenShift, une nouvelle fonctionnalité puissante est disponible : les User-Defined Networks (UDN).
Dans la section précédente, nous avons utilisé une NetworkAttachmentDefinition (NAD) pour nous connecter à un réseau d’entreprise externe (corp-network). Cela nous a permis de maintenir une adresse IP stable lors d’une migration à chaud (Live Migration), car l’IP était gérée par un DHCP externe.
Les UDN permettent également de conserver une IP unique et persistante pour nos VMs, mais avec une approche différente : ils utilisent le SDN (Software-Defined Network) d’OpenShift lui-même, au lieu de dépendre d’un réseau physique externe.
Un UDN crée un réseau L2 à plat qui s’exécute par-dessus l’overlay OpenShift. Il agit comme une "bulle réseau" dédiée pour un ensemble spécifique de VMs.
-
Isolation des flux : Par défaut, le trafic au sein d’un UDN est complètement isolé. Les ressources connectées à cet UDN ne peuvent communiquer qu’entre elles.
-
IPAM intégré : L’UDN gère son propre plan d’adressage IP (IPAM). Il distribue des adresses IP persistantes aux VMs, garantissant qu’une VM conservera la même adresse IP même après une migration ou un redémarrage.
Création d’un User-Defined Network (UDN)
La création d’un UDN ne se fait pas via une NetworkAttachmentDefinition (NAD), mais via la creation d’un objet UserDefinedNetwork qui définit le réseau L2 lui-même.
Pour cet exercice, un namespace lié à un UDN a été créé pour chaque participant. Observons maintenant les caractéristique de votre UDN.
-
Dans le menu de navigation de gauche, cliquez sur Networking → UserDefinedNetworks
-
Dans la liste déroulante Project en haut, sélectionnez le projext udn-project-X
-
Cliquez sur l’UDN correspondant à votre user-project-X afin d’en examiner les caractéristiques
-
Examinon maintenant notre UDN
-
Nous pouvons notamment observer :
-
Le nom de l’UDN
-
Le Namespace où l’UDN va être l’utilisé
-
La topologie définit : L2 à plat (un simple switch)
-
L’indication que ce réseau est conçu pour être un réseau "primaire" (il vient donc remplacer le Pod Network)
-
L’utilisation de l’IMPAM, qui garantit que les adresses IP des VMs seront persistantes ---
-
Création de VMs sur l’UDN
Créons maintenant deux VMs, vm-web et vm-db, et attachons-les à cet UDN. Nous leur ajoutons également des labels (app=web et app=db) que nous utiliserons plus tard pour les Network Policies.
-
Dans le menu de navigation de gauche, basculez vers la perspective Virtualization.
-
Cliquez sur Virtualization → VirtualMachines.
-
Assurez-vous d’être dans le projet udn-projet-X et cliquez sur Create → From Template
-
Cliquez sur la tuile Fedora VM et attribuez le nom Name:
vm-web. Cliquez ensuite sur Customise Machine: -
Sélectionnez l’onglet MetaData
-
Et ajoutez le label
app=webpuis lancez la création de la machine -
Répétez ce processus pour une seconde VM nommée
vm-db, en utilisant le labelapp=db
Vérification de la Persistance d’IP (Live Migration)
Nous avons désomait deux VMs dans notre namespace udn-project-X, vm-web et vm-db, que nous allons utilisez pour verifier la persistance des IP sur un UDN puis pour tester les Network Policies.
Démarrons par la vérifions de la persistance des IP.
-
Dans la liste Virtualization → VirtualMachines, localisez votre VM
vm-db -
Notez l’addresses IP affichée dans la partie Network de l’Overview. C’est une IP qui à été dédiée a cette machine par l’IPAM de notre UDN.
Vérifier l’état post-migration
-
Une fois la VM revenue à l’état Running, vérifiez à nouveau l’addresse IP affichée dans la partie Network de l’Overview.
-
L’adresse IP de la VM n’a pas changé. C’est IP est lié à cette VM et ne chagera pas malgré les lives migrations ou les redémarrages.
Vous constaterez que l’adresse IP est exactement la même. L’UDN garantit la persistance de l’IP, ce qui est essentiel pour les services de base de données ou les applications qui dépendent d’IP stables.
Micro-segmentation avec les NetworkPolicies
Maintenant, sécurisons nos VMs. Notre objectif :
. Bloquer tout le trafic entrant vers vm-db par défaut
. Autoriser uniquement vm-web à se connecter à vm-db sur le port 3306 (MySQL).
. Bloquer tous les autres flux (comme SSH ou ICMP/ping) depuis vm-web
Nous faisons cela en utilisant des ressources NetworkPolicy standard de Kubernetes
|
Il est crucial de comprendre que les Network Policies ne sont pas spécifiques aux UDN. Ce sont des ressources Kubernetes standard qui peuvent être utilisées pour contrôler les flux sur n’importe quel réseau géré par OpenShift, y compris :
|
-
Dans le menu de gauche, cliquez sur Networking → NetworkPolicies
-
Assurez-vous d’être dans le bon projet (udn-project-X)
-
Cliquez sur Create Network Policy
-
Politique 1 : Deny All
Créez une politique qui sélectionne
vm-dbet refuse tout le trafic entrant (ingress).apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: db-deny-all spec: podSelector: (1) matchLabels: app: db policyTypes: - Ingress ingress: [] (2)1 podSelectorfonctionne car la VM est gérée par un podvirt-launcherqui porte nos labels.2 Une liste ingressvide signifie "ne rien autoriser". -
Politique 2 : Autoriser le flux Web vers BDD
Créez une seconde politique qui autorise le trafic depuis
vm-webversvm-dbuniquement sur le port TCP 3306.apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: allow-web-to-db spec: podSelector: matchLabels: app: db (1) policyTypes: - Ingress ingress: - from: - podSelector: matchLabels: app: web (2) ports: - protocol: TCP port: 3306 (3)1 Cette politique s’applique à vm-db.2 Elle autorise le trafic provenant de vm-web.3 Elle autorise le trafic uniquement sur le port TCP 3306.
Vérification des Flux Réseau
Testons nos règles. Nous allons nous connecter à vm-web et essayer d’atteindre vm-db (ex: 192.168.200.12).
-
Ouvrez la console de
vm-web. -
Test 1 : Flux non autorisé (ex: PING ou SSH)
Essayez de pinger
vm-db.$ ping 192.168.200.12 PING 192.168.200.12 (192.168.200.12) 56(84) bytes of data. ... --- 192.168.200.12 ping statistics --- 4 packets transmitted, 0 received, 100% packet loss, time 3068msRésultat : Échec. Le trafic ICMP n’est pas autorisé par notre politique. Tenter un
ssh user@192.168.200.12échouerait également. -
Test 2 : Flux autorisé (TCP/3306)
Utilisons un outil comme
telnetounc(netcat) pour tester le port 3306.$ nc -v -z -w 3 192.168.200.12 3306 Connection to 192.168.200.12 3306 port [tcp/mysql] succeeded!Résultat : Succès. La connexion est établie car elle correspond parfaitement à notre
NetworkPolicyallow-web-to-db.
Vous avez maintenant mis en place une micro-segmentation granulaire entre vos VMs, en plus de leur fournir des adresses IP persistantes gérées par le cluster, le tout grâce aux UDN.










