OpenKeel: la solución Cloud soberana, francesa y de alcance europeo, del grupo inherent Descubrir inherent

Componentes · Servicios y orquestación

API EC2

API EC2 Query (97 acciones), firmas SigV2 y SigV4 verificadas por Keystone: AWS CLI, boto3, Terraform.

Go Nova, Neutron, Cinderopenkeel-ec2-api

El módulo

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

Extracto de openkeel-ec2-api/README.md (en inglés).

Acciones de API

100 acciones de la API original y su estado en OpenKeel.

  • 100Implementado

Cómo se prueba la compatibilidad

El ec2-api retirado se verifica frente a su comportamiento grabado y, sobre todo, frente a los clientes AWS reales: la AWS CLI y el provider AWS de Terraform.

Replay de los intercambios grabados

Errores de validación y sondas grabados

Los intercambios de error grabados dan el mismo estado, el mismo código EC2 y el mismo mensaje; las sondas del dispatcher comparan los errores en texto plano y las raíces de las respuestas.

Ejecución

test/e2e/exchanges_test.go y test/e2e/probes_test.go.

Último resultado 40 / 40 idénticos; sondas: 9 idénticas byte a byte, 6 deliberadamente distintas (2026-11-02).

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

Escenario

Escenario de todas las familias de acciones

Cada familia de acciones se ejecuta, y las estructuras de respuesta se comparan con las grabadas desde Python.

Ejecución

test/e2e/scenario_test.go.

Último resultado 97 / 97 acciones superadas; 93 estructuras de respuesta comprobadas, ningún elemento sin explicar (2026-11-02).

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

Contrato de cliente

AWS CLI v2

La AWS CLI real funciona en 42 acciones, con SigV4 verificado por el algoritmo de keystoneclient.

Ejecución

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

Último resultado Superado (2026-11-02).

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

Contrato de cliente

Provider AWS de Terraform

Terraform aplica una VPC, una subred, una puerta de enlace, rutas, un grupo de seguridad, un par de claves, una instancia, una EIP y un volumen, luego no planifica ningún cambio y lo destruye todo.

Ejecución

test/terraform (build tag terraform), Terraform 1.5.4 y hashicorp/aws 5.100.0, sobre MariaDB.

Último resultado Superado en MariaDB (2026-11-02).

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

Concurrencia en Galera

Concurrencia en MariaDB Galera

Una VPC por defecto y un ID EC2 por servidor con peticiones concurrentes en tres nodos; las escrituras de etiquetas convergen.

Ejecución

test/galera (build tag galera) en un clúster de 3 nodos.

Último resultado Superado, 3 ejecuciones, ningún 5xx (2026-11-02).

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

Tempest

ec2api-tempest-plugin

El plugin de Tempest upstream del proyecto.

Ejecución

Retirado junto con el proyecto upstream.

Último resultado No ejecutado.

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

Excluido del rewrite

La API EC2 (retirada en upstream en 2024) conserva sus acciones, pero prescinde de su propio servidor S3 y de su servicio de metadatos, que la plataforma ya proporciona.

Asumido por la plataforma Cloud Native

Servidor ec2-api-s3

Asumido por Rook-Ceph RGW

Por qué se excluyó

El servidor S3 de Python no está autenticado; el almacenamiento de objetos con S3 lo proporciona la plataforma.

Por qué la solución no se ve afectada

Los clientes S3 usan el endpoint de RGW con credenciales EC2 de Keystone (okadm --ceph-s3).

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

Asumido por la plataforma Cloud Native

Servicio ec2-api-metadata

Asumido por KubeVirt (cloud-init)

Por qué se excluyó

Las instancias obtienen sus metadatos a través de los datasources OpenStack y NoCloud de cloud-init (config drive).

Por qué la solución no se ve afectada

Los invitados arrancan y se configuran como siempre; solo faltan en sus metadatos los identificadores EC2 (i-, ami-, r-).

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

Mecánica interna simplificada

Bloqueo de archivo por host para la VPC por defecto

Por qué se excluyó

Varias réplicas y un Galera multiescritor requieren un bloqueo a escala de clúster: una fila de base de datos con caducidad.

Por qué la solución no se ve afectada

Las VPC por defecto se siguen creando una vez por proyecto, ahora de forma segura entre réplicas.

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

Aquí solo figura lo que se excluyó por diseño; el trabajo aún no realizado está en los Known gaps del docs/CONFORMANCE.md del módulo. Todos los módulos

Interacciones API EC2

Vista de servicio generada por la skill de diagramas a partir del modelo de OpenKeel.

Diagrama openkeel-ec2-api.svg Pantalla completa
Las 5 interacciones del modelo
DeAProtocoloQué
EC2 APIKeystoneAPI RESTec2tokens (SigV4)
EC2 APINova APIAPI RESTinstances
EC2 APINeutron serverAPI RESTVPC, subnets, security groups
EC2 APICinder APIAPI RESTvolumes, snapshots
EC2 APIGlanceAPI RESTAMIs

Especificaciones