Podman : présentation générale
Quid
Podman est le gestionnaire de conteneurs (OCI) implémenté RedHat.
Podman est conçu pour être utilisé sans les droits root (rootless), c'est la différence clef avec Docker
.
Liens utils
- site web : https://podman.io/
- code source : https://github.com/containers/podman
- écosystème: https://github.com/containers
Comment est configuré podman
La commande podman info
donne toutes les informations de configuration de podman.
L'option --format
permet de filtrer la sortie et récupérer des confgurations
particulières. Par exemple:
# Le Backend réseau
$ podman info --format {{.Host.NetworkBackend}}
netavark
# Les plugins réseau
$ podman info --format {{.Plugins.Network}}
[bridge macvlan ipvlan]
Les fichiers de configuration
podman
utilise les fichiers de configuration standards :
- système: /etc/containers*
- utilisateur: "$HOME"/.config/containers/*
Le réseau
Présentation
La configuration du réseau dépend du backend configuré.
Podman supporte 2 backend réseaux, netavark
et CNI
.
- CNI est déprécié et sera supprimé en version 5.0
- netavark fait partie de l'écosystème des produits RedHat.
Schéma général
graph
Podman --> netavark
netavark --> slirp4netns
slirp4netns --> slirp
netavark
netavark
est écrit en Rust.- implémente un mécanisme de plugins
- API
- create: crée une configuration réseau
- setup: configure le réseau
- teardown: liste la configuration réseau
- info: donne les infos sur le plugin
$ podman info --format "{{.Host.NetworkBackendInfo.Path}}"
/usr/lib/podman/netavark
$ podman info --format "{{.Host.NetworkBackendInfo.Version}}"
netavark 1.10.3
$ /usr/lib/podman/netavark
netavark 1.10.3
netavark usage
Usage: netavark [OPTIONS] <COMMAND>
Commands:
setup Configures the given network namespace with the given configuration
update Updates network dns servers for an already configured network
teardown Undo any configuration applied via setup command
version Display info about netavark
dhcp-proxy Start dhcp-proxy
firewalld-reload Listen for the firewalld reload event and reload fw rules
help Print this message or the help of the given subcommand(s)
Options:
-f, --file <FILE>
Instead of reading from STDIN, read the configuration to be applied from the given file
--firewall-driver <FIREWALL_DRIVER>
Select netavark's firewall driver [env: NETAVARK_FW=]
-c, --config <CONFIG>
config directory for aardvark, usually path to a tmpfs
-r, --rootless <ROOTLESS>
Tells if current netavark invocation is for rootless container [possible values: true, false]
-a, --aardvark-binary <AARDVARK_BINARY>
Path to the aardvark-dns binary
--plugin-directory <PLUGIN_DIRECTORIES>
Path to netavark plugin directories, can be set multiple times to specify more than one directory
-h, --help
Print help
-V, --version
Print version
netavark code
- Inclus dans la libnetwork
- utilise le format de stockage bbolt d'etcd pour stoquer les données IPAM.
- données stockées dans
/run/user/"$(id -u)"/containers/netavark/imap.db
$ go install go.etcd.io/bbolt/cmd/bbolt@lates
$ "$GOPATH"/bin/bbolt info /run/user/"$(id -u)"/containers/netavark/imap.db
$ "$GOPATH"/bin/bbolt buckets /run/user/"$(id -u)"/containers/netavark/imap.db
$ "$GOPATH"/bin/bbolt pages /run/user/"$(id -u)"/containers/netavark/imap.db
$ "$GOPATH"/bin/bbolt page-item /run/user/"$(id -u)"/containers/netavark/imap.db 1 0
$ go install github.com/br0xen/boltbrowser@master
$ "$GOPATH"/bin/boltbrowser /run/user/"$(id -u)"/containers/netavark/imap.db
Lire ipam.db
slirp4netns pour traiter le rootless
- utilisé pour gérer le réseau sans droits root
- principe: crée une interface TAP dans un namespace utilisateur connecté à la pile TCP/IP slirp
- code source : https://github.com/rootless-containers/slirp4netns
Notes
- en jouant avec une journée, je suis tombé sur des bugs dans la gestion du réseau. On retrouve ces bugs dans les PR #21194 et #15708du projet. Le sujet ne semble pas traité depuis plusieurs années :/ Cela pousse à étudier docker rootless
- le dev global nécessite la mise en place de chaine de build go/rust/python.