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

Componentes · Servicios y orquestación

Designate

Zonas y recordsets publicados por ExternalDNS (un DNSEndpoint por recordset).

Go ExternalDNSopenkeel-designate

El módulo

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

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

API REST

78 operaciones de la API REST original (rutas y acciones de cuerpo) y su estado en OpenKeel.

  • 78Implementado

Cómo se prueba la compatibilidad

Los intercambios funcionales de API de Designate en Python se reproducen contra el servicio Go, con vectores de algoritmo y las expectativas de los clientes cubiertas por el replay.

Replay de los intercambios grabados

Replay E2E de los tests funcionales de API

548 intercambios de 299 tests funcionales de API de Python dan el mismo estado y el mismo cuerpo.

Ejecución

go test -tags e2e ./test/e2e/..., E2E_MYSQL_DSN para MariaDB 11.4; E2E_STRICT=1 se supera con 32 diferencias conocidas.

Último resultado 516 / 548 idénticos en ambos motores (el replay del original Python da 501 / 548).

Fuente: openkeel-designate/docs/CONFORMANCE.md

Tests unitarios y golden tests

Vectores de algoritmo

Los números de serie SOA, el estado de zonas y registros, los resultados de poll y la importación de archivos de zona se calculan como en Python.

Ejecución

go test ./... en internal/central y internal/zonefile.

Último resultado 263 / 263.

Fuente: openkeel-designate/docs/CONFORMANCE.md

Contrato de cliente

Expectativas de los clientes

Filtros por nombre, links.next, recuentos, cabeceras de Designate, 202 PENDING, 404 en zonas eliminadas, 400 para registros gestionados, actualizaciones PTR tal como esperan los clientes.

Ejecución

Cubierto por el replay. designateclient/OSC, Neutron, Heat, Skyline y designate-tempest-plugin reales no ejecutados.

Último resultado Todas se cumplen por construcción y están cubiertas por el replay.

Fuente: openkeel-designate/docs/CONFORMANCE.md

Tests unitarios y golden tests

Reconciliador y back ends

El ciclo de vida de las zonas frente a un servidor DNS, la API de zonas de PowerDNS, el escritor ExternalDNS y el receptor de notificaciones se comportan según lo especificado.

Ejecución

internal/reconciler con un servidor DNS simulado, internal/backend, internal/sink.

Último resultado Superado.

Fuente: openkeel-designate/docs/CONFORMANCE.md

Excluido del rewrite

Designate conserva sus 78 operaciones de API pero publica los registros mediante ExternalDNS y las API de los proveedores DNS, por lo que desaparecen mdns, los destinos de pool de tipo BIND y los workers RPC.

Asumido por la plataforma Cloud Native

mdns, AXFR/NOTIFY y destinos de pool

Asumido por ExternalDNS

Por qué se excluyó

Las zonas se crean mediante la API del servidor DNS (PowerDNS, Route 53, Azure, Google, Cloudflare) y los recordsets pasan a ser DNSEndpoints que publica ExternalDNS.

Por qué la solución no se ve afectada

El estado de la zona se confirma consultando los servidores autoritativos. El serial SOA y los servidores de nombres servidos corresponden al proveedor, y las claves TSIG son informativas.

Fuente: openkeel-designate/docs/CONFORMANCE.md

Mecánica interna simplificada

RPC de central, worker y producer, y bloqueos tooz

Asumido por Kubernetes Leases

Por qué se excluyó

Central se ejecuta dentro del proceso con una transacción por petición; un único reconciliador, que mantiene un Lease, sustituye a worker, producer y mdns.

Por qué la solución no se ve afectada

Mismo comportamiento de la API, incluido 202 PENDING en las escrituras; ya no puede producirse un MessagingTimeout 504.

Fuente: openkeel-designate/docs/CONFORMANCE.md

Asumido por la plataforma Cloud Native

Registros SPF, SSHFP, CAA, CERT, HTTPS, SVCB

Asumido por ExternalDNS

Por qué se excluyó

ExternalDNS no puede publicar estos tipos.

Por qué la solución no se ve afectada

Se rechazan con el propio 400 de Designate, 'not a supported record type'. Los operadores pueden habilitarlos para un backend que los publique.

Fuente: openkeel-designate/docs/CONFORMANCE.md

Asumido por la plataforma Cloud Native

Zonas secundarias en proveedores DNS en la nube

Asumido por ExternalDNS

Por qué se excluyó

ExternalDNS no gestiona zonas secundarias; solo un backend con zonas secundarias (PowerDNS) puede obtenerlas.

Por qué la solución no se ve afectada

Las zonas secundarias funcionan en PowerDNS; en Route 53, Azure, Cloud DNS o Cloudflare pasan a ERROR.

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

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

Diagrama openkeel-designate.svg Pantalla completa
Las 4 interacciones del modelo
DeAProtocoloQué
Designate APIDesignate worker + sinkRabbitMQRPC zone/recordset
RabbitMQ clusterDesignate worker + sinkRabbitMQsink: Nova/Neutron events
Designate worker + sinkExternalDNSAPI de KubernetesDNSEndpoint per recordset
Designate worker + sinkAuthoritative DNSAPI RESTzone API, status polling

Especificaciones