A comprehensive, production-ready EKS infrastructure stack built with Terraform, featuring advanced networking, auto-scaling, security, and observability capabilities.
- π― Overview
- ποΈ Architecture
- β¨ Features
- π Quick Start
- π Project Structure
- π§ Configuration
- π Monitoring & Observability
- π Security
- π Auto-scaling
- π Networking
- π Usage Examples
- π€ Contributing
- π License
This EKS Stack provides a complete, production-ready Kubernetes infrastructure on AWS with enterprise-grade features including:
- High Availability: Multi-AZ deployment with fault tolerance
- Auto-scaling: Karpenter for intelligent node provisioning
- Security: WAF, IAM roles, and network isolation
- Observability: Prometheus, Grafana, and comprehensive monitoring
- Networking: VPC with public/private subnets and observability subnets
- Load Balancing: Application Load Balancer with external DNS
| Component | Description | Technology |
|---|---|---|
| Networking | VPC with multi-AZ subnets | AWS VPC, Route Tables, NAT Gateway |
| Kubernetes | Managed EKS cluster | AWS EKS 1.28+ |
| Auto-scaling | Intelligent node provisioning | Karpenter |
| Load Balancing | Application load balancer | AWS ALB, External DNS |
| Security | Web Application Firewall | AWS WAF |
| Monitoring | Metrics and dashboards | Prometheus, Grafana |
| Storage | Persistent volumes | AWS EBS CSI Driver |
- β Multi-AZ EKS Cluster with high availability
- β Managed Node Groups with auto-scaling
- β Karpenter Integration for cost-optimized scaling
- β VPC Networking with public/private/observability subnets
- β Application Load Balancer with external DNS
- β Certificate Manager for SSL/TLS termination
- β IAM Roles with least privilege access
- β Security Groups with restrictive rules
- β WAF Protection for web applications
- β Network Isolation between tiers
- β Encryption at rest and in transit
- β Prometheus for metrics collection
- β Grafana for visualization and dashboards
- β Node Exporter for system metrics
- β Custom Scraping configuration
- β CloudWatch Integration
- β Terraform infrastructure as code
- β Remote State management with S3
- β State Locking with DynamoDB
- β Modular Design for reusability
- β Sample Deployments included
git clone https://github.com/Alves0611/eks-stack.git
cd eks-stackaws configure
# or
export AWS_ACCESS_KEY_ID="your-access-key"
export AWS_SECRET_ACCESS_KEY="your-secret-key"
export AWS_DEFAULT_REGION="us-east-1"# Deploy remote state backend
cd 00-remote-state
terraform init
terraform plan
terraform apply
# Deploy networking
cd ../01-networking
terraform init
terraform plan
terraform apply
# Deploy EKS cluster
cd ../02-eks-cluster
terraform init
terraform plan
terraform apply
# Deploy Karpenter
cd ../03-karpenter
terraform init
terraform plan
terraform apply
# Deploy monitoring
cd ../05-monitoring
terraform init
terraform plan
terraform applyaws eks update-kubeconfig --region us-east-1 --name your-cluster-nameeks-stack/
βββ 00-remote-state/ # Terraform remote state backend
β βββ s3.tf # S3 bucket for state storage
β βββ dynamodb.tf # DynamoDB for state locking
β βββ variables.tf # Backend configuration
βββ 01-networking/ # VPC and networking infrastructure
β βββ vpc.tf # VPC configuration
β βββ vpc.public-subnets.tf # Public subnets
β βββ vpc.private-subnets.tf# Private subnets
β βββ vpc.observability-subnets.tf # Observability subnets
β βββ vpc.nat-gateways.tf # NAT gateways
βββ 02-eks-cluster/ # EKS cluster and add-ons
β βββ eks.cluster.tf # EKS cluster configuration
β βββ eks.cluster.node-group.tf # Managed node groups
β βββ eks.cluster.addons.*.tf # EKS add-ons
β βββ samples/ # Sample deployments
βββ 03-karpenter/ # Karpenter auto-scaling
β βββ karpenter.iam.tf # IAM roles and policies
β βββ karpenter.release.tf # Helm chart deployment
β βββ resources/ # Karpenter configurations
βββ 04-security/ # Security components
β βββ waf.alb.acl.tf # WAF configuration
βββ 05-monitoring/ # Monitoring and observability
β βββ prometheus.workspace.tf # Prometheus workspace
β βββ grafana.workspace.tf # Grafana workspace
β βββ prometheus/ # Scraping configurations
βββ images/ # Architecture diagrams
βββ eks-stack.drawio.svg # System architecture
export AWS_REGION="us-east-1"
export CLUSTER_NAME="my-eks-cluster"
export VPC_CIDR="10.0.0.0/24"variables.tf: Main configuration variableslocals.tf: Local values and computed variablesoutputs.tf: Resource outputs for other modules
The stack includes a fully configured Prometheus workspace with:
- Metrics Collection: Node, pod, and application metrics
- Scraping Rules: Pre-configured for common workloads
- Retention: Configurable data retention policies
- Alerting: Integration with CloudWatch alarms
Access Grafana through the AWS console or direct URL:
- Kubernetes Overview: Cluster and node metrics
- Application Metrics: Custom application dashboards
- Infrastructure: AWS resource utilization
- Security: Security events and compliance
- VPC Isolation: Private subnets for workloads
- Security Groups: Restrictive ingress/egress rules
- NAT Gateway: Outbound internet access for private subnets
- WAF Protection: Web application firewall rules
- IAM Roles: Service-specific roles with least privilege
- RBAC: Kubernetes role-based access control
- Pod Security: Security contexts and policies
- Network Policies: Kubernetes network segmentation
Karpenter provides intelligent node provisioning:
# Example node pool configuration
apiVersion: karpenter.sh/v1beta1
kind: NodePool
metadata:
name: default
spec:
template:
spec:
nodeClassRef:
apiVersion: karpenter.k8s.aws/v1beta1
kind: EC2NodeClass
name: default
requirements:
- key: karpenter.sh/capacity-type
operator: In
values: ["spot", "on-demand"]- Public Subnets: Internet-facing resources (ALB, NAT)
- Private Subnets: Application workloads
- Observability Subnets: Monitoring and logging services
- External DNS: Automatic DNS record management
- Application Load Balancer: Layer 7 load balancing
- Certificate Manager: Automatic SSL/TLS certificates