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éé.
À propos du projet

Configure Podman Systemd Units for system and rootless users.

Installer
ansible-galaxy install notmycloud.podman_systemd
Licence
mit
Téléchargements
234
Propriétaire