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.

  • aide générale du script apache2 /cloud/scripts/apache2 help
  • liste des paramètres configurables du script apache2 /cloud/scripts/apache2 list
  • exemple de configuration pour le nom de domaine demo.cust.ds.alphanet.ch et votre e-mail toto@truc.org
    sudo /cloud/scripts/apache2-domain configure domains=demo.cust.ds.alphanet.ch admin-email=toto@truc.org
    sudo /cloud/scripts/lets-encrypt configure domains=demo.cust.ds.alphanet.ch admin-email=toto@truc.org
    

Changements futurs

  • en écriture actuellement: le code pour paralléliser les opérations dans le GUI et dans les backends

  • ensuite, la 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.

  • support IPv6

  • ensuite, quelques améliorations comme la possibilité de dupliquer une configuration de conteneur en adaptant automatiquement les ports externes, par exemple

  • ensuite, éventuellement un firewall interne configurable

-- MarcSCHAEFER - 16 Jan 2021
Topic revision: r6 - 03 Oct 2021, MarcSCHAEFER
 

Copyright © by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding Foswiki? Send feedback