OpenKeel : la solution Cloud souveraine, française à portée européenne du groupe inherent Découvrir inherent

Composants · Services et orchestration

API EC2

API EC2 Query (97 actions), signatures SigV2 et SigV4 vérifiées par Keystone : AWS CLI, boto3, Terraform.

Go Nova, Neutron, Cinderopenkeel-ec2-api

Le module

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

Extrait de openkeel-ec2-api/README.md (en anglais).

Actions d'API

100 actions de l'API d'origine, et leur état dans OpenKeel.

  • 100Implémenté

Comment la compatibilité est testée

L'ec2-api retiré est vérifié par rapport à son comportement enregistré et surtout face aux vrais clients AWS : l'AWS CLI et le provider AWS de Terraform.

Rejeu des échanges enregistrés

Erreurs de validation et sondes enregistrées

Les échanges d'erreur enregistrés donnent le même statut, le même code EC2 et le même message ; les sondes du dispatcher comparent les erreurs en texte brut et les racines de réponse.

Exécution

test/e2e/exchanges_test.go et test/e2e/probes_test.go.

Dernier résultat 40 / 40 identiques ; sondes : 9 identiques à l'octet près, 6 volontairement différentes (2026-11-02).

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

Scénario

Scénario de toutes les familles d'actions

Chaque famille d'actions s'exécute, et les formes de réponse sont comparées à celles enregistrées depuis Python.

Exécution

test/e2e/scenario_test.go.

Dernier résultat 97 / 97 actions réussies ; 93 formes de réponse vérifiées, aucun élément inexpliqué (2026-11-02).

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

Contrat client

AWS CLI v2

La vraie AWS CLI fonctionne sur 42 actions, avec SigV4 vérifié par l'algorithme de keystoneclient.

Exécution

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

Dernier résultat Réussi (2026-11-02).

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

Contrat client

Provider Terraform AWS

Terraform applique un VPC, un sous-réseau, une passerelle, des routes, un groupe de sécurité, une paire de clés, une instance, une EIP et un volume, puis ne planifie aucun changement et détruit le tout.

Exécution

test/terraform (build tag terraform), Terraform 1.5.4 et hashicorp/aws 5.100.0, sur MariaDB.

Dernier résultat Réussi sur MariaDB (2026-11-02).

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

Concurrence sur Galera

Concurrence sur MariaDB Galera

Un VPC par défaut et un ID EC2 par serveur sous requêtes concurrentes sur trois nœuds ; les écritures de tags convergent.

Exécution

test/galera (build tag galera) sur un cluster à 3 nœuds.

Dernier résultat Réussi, 3 exécutions, aucun 5xx (2026-11-02).

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

Tempest

ec2api-tempest-plugin

Le plugin Tempest amont du projet.

Exécution

Retiré avec le projet en amont.

Dernier résultat Non exécuté.

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

Écarté de la réécriture

L'API EC2 (retirée en amont en 2024) conserve ses actions mais abandonne son propre serveur S3 et son service de métadonnées, que la plateforme fournit déjà.

Assuré par la plateforme Cloud Native

Serveur ec2-api-s3

Repris par Rook-Ceph RGW

Pourquoi c'est écarté

Le serveur S3 Python n'est pas authentifié ; le stockage objet compatible S3 vient de la plateforme.

Pourquoi la solution n'est pas affectée

Les clients S3 utilisent l'endpoint RGW avec les identifiants EC2 de Keystone (okadm --ceph-s3).

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

Assuré par la plateforme Cloud Native

Service ec2-api-metadata

Repris par KubeVirt (cloud-init)

Pourquoi c'est écarté

Les instances obtiennent leurs métadonnées par les datasources OpenStack et NoCloud de cloud-init (config drive).

Pourquoi la solution n'est pas affectée

Les invités démarrent et se configurent comme d'habitude ; seuls les identifiants EC2 (i-, ami-, r-) manquent dans leurs métadonnées.

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

Mécanique interne simplifiée

Verrou fichier par hôte pour le VPC par défaut

Pourquoi c'est écarté

Plusieurs répliques et un Galera multi-écrivain exigent un verrou à l'échelle du cluster : une ligne en base avec expiration.

Pourquoi la solution n'est pas affectée

Les VPC par défaut sont toujours créés une fois par projet, désormais de façon sûre entre répliques.

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

Seul ce qui a été écarté par choix de conception figure ici ; le travail pas encore fait se trouve dans les Known gaps du docs/CONFORMANCE.md du module. Tous les modules

Interactions de API EC2

Vue « service » générée par la skill diagramme depuis le modèle d'OpenKeel.

Diagramme openkeel-ec2-api.svg Plein écran
Les 5 interactions du modèle
DeVersProtocoleQuoi
EC2 APIKeystoneAPI RESTec2tokens (SigV4)
EC2 APINova APIAPI RESTinstances
EC2 APINeutron serverAPI RESTVPC, subnets, security groups
EC2 APICinder APIAPI RESTvolumes, snapshots
EC2 APIGlanceAPI RESTAMIs

Spécifications