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

Componenti · Servizi e orchestrazione

Designate

Zone e recordset pubblicati da ExternalDNS (un DNSEndpoint per recordset).

Go ExternalDNSopenkeel-designate

Il modulo

OpenKeel implementation in Go of OpenStack Designate (DNS as a Service), generated from the reverse-specification of branch stable/2026.2 by the generate-go-from-spec skill. It replaces the Python service without its clients noticing (python-designateclient and its OSC plugin, Neutron's DNS driver, Heat's OS::Designate::*, Skyline): same 78 routes, status codes, {code, type, message, request_id} error bodies and policies, writes answered 202 PENDING. What is reproduced and what differs is in docs/CONFORMANCE.md; the security checklist is in docs/SECURITY.md.

DNS publication is Kubernetes-native: zones are created through the DNS server's API (PowerDNS), recordsets become ExternalDNS DNSEndpoint custom resources, and a reconciler reports ACTIVE/ERROR by querying the authoritative servers. designate-worker, designate-producer and designate-mdns are replaced by that reconciler; designate-central runs in-process (no RPC).

  • Go module: github.com/openkeel/openkeel-designate
  • Binaries (one image):
    • designate-api: API on port 9001, health and metrics on 9090, -migrate for the migration Job;
    • designate-reconciler: pushes zones (PowerDNS API + DNSEndpoints), polls the servers, purges deleted zones; one active replica (Lease);
    • designate-sink: Nova and Neutron notifications to managed records (optional, RabbitMQ);
    • designate-manage: database sync, pool update --file pools.yaml, pool show-config.
  • 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-designate/README.md (in inglese).

API REST

78 operazioni dell'API REST originale (route e azioni nel corpo) e il loro stato in OpenKeel.

  • 78Implementato

Come viene testata la compatibilità

Gli scambi funzionali delle API di Designate Python vengono riprodotti sul servizio Go, con vettori di algoritmo e le aspettative dei client coperte dal replay.

Replay degli scambi registrati

Replay E2E dei test funzionali delle API

548 scambi di 299 test funzionali di API Python restituiscono lo stesso stato e lo stesso corpo.

Esecuzione

go test -tags e2e ./test/e2e/..., E2E_MYSQL_DSN per MariaDB 11.4; E2E_STRICT=1 superato con 32 differenze note.

Ultimo risultato 516 / 548 identici su entrambi i motori (il replay dell'originale Python dà 501 / 548).

Fonte: openkeel-designate/docs/CONFORMANCE.md

Test unitari e golden test

Vettori di algoritmo

I numeri di serie SOA, lo stato di zone e record, i risultati di poll e l'importazione dei file di zona vengono calcolati come in Python.

Esecuzione

go test ./... in internal/central e internal/zonefile.

Ultimo risultato 263 / 263.

Fonte: openkeel-designate/docs/CONFORMANCE.md

Contratto client

Aspettative dei client

Filtri per nome, links.next, conteggi, intestazioni Designate, 202 PENDING, 404 sulle zone eliminate, 400 per i record gestiti, aggiornamenti PTR come previsto dai client.

Esecuzione

Coperto dal replay. designateclient/OSC, Neutron, Heat, Skyline e designate-tempest-plugin reali non eseguiti.

Ultimo risultato Tutte soddisfatte per costruzione e coperte dal replay.

Fonte: openkeel-designate/docs/CONFORMANCE.md

Test unitari e golden test

Reconciler e back end

Il ciclo di vita delle zone su un server DNS, l'API delle zone di PowerDNS, il writer ExternalDNS e il ricevitore delle notifiche si comportano come specificato.

Esecuzione

internal/reconciler con un server DNS simulato, internal/backend, internal/sink.

Ultimo risultato Superato.

Fonte: openkeel-designate/docs/CONFORMANCE.md

Escluso dal rewrite

Designate mantiene le sue 78 operazioni API ma pubblica i record tramite ExternalDNS e le API dei provider DNS, per cui scompaiono mdns, i target di pool in stile BIND e i worker RPC.

Gestito dalla piattaforma Cloud Native

mdns, AXFR/NOTIFY e target di pool

Gestito da ExternalDNS

Perché è stato escluso

Le zone vengono create tramite l'API del server DNS (PowerDNS, Route 53, Azure, Google, Cloudflare) e i recordset diventano DNSEndpoint pubblicati da ExternalDNS.

Perché la soluzione non ne risente

Lo stato della zona è confermato interrogando i server autoritativi. Il serial SOA e i name server serviti competono al provider, e le chiavi TSIG sono solo informative.

Fonte: openkeel-designate/docs/CONFORMANCE.md

Meccanismi interni semplificati

RPC di central, worker e producer e lock tooz

Gestito da Kubernetes Leases

Perché è stato escluso

Central gira nel processo con una transazione per richiesta; un unico riconciliatore, che detiene un Lease, sostituisce worker, producer e mdns.

Perché la soluzione non ne risente

Stesso comportamento dell'API, incluso 202 PENDING sulle scritture; un MessagingTimeout 504 non può più verificarsi.

Fonte: openkeel-designate/docs/CONFORMANCE.md

Gestito dalla piattaforma Cloud Native

Record SPF, SSHFP, CAA, CERT, HTTPS, SVCB

Gestito da ExternalDNS

Perché è stato escluso

ExternalDNS non può pubblicare questi tipi.

Perché la soluzione non ne risente

Vengono rifiutati con il 400 proprio di Designate, 'not a supported record type'. Gli operatori possono abilitarli per un backend che li pubblica.

Fonte: openkeel-designate/docs/CONFORMANCE.md

Gestito dalla piattaforma Cloud Native

Zone secondarie sui provider DNS cloud

Gestito da ExternalDNS

Perché è stato escluso

ExternalDNS non gestisce le zone secondarie; solo un backend con zone secondarie (PowerDNS) può recuperarle.

Perché la soluzione non ne risente

Le zone secondarie funzionano su PowerDNS; su Route 53, Azure, Cloud DNS o Cloudflare passano in ERROR.

Fonte: openkeel-designate/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 Designate

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

Diagramma openkeel-designate.svg Schermo intero
Le 4 interazioni del modello
DaAProtocolloCosa
Designate APIDesignate worker + sinkRabbitMQRPC zone/recordset
RabbitMQ clusterDesignate worker + sinkRabbitMQsink: Nova/Neutron events
Designate worker + sinkExternalDNSAPI KubernetesDNSEndpoint per recordset
Designate worker + sinkAuthoritative DNSAPI RESTzone API, status polling

Specifiche