Repository navigation
Closed
Labels
area/networkingIssues or PRs related to networking (ingress, gateway, vpn, metallb, kube-ovn)Issues or PRs related to networking (ingress, gateway, vpn, metallb, kube-ovn)area/platformIssues or PRs related to platform infrastructure (bundle, flux, talos, installer)Issues or PRs related to platform infrastructure (bundle, flux, talos, installer)kind/featureCategorizes issue or PR as related to a new featureCategorizes issue or PR as related to a new featurepriority/important-soonMust be staffed and worked on either currently, or very soon, ideally in time for the next releaseMust be staffed and worked on either currently, or very soon, ideally in time for the next releasetriage/acceptedIndicates an issue is ready to be actively worked onIndicates an issue is ready to be actively worked on
Description
What this issue is about
Currently, all TLS certificates in Cozystack are issued per-hostname via cert-manager ingress annotations. Each tenant endpoint (e.g. s3.tenant-a.example.org, app.tenant-b.example.org) gets its own individual certificate from Let's Encrypt.
This approach hits Let's Encrypt rate limits (50 certificates per registered domain per week) once the platform exceeds ~50 tenant endpoints, making it unsuitable for production multi-tenant deployments at scale.
Current limitations
- No wildcard Certificate resources — no mechanism to create
*.tenants.example.orgor*.s3.example.orgcerts - Ingress annotations = one cert per hostname — cert-manager issues individual certs per Ingress, never wildcards
- dns01 solver is Cloudflare-only — hardcoded in
cert-manager-issuerstemplates, other DNS providers not supported - http01 is the default solver — which cannot issue wildcard certs at all
Proposed solution
Add a platform-level wildcard certificate mode. Example configuration in platform values.yaml:
publishing:
certificates:
solver: dns01
wildcardDomains:
- "*.tenants.example.org"
- "*.s3.example.org"Implementation would involve:
- Standalone wildcard Certificate CRs — platform package creates
Certificateresources for each wildcard domain, storing the resulting TLS secret - Ingress references shared secret — instead of per-host cert-manager annotations, ingress resources reference the pre-existing wildcard TLS secret
- Generalize dns01 provider — support at least Cloudflare, Route53, and cert-manager webhook-based solvers (not just hardcoded Cloudflare)
- Hybrid mode — wildcard certs for platform-generated subdomains, individual certs for tenant custom domains (which are under different registered domains and have their own rate limit quota)
Impact
- Removes Let's Encrypt rate limit bottleneck for platforms with many tenants
- Reduces total number of certificates to manage (fewer renewals, less ACME traffic)
- Required for production deployments expecting 50+ tenant endpoints per week
Release note
Add optional wildcard certificate support via dns01 solver for multi-tenant deployments at scale.
Reacted by dosubot
Metadata
Metadata
Assignees
Labels
area/networkingIssues or PRs related to networking (ingress, gateway, vpn, metallb, kube-ovn)Issues or PRs related to networking (ingress, gateway, vpn, metallb, kube-ovn)area/platformIssues or PRs related to platform infrastructure (bundle, flux, talos, installer)Issues or PRs related to platform infrastructure (bundle, flux, talos, installer)kind/featureCategorizes issue or PR as related to a new featureCategorizes issue or PR as related to a new featurepriority/important-soonMust be staffed and worked on either currently, or very soon, ideally in time for the next releaseMust be staffed and worked on either currently, or very soon, ideally in time for the next releasetriage/acceptedIndicates an issue is ready to be actively worked onIndicates an issue is ready to be actively worked on
Type
Projects
- StatusShow more project fieldsDone
Activity
lexfrei commentedon Jun 3, 2026
Tracked under epic #2811 as the ingress wildcard workstream, and kept as the canonical issue for it.
Two premises here have shifted since filing, worth updating:
packages/system/cert-manager-issuers/templates/cluster-issuers.yaml:40-85now supports cloudflare, route53, digitalocean and rfc2136.Certificateresources already exist on the Gateway API path: in dns01 mode theTenantGatewaycontroller renders a per-apex wildcard (internal/controller/tenantgateway/renderers.go:368-426). The remaining gap is the default ingress-nginx path (gateway.enableddefaults tofalse,packages/core/platform/templates/apps.yaml:80), where every published hostname still mints its own per-host certificate via ingress-shim.So the scope that remains here is: bring the same wildcard-backed issuance to the ingress-nginx path. The bring-your-own (externally-issued / purchased) wildcard case is tracked separately as #2812.
feat(platform): ACME wildcard certificate on the default ingress-ngin…