Skip to content

AWS EKS Configuration

Overview

This guide covers Amazon EKS-specific configurations and best practices for deploying Traceable Platform.

Networking/VPC

1.1 Private Subnets with VPC Endpoints

If EKS nodes are deployed in fully private subnets (without NAT gateway rules), then ensure that VPC endpoints are set up for pods to access AWS services like EFS, ECR, EC2, etc.

Reference: AWS EKS Private Clusters

Required VPC Endpoints for Private Clusters

When running in fully private subnets, configure VPC endpoints for:

  • Amazon EFS - For ReadWriteMany (RWX) persistent volumes
  • Amazon ECR - For pulling container images
  • Amazon EC2 - For node management
  • Amazon S3 - For ECR image layers
  • Amazon STS - For IAM authentication

1.2 Subnet IP Address Availability

Ensure that each subnet associated with the EKS cluster has at least 256 Available IPv4 addresses.

Why 256 IPs?

  • Each pod gets its own IP address in EKS
  • Nodes need IPs for system pods, application pods, and overhead
  • Insufficient IPs can prevent pod scheduling and cluster scaling

Verification

Check available IPs in your subnets:

aws ec2 describe-subnets --subnet-ids <subnet-id> \
  --query 'Subnets[*].[SubnetId,AvailableIpAddressCount]' \
  --output table

Nodes per Zone

The Challenge

EBS volumes in EKS are tied to a specific availability zone. If an EBS volume is created in a particular zone, it can only be accessed by nodes within the same zone. This setup presents challenges if a node in that availability zone goes down.

The Solution

The number of nodes in each availability zone should always be greater than 1.

Why Multiple Nodes per Zone?

If one of the nodes in a zone fails, then pods that rely on EBS volumes in that zone will be scheduled on the second node in the zone. This ensures:

  • High availability for stateful workloads
  • Minimal disruption during node failures
  • Proper pod rescheduling without cross-zone volume attachment issues

Best Practices

  1. Minimum 2 nodes per AZ: Always maintain at least 2 nodes in each availability zone
  2. Use Node Groups: Configure node groups to distribute nodes evenly across AZs
  3. Enable Auto-Scaling: Configure cluster autoscaler to maintain minimum node count per AZ
  4. Monitor Node Health: Set up alerts for node failures to ensure quick response

Example Node Group Configuration

apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig
metadata:
  name: traceable-cluster
  region: us-west-2

nodeGroups:
    - name: traceable-nodes
    instanceType: m5.4xlarge
    desiredCapacity: 6
    minSize: 6
    maxSize: 12
    availabilityZones:
      - us-west-2a
      - us-west-2b
      - us-west-2c
    # This ensures 2 nodes per AZ (6 nodes / 3 AZs)

Storage Classes

EBS (ReadWriteOnce)

For RWO volumes, use EBS-backed storage class:

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: ebs-sc
provisioner: ebs.csi.aws.com
volumeBindingMode: WaitForFirstConsumer
parameters:
  type: gp3
  iops: "3000"
  throughput: "125"

EFS (ReadWriteMany)

For RWX volumes, use EFS-backed storage class:

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: efs-sc
provisioner: efs.csi.aws.com
parameters:
  provisioningMode: efs-ap
  fileSystemId: fs-XXXXXXX # The EFS File System ID from Step #3
  directoryPerms: "775"
  basePath: "/traceable"
  gid: "65532"
  uid: "65532"

IAM Roles and Policies

Ensure the following IAM roles and policies are configured:

  • EBS CSI Driver: IAM role for EBS volume management
  • EFS CSI Driver: IAM role for EFS access
  • Cluster Autoscaler: IAM role for auto-scaling
  • Load Balancer Controller: IAM role for ALB/NLB management

Exposing the Platform

On EKS, the recommended way to reach the platform is a Service of type LoadBalancer on the traceable-router, which provisions an AWS NLB. The detailed NLB scenarios (TLS passthrough, ACM termination, and re-encryption) are documented in Connecting to the Traceable Platform.

Support

For EKS-specific deployment assistance, contact support@harness.io.