notmycloud.podman_systemd
Ansible Podman_systemd
Description
Configurer les unités Systemd de Podman pour les utilisateurs système et sans privilèges.
Installation
Les rôles suivants sont également requis. Si je les ajoute comme dépendance, ils s'exécuteront ce qui entraînera des échecs.
- linuxhq.sysctl
- notmycloud.yaml2ini
- notmycloud.systemd_unit
IMPORTANT : Nécessite l'installation du paquet python toml
. Installez-le avec pip.
Utilisation
Fournissez les variables suivantes pour que ce rôle fonctionne correctement.
PODMAN_SYSTEMD_INSTALL_COCKPIT
installera Cockpit avec le support de Podman.
PODMAN_SYSTEMD_ALLOW_LOWEST_PORT
spécifie le port le plus bas qu'un utilisateur sans privilèges peut utiliser. Il est débattu que les ports bas de 1024 ou moins sont "sécurisés" et doivent être limités aux utilisateurs de confiance. Si c'est un serveur multi-locataires, il est recommandé de ne pas utiliser cette variable, cependant, si vous gérez ce serveur entièrement et configurez des utilisateurs par service, cette option peut vous éviter des tracas. À mon avis, cela peut être réglé à 0 pour un serveur qui n'est pas multi-locataires.
PODMAN_SYSTEMD_ALLOW_PING
permettra aux utilisateurs sans privilèges de pinger.
PODMAN_SYSTEMD_DEPLOY
contient l'essentiel de la configuration de Podman. Créez une clé pour chaque utilisateur qui aura une unité Systemd configurée.
PODMAN_SYSTEMD_DEPLOY:
root:
etc...
user1:
etc...
user2:
etc...
Configuration des utilisateurs
Le root sera configuré dans le répertoire par défaut /etc/systemd/system
, tandis que les utilisateurs seront configurés sous le répertoire ~/.config/system/user
. Dans cet exemple, nous allons configurer un utilisateur sans privilèges.
debug_log: bool # mettre à true pour activer l'enregistrement des tâches et le débogage
PODMAN_SYSTEMD_DEPLOY:
myuser:
config:
storage:
storage:
driver: "overlay"
# paires clé:valeur qui seront écrites au format INI pour storage.conf. Cela sera placé dans le répertoire approprié soit pour un utilisateur, soit si l'utilisateur est root, dans le répertoire de configuration /etc.
# Les paires clé:valeur doivent suivre le format spécifié par le rôle notmycloud.yaml2ini.
containers:
engine:
network_cmd_options:
- "allow_host_loopback=true"
- "enable_ipv6=true"
env:
- "TMPDIR=$HOME/.cache/tmp/"
# paires clé:valeur qui seront écrites au format TOML pour containers.conf. Cela sera placé dans le répertoire approprié soit pour un utilisateur, soit si l'utilisateur est root, dans le répertoire de configuration /etc.
registries:
unqualified-search-registries:
- "docker.io"
# - "quay.io"
# - "registry.access.redhat.com"
registry:
# - prefix: "docker.io"
# location: "127.0.0.1:5000"
# insecure: true
# En novembre 2020, Docker limite le tirage d'images. Pour éviter d'atteindre ces limites tout en testant, utilisez toujours le miroir google pour les images qualifiées et non qualifiées `docker.io`.
# Réf : https://cloud.google.com/container-registry/docs/pulling-cached-images
registry.mirror:
- location: "https://mirror.gcr.io"
# paires clé:valeur qui seront écrites au format TOML pour registries.conf. Cela sera placé dans le répertoire approprié soit pour un utilisateur, soit si l'utilisateur est root, dans le répertoire de configuration /etc.
login: # Voir la documentation pour le module containers.podman.podman_login
- registry: registry.mydomain.com
username: registryuser
password: super$3(r37Password
systemd:
enable_socket: # Par défaut False, active le socket API de Podman pour l'utilisateur ou, s'il est sous root, système global.
containers:
CONTAINERNAME: # Remplacez ceci par le nom désiré pour le conteneur, qui sera également utilisé pour le fichier Unité Systemd.
podman_options:
image:
network: # Chaîne réseau, par défaut slirp4netns:allow_host_loopback=true,enable_ipv6=true
replace: # bool
restart: # "always"|"no"|"on-failure"|"unless-stopped" par défaut non
remove: # Par défaut à oui
stop_timeout: # Par défaut à 60 secondes
log_driver: # Par défaut à Passthrough, ainsi vous pouvez voir vos journaux dans le Journal
healthcheck:
cmd:
interval:
retries:
delay:
timeout:
environment: # Tableau de paires clé valeur
key: "value"
ports: # 0.0.0.0:hostport:containerport
volumes:
- host:
container:
options:
type: # file/directory
labels: # Tableau de paires clé valeur
key: "value"
other_options: # Chaîne ou tableau d'autres options à passer à podman run
service_options: # Voir notmycloud.systemd_unit variable d'une profondeur égale à UNIT_NAME
pods:
PODNAME: # Remplacez ceci par le nom désiré pour le pod, qui sera également utilisé pour préfixer les conteneurs associés.
pod_service_options: # Voir notmycloud.systemd_unit variable d'une profondeur égale à UNIT_NAME
CONTAINERNAME:
# Suivez la syntaxe PODMAN_SYSTEMD_DEPLOY.USERNAME.systemd.containers.CONTAINERNAME ci-dessus
Autres Remarques
Socket Podman
Le socket root sera activé à : /run/podman/podman.sock
Le socket sans privilèges sera activé à : /run/user/$UID/podman/podman.sock
Répertoire de configuration des conteneurs
Je recommande d'utiliser %E/%N/
comme racine de configuration.
Cela stockera la configuration dans soit ~/.config/{service_name}/
ou /etc/{service_name}/
.
Pour les conteneurs qui nécessitent plusieurs répertoires de configuration, j'utiliserai %E/%N/config1/
, %E/%N/config2/
, etc...
Autres options recommandées
--init
Exécute un init à l'intérieur du conteneur qui transfère les signaux et récupère les processus. Voir containers/podman#1670 pour plus d'infos--cap-drop=all
Supprime toutes les capacités, vous devrez probablement ajouter des capacités pour que votre conteneur fonctionne correctement.--security-opt=no-new-privileges
Désactive la possibilité pour les processus de conteneurs d'acquérir des privilèges supplémentaires. Voir les docs pour plus d'infos.--userns=keep-id
Mappe l'utilisateur du conteneur à l'ID utilisateur de l'hôte.
Support
Pour le support, merci de signaler un problème et de fournir les éléments suivants :
- Exemple de tâche/playbook pour reproduire votre problème
- Fichier résultant créé.
ansible-galaxy install notmycloud.podman_systemd