Skip to content

hosted: authoritative Core Provider (hosted.dns.appthrust.io) - #18

Merged
reoring merged 4 commits into
mainfrom
work/20261021/hosted-provider
Oct 21, 2026
Merged

reoring merged 4 commits into
mainfrom
work/20261021/hosted-provider

Conversation

@reoring

@reoring reoring commented Oct 21, 2026

Copy link
Copy Markdown
Contributor

Adds the hosted Core Provider: dns-api becomes the authority for a zone with no external DNS API. Design: docs/design/hosted-provider.md.

  • API: hosted.dns.appthrust.io/v1alpha1 Provider (credentialless, 7 record types, withdrawal-capable with the external reason contract, apex NS owned by the class), HostedZone snapshot CRD, inline HostedZoneClassParameters (nameServers, soa, defaultTTL, verification.views, verification.delegation.resolver{mode,servers}).
  • Controller: renders ZoneUnit → HostedZone (canonical RRsets, monotonic serial, content digest); Programmed only when every fresh server (3 m heartbeat window) serves the current serial; delegation observation reported as zone.provider.data.delegation{observedNameServers,matches,...}; orphan/shadow snapshots removed; never writes HostedZone.status.
  • Server (app/hosted-server, same image): miekg/dns authoritative responder, serves only ZoneUnit-owned snapshots, refuses apex conflicts, SSA heartbeat of its own status.servers[] item, graceful removal.
  • Withdrawal: probe helper moved to internal/go/core/dnsprobe with a provider-neutral Policy (external updated); hosted evaluator proves exclusion at the authority (snapshot ∧ served ∧ all views), notBefore from soa.minimum.
  • Conversion: endpoint.hosted.dns.appthrust.io (TTL from --hosted-endpoint-ttl).
  • Packaging: providers.hosted.* (default disabled, fail without webhook/cert-manager), hosted-server Deployment/Service/RBAC, HOSTED_* flags, docs.

Verification

task generate + CRD sync clean; go build ./..., go vet ./..., go test ./... -count=1 (with envtest assets, 0 skips) PASS; chart contract tests PASS including enabled/disabled parity and packaged-vs-embedded Provider manifest equality.

Not exercised here: a real apiserver SSA merge for status.servers[], and a live VIP; the platform's on-premises delegated DNS proof covers those (appthrust/platform design/platform/onprem/delegated-dns.md).

Core Provider hosted.dns.appthrust.io/v1alpha1 declaration (credentialless,
seven record types, withdrawal-capable with the external reason contract,
apex NS owned by the ZoneClass nameServers parameter), inline ZoneClass
parameters, and the namespaced HostedZone serving snapshot CRD with
status.servers acknowledgements.

Design: docs/design/hosted-provider.md.
…luator, conversion, packaging

- controllers: ZoneClass acceptance and ZoneUnit -> HostedZone snapshot
  rendering (canonical RRsets, controller-owned monotonic serial, content
  digest), Programmed from fresh server acknowledgements (3m freshness,
  every fresh replica at the current serial), orphan/shadow snapshot
  cleanup, parent delegation observation (Cluster|Recursive resolver).
- server (app/hosted-server): miekg/dns authoritative responder (SOA/NS/
  glue, A/AAAA/CNAME/TXT/MX/CAA/NS, RFC 4592 wildcards, in-zone CNAME
  chains, RFC 8482 ANY, REFUSED outside owned apexes, EDNS 1232 + TC/TCP,
  per-source UDP rate limit), informer over ZoneUnit-owned HostedZones with
  apex-conflict refusal, 30s status heartbeat via SSA, graceful withdrawal.
- withdrawal: shared probe moved to internal/go/core/dnsprobe with a
  provider-neutral Policy; hosted evaluator proves exclusion at the
  authority (snapshot ∧ served ∧ every view) with soa.minimum negative TTL.
- conversion: endpoint.hosted.dns.appthrust.io with flag-driven TTL.
- chart/manager/Dockerfile/docs: providers.hosted.* gating, hosted-server
  Deployment/Service/RBAC, HOSTED_* flags.

Design: docs/design/hosted-provider.md.
@reoring
reoring merged commit f42c181 into main Oct 21, 2026
2 checks passed
@reoring
reoring deleted the work/20261021/hosted-provider branch October 21, 2026 00:54
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant