feat: serve tenant-owned ascoachingogvaner.dk via simply.com DNS + TLS#1973
Draft
devantler wants to merge 4 commits into
Draft
feat: serve tenant-owned ascoachingogvaner.dk via simply.com DNS + TLS#1973devantler wants to merge 4 commits into
devantler wants to merge 4 commits into
Conversation
Adds a second external-dns instance (webhook provider for simply.com), a cert-manager DNS01 solver for simply.com zones, a letsencrypt-prod solver entry selected by dnsZones, the ascoachingogvaner.dk certificate, and SNI listeners on the shared Gateway. Hostname ownership moves to the tenant repo (the hostname-replace patch is removed). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The controller is tenant-scoped, so the platform no longer runs an external-dns-simply instance. Instead it provisions the generic enablers the tenant's own instance needs: tenant-external-dns read capabilities (HTTPRoutes/Gateway/namespaces) bound to the tenant's external-dns SA, an egress NetworkPolicy to api.simply.com, the namespaced SecretStore with a dedicated app-ascoachingogvaner Vault role (wedding-app pattern), and the app-ascoachingogvaner-readonly policy on the ClusterSecretStore bundle so the cert-manager simply.com solver reads the same tenant-owned credential. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Contributor
Author
|
System Test failure analysis — pre-existing OpenBao issue, not this diff. Both failing runs die on Evidence it pre-exists this PR:
This matches the OpenBao raft/peer-connectivity problem #1985 fixes (its branch's System Test passes). Suggest re-running this PR's System Test after #1985 (or its siblings #1982/#1983) merges; I'll keep the branch fresh. 🤖 Generated with Claude Code |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Everything platform-side needed for the tenant-owned hosting of https://ascoachingogvaner.dk (the tenant's domain, DNS-hosted at simply.com). Per maintainer direction, the external-dns controller itself lives in the tenant's own
deploy/artifact (companion PR: devantler-tech/ascoachingogvaner#37); this PR provides only the generic enablers a tenant cannot grant itself, plus the TLS termination that physically lives on the shared Gateway:tenant-external-dns(+-global) ClusterRoles (HTTPRoute/Gateway/namespace reads the gateway-httproute source needs), bound to the tenant's dedicatedexternal-dnsSA via the registration dir; plus an FQDN-pinned egress NetworkPolicy (kube-apiserver +api.simply.com) scoped to its pods.SecretStorein the registration dir, dedicatedascoachingogvanerVault role + path-scopedapp-ascoachingogvanerpolicy (read + seed-write onapps/ascoachingogvaner/*), andapp-ascoachingogvaner-readonlyadded to the ClusterSecretStore bundle so the cert-manager solver reads the same tenant-owned credential.simply-dns-webhook— cert-manager DNS01 solver (RunnerM/simply-dns-webhook, chart 1.9.0 — 1.10.0 is tagged upstream but its published index/tgz 404s) + adnsZones-selected solver onletsencrypt-prod(everything else stays on Cloudflare DNS01). PSS-restricted securityContext viapostRenderers(+NET_BIND_SERVICE, it binds :443) and an apiserver→solver ingress CNP, both of which the chart lacks.ascoachingogvaner-dk-tls(apex + www) and two hostname-scoped HTTPS listeners on theplatformGateway via JSON patch (strategic merge would replace the CRD's listeners list). SNI picks the most specific listener; every other hostname keeps the${domain}wildcard cert.op: replace /spec/hostnamespatch is removed; homepage href updated; TENANTS.md documents the new optionalexternal-dns-*registration files and the externally-issued-credential seeding exception.simply-dns-webhookHelm chart (RunnerM)1.9.0(The
ghcr.io/uozalp/external-dns-simply-webhookimage — digest-pinned — ships in the tenant PR.)Merge sequencing
Merge devantler-tech/ascoachingogvaner#37 first and let semantic-release publish the artifact, then this PR promptly after:
*.platform.lanand prune the subdomain's DNS record — that's the order to avoid.Maintainer TODO (before it works end-to-end)
secret/apps/ascoachingogvaner/simplywith propertiesaccount_name(Sxxxxxx) andapi_key(simply.com control panel → Account → API)._externaldns.TXT markers — existing MX/mail records are untouched.Validation
ksail workload validate: ✅ —ksail --config ksail.prod.yaml workload validate: same single pre-existing failure as pristineorigin/main(Coroot CRnotificationIntegrationsvs the datreeio CRDs-catalog schema — unrelated)🤖 Generated with Claude Code