Aller au contenu

Chapitre 6 : Profils

Tout au long de ce chapitre, vous devez exécuter des commandes en tant qu'utilisateur non privilégié (incusadmin si vous avez suivi ce guide depuis le début).

Lorsque vous installez Incus, vous obtenez un profil par défaut, que vous ne pouvez ni supprimer ni modifier. Vous pouvez utiliser le profil par défaut pour créer de nouveaux profils pour vos conteneurs.

Si vous regardez notre liste de conteneurs, vous remarquerez que l'adresse IP dans chaque cas est assignée à partir de l'interface bridged. Dans un environnement de production, vous voudrez peut-être utiliser quelque chose de différent. Il peut s'agir d'une adresse attribuée par DHCP à partir de votre interface LAN ou d'une adresse attribuée de manière statique à partir de votre WAN.

Si vous configurez votre serveur Incus avec deux interfaces et attribuez à chacune une adresse IP sur votre WAN et votre LAN, vous pouvez attribuer les adresses IP de votre conteneur en fonction de l'interface à laquelle le conteneur doit faire face.

À partir de la version 9.4 de Rocky Linux (et de toute copie bug pour bug de Red Hat Enterprise Linux), la méthode d'attribution d'adresses IP de manière statique ou dynamique avec les profils ne fonctionne pas.

There are ways to get around this, but it is unpleasant. Cela semble avoir quelque chose à voir avec les modifications apportées au Gestionnaire de réseau qui affectent macvlan. macvlan vous permet de créer de nombreuses interfaces avec différentes adresses de couche 2.

Gardez à l’esprit que cela présente des inconvénients lors du choix d’images de conteneurs basées sur RHEL.

Création d'un profil macvlan et attribution de celui-ci

Pour créer votre profil macvlan, utilisez cette commande :

incus profile create macvlan

Si vous étiez sur une machine multi-interface et que vous vouliez plus d'un modèle macvlan en fonction du réseau que vous vouliez atteindre, vous pourriez utiliser « lanmacvlan » ou « wanmacvlan » ou tout autre nom que vous essayiez d'utiliser pour identifier le profil. L'utilisation de macvlan dans votre déclaration de création de profil est sous votre responsabilité.

Vous souhaitez modifier l'interface macvlan, mais avant de le faire, vous devez savoir quelle est l'interface parent de votre serveur Incus. Cette interface aura une adresse IP attribuée à un réseau local LAN (dans ce cas). Pour déterminer de quelle interface il s'agit, vous pouvez utiliser la commande suivante :

ip addr

Cherchez l'interface avec l'affectation de l'IP LAN dans le réseau 192.168.1.0/24 :

2: enp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 40:16:7e:a9:94:85 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.106/24 brd 192.168.1.255 scope global dynamic noprefixroute enp3s0
       valid_lft 4040sec preferred_lft 4040sec
    inet6 fe80::a308:acfb:fcb3:878f/64 scope link noprefixroute
       valid_lft forever preferred_lft forever

Dans ce cas, l'interface serait enp3s0.

Maintenant, modifiez le profil :

incus profile device add macvlan eth0 nic nictype=macvlan parent=enp3s0

Cette commande ajoute tous les paramètres au profil macvlan requis pour l'utilisation.

Examinez ce qui a été créé en utilisant la commande suivante :

incus profile show macvlan

Ce qui vous donnera une sortie similaire à l'exemple suivant :

config: {}
description: ""
devices:
  eth0:
    nictype: macvlan
    parent: enp3s0 
    type: nic
name: macvlan
used_by: []

Les profils peuvent être utilisés pour de nombreuses autres choses, mais l'attribution d'une IP statique à un conteneur ou l'utilisation de votre propre serveur DHCP sont des besoins courants.

Pour attribuer le profil macvlan à rockylinux-test-8, vous devez procéder comme suit :

incus profile assign rockylinux-test-8 default,macvlan

Faîte la même chose pour le serveur rockylinux-test-9 :

incus profile assign rockylinux-test-9 default,macvlan

Cela indique que vous souhaitez conserver le profil par défaut et appliquer également le profil macvlan.

Rocky Linux macvlan

Le Network Manager a constamment "évolué" dans les distributions et les clones RHEL. De ce fait, le fonctionnement du profil macvlan ne marche pas (du moins en comparaison avec d'autres distributions) et nécessite un travail supplémentaire pour attribuer des adresses IP à partir de DHCP ou de manière statique.

N'oubliez pas que rien de tout cela n'a principalement à voir avec Rocky Linux mais avec l'implémentation du package en amont.

Si vous souhaitez exécuter des conteneurs Rocky Linux et utiliser macvlan pour attribuer une adresse IP à partir de vos réseaux LAN ou WAN, le processus est différent en fonction de la version du conteneur du système d'exploitation (8.x ou 9.x).

Rocky Linux 9.x macvlan - Le correctif DHCP

Tout d'abord, étudions ce qui se passe lors de l'arrêt et du redémarrage des deux conteneurs après l'attribution du profil macvlan.

Cependant, le fait que le profil soit assigné ne modifie pas la configuration par défaut, qui est définie par défaut à DHCP.

Pour tester cela, il suffit de faire ce qui suit :

incus restart rocky-test-8
incus restart rocky-test-9

Maintenant, listez à nouveau vos conteneurs et notez que le serveur rockylinux-test-9 n'a plus d'adresse IP :

incus list
+-------------------+---------+----------------------+------+-----------+-----------+
|       NAME        |  STATE  |         IPV4         | IPV6 |   TYPE    | SNAPSHOTS |
+-------------------+---------+----------------------+------+-----------+-----------+
| rockylinux-test-8 | RUNNING | 192.168.1.114 (eth0) |      | CONTAINER | 0         |
+-------------------+---------+----------------------+------+-----------+-----------+
| rockylinux-test-9 | RUNNING |                      |      | CONTAINER | 0         |
+-------------------+---------+----------------------+------+-----------+-----------+
| ubuntu-test       | RUNNING | 10.146.84.181 (eth0) |      | CONTAINER | 0         |
+-------------------+---------+----------------------+------+-----------+-----------+

Comme vous pouvez le voir, votre conteneur Rocky Linux 8.x a reçu l'adresse IP de l'interface LAN, alors que le conteneur Rocky Linux 9.x ne l'a pas reçu.

Pour démontrer davantage le problème, vous devez exécuter dhclient sur le conteneur Rocky Linux 9.0. Cela nous montrera que le profil macvlan a été appliqué :

incus exec rockylinux-test-9 dhclient

Une autre liste de conteneurs affiche désormais les éléments suivants :

+-------------------+---------+----------------------+------+-----------+-----------+
|       NAME        |  STATE  |         IPV4         | IPV6 |   TYPE    | SNAPSHOTS |
+-------------------+---------+----------------------+------+-----------+-----------+
| rockylinux-test-8 | RUNNING | 192.168.1.114 (eth0) |      | CONTAINER | 0         |
+-------------------+---------+----------------------+------+-----------+-----------+
| rockylinux-test-9 | RUNNING | 192.168.1.113 (eth0) |      | CONTAINER | 0         |
+-------------------+---------+----------------------+------+-----------+-----------+
| ubuntu-test       | RUNNING | 10.146.84.181 (eth0) |      | CONTAINER | 0         |
+-------------------+---------+----------------------+------+-----------+-----------+

Cela aurait dû se produire avec un arrêt et un redémarrage du conteneur, mais ce n'est pas le cas. En supposant que vous souhaitiez utiliser une adresse IP attribuée par DHCP à chaque fois, vous pouvez résoudre ce problème avec une simple entrée crontab. Pour ce faire, vous devez obtenir un accès shell au conteneur en entrant :

incus shell rockylinux-test-9

Ensuite, déterminons le chemin vers dhclient. Pour ce faire, étant donné que ce conteneur provient d'une image minimale, vous devrez d'abord installer which :

dnf install which

Puis exécutez la commande suivante :

which dhclient

Qui devrait retourner :

/usr/sbin/dhclient

Ensuite, nous allons modifier le crontab de root :

crontab -e

Ajouter cette ligne :

@reboot    /usr/sbin/dhclient

La commande crontab saisie utilise vi. Utilisez Shift+:+w+q pour enregistrer vos modifications et quitter.

Quittez le conteneur et redémarrez rockylinux-test-9 :

incus restart rockylinux-test-9

Une nouvelle liste révélera que le conteneur a été assigné à l'adresse DHCP :

+-------------------+---------+----------------------+------+-----------+-----------+
|       NAME        |  STATE  |         IPV4         | IPV6 |   TYPE    | SNAPSHOTS |
+-------------------+---------+----------------------+------+-----------+-----------+
| rockylinux-test-8 | RUNNING | 192.168.1.114 (eth0) |      | CONTAINER | 0         |
+-------------------+---------+----------------------+------+-----------+-----------+
| rockylinux-test-9 | RUNNING | 192.168.1.113 (eth0) |      | CONTAINER | 0         |
+-------------------+---------+----------------------+------+-----------+-----------+
| ubuntu-test       | RUNNING | 10.146.84.181 (eth0) |      | CONTAINER | 0         |
+-------------------+---------+----------------------+------+-----------+-----------+

Rocky Linux 9.x macvlan – Le correctif IP statique

Lors de l’attribution statique d’une adresse IP, les choses deviennent encore plus compliquées. Étant donné que network-scripts est désormais obsolète dans Rocky Linux 9.x, la seule façon de procéder est par attribution statique, et en raison de la manière dont les conteneurs utilisent le réseau, vous ne pourrez pas définir la route avec une instruction ip route normale. Le problème est que l'interface attribuée lors de l'application du profil macvlan (eth0 dans ce cas), n'est pas gérable avec Network Manager. La solution consiste à renommer l'interface réseau du conteneur après le redémarrage et à attribuer l'IP statique. Vous pouvez le faire avec un script et l'exécuter (à nouveau) dans le crontab de root. Tout cela se fait avec la commande ip.

Pour ce faire, vous devez à nouveau obtenir un accès shell au conteneur:

incus shell rockylinux-test-9

Ensuite, vous allez créer un script bash dans /usr/local/sbin appelé static :

vi /usr/local/sbin/static

Le contenu de ce script n'est pas compliqué :

#!/usr/bin/env bash

/usr/sbin/ip link set dev eth0 name net0
/usr/sbin/ip addr add 192.168.1.151/24 dev net0
/usr/sbin/ip link set dev net0 up
sleep 2
/usr/sbin/ip route add default via 192.168.1.1

Qu'est-ce que vous faites ici ?

  • vous renommez eth0 avec un nouveau nom que vous pouvez gérer (net0)
  • vous attribuez la nouvelle IP statique que vous avez allouée à votre conteneur (192.168.1.151)
  • vous activez la nouvelle interface net0
  • vous ajoutez une attente de 2 secondes pour que l'interface soit active avant d'ajouter la route par défaut
  • vous devez ajouter la route par défaut pour votre interface

Rendez votre script exécutable avec la commande qui suit :

chmod +x /usr/local/sbin/static

Ajoutez ceci au crontab de root pour le conteneur avec l'heure du @reboot :

@reboot     /usr/local/sbin/static

Pour terminer, quittez le conteneur et redémarrez-le :

incus restart rockylinux-test-9

Attendez quelques secondes puis listez à nouveau les conteneurs :

incus list

Ce qui devrait vous afficher le résultat suivant :

+-------------------+---------+----------------------+------+-----------+-----------+
|       NAME        |  STATE  |         IPV4         | IPV6 |   TYPE    | SNAPSHOTS |
+-------------------+---------+----------------------+------+-----------+-----------+
| rockylinux-test-8 | RUNNING | 192.168.1.114 (eth0) |      | CONTAINER | 0         |
+-------------------+---------+----------------------+------+-----------+-----------+
| rockylinux-test-9 | RUNNING | 192.168.1.151 (eth0) |      | CONTAINER | 0         |
+-------------------+---------+----------------------+------+-----------+-----------+
| ubuntu-test       | RUNNING | 10.146.84.181 (eth0) |      | CONTAINER | 0         |
+-------------------+---------+----------------------+------+-----------+-----------+

Ubuntu macvlan

Heureusement, l’implémentation de Network Manager par Ubuntu ne casse pas la pile macvlan, ce qui la rend beaucoup plus facile à déployer !

Tout comme avec votre conteneur rockylinux-test-9, vous devez attribuer le profil à votre conteneur :

incus profile assign ubuntu-test default,macvlan

Pour savoir si DHCP attribue une adresse au conteneur, arrêtez et redémarrez le conteneur :

incus restart ubuntu-test

Listez ensuite à nouveau les conteneurs :

+-------------------+---------+----------------------+------+-----------+-----------+
|       NAME        |  STATE  |         IPV4         | IPV6 |   TYPE    | SNAPSHOTS |
+-------------------+---------+----------------------+------+-----------+-----------+
| rockylinux-test-8 | RUNNING | 192.168.1.114 (eth0) |      | CONTAINER | 0         |
+-------------------+---------+----------------------+------+-----------+-----------+
| rockylinux-test-9 | RUNNING | 192.168.1.151 (eth0) |      | CONTAINER | 0         |
+-------------------+---------+----------------------+------+-----------+-----------+
| ubuntu-test       | RUNNING | 192.168.1.132 (eth0) |      | CONTAINER | 0         |
+-------------------+---------+----------------------+------+-----------+-----------+

Success!

La configuration de l'IP statique est un peu différente, mais plus difficile. Vous devez modifier le fichier .yaml associé à la connexion du conteneur (10-incus.yaml). Pour cette IP statique, nous utiliserons 192.168.1.201 :

vi /etc/netplan/10-incus.yaml

Remplacez le contenu par ce qui suit :

network:
  version: 2
  ethernets:
    eth0:
      dhcp4: false
      addresses: [192.168.1.201/24]
      gateway4: 192.168.1.1
      nameservers:
        addresses: [8.8.8.8,8.8.4.4]

Veuillez enregistrer vos modifications et quitter le conteneur.

Redémarrer le conteneur :

incus restart ubuntu-test

Lorsque vous listez à nouveau vos conteneurs, vous devriez voir notre nouvelle IP statique :

+-------------------+---------+----------------------+------+-----------+-----------+
|       NAME        |  STATE  |         IPV4         | IPV6 |   TYPE    | SNAPSHOTS |
+-------------------+---------+----------------------+------+-----------+-----------+
| rockylinux-test-8 | RUNNING | 192.168.1.114 (eth0) |      | CONTAINER | 0         |
+-------------------+---------+----------------------+------+-----------+-----------+
| rockylinux-test-9 | RUNNING | 192.168.1.151 (eth0) |      | CONTAINER | 0         |
+-------------------+---------+----------------------+------+-----------+-----------+
| ubuntu-test       | RUNNING | 192.168.1.201 (eth0) |      | CONTAINER | 0         |
+-------------------+---------+----------------------+------+-----------+-----------+

Success!

Dans les exemples utilisés ici, un conteneur difficile à configurer a été intentionnellement choisi, ainsi que deux autres moins difficiles. Many more versions of Linux are in the image listing. Si vous avez un favori, essayez de l'installer, d'attribuer le modèle macvlan et de définir les adresses IP.

Author: Steven Spencer

Contributors: Ezequiel Bruni, Ganna Zhyrnova