Skip to main content
Skip this guide if your EKS cluster has enough CPU and memory and can create LoadBalancer services. Go to PrivateLink or Hybrid deployment.
On EKS Auto Mode, three steps change: see EKS Auto Mode. Air-Gapped installs skip step 2.

Prerequisites

AWS CLI v2 with credentials, kubectl, Helm v3, and permission to create EKS clusters, VPCs and IAM roles.

1. Create a VPC

Four subnets across two availability zones:

2. Create Internet Gateway and NAT Gateway

Air-Gapped installs skip this step and reach AWS through VPC endpoints:Keyless Bedrock on any private-subnet cluster (Hybrid included) also needs sts, eks-auth (Pod Identity) and bedrock-runtime endpoints.

3. Route tables

4. IAM roles

5. Create the EKS cluster

Wait about 10 minutes for the cluster:

6. Create a node group

xpander container images are amd64 only. Do not use ARM/Graviton instances (t4g, m7g, c7g, etc.).
Minimum requirements: Per-service numbers and a calculator: Sizing & Resource Requirements.
Wait for the node group:

7. Configure kubectl


EKS Add-Ons

EBS CSI IAM Setup (Pod Identity)

Create Default StorageClass

Encrypt every volume. xpander’s PVCs hold customer data. The StorageClass above sets encrypted: "true" with the default aws/ebs KMS key. For a customer-managed key, add kmsKeyId: "<key-arn>" to parameters and grant the EBS CSI role kms:CreateGrant, kms:Decrypt and kms:GenerateDataKey*. Treat encryption as required for compliance-sensitive deployments.

EKS Auto Mode

AWS runs storage, load balancing and nodes for you. Three things change:
  1. Storage provisioner. Skip the aws-ebs-csi-driver add-on and its role. A StorageClass on ebs.csi.aws.com never binds on Auto Mode. Use ebs.csi.eks.amazonaws.com in the default StorageClass and the chart’s fleet class:
  2. IngressClass. Auto Mode ships no IngressClass and ignores the alb.ingress.kubernetes.io/group.name annotation, so it creates one ALB per Ingress. Create an IngressClassParams with the scheme and group, and an IngressClass that references it, and set the chart’s className to it. Repeat with scheme: internal for private hosts such as deployment-manager or an internal IdP.
  3. IAM for pods. Bind Bedrock and S3 permissions to the default and agent-controller service accounts with aws eks create-pod-identity-association, as in the EBS CSI example. Keep the eks-pod-identity-agent add-on.

Before you install on Auto Mode

  • Cluster access for the installer’s identity. With authenticationMode=API, IAM roles get nothing by default. Give the role that runs kubectl and Helm an access entry with AmazonEKSClusterAdminPolicy:
  • Node consolidation during the install. The built-in general-purpose NodePool consolidates after thirty seconds and reverts patches, so an install can lose nodes mid-schedule. Add a higher-weight NodePool:
  • Fresh nodes refuse kubectl exec for a moment. Until the kubelet certificate is signed, kubectl exec and kubectl run -i fail with tls: internal error. Retry after a few seconds, also in pipelines.

Next steps

Keep traffic inside AWS with PrivateLink

When traffic must stay in AWS.

Install xpander Hybrid

The installer wizard.