Incus Self-Service

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:


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