Part of subdomain-per-drop. See forte-drop docs/subdomain-per-drop-rollout.md for the full plan, the forte-helm chart spec, the 3 questions for Danijel, and the strict rollout order.
DO NOT MERGE YET — infra has a required ordering (DNS -> issuer -> cert Ready -> forte-helm chart -> mcp priority -> helm /shared -> app image). Merging out of order breaks live drops/MCP. Reviews (codex + /code-review) still pending; reviewers not yet tagged.
Part of subdomain-per-drop. See forte-drop docs/subdomain-per-drop-rollout.md for the full plan, the forte-helm chart spec, the 3 questions for Danijel, and the strict rollout order.
DO NOT MERGE YET — infra has a required ordering (DNS -> issuer -> cert Ready -> forte-helm chart -> mcp priority -> helm /shared -> app image). Merging out of order breaks live drops/MCP. Reviews (codex + /code-review) still pending; reviewers not yet tagged.
forte_drop is moving to per-slug subdomains: forte-login drops served at
<slug>.drop.forteapps.net (sidecar-gated), public/password drops at
drop.forteapps.net/shared/<slug>. That needs a wildcard TLS cert.
- letsencrypt-issuer.yaml: add '*.drop.forteapps.net' + 'drop.forteapps.net' to
the dns01 azureDNS solver selector in BOTH issuers. The existing '*.forteapps.net'
selector only matches single-label children, so it does NOT cover the two-label
'*.drop.forteapps.net' — without this the wildcard challenge has no matching solver
and issuance fails. SP already has zone-level rights on forteapps.net.
- new Certificate wildcard-drop-forteapps-net in the forte-drop namespace -> secret
wildcard-drop-forteapps-net-tls (dnsNames *.drop + apex). Issued in-namespace so the
app's Traefik IngressRoute can reference it directly (the secret-cloner can't help:
generateExisting:false + forte-drop ns already exists). Added to the overlay
kustomization so ArgoCD manages it (the Application is prune+selfHeal).
This is the SINGLE issuer of that secret. The forte-helm chart must reference it
verbatim and must NOT create its own Certificate into the same secret.
Depends on: DNS *.drop.forteapps.net resolving + ACME TXT in the flat forteapps.net
zone (no delegated drop. child zone). Do NOT merge until that's confirmed.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
jorgen.stensrud
marked the pull request as work in progress 2026-06-10 07:19:33 +00:00
No forte-helm chart change needed after all. The forteapp chart emits one exact
Host(`drop.forteapps.net`) route (apex: admin + /api + public /shared). Add an
ADDITIVE standalone IngressRoute for the per-slug wildcard *.drop.forteapps.net,
pointing at the SAME chart service (forte-drop-app:3000 — whose targetPort is the
auth sidecar when auth is on), so forte drop subdomains flow through the sidecar and
are Forte-login gated exactly like the admin root.
priority:1 (LOW) is load-bearing: Traefik orders routers by rule-length by default,
and this regex is longer than Host(`mcp.drop.forteapps.net`) — without the explicit
low priority it would STEAL mcp.drop (and apex) traffic into the web pod. priority:1
guarantees the exact Host() routers (mcp release + chart apex) always win.
Traefik v3 (chart 28.x) HostRegexp = Go RE2; verify the rendered router against
mcp./www./app./apex/<real-slug> before prod. Uses the wildcard-drop-forteapps-net-tls
secret from the Certificate added in the same branch.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
jorgen.stensrud
marked the pull request as ready for review 2026-06-10 08:41:29 +00:00
jorgen.stensrud
requested review from danijel.simeunovic 2026-06-10 08:46:24 +00:00
jorgen.stensrud
requested review from gitea_admin 2026-06-10 12:29:15 +00:00
- Apex drop.forteapps.net already gets its own cert from the forteapp
chart (forte-drop-tls); the SAN on the wildcard cert was redundant.
- cert-manager selector.dnsNames matches exact FQDNs (no wildcard
expansion), so the enumerated list is replaced by
dnsZones: [forteapps.net], covering apex + all subdomains.
Refs #22
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
#3: I solver-selectoren matches dnsNames på eksakt FQDN — ikke som TLS-wildcard — så *.forteapps.net dekker faktisk ikke drop.forteapps.net her. Byttet til dnsZones: ['forteapps.net'], som dekker apex + alle subdomener i én oppføring.
#2: Fjernet apex-SAN — drop.forteapps.net har allerede eget cert fra charten (forte-drop-tls). Certet dekker nå kun *.drop.forteapps.net.
#1: Enig, men charten lager i dag bare én Host()-route + cert med ett SAN. Tar chart-konsolideringen som egen oppfølging — ok?
Takk! Oppdatert:
**#3:** I solver-selectoren matches `dnsNames` på eksakt FQDN — ikke som TLS-wildcard — så `*.forteapps.net` dekker faktisk ikke `drop.forteapps.net` her. Byttet til `dnsZones: ['forteapps.net']`, som dekker apex + alle subdomener i én oppføring.
**#2:** Fjernet apex-SAN — `drop.forteapps.net` har allerede eget cert fra charten (`forte-drop-tls`). Certet dekker nå kun `*.drop.forteapps.net`.
**#1:** Enig, men charten lager i dag bare én `Host()`-route + cert med ett SAN. Tar chart-konsolideringen som egen oppfølging — ok?
@danijel.simeunovic
Jeg forventet fortsatt å se ingressroute and certificate borte fra PRen her, hvorfor er de fortsatt her? Som jeg skrev tidligere, skal dette la seg gjøre med values.yaml (se slack mld også).
Jeg forventet fortsatt å se ingressroute and certificate borte fra PRen her, hvorfor er de fortsatt her? Som jeg skrev tidligere, skal dette la seg gjøre med values.yaml (se slack mld også).
The forteapp chart now supports tls.additionalDomains (multi-SAN) and
ingress.priority (forte-helm#10), so the per-slug wildcard cert and the
low-priority HostRegexp IngressRoute no longer need to be standalone
overlay resources. Routing + cert move to the forte-drop release values
(helm-prod-values). The issuer dnsZones change stays here.
Depends on forte-helm#10 (ingress.priority) merged + synced before the
values flip, else the consolidated HostRegexp would outrank and steal
mcp.drop.forteapps.net.
Refs #22
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
jorgen.stensrud
changed title from feat(forte-drop): wildcard cert *.drop.forteapps.net for subdomain-per-drop to feat(forte-drop): issuer dnsZones for *.drop.forteapps.net (subdomain-per-drop)2026-06-26 07:51:00 +00:00
Priority-feltet manglet i charten, så jeg åpnet forte-helm#10 for det. Det trengs fordi den konsoliderte regexen HostRegexp(^([a-z0-9-]+\.)?drop\.forteapps\.net$) (48 tegn) ellers slår Host(mcp.drop.forteapps.net) (30 tegn) på Traefiks regel-lengde-prioritering og stjeler mcp-trafikk inn i web-podden. Med priority: 1 vinner mcp.
Denne PR-en inneholder nå kun issuer-endringen (dnsZones: ['forteapps.net']).
Rekkefølge for å unngå nedetid: forte-helm#10 merget + synket → web-values (matcher/priority/additionalDomains) → subdomenene live via charten.
Konsolidert inn i charten, slik du foreslo 🙌 Begge standalone-ressursene er fjernet fra denne PR-en:
- **Certificate** → chartens `tls.additionalDomains` (din `e6edb78`). Web-releaset får `['drop.forteapps.net', '*.drop.forteapps.net']`.
- **IngressRoute** → chartens `matcher: HostRegexp` + `ingress.priority`.
Priority-feltet manglet i charten, så jeg åpnet **forte-helm#10** for det. Det trengs fordi den konsoliderte regexen `HostRegexp(^([a-z0-9-]+\.)?drop\.forteapps\.net$)` (48 tegn) ellers slår `Host(mcp.drop.forteapps.net)` (30 tegn) på Traefiks regel-lengde-prioritering og stjeler mcp-trafikk inn i web-podden. Med `priority: 1` vinner mcp.
Denne PR-en inneholder nå **kun** issuer-endringen (`dnsZones: ['forteapps.net']`).
Rekkefølge for å unngå nedetid: forte-helm#10 merget + synket → web-values (matcher/priority/additionalDomains) → subdomenene live via charten.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Part of subdomain-per-drop. See forte-drop docs/subdomain-per-drop-rollout.md for the full plan, the forte-helm chart spec, the 3 questions for Danijel, and the strict rollout order.
DO NOT MERGE YET — infra has a required ordering (DNS -> issuer -> cert Ready -> forte-helm chart -> mcp priority -> helm /shared -> app image). Merging out of order breaks live drops/MCP. Reviews (codex + /code-review) still pending; reviewers not yet tagged.
@@ -0,0 +29,4 @@routes:# Traefik v3 (chart 28.x) HostRegexp takes a Go RE2 pattern. Verify the rendered# router against mcp./www./app./apex/<real-slug> before relying on it in prod.- match: HostRegexp(`^[a-z0-9-]+\.drop\.forteapps\.net$`)Dette kan vi legge til støtte for i helm chart, da vil det vel ikke være behov for egen IngressRoute her?
@@ -0,0 +23,4 @@issuerRef:name: letsencrypt-prodkind: ClusterIssuerdnsNames:Samme som forrige kommentar, hvis vi legger inn støtte for multiple hosts i array, så trengs ikke egen ressurs her.
@@ -28,0 +28,4 @@# *.forteapps.net only matches single-label children, NOT *.drop.forteapps.net,# so the per-drop subdomain wildcard needs its own selector entry.- '*.drop.forteapps.net'- 'drop.forteapps.net'Jeg skjønner
*.drop.forteapps.net, men vil ikkedrop.forteapps.netomfattes av*.forteapps.netsom allerede finnes?Takk! Oppdatert:
#3: I solver-selectoren matches
dnsNamespå eksakt FQDN — ikke som TLS-wildcard — så*.forteapps.netdekker faktisk ikkedrop.forteapps.nether. Byttet tildnsZones: ['forteapps.net'], som dekker apex + alle subdomener i én oppføring.#2: Fjernet apex-SAN —
drop.forteapps.nethar allerede eget cert fra charten (forte-drop-tls). Certet dekker nå kun*.drop.forteapps.net.#1: Enig, men charten lager i dag bare én
Host()-route + cert med ett SAN. Tar chart-konsolideringen som egen oppfølging — ok?@danijel.simeunovic
Jeg forventet fortsatt å se ingressroute and certificate borte fra PRen her, hvorfor er de fortsatt her? Som jeg skrev tidligere, skal dette la seg gjøre med values.yaml (se slack mld også).
feat(forte-drop): wildcard cert *.drop.forteapps.net for subdomain-per-dropto feat(forte-drop): issuer dnsZones for *.drop.forteapps.net (subdomain-per-drop)Konsolidert inn i charten, slik du foreslo 🙌 Begge standalone-ressursene er fjernet fra denne PR-en:
tls.additionalDomains(dine6edb78). Web-releaset får['drop.forteapps.net', '*.drop.forteapps.net'].matcher: HostRegexp+ingress.priority.Priority-feltet manglet i charten, så jeg åpnet forte-helm#10 for det. Det trengs fordi den konsoliderte regexen
HostRegexp(^([a-z0-9-]+\.)?drop\.forteapps\.net$)(48 tegn) ellers slårHost(mcp.drop.forteapps.net)(30 tegn) på Traefiks regel-lengde-prioritering og stjeler mcp-trafikk inn i web-podden. Medpriority: 1vinner mcp.Denne PR-en inneholder nå kun issuer-endringen (
dnsZones: ['forteapps.net']).Rekkefølge for å unngå nedetid: forte-helm#10 merget + synket → web-values (matcher/priority/additionalDomains) → subdomenene live via charten.