Files
home-network-k3s-impl/platform/externaldns
jakman85andClaude Opus 4.8 20de78f5eb feat(conformance): author R-TLS + R-DNS L2 tests; fix ExternalDNS zone filter
Phase-2 exit tests (were Phase-0 scaffolds), authored against the live platform:
- trusted-tls (R-TLS-01/03): in-cluster probe dials the gateway Service (env-agnostic
  via --connect-to) with wildcard SNI and verifies the served cert CHAINS TO THE LE
  STAGING ROOT (operator decision A; dev uses LE-staging per ADR-0006). Fixture embeds
  the '(STAGING) Pretend Pear X1' root. Probes public + internal-only hostnames (R-TLS-03).
  PASSES.
- dns-exposure (R-DNS-02): a LoadBalancer Service with an external-dns hostname; polls
  public DNS until ExternalDNS auto-publishes the record; teardown + policy=sync removes it.

ExternalDNS fix (root cause of the DNS test): domain-filter was the platform SUBDOMAIN
home.keithjackson.dev, which filters OUT the actual Cloudflare zone keithjackson.dev
('no hosted zone matching record DNS Name' — record generated but skipped). Add a
DNS_ZONE cluster-var (keithjackson.dev) and set domainFilters to it. policy=sync +
txt-registry still only manage ExternalDNS-owned records (the pre-existing wildcard is
untouched). Resolves the file's WS-NET R-DNS-02 TODO.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-08-17 08:24:51 -05:00
..

platform/externaldns

ExternalDNS — automatic public DNS records for public services (Cloudflare).

What this stub is

Flux HelmRelease watching Gateway/HTTPRoute + Service resources, publishing <service>.home.keithjackson.dev records in Cloudflare from declared intent (no manual record editing, R-DNS-02).

Split-horizon note (docs/09)

A wildcard *.keithjackson.dev matches only one label deep, so <svc>.home.keithjackson.dev needs its own record. internal services need NO public record — PiHole resolves them to the internal Gateway VIP (split-horizon). ExternalDNS manages public services' records only.

Secrets

Cloudflare API token referenced by name (cloudflare-api-token, shared with cert-manager), SOPS-encrypted (WS-SEC, OQ-4).

TODO (later phases)

  • Phase 2 (WS-NET): confirm gateway-httproute source; prove an auto record for a test route (R-DNS-02, Phase-2 exit gate).
  • Phase 6 (WS-APPS): PiHole provides the internal split-horizon answers as it onboards.