Reference Video: https://youtu.be/9tl0A_rwgu4 [Shubham]
#steps:
Step 1: Application code files in Github
Step 2: Launch 2 EC2 (Ubuntu-T2Medium) servers 1st for [Docker], 2nd for [Minikube & Kubectl]
Step 3: Open Ports 22, 80, 443, 3000, 31000 ports in 1st EC2 and 22, 80 in 2nd
Step 4: Install docker on 1st EC2, (docker + minikube + kubectl) on 2nd EC2
Step 5: build docker image from Dockerfile on 1st EC2
Step 6: write all needed kubernetes related files [deployement, services….etc .yml files] on 2nd EC2
Step 7: run the below listed commands and check the Reditt App in browser {2nd EC2PublicIP:3000}
sudo apt-get update
sudo apt-get install docker.io -y
sudo usermod -aG docker $USER && newgrp docker git clone https://github.com/LondheShubham153/reddit-clone-k8s-ingress.git
docker build -t xxxxxxx/redit-app:1.0 .
docker login and give your username & password
docker push xxxxxxx/redit-app:1.0
FROM node:19-alpine3.15
WORKDIR /reddit-clone
COPY . /reddit-clone
RUN npm install
EXPOSE 3000
CMD ["npm","run","dev"]
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube
sudo snap install kubectl --classic minikube start --driver=docker
kubectl apply -f Deployment.yml
kubectl apply -f Service.yml
kubectl get deployment
kubectl get services
minikube addons enable ingress
minikube addons list
kubectl apply -f ingress.yml
kubectl get ingress ingress-reddit-app
kubectl expose deployment reddit-clone-deployment --type=NodePort
curl -L http://192.168.49.2:31000
kubectl port-forward svc/reddit-clone-service 3000:3000 --address 0.0.0.0 &
apiVersion: apps/v1
kind: Deployment
metadata:
name: reddit-clone-deployment
labels:
app: reddit-clone
spec:
replicas: 2
selector:
matchLabels:
app: reddit-clone
template:
metadata:
labels:
app: reddit-clone
spec:
containers:
- name: reddit-clone
image: trainwithshubham/reddit-clone
ports:
- containerPort: 3000
apiVersion: v1
kind: Service
metadata:
name: reddit-clone-service
labels:
app: reddit-clone
spec:
type: NodePort
ports:
- port: 3000
targetPort: 3000
nodePort: 31000
selector:
app: reddit-clone
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress-reddit-app
spec:
rules:
- host: "domain.com"
http:
paths:
- pathType: Prefix
path: "/test"
backend:
service:
name: reddit-clone-service
port:
number: 3000
- host: "*.domain.com"
http:
paths:
- pathType: Prefix
path: "/test"
backend:
service:
name: reddit-clone-service
port:
number: 3000