Headless CMS - Strapi-Next.js Kubernetes Template

Setting up a headless CMS with a decoupled frontend on Kubernetes requires wiring together multiple services, internal routing, and an ingress controller. This template deploys a Strapi backend and a Next.js frontend as separate Kubernetes Deployments, connected via ClusterIP Services and exposed through a single NGINX Ingress with path-based routing. It gives you a working Strapi Next.js Kubernetes setup without writing manifests from scratch.
| Component | Type | Port | Role |
|---|---|---|---|
| Strapi Backend | Deployment + ClusterIP Service | 1337 | Headless CMS / content API |
| Next.js Frontend | Deployment + ClusterIP Service | 3000 | Public blog UI |
| NGINX Ingress | Ingress | 80 | Routes /admin to Strapi, / to Next.js |
Strapi and Next.js each run as independent Deployments with ClusterIP Services for internal-only access. The NGINX Ingress controller sits at the cluster edge and routes /admin traffic to the Strapi service on port 1337 and all other paths to the Next.js service on port 3000. Neither service is directly exposed outside the cluster.
kubectl get ingress -n <namespace>.http://<ingress-ip>/admin and confirm the Strapi admin login screen loads.http://<ingress-ip>/ and confirm the Next.js frontend renders correctly.This template configures a two-service Strapi and Next.js deployment on Kubernetes with path-based ingress routing and isolated internal services. For a full walkthrough, read Building a Modern Blog with Strapi and Kubernetes.