Files
home-network-k3s-impl/platform/gateway
jakman85andClaude Opus 5.5 8fe8d5df8a
gate / gate (pull_request) Successful in 1m14s
gate / conformance (pull_request) Skipped
feat(dns): PiHole answers an explicit LAN name list, not a zone wildcard
Public names are proxied CNAMEs to the Cloudflare Tunnel since PR #156 and
work from the LAN, so they should resolve publicly there too. Replace the
address=/${BASE_DOMAIN}/ wildcard with explicit entries: the LAN-only names
(derived from every controller:none HTTPRoute), gitea/nextcloud (off
Cloudflare's 100 MB / 100 s limits), keycloak/auth, and the L4 VIPs.

Add L0 check pihole-lan-names, mutation-tested. Correct docs that still
described public names as CNAME to wan. and the cloudflared entrypoint comment.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-11-08 19:51:49 -06:00
..

platform/gateway

Gateway API (north-south ingress) implemented by Cilium + the shared HTTPS Gateway and the wildcard TLS certificate.

What this stub is

  • GatewayClass cilium — Gateway API implemented by Cilium; no separate ingress controller (ADR-0002).
  • Gateway shared — HTTPS listener on *.home.keithjackson.dev, TLS terminated with the wildcard cert. App HTTPRoutes attach cross-namespace via a namespace label + ReferenceGrant (rendered by WS-APPS from each ServiceDefinition's exposure).
  • Certificate wildcard-home — *.home.keithjackson.dev issued by ${ACME_CLUSTER_ISSUER} (staging in dev, prod in prod — R-ENV-02). Makes onboarding certificate-free (ADR-0006 default).

Contract (Issuer + Gateway TLS)

The "Issuer + Gateway TLS" interface (roadmap/workstreams.md): this Gateway + wildcard cert are what every service's HTTPRoute attaches to. ExternalDNS (../externaldns) publishes the public records for hostnames routed here. Ingress opens north-south only — it does not relax east-west default-deny (docs/09).

TODO (later phases)

  • Phase 2 (WS-NET): pin the L2-announced ingress VIP / IP pool (Cilium L2 announcement, docs/09); add the HTTP→HTTPS redirect route; confirm the cross-namespace ReferenceGrant pattern with WS-APPS.
  • Public exposure is via the Cloudflare Tunnel (2026-11-08, platform/cloudflared): the Gateway's external-dns.alpha.kubernetes.io/target is <tunnel-uuid>.cfargotunnel.com, so every published name is a proxied CNAME to the tunnel and cloudflared forwards to this Gateway's ClusterIP. No inbound WAN 80/443 forward is needed (the old manual edge port-forward is retired — runbooks/cloudflare-tunnel.md). LAN/VPN-only names (internal apps, plex, headlamp) carry controller: none on their route and are 404'd by the tunnel.