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