This project provisions a complete AWS infrastructure stack β including an S3 bucket, VPC, and EKS cluster β using Crossplane from within a local Kubernetes cluster running on Minikube.
- Local Kubernetes setup via Minikube
- Crossplane installed using Helm
- AWS S3 bucket with versioning enabled
- VPC with:
- Public and private subnets in multiple AZs
- NAT Gateway + Internet Gateway
- Elastic IPs and custom route tables
- EKS Cluster provisioned via Crossplaneβs AWS provider
- IAM roles and OIDC setup for secure Kubernetes-to-AWS integration
- Kubernetes (Minikube)
- Crossplane
- Helm
- AWS (VPC, EKS, IAM, S3)
- YAML (K8s manifests)
.
βββ aws-credentials.txt
βββ crossplane
β βββ provider-aws-config.yaml
β βββ provider-aws-ec2.yaml
β βββ provider-aws-eks.yaml
β βββ provider-aws-iam.yaml
β βββ provider-aws-s3.yaml
βββ eks
β βββ eks-iam-role.yaml
β βββ eks.yaml
β βββ nodes-iam.yaml
β βββ nodes.yaml
βββ readme.MD
βββ s3
β βββ bucket-versioning.yaml
β βββ my-bucket.yaml
βββ vpc
βββ igw.yaml
βββ nat.yaml
βββ routes.yaml
βββ subnets.yaml
βββ vpc.yaml
- Set up Minikube and Helm
- Clone this repository
- Configure AWS credentials as a Kubernetes Secret
- Apply the manifests in order using
kubectl apply -f
Note: This setup is designed for learning/demo purposes and uses hardcoded values. For production, consider using Crossplane Compositions and Kustomize.
This project helped me:
- Understand Kubernetes-native Infrastructure as Code
- Work with Crossplaneβs reconciliation model
- Explore AWS resource provisioning without leaving K8s
Feel free to open issues or connect if you're working on something similar!