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

Composants · Services et orchestration

Designate

Zones et recordsets publiés par ExternalDNS (un DNSEndpoint par recordset).

Go ExternalDNSopenkeel-designate

Le module

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

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

API REST

78 opérations de l'API REST d'origine (routes et actions de corps), et leur état dans OpenKeel.

  • 78Implémenté

Comment la compatibilité est testée

Les échanges fonctionnels d'API de Designate Python sont rejoués contre le service Go, avec des vecteurs d'algorithme et les attentes des clients couvertes par le rejeu.

Rejeu des échanges enregistrés

Rejeu E2E des tests fonctionnels d'API

548 échanges de 299 tests fonctionnels d'API Python donnent le même statut et le même corps.

Exécution

go test -tags e2e ./test/e2e/..., E2E_MYSQL_DSN pour MariaDB 11.4 ; E2E_STRICT=1 réussit avec 32 différences connues.

Dernier résultat 516 / 548 identiques sur les deux moteurs (le rejeu de l'original Python donne 501 / 548).

Source : openkeel-designate/docs/CONFORMANCE.md

Tests unitaires et golden tests

Vecteurs d'algorithme

Les numéros de série SOA, le statut des zones et des enregistrements, les résultats de poll et l'import de fichiers de zone se calculent comme en Python.

Exécution

go test ./... dans internal/central et internal/zonefile.

Dernier résultat 263 / 263.

Source : openkeel-designate/docs/CONFORMANCE.md

Contrat client

Attentes des clients

Filtres de nom, links.next, décomptes, en-têtes Designate, 202 PENDING, 404 sur les zones supprimées, 400 pour les enregistrements gérés, mises à jour PTR conformes aux attentes des clients.

Exécution

Couvert par le rejeu. Vrais designateclient/OSC, Neutron, Heat, Skyline et designate-tempest-plugin non exécutés.

Dernier résultat Toutes satisfaites par construction et couvertes par le rejeu.

Source : openkeel-designate/docs/CONFORMANCE.md

Tests unitaires et golden tests

Réconciliateur et back ends

Le cycle de vie des zones face à un serveur DNS, l'API de zones PowerDNS, l'écrivain ExternalDNS et le récepteur de notifications se comportent comme spécifié.

Exécution

internal/reconciler avec un faux serveur DNS, internal/backend, internal/sink.

Dernier résultat Réussi.

Source : openkeel-designate/docs/CONFORMANCE.md

Écarté de la réécriture

Designate conserve ses 78 opérations d'API mais publie les enregistrements via ExternalDNS et les API des fournisseurs DNS : mdns, les cibles de pool de type BIND et les workers RPC disparaissent.

Assuré par la plateforme Cloud Native

mdns, AXFR/NOTIFY et cibles de pool

Repris par ExternalDNS

Pourquoi c'est écarté

Les zones sont créées via l'API du serveur DNS (PowerDNS, Route 53, Azure, Google, Cloudflare) et les recordsets deviennent des DNSEndpoints qu'ExternalDNS publie.

Pourquoi la solution n'est pas affectée

L'état de la zone est confirmé en interrogeant les serveurs faisant autorité. Le serial SOA et les serveurs de noms servis relèvent du fournisseur, et les clés TSIG sont informatives.

Source : openkeel-designate/docs/CONFORMANCE.md

Mécanique interne simplifiée

RPC central, worker, producer et verrous tooz

Repris par Kubernetes Leases

Pourquoi c'est écarté

Central s'exécute dans le processus avec une transaction par requête ; un seul réconciliateur, détenteur d'un Lease, remplace worker, producer et mdns.

Pourquoi la solution n'est pas affectée

Même comportement de l'API, y compris 202 PENDING sur les écritures ; un MessagingTimeout 504 ne peut plus se produire.

Source : openkeel-designate/docs/CONFORMANCE.md

Assuré par la plateforme Cloud Native

Enregistrements SPF, SSHFP, CAA, CERT, HTTPS, SVCB

Repris par ExternalDNS

Pourquoi c'est écarté

ExternalDNS ne sait pas publier ces types.

Pourquoi la solution n'est pas affectée

Ils sont refusés avec le propre 400 de Designate, 'not a supported record type'. Les opérateurs peuvent les activer pour un backend qui les publie.

Source : openkeel-designate/docs/CONFORMANCE.md

Assuré par la plateforme Cloud Native

Zones secondaires chez les fournisseurs DNS cloud

Repris par ExternalDNS

Pourquoi c'est écarté

ExternalDNS ne gère pas les zones secondaires ; seul un backend qui les prend en charge (PowerDNS) peut les récupérer.

Pourquoi la solution n'est pas affectée

Les zones secondaires fonctionnent sur PowerDNS ; sur Route 53, Azure, Cloud DNS ou Cloudflare elles passent en ERROR.

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

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

Diagramme openkeel-designate.svg Plein écran
Les 4 interactions du modèle
DeVersProtocoleQuoi
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

Spécifications