In this article we are going to cover How to Install Install Helm 3 on Kubernetes Cluster, install nginx ingress controller kubernetes kops using helm 3, Creating Deployment and service for nginx app and NodeJs app.
Creating Nginx Ingress Resources and Exposing the apps and Pointing Nginx Ingress Loadbalancer in Domain Name provider.
Table of Contents
Prerequisites:
- Kubernetes KOPS Cluster with v1.19.0+
#1: Install Helm 3 on Kubernetes Cluster
Install helm3 on Kubernetes Cluster on Kubernetes Cluster using below command
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3
chmod 700 get_helm.sh
./get_helm.sh
To check helm3 version
helm version
Output:
version.BuildInfo{Version:"v3.5.3", GitCommit:"041ce5a2c17a58be0fcd5f5e16fb3e7e95fea622", GitTreeState:"dirty", GoVersion:"go1.15.8"}
#2: Install Nginx Ingress Controller Kubernetes KOPS using Helm
Add the nginx ingress helm repo in Kubernetes kops cluster, follow this Nginx ingress official page to install latest nginx ingress helm chart
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
Update the helm repo
helm repo update
Install Nginx Ingress Controller Kubernetes KOPS using Helm 3
helm install ingress-nginx ingress-nginx/ingress-nginx
Output:
Output:
NAME: ingress-nginx
LAST DEPLOYED: Sun Apr 11 07:10:01 2021
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
The ingress-nginx controller has been installed.
It may take a few minutes for the LoadBalancer IP to be available.
You can watch the status by running 'kubectl --namespace default get services -o wide -w ingress-nginx-controller'
An example Ingress that makes use of the controller:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
kubernetes.io/ingress.class: nginx
name: example
namespace: foo
spec:
rules:
- host: www.example.com
http:
paths:
- backend:
serviceName: exampleService
servicePort: 80
path: /
# This section is only required if TLS is to be enabled for the Ingress
tls:
- hosts:
- www.example.com
secretName: example-tls
If TLS is enabled for the Ingress, a Secret containing the certificate and key must also be provided:
apiVersion: v1
kind: Secret
metadata:
name: example-tls
namespace: foo
data:
tls.crt: <base64 encoded cert>
tls.key: <base64 encoded key>
type: kubernetes.io/tls
To check nginx ingress controller
kubectl get services ingress-nginx-controller
Output:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
ingress-nginx-controller LoadBalancer 100.65.85.238 a8e1355c94fdd438a9d207181b50ea1d-213346636.ap-south-1.elb.amazonaws.com 80:30710/TCP,443:31894/TCP 5m15s
We have covered install nginx ingress controller kubernetes kops using helm 3.
#3. Creating Deployment and service for nginx app and NodeJs app
Lets deploy the sample nginx and nodejs app on nginx ingress controller
#3.1. Creating Deployment and service for Nginx app
Create the nginx app deployment
sudo nano nginx-deploy.yml
paste the below deployment
kind: Deployment
apiVersion: apps/v1
metadata:
name: nginx-web
namespace: default
labels:
app: nginx-web
spec:
replicas: 1
selector:
matchLabels:
app: nginx-web
template:
metadata:
labels:
app: nginx-web
spec:
containers:
- name: nginx
image: "nginx"
Create the nginx app service
sudo nano nginx-svc.yml
paste the below code
apiVersion: v1
kind: Service
metadata:
name: nginx-web
namespace: default
spec:
selector:
app: nginx-web
ports:
- name: http
targetPort: 80
port: 80
deploy the nginx app deployment and service on kubernetes
kubectl create -f nginx-deploy.yml
kubectl create -f nginx-svc.yml
#3.2. Creating Deployment and service for nodejs app
Create the nodejs app deployment
sudo nano nodejs-deploy.yml
paste the below code, here we are using sample nodejs AWS ECR image
kind: Deployment
apiVersion: apps/v1
metadata:
name: nodejs-app
namespace: default
labels:
app: nodejs-app
spec:
replicas: 1
selector:
matchLabels:
app: nodejs-app
template:
metadata:
labels:
app: nodejs-app
spec:
containers:
- name: nodejs-app
image: "908198849120.dkr.ecr.ap-south-1.amazonaws.com/nodejsapp:latest"
ports:
- containerPort: 3000
Create the nodejs app service
sudo nano nodejs-svc.yml
paste the below code
apiVersion: v1
kind: Service
metadata:
name: nodejs-app
namespace: default
spec:
selector:
app: nodejs-app
ports:
- name: http
targetPort: 3000
port: 80
deploy the nodejs app deployment and service on kubernetes
kubectl create -f nodejs-deploy.yml
kubectl create -f nodejs-svc.yml
#4. Creating Nginx Ingress Resources and Exposing the apps
Lets create the nginx ingress resource on Kubernetes to expose the apps
sudo nano nginx-ingress.yml
Paste the below nginx and nodejs app details, here service name should match with service.yml’s
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: nginx-ingress
namespace: default
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/ssl-redirect: "false"
spec:
rules:
- host: nginxapp.fosstechnix.info
http:
paths:
- backend:
service:
name: nginx-web
port:
number: 80
path: /
pathType: Prefix
- host: nodejsapp.fosstechnix.info
http:
paths:
- backend:
service:
name: nodejs-app
port:
number: 80
path: /
pathType: Prefix
deploy the nginx ingress resource on Kubernetes KOPS cluster
kubectl create -f nginx-ingress.yml
To check Kubernetes pods using kubectl
kubectl get pods
Output:
NAME READY STATUS RESTARTS AGE
ingress-nginx-controller-6f5454cbfb-bdxzr 1/1 Running 0 52m
nginx-web-5bf45d88df-v94h9 1/1 Running 0 37m
nodejs-app-76c4545979-mjkhp 1/1 Running 0 3m21s
To check kubernetes deployments using kubectl
kubectl get deploy
Output:
NAME READY UP-TO-DATE AVAILABLE AGE
ingress-nginx-controller 1/1 1 1 52m
nginx-web 1/1 1 1 37m
nodejs-app 1/1 1 1 3m55s
To check Kubernetes service using kubectl
kubectl get svc
Output:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
ingress-nginx-controller LoadBalancer 100.65.85.238 a8e1355c94fdd438a9d207181b50ea1d-213346636.ap-south-1.elb.amazonaws.com 80:30710/TCP,443:31894/TCP 52m
ingress-nginx-controller-admission ClusterIP 100.67.13.218 <none> 443/TCP 52m
kubernetes ClusterIP 100.64.0.1 <none> 443/TCP 59m
nginx-web ClusterIP 100.70.164.135 <none> 80/TCP 37m
nodejs-app ClusterIP 100.69.84.47 <none> 80/TCP
To check kubernetes ingress using kubectl
kubectl get ingress
Output:
NAME CLASS HOSTS ADDRESS PORTS AGE
nginx-ingress <none> nginxapp.fosstechnix.info,nodejsapp.fosstechnix.info a8e1355c94fdd438a9d207181b50ea1d-213346636.ap-south-1.elb.amazonaws.com 80 21m
#5. Pointing Nginx Ingress Loadbalancer in Domain Name provider
To access apps using domain name, here we have pointed loadbalancer url in Domain name provider as CNAME.
Now access nginx app using domain name
nodejsapp.fosstechnix.info
Now access nodejs app using domain name
Conclusion:
we have covered How to Install Install Helm 3 on Kubernetes Cluster, install nginx ingress controller kubernetes kops using helm 3, Creating Deployment and service for nginx app and NodeJs app.
Creating Nginx Ingress Resources and Exposing the apps and Pointing Nginx Ingress Loadbalancer in Domain Name provider.
Related Articles:
Setup Nginx Ingress Controller on Kubernetes using Helm 3
Install Traefik Ingress Controller on Kubernetes using Helm 3