4 votes

linux service TCP Gateway avec démarrage du service

Existe-t-il un service (linux) qui démarre le service sur une demande TCP entrante (s'il n'existe pas déjà) et le transmet ensuite à l'application ? Par exemple, pour un conteneur docker qui ne démarrerait que si vous voulez l'utiliser. Le conteneur est arrêté par cron la nuit.

Flux de travail :

  • Client TCP -> serveur TCP (passerelle)
  • le service de vérification des passerelles est disponible
  • si elle est disponible, la transmettre à
  • si elle n'est pas disponible, alors
    • garer la connexion TCP
    • démarrer le service
    • si elle est lancée, elle transmet la connexion à

4voto

James Mertz Points 390

Techniquement, oui.

En 1986, le système d'exploitation Unix 4.3BSD disposait de l'adresse suivante inetd dont le rôle était simplement d'écouter les connexions TCP et de créer le vrai service en cas d'activité. Inetd n'avait pas besoin d'acheminer le trafic réel - le service lui-même hériterait du socket TCP réel et serait capable de lire/écrire directement les données du réseau. Cependant, le service a fait doivent être écrits spécifiquement pour s'attendre à ce que le socket soit déjà fourni, au lieu de tout configurer par lui-même.

De nombreux BSD ont encore inetd (bien qu'il soit le plus souvent inutilisé), et la plupart des distributions Linux ont xinetd disponible. De plus, chaque distribution Linux utilisant systemd dispose de cette fonctionnalité par l'intermédiaire de systemd.socket où il est appelé "activation de la prise".

(Il est Il est même possible de démarrer des conteneurs entiers de cette façon, mais le gestionnaire de conteneurs a besoin d'un support spécifique pour cette fonctionnalité. Par exemple, systemd-nspawn le permet - malheureusement, pour autant que je sache, Docker ne le fait pas. Cela n'a pas empêché quelques entreprises d'utiliser des conteneurs démarrés à la demande en production, cependant).

Un outil de proxy/gateway peut être utilisé pour mettre en œuvre un démarrage à la demande pour des programmes (ou des conteneurs) qui ne prennent pas en charge le passage de sockets par eux-mêmes. Par exemple, systemd a encore systemd-socket-proxyd qui démarrera la vraie chose et relaiera les connexions vers elle (il y a une exemple avec Podman sur le blog de Red Hat, et voici un exemple de Docker ) ; ceci peut aussi être implémenté avec (x)inetd en utilisant un netcat ou socat ordinaire comme relais.

1voto

Jacques MALAPRADE Points 121

Si le service à l'intérieur du conteneur supporte activation de la prise vous serez bientôt (ou déjà) en mesure d'utiliser Systemd avec Podman pour que Systemd écoute sur le socket TCP. Si un client se connecte au socket TCP, Systemd démarrera Podman de manière à ce que le descripteur de fichier du socket soit disponible pour le processus Podman. Podman transmettra le descripteur de fichier au conteneur.

Il semble que Podman ait obtenu un soutien pour activation de la prise en août 2021.
https://github.com/containers/podman/pull/11316

Je n'ai encore vu aucun article de blog, aucune démonstration ou annonce de cette nouvelle fonctionnalité. (Peut-être qu'il y a encore des travaux de développement en cours ?)

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X