Headless CMS: Deploy Strapi CMS and Next.js frontend on Kubernetes


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.
- NODE_ENV: production
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.