01 · The retirement
An old ingress controller goes, and its address is released.
A migration wave moves the last routes from the old controller to
the new one. The old controller is removed, and its static
load-balancer address is released back to the cloud provider.
The Kubernetes side is clean. DNS lives somewhere else.
02 · What gets left behind
Three records, still pointing at the freed address.
The records are proxied, so Cloudflare keeps answering for them and
returns errors to visitors. Nothing in the cluster knows they exist.
The way this is found today is a one-off sweep: every account,
every zone, hundreds of records, joined by hand against the
addresses that are being released.
03 · DNS in git Roadmap
One repository, imported from live, applied by CI.
Every account and zone is imported from Cloudflare, never
hand-written, recording which objects the repo declares and which
it only observed. Merge requests show a plan; main applies it.
The write token lives only in CI. The assistant keeps its
read-only Cloudflare tokens, the same ones its Cloudflare
posture review already uses in production.
04 · The join Roadmap
Every record against every route and every address.
A deterministic agent, with no LLM in the loop, joins repo records
and live records against the hosts declared by live Ingress,
IngressRoute and HTTPRoute objects, and against the LoadBalancer
addresses on each cluster.
It only looks at A, AAAA and
CNAME records. A verification TXT record
on the same name would otherwise mask the address record and
produce false findings.
05 · Four buckets Roadmap
Each mismatch has one meaning and one next step.
- Dangling: record points at a retired or absent address.
- No route: record points at a live load balancer, but no route declares the host.
- No record: a route declares a host nobody can reach.
- Unknown address: neither a cluster address nor a known third party.
06 · Your zone, your call Roadmap
Managed zones get MRs. Advisory zones get issues.
Each account or zone has an explicit management mode.
Managed: the DNS repo is authoritative for what it declares,
CI holds a write token, and the assistant proposes draft MRs.
Advisory: you manage the zone yourself; the assistant only
reads it and files issues.
The emission surface follows the mode, never the mere presence of
a token.
07 · Out-of-band edits Roadmap
Declared means managed. Everything else is left alone.
Proxy, page-rule and Access settings can live in the repo, but not
exclusively. An object the repo does not declare is reported as
drift to review, never proposed for deletion, and the apply never
purges it.
A dashboard edit to a declared record is real drift: an MR
to accept the live value, or an issue to discuss it.
08 · Same wave Roadmap
The retirement MR names the records it orphans.
When an MR retires a host or a load balancer, the DNS lane joins
the retired address against the records and cites the ones that
would be left dangling, with a link to the matching DNS MR. The
cleanup is part of the change, not a sweep months later.
09 · The proposal
Delete three records, with the proof that nothing serves them.
The diff removes three records from the DNS repo. The MR body shows
why each one is dangling, what the CI plan will do, and what to
check after the apply. The full MR is below.