Le portail self-service

De Le Labo de Yorzian
Aller à la navigation Aller à la recherche

L'idée derrière le portail self-service, est d'avoir une plateforme pour accéder à des machines préconfigurées pour des cours ou des expérimentations:

  • La machine a une durée de vie définie à l'avance
  • Il y a un contrôle de limite par adresse IP
  • Basé sur des images créées localement

Projet d'origine

https://github.com/lxc/incus-demo-server

Le fork

https://github.com/yrougy/incus-demo

Authentification par certificat TLS

Il est nécessaire de générer un certificat TLS X.509 pour l'authentification par clés. Voir sur Certificat X.509 pour les détails.

Le certificat auto-signé est à importer dans le serveur incus (pas sur le portail) pour que le portail puisse créer des instances. Appelons incus-portal.crt ce certificat. Sur le serveur:

yves@mini-incus:~$ incus config trust add-certificate incus-portal.crt

yves@mini-incus:~$ incus config trust list

+------------------+--------+-------------+--------------+----------------------+

|       NOM        |  TYPE  | DESCRIPTION |  EMPREINTE   |  DATE D'EXPIRATION   |

+------------------+--------+-------------+--------------+----------------------+

| incus-portal.crt | client |             | 1e8d62510140 | 2026/02/26 13:26 CET |

+------------------+--------+-------------+--------------+----------------------+

| incus-ui.crt     | client |             | acedea6eff7d | 2027/11/19 18:31 CET |

+------------------+--------+-------------+--------------+----------------------+

| mini-incus       | server |             | bbf8ec7eb3d8 | 2035/02/20 18:28 CET |

+------------------+--------+-------------+--------------+----------------------+

Usage

Dépendances

https://go.dev/doc/install pour golang

apt install -y git build-essential screen
git clone https://github.com/lxc/incus-demo-server
cd incus-demo-server
export CGO_ENABLED=1 # pour permettre l'intégration de C dans le projet GO
go install github.com/yrougy/incus-demo/cmd/incus-demo-server@main
Construction
make
Configuration
server:
  api:
    address: "[::]:8080"
  blocklist:
    - 1.2.3.4
  feedback:
    enabled: false
    timeout: 20
    email:
      smtp: SERVER:PORT
      from: ADDRESS
      to: ADDRESS
      subject: User feedback from try-it
  limits: # 64 machines au total, chaque IP peut en demander 10
    total: 64
    ip: 10
  maintenance:
    enabled: false
    message: Custom downtime message
  proxy:
    address: ""
    certificate: |-
    key: |-
      PEM
  statistics:
    keys:
      - 69280011-c8a5-4ef9-ae3d-e7caf4d06e06
  terms: |-
    ToS<br />
    <ul>
      <li>Access to this service may be revoked at any time for any reason</li>
      <li>Access to this service is solely provided to test</li>
      <li>Your IP address, access time and activity on the test server may be recorded</li>
      <li>Any abuse of this service may lead to a ban or other applicable actions</li>
    </ul>
incus:
  # certificate est la clé publique du certificat d'authentification
  # key est la clé privée du certificat d'authentification 
  # on peut la faire avec openssl pkcs12 -in incus-ui.pfx -out incus-ui.pem -nodes
  # et ça sera dans le incus-ui.pem
  client:
    certificate: |- # incusPortal.crt
    key: |-         # incusPortal.key
  project: default
  server:
    url: "https://nomdelinstance:8443"
    # Certificate est le certificat de l'interface web 
    certificate: |-
  target: nomDuCluster

instance:
 allocate:
   count: 4
   expiry: 21600
 source:
   #instance: "self1" #nom de l'image créée
   image: "alpine/3.18"
   type: "container" #ou "virtual-machine"
 profiles:
   - default #Profil Incus à utiliser
 limits:
   cpu: 1
   disk: 10GiB
   processes: 200
   memory: 512MiB
session:
 command: ["sh"]
 expiry: 900
 console_only: false
 network: ipv6
Appel
~/go/bin/incus-demo-server