Skip to main content
Skip this guide if you already have an EKS cluster with sufficient CPU/memory and the ability to create LoadBalancer services. Proceed directly to PrivateLink or Hybrid Edition.
This guide provisions a production-ready EKS cluster from scratch — VPC with public/private subnets, IAM roles, node groups, and required add-ons.

Prerequisites

  • AWS CLI v2 configured with appropriate credentials
  • kubectl installed
  • Helm v3 installed
  • An AWS account with permissions to create EKS clusters, VPCs, and IAM roles

1. Create a VPC

Create a VPC with public and private subnets across two availability zones.
Create four subnets:

2. Create Internet Gateway and NAT Gateway

Air-Gapped installs skip this step. A sealed VPC has no internet or NAT gateways; the cluster reaches AWS services through VPC endpoints instead — at minimum ecr.api, ecr.dkr, and the S3 gateway endpoint (image pulls when your mirror is ECR), ec2 and sts, plus eks-auth if any add-on uses EKS Pod Identity (the EBS CSI setup below does). Add bedrock-runtime when using Bedrock over PrivateLink, and the ssm/ssmmessages/ec2messages trio if operators connect through Session Manager.

3. Route Tables

4. IAM Roles

5. Create EKS Cluster

Wait for the cluster to become active (~10 minutes):

6. Create Node Group

xpander container images are amd64 only. Do not use ARM/Graviton instances (t4g, m7g, c7g, etc.).
Minimum requirements:
  • Recommended minimum: 3 × m5.xlarge nodes (or 2 × t3.xlarge for evaluation)
  • xpander platform pod requests: ~5 vCPU / ~10 GiB memory at single-replica defaults
  • Add ~2 vCPU / 2.5 GiB per additional Agent Worker replica, plus capacity for active agent workspaces
  • Plan additional headroom for Kubernetes system pods, DaemonSets, upgrades, and burst capacity
  • See Sizing & Resource Requirements for per-service numbers and a calculator that sizes the cluster for your user count.
Wait for the node group:

7. Configure kubectl


EKS Add-Ons

Install the required EKS add-ons for networking, DNS, storage, and pod identity.

EBS CSI IAM Setup (Pod Identity)

The EBS CSI driver needs IAM permissions to provision volumes.

Create Default StorageClass

Encrypt every volume. The platform’s PVCs hold customer data — agent workspaces, the data tier, Supabase storage, knowledge-base content — so the StorageClass above enables EBS encryption at rest (encrypted: "true", using the account’s default aws/ebs KMS key). To use a customer-managed key instead, add kmsKeyId: "<key-arn>" to parameters and grant the EBS CSI driver’s role kms:CreateGrant/kms:Decrypt/kms:GenerateDataKey* on it. Compliance-sensitive deployments should treat an encrypted StorageClass as a hard requirement, not an option.

Next Steps

Your EKS cluster is ready. Continue with:
  1. PrivateLink — If your security policy requires traffic to stay within the AWS network
  2. Hybrid Edition — the installer wizard, plus SSL, ingress, DNS, and verification