ALPHANET-DS: Quickstart Guide
Introduction
Ce document a pour but de décrire comment créer un ou plusieurs conteneurs ALPHANET-DS, une fois un compte obtenu auprès de
ds@alphanet.ch (voir aussi
https://ds-admin.alphanet.ch/faq).
Une
ébauche de vidéo est également disponible, aussi sous
Google Youtube et
Peertube.
Concept ALPHANET-DS
Le concept d'ALPHANET-DS est assez simple:
- chaque utilisateur dispose d'une adresse IPv4 publique dans 193.72.186.128/26, à choisir avant de pouvoir créer des conteneurs
- il peut y associer un nom de domaine à choix sous
cust.ds.alphanet.ch
(ou tout autre nom de domaine externe)
- les conteneurs sont instanciés au hasard sur une des machines du cloud et disposent de diverses propriétés configurables comme
- nom de machine (utilisé pour le DNS interne automatique inter-conteneurs)
- un compte à créer automatiquement, avec droit sudo, accessible par SSH soit par mot de passe soit par clé publique
- un certain nombre de configurations du firewall / NAT externe
- les fonctions de base du GUI, en plus de la configuration de l'adresse IP et du nom de domaine externe sont
- créer ou détruire (évt avec sa définition, ou alors juste l'instance) un conteneur
- démarrer un conteneur (évt l'instancie si pas déjà fait) ou le stopper
- modifier la configuration de l'utiliateur de base
- configurer le firewall externe (par défaut bloqué en entrée)
- créer et gérer les snapshots
- voir les logs, les statistiques, etc
- la création se fait sur la base d'une image de base (debian-simple) ou d'un snapshot d'un conteneur de cet utilisateur
- chaque conteneur disposera d'une adresse IPv4 privée automatiquement allouée et pourra accéder les autres conteneurs via leur nom de conteneur (DNS interne automatique), il n'y a pas de firewall interne pour le moment
- le répertoire /shared de chaque conteneur permet de partager des données entre conteneur, le répertoire /private n'est associés qu'à ce conteneur: ces deux répertoires sont persistents et partagées entre les hosts du cloud et sauvegardés automatiquement et appartiennent au premier UID du conteneur (en général)
- le répertoire /cloud contient des scripts partagés (lecture seulement)
- question sécurité réseau, il n'y a pas de détection d'intrusion spécifique à chaque conteneur pour le moment
Conditions
Consulter:
https://ds-admin.alphanet.ch/faq
Mon premier conteneur
Vous pouvez suivre les étapes ci-après pas-à-pas.
Configuration d'adresse et de nom (globale par utilisateur)
Se logguer sur le compte utilisateur
- sélectionner une adresse IP dans la liste
- puis entrer un nom dans le domaine
cust.ds.alphanet.ch
.
Créer un conteneur
Suivre le lien
Créer conteneur
- choisir un nom de machine en respectant la spécification indiquée, par exemple
demo-1
- choisir une image de base, par exemple
debian-simple
- activer le bouton Créer
Paramètres de base du conteneur
Sous
Modifier conteneur demo-1
- ceci permet de configurer la persistence du conteneur et son auto-démarrage éventuel si le cloud est redémarré (laissez pour l'instant les configurations par défaut)
- activer le lien Retour
Gestion d'un conteneur
Sous
Conteneur demo-1
- activer le lien Démarrer le conteneur
- le conteneur est Démarré (notification en vert en haut), assigné à un host (p.ex.
apu2-ds-03
), les champs création et lancement et état reflètent la nouvelle situation
- si désiré, vous pouvez Inspecter, Voir les logs (des messages concernant rsyslogd et SSH sont normaux, la clé serveur SSH de votre conteneur étant générée au 1er démarrage pour ne pas être partagée entre conteneurs), Statistiques
Ceci est aussi accessible via le menu principal
Gérer vos conteneurs et en suivant le lien du nom du conteneur désiré.
Configuration de l'accès SSH
Sous
Conteneur demo-1
Création du compte SSH avec accès sudo
- activer le lien Configuration d'accès SSH
- entrer un login
- l'accès SSH est possible par mot de passe ou par clé publique SSH, sélectionnez l'option correspondante
- entrez un mot de passe deux fois, ou copiez-collez votre clé publique SSH dans le champ
- activez le bouton Modifier
Autorisation d'accès extérieure (firewall)
- activer le lien Ports extérieurs ouverts
- sélectionnez le protocole tcp, entrez le Port 22
- si nécessaire, restreignez l'accès au service depuis une plage d'adresse Internet IPv4 (exemple:
1.2.3.4
ou 1.2.3.4/32
si l'adresse IPv4 fixe de votre routeur est 1.2.3.4, voir par exemple https://www.whatismyip.com)
- le Port externe ne doit être entré que si vous désirez un autre port que 22 (par exemple car plusieurs conteneurs vont être accessibles, ou pour de la security through obscurity)
- activez le bouton Ajouter un port
Connexion SSH
Entrez sur votre ordinateur:
the_user="le nom d'utilisateur SSH choisi sous Configuration de l'accès SSH"
the_port=22 # ou le Port externe choisi
the_ip="l'adresse IP choisie ou le nom de domaine configuré sous Configuration d'adresse et de nom (globale par utilisateur), dans le sous-réseau 193.72.186.128/26"
ssh -p $the_port ${the_user}@${the_ip}
Mise à jour de conteneurs
Pour le moment, c'est manuel
- connectez-vous en SSH au conteneur
- tapez
sudo apt-get update && sudo apt-get -u dist-upgrade; sudo apt-get clean
Ajout d'un service web
Manuellement (mais voyez aussi
Scripts partagés de configuration):
- connectez-vous en SSH au conteneur
- installez le service, par exemple
sudo apt-get install apache2 && sudo apt-get clean
- configurez éventuellement le firewall pour que le port externe 80 de votre adresse IP soit activé sur ce conteneur, vous pouvez laisser le champ Liste CIDR vide (Autorisation d'accès extérieurs)
- ajoutez le démarrage du service à
/etc/rc.local
, par exemple service apache2 start
- stoppez et redémarrez le conteneur (uniquement si vous n'avez pas activé l'effacement à l'arrêt!)
Vous pouvez accéder au service web sous
http://adresse-IP/ (ou
http://adresse-IP:port si vous avez entré quelque chose dans le champ
Port externe)
Un autre conteneur
Appliquez les mêmes opérations que dès
Créer un conteneur ci-dessus, ou vous pouvez aussi faire un snapshot du premier conteneur et l'instancier comme deuxième conteneur:
NB: si vous voulez exploiter plusieurs services web sur le port 80, hébergés dans plusieurs conteneurs, le plus simple est de définir un conteneur qui hébergerait un web proxy: il pourrait aussi terminer le HTTPS et gérer les logs et la détection d'intrusion de manière centrale.
Communication entre instances de conteneurs
Actuellement il n'y a pas de firewall interne: tous les conteneurs sont accessibles: par exemple pour aller en SSH sur le conteneur
demo-2
depuis
demo-1
:
demo1% ssh demo-2
(à l'interne les numéros de ports sont ceux des services eux-mêmes, la configuration des services extérieurs n'est pas impliquée).
Le répertoire /shared permet l'échange de données entre conteneurs quelque soit le host sur lequel il est démarré.
Arrêt et suppression
Sous
Conteneur demo-1
- suivre le lien Arrêter le conteneur (l'instance est supprimée s'il le conteneur a été configuré ainsi)
- si désiré, suivre le lien Supprimer le conteneur et activer l'option de suppression de la définition du conteneur, si désiré.
Scripts partagés de configuration
Sous /cloud/scripts se trouvent des scripts de configuration, qui dans le futur pourront être configurés et appelés depuis le GUI. Pour le moment il faut les lancer depuis root (ou sudo) dans votre conteneur.
- list des scripts
ls /cloud/scripts
- chaque script supporte les fonctions help, list, configure et deconfigure
Pour le moment l'accès est manuel. Par exemple, ci-dessous on va installer et configurer un apache pour le domaine
demo.cust.ds.alphanet.ch
, et votre e-mail
toto@truc.org, puis activer le certificat HTTPS automatique via Let's Encrypt.
Attention: ne pas oublier d'ouvrir le port 443 (HTTPS/TCP) pour que Let's Encrypt puisse fonctionner.
Changements
Changements effectués depuis le tutoriel vidéo
- parallélisation de certaines opérations dans le GUI, sur le master et sur les nodes, qui sont notifiées dans le GUI
Changements en cours
- notion de scripts partagés configurables par GUI, permettant par utilisateur, voire pour tous les utilisateurs de partager des préconfigurations automatisées configurables, p.ex. HTTPS avec Let's Encrypt, etc.
- réseaux privés entre conteneurs d'un utilisateur
Dans le futur ...
- quelques améliorations comme la possibilité de dupliquer une configuration de conteneur en adaptant automatiquement les ports externes, par exemple
- éventuellement un firewall interne configurable
--
MarcSCHAEFER - 16 Jan 2021