We’re using the Ingress NGINX Controller.
Architecture
flowchart LR web[Web] --> nginx subgraph cluster[Kubernetes Cluster] direction LR subgraph nginx[NGINX Ingress] end subgraph tn[Tenant Namespace] svc{{Service}} ing(Ingress) --> svc svc --> pod[Pod] end nginx --> ing end
Usage
The cluster offers a wildcard certificate for *.app.konst.fish records. Any of these can be claimed by tenants dynamically & overlap is explicitly prevented with a gatekeeper policy. Once a record has been claimed it only frees up once the initial ingress resource is deleted.
If you want to use a custom domain besides *.app.konst.fish see cert-manager to secure Ingresses with TLS & DNS to correctly point records to the cluster.