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. Then your team removes the old controller, and its
static load-balancer address goes 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 that the
records exist.
Without this lane, people find these records in a one-off sweep.
They check every account and every zone. Then they match hundreds of
records by hand against the addresses that they release.
03 · DNS in git Roadmap
One repository, imported from live, applied by CI.
You import every account and zone from Cloudflare, so nobody writes
them by hand. The repository records which objects it declares and
which objects it only observed. Merge requests show a plan, and the
main branch applies it.
The write token lives only in CI. The assistant keeps its
read-only Cloudflare tokens, the same tokens that its
Cloudflare posture review already uses in production.
04 · The join Roadmap
Every record against every route and every address.
A rule-based agent does this join, with no AI model (LLM) involved.
It compares the records in the repository and the live records with
two things. The first is the hosts that live Ingress, IngressRoute
and HTTPRoute objects declare. The second is the LoadBalancer
addresses on each cluster.
It only looks at A, AAAA and
CNAME records. Otherwise a verification
TXT record on the same name would mask the address
record and produce false findings.
05 · Four buckets Roadmap
Each mismatch has one meaning and one next step.
- Dangling: the record points at a retired or absent address.
- No route: the record points at a live load balancer, but no route declares the host.
- No record: a route declares a host that nobody can reach.
- Unknown address: the address belongs to neither a cluster 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 repository is authoritative for what it
declares. CI holds a write token. The assistant proposes draft MRs.
Advisory: you manage the zone yourself. The assistant only
reads it and opens issues.
The mode decides whether the assistant opens an MR or an issue. The
mere presence of a token never decides it.
07 · Out-of-band edits Roadmap
Declared means managed. Everything else is left alone.
Proxy, page-rule and Access settings can live in the repository,
but not exclusively. The assistant reports an object that the
repository does not declare as drift to review. It never proposes
to delete that object, and the apply never purges it.
A dashboard edit to a declared record is real drift. The
assistant opens 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 compares
the retired address with the records. The MR then cites the records
that the retirement would leave dangling, with a link to the
matching DNS MR. So 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 repository. The MR body
shows why each record is dangling. It shows what the CI plan will
do, and what to check after the apply. The full MR is below.