OpenKeel: la soluzione Cloud sovrana, francese e di portata europea, del gruppo inherent Scopri inherent

Componenti · Servizi e orchestrazione

API EC2

API EC2 Query (97 azioni), firme SigV2 e SigV4 verificate da Keystone: AWS CLI, boto3, Terraform.

Go Nova, Neutron, Cinderopenkeel-ec2-api

Il modulo

OpenKeel implementation in Go of OpenStack ec2-api (ec2-api), generated from the reverse-specification of branch 17.0.0 by the generate-go-from-spec skill. It replaces the Python service without its clients noticing: the same EC2 Query API (97 actions of ec2-api 17.0.0, SigV2 and SigV4 verified by Keystone ec2tokens), the same XML documents and error codes, the same EC2 identifiers and the same ec2api database. What is reproduced and what differs is in docs/CONFORMANCE.md; the security checklist is in docs/SECURITY.md.

  • Clients: the AWS CLI and boto3, Terraform's AWS provider with a custom endpoint, euca2ools/boto2
  • Backends: Nova, Neutron (with VPNaaS for the VPN actions), Cinder and Glance, called with the caller's token; the EC2 IDs and tags are in MariaDB (items, tags). Not included: ec2-api-metadata (Nova's metadata service or cloud-init serves instances) and ec2-api-s3 (Swift s3api) — docs/CONFORMANCE.md D9, D10
  • Go module: github.com/openkeel/openkeel-ec2-api
  • Binary: ec2-api (API on port 8788, health and metrics on 9090)
  • Configuration: YAML, see config/config.example.yaml
  • Setting up a development environment, the database and the tests: docs/GETTING-STARTED.md
  • Database schema, migrations and upgrades: docs/DATABASE.md

Estratto da openkeel-ec2-api/README.md (in inglese).

Azioni API

100 azioni dell'API originale e il loro stato in OpenKeel.

  • 100Implementato

Come viene testata la compatibilità

L'ec2-api ritirato viene verificato rispetto al suo comportamento registrato e, soprattutto, con i veri client AWS: la AWS CLI e il provider AWS di Terraform.

Replay degli scambi registrati

Errori di validazione e sonde registrati

Gli scambi di errore registrati restituiscono lo stesso stato, lo stesso codice EC2 e lo stesso messaggio; le sonde del dispatcher confrontano gli errori in testo semplice e le radici delle risposte.

Esecuzione

test/e2e/exchanges_test.go e test/e2e/probes_test.go.

Ultimo risultato 40 / 40 identici; sonde: 9 identiche byte per byte, 6 deliberatamente diverse (2026-11-02).

Fonte: openkeel-ec2-api/docs/CONFORMANCE.md

Scenario

Scenario di tutte le famiglie di azioni

Ogni famiglia di azioni viene eseguita, e le strutture di risposta vengono confrontate con quelle registrate da Python.

Esecuzione

test/e2e/scenario_test.go.

Ultimo risultato 97 / 97 azioni superate; 93 strutture di risposta verificate, nessun elemento inspiegato (2026-11-02).

Fonte: openkeel-ec2-api/docs/CONFORMANCE.md

Contratto client

AWS CLI v2

La vera AWS CLI funziona su 42 azioni, con SigV4 verificato dall'algoritmo di keystoneclient.

Esecuzione

test/awscli (build tag awscli), AWS CLI v2 2.18.

Ultimo risultato Superato (2026-11-02).

Fonte: openkeel-ec2-api/docs/CONFORMANCE.md

Contratto client

Provider AWS di Terraform

Terraform applica una VPC, una subnet, un gateway, route, un security group, una coppia di chiavi, un'istanza, un EIP e un volume, poi non pianifica alcuna modifica e distrugge tutto.

Esecuzione

test/terraform (build tag terraform), Terraform 1.5.4 e hashicorp/aws 5.100.0, su MariaDB.

Ultimo risultato Superato su MariaDB (2026-11-02).

Fonte: openkeel-ec2-api/docs/CONFORMANCE.md

Concorrenza su Galera

Concorrenza su MariaDB Galera

Una VPC predefinita e un ID EC2 per server con richieste concorrenti su tre nodi; le scritture dei tag convergono.

Esecuzione

test/galera (build tag galera) su un cluster a 3 nodi.

Ultimo risultato Superato, 3 esecuzioni, nessun 5xx (2026-11-02).

Fonte: openkeel-ec2-api/docs/CONFORMANCE.md

Tempest

ec2api-tempest-plugin

Il plugin Tempest upstream del progetto.

Esecuzione

Ritirato insieme al progetto upstream.

Ultimo risultato Non eseguito.

Fonte: openkeel-ec2-api/docs/CONFORMANCE.md

Escluso dal rewrite

L'API EC2 (dismessa upstream nel 2024) mantiene le sue azioni ma rinuncia al proprio server S3 e al servizio di metadati, che la piattaforma fornisce già.

Gestito dalla piattaforma Cloud Native

Server ec2-api-s3

Gestito da Rook-Ceph RGW

Perché è stato escluso

Il server S3 Python non è autenticato; lo storage a oggetti con S3 è fornito dalla piattaforma.

Perché la soluzione non ne risente

I client S3 usano l'endpoint RGW con le credenziali EC2 di Keystone (okadm --ceph-s3).

Fonte: openkeel-ec2-api/docs/CONFORMANCE.md

Gestito dalla piattaforma Cloud Native

Servizio ec2-api-metadata

Gestito da KubeVirt (cloud-init)

Perché è stato escluso

Le istanze ottengono i metadati dai datasource OpenStack e NoCloud di cloud-init (config drive).

Perché la soluzione non ne risente

I guest si avviano e si configurano come di consueto; mancano solo gli identificatori EC2 (i-, ami-, r-) nei loro metadati.

Fonte: openkeel-ec2-api/docs/CONFORMANCE.md

Meccanismi interni semplificati

Lock su file per host della VPC predefinita

Perché è stato escluso

Più repliche e un Galera multi-writer richiedono un lock a livello di cluster: una riga di database con scadenza.

Perché la soluzione non ne risente

Le VPC predefinite vengono sempre create una volta per progetto, ora in modo sicuro tra le repliche.

Fonte: openkeel-ec2-api/docs/CONFORMANCE.md

Qui è elencato solo ciò che è stato escluso per scelta progettuale; il lavoro non ancora svolto si trova nei Known gaps del docs/CONFORMANCE.md del modulo. Tutti i moduli

Interazioni API EC2

Vista del servizio generata dalla skill dei diagrammi a partire dal modello OpenKeel.

Diagramma openkeel-ec2-api.svg Schermo intero
Le 5 interazioni del modello
DaAProtocolloCosa
EC2 APIKeystoneAPI RESTec2tokens (SigV4)
EC2 APINova APIAPI RESTinstances
EC2 APINeutron serverAPI RESTVPC, subnets, security groups
EC2 APICinder APIAPI RESTvolumes, snapshots
EC2 APIGlanceAPI RESTAMIs

Specifiche