The project involves deploying a Three-Tier Web Application using ReactJS, NodeJS, and MongoDB, with deployment on AWS EKS.
The Application-Code
directory contains the source code for the Three-Tier Web Application. Dive into this directory to explore the frontend and backend implementations.
The Kubernetes ManifestFiles
directory holds Kubernetes manifests for deploying your application on AWS EKS. Understand and customize these files to suit your project needs.
- Create a user
eks-admin
withAdministratorAccess
. - Generate AWS Security Credentials: Access Key and Secret Access Key.
- Launch an Ubuntu instance and do SSH into the instance from your local machine.
sudo apt-get update -y
sudo apt install docker.io -y
docker --version
docker ps
sudo chown $USER /var/run/docker.sock
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
sudo apt install unzip
unzip awscliv2.zip
sudo ./aws/install -i /usr/local/aws-cli -b /usr/local/bin --update
aws configure
git clone <repository-URL>
go inside frontend directory /cd Application-Code/frontend
and create a Dockerfile
using below code.
FROM node:14
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
CMD ["npm", "start"]
Build Docker image and run container
docker build -t three-tier-frontend .
docker run -d -p 3000:3000 three-tier-frontend:latest
now you can see our website using [publicip : 3000 ]
now go inside frontand directory /cd Application-Code/backend
and create a Dockerfile
using below code.
FROM node:14
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
CMD ["node", "index.js"]
build Docker image and run container
docker build -t three-tier-backend .
docker run -d -p 3500:3500 three-tier-backend:latest
docker logs
Now push both the images to Docker HUB one after one.
curl -o kubectl https://amazon-eks.s3.us-west-2.amazonaws.com/1.19.6/2021-01-05/bin/linux/amd64/kubectl
chmod +x ./kubectl
sudo mv ./kubectl /usr/local/bin
kubectl version --short --client
curl --silent --location "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz" | tar xz -C /tmp
sudo mv /tmp/eksctl /usr/local/bin
eksctl version
eksctl create cluster --name three-tier-cluster --region us-west-2 --node-type t2.medium --nodes-min 2 --nodes-max 2
aws eks update-kubeconfig --region us-west-2 --name three-tier-cluster
kubectl get nodes
kubectl create namespace workshop
got inside ManifestFiles/database
and run below command
kubectl apply -f .
kubectl delete -f .
got inside ManifestFiles/backend
and run below command
kubectl apply -f .
kubectl delete -f .
kubectl logs <backend-podname> -n workshop # database connection check
got inside ManifestFiles/frontend
and run below command
kubectl apply -f .
kubectl delete -f .
kubectl get pods -n workshop # check all the pods status
Download LB IAM policy
curl -O https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.5.4/docs/install/iam_policy.json
Create IAM policy
this policy help to connect EKS and Loadbalancer with each other
aws iam create-policy --policy-name AWSLoadBalancerControllerIAMPolicyForEKS --policy-document file://iam_policy.json
Create OIDC Provider
eksctl utils associate-iam-oidc-provider --region=us-west-2 --cluster=three-tier-cluster --approve
Create IAM Service Account
IAM Service account help to communicate between services (EKS and ALB)
eksctl create iamserviceaccount --cluster=three-tier-cluster --namespace=kube-system --name=aws-load-balancer-controller --role-name AmazonEKSLoadBalancerControllerRole --attach-policy-arn=arn:aws:iam::975050304823:policy/AWSLoadBalancerControllerIAMPolicyForEKS --approve --region=us-west-2
Install Helm
sudo snap install helm --classic
Install and Add helm-Charts for EKS
helm repo add eks https://aws.github.io/eks-charts
helm repo update eks
helm repo list
Install Load Balancer Controller inside kube-system
helm install aws-load-balancer-controller eks/aws-load-balancer-controller -n kube-system --set clusterName=three-tier-cluster --set serviceAccount.create=false --set serviceAccount.name=aws-load-balancer-controller
Varify LB controller status
kubectl get deployment -n kube-system aws-load-balancer-controller
Apply ingress
kubectl apply -f ingress.yaml
kubectl get ing -n workshop
Domain Registration
after running kubectl get ing -n workshop
command we will recieved load balancer DNS Name. then copy this load balancer name and create a CNAME Record in your Domain Provider.
- To delete the EKS cluster:
eksctl delete cluster --name three-tier-cluster --region us-west-2
- Fork the repository and create your feature branch.
- Deploy the application, adding your creative enhancements.
- Submit a Pull Request with a detailed description of your changes.
Thanks to Shubham Londhe helps to Create this Project. For any queries, please open an issue in the repository.
...