LXC : conteneurs et pont transparent sous Ubuntu 20.04
Relier des conteneurs Linux à un pont (bridge) transparent
Lorsqu'on gère des conteneurs Linux (LXC), il peut être utile d'avoir des conteneurs ayant le même comportement que n'importe quelle autre machine physique.
Par défaut, les conteneurs sont configurés pour exister dans un réseau local à la machine hôte et ne sont donc pas accessibles depuis l'extérieur.
Voyons donc comment configurer un serveur Ubuntu 20.04 pour disposer de conteneurs transparents.
Installation et configuration du serveur
Installation
L'installation du serveur ne pose aucun problème en soi. L'interface d'installation d'Ubuntu 20.04 a juste été améliorée graphiquement.
Pour une administration à distance, penser seulement à activer l'option OpenSSH server au moment de l'installation.
Création du pont (bridge)
Le comportement par défaut de LXD est d'utiliser sa propre configuration ad hoc, et donc son propre pont lorsqu'il existe. Ce pont ne permettant pas d'être visible des autres machines extérieures, il convient d'en créer un manuellement.
Pour cela, éditer le fichier présent dans le répertoire /etc/netplan :
sudo vi /etc/netplan/01-netcfg.yaml
Et ajouter le pont – nommé ici br0 – comme suit :
network: ethernets: enp9s0: dhcp4: false dhcp6: false version: 2 bridges: br0: macaddress: "de:ad:be:ef:ca:fe" interfaces: [enp9s0] dhcp4: true dhcp6: true
Il convient de définir une interface MAC pour administrer l'adresse IP du serveur depuis le DHCP. Il faudra une nouvelle adresse MAC pour chaque nouvelle interface créée. Un pont étant une interface virtuelle, le système crée automatiquement une adresse MAC différente à chaque nouvelle interface.
Pour toute modification netplan, générer la configuration :
sudo netplan generate
Puis l'appliquer pour remplacer l'ancienne :
sudo netplan apply
La liste des interfaces configurées est accessible par:
networkctl list
br0 devrait apparaître dans la liste.
Installation et configuration LXD
Installation
L'installation ne pose aucun problème en soit :
sudo apt install lxd
Configuration
sudo lxd init
Cette commande lance une interface intéractive avec un certain nombre de questions.
Veiller seulement à utiliser br0 existant de la façon suivante :
Would you like to configure LXD to use an existing bridge or host interface? (yes/no) [default=no]: yes
Name of the existing bridge or host interface: br0
Would you like LXD to be available over the network? (yes/no) [default=no]: yes
Remplacement de configuration
Si vous avez créer une configuration différente, vous pouvez la changer.
Copier la configuration dans un fichier yaml :
sudo lxc profile show default > /tmp/lxc-config.yaml
Editer le fichier:
vi /tmp/lxc-config.yaml
Ajouter le pont br0 :
config: {} description: Default LXD profile devices: eth0: name: eth0 nictype: bridged parent: br0 type: nic root: path: / pool: lxd-storage type: disk name: default used_by: []
Remplacer la configuration LXD existante :
sudo lxc profile edit default < /tmp/lxc-config.yaml
Gestion des conteneurs
Créer un conteneur
sudo lxc launch ubuntu:20.04 c1
crée un conteneur nommé c1, de type Ubuntu 20.04.
Arrêter un conteneur
sudo lxc stop c1
Supprimer un conteneur
sudo lxc delete c1
Accéder à un conteneur
sudo lxc exec c1 -- /bin/bash
Lister les conteneurs
sudo lxc list