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 ExternalDNSDNSEndpoint 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.
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.