EKS Cluster Setup for Enterprise Application
Complete Amazon EKS cluster setup with advanced networking, security, and monitoring for a large-scale enterprise application serving millions of users.
Read itEight months building a multi-tenant EKS platform where each jurisdiction is isolated by namespace, network policy and IRSA rather than by its own cluster, with ArgoCD ApplicationSets deploying every tenant.
An election management platform serves jurisdictions that each require their data to stay inside a particular geography and each expect to be unaffected by anyone else's load. The obvious answer is a cluster per jurisdiction. That answer costs a fortune and nobody can patch it.
One EKS cluster per region, tenants isolated by namespace. This is only defensible if the isolation is enforced by the platform rather than by convention, so three things had to be true before anything else was built:
Those three together are what makes namespaces sufficient. Any one of them missing and the argument collapses.
Regional placement is a legal requirement, not a latency optimisation. A tenant's workloads run in the region its jurisdiction names, and the deployment pipeline is identical across all of them. Route 53 sends each tenant's hostname to its own regional load balancer; there is no cross-region failover for data-resident tenants, because failing over would be the violation.
A management cluster runs ArgoCD. ApplicationSets generate one application per tenant per region from a Git repository, so onboarding a jurisdiction is a pull request that adds a directory.
Karpenter provisions nodes to fit pending pods rather than to fill a fixed node group, with Spot capacity for the workloads that tolerate interruption. Election workloads are extremely peaky. Quiet for months, then enormous for a week. Fixed capacity sized for that peak is idle most of the year.
Terraform with Terragrunt for the region and cluster layer. Terragrunt is doing real work here: the same module gets applied to every region with a small per-region input file, so a change lands everywhere or nowhere rather than in whichever region someone remembered.
Gatekeeper policies. Written too loose they prove nothing, written too tight they block legitimate work and teams route around them. Getting to a set that engineers accept took several iterations and a lot of conversations about specific rejected manifests.
Cluster upgrades, policy maintenance, tenant onboarding review, and the on-call rotation across regions.
Confidential, election management
8 months
5 engineers
Kubernetes
Namespaces, if you are willing to enforce them. Network policy denying cross-namespace traffic by default, IRSA so no workload inherits the node role, and OPA Gatekeeper rejecting anything that tries to escape. A cluster per tenant is simpler to explain and far more expensive to run and patch.
Some jurisdictions require their data to stay inside a geography. That is a placement rule, not a performance one, so the design puts tenant workloads in the region the law names and keeps one deployment pipeline across all of them.
Nodes get provisioned to fit the pods actually pending, per tenant, including Spot where the workload tolerates interruption. Fixed node groups sized for peak sit idle the rest of the month.
ArgoCD ApplicationSets on a management cluster generate one application per tenant per region from a Git repository. Adding a tenant is a pull request, not a runbook.
Complete Amazon EKS cluster setup with advanced networking, security, and monitoring for a large-scale enterprise application serving millions of users.
Read itNine months moving core policy and transaction services off on-premises virtualisation into a multi-account AWS Organization, with Transit Gateway carrying traffic between 30+ VPCs and the remaining datacentre.
Read itThirty minutes with an engineer, no slide deck. We will tell you what we would change first and what it would cost to have us do it.