Table of Contents
#Introduction
In this tutorial, How to Install Nginx Ingress Controller using Helm Chart. I want to expose pods using Ingress Controller. I will use the Nginx ingress controller to set up AWS ELB.
Production Environment, You would be using istio gateway, traefik.
Create Nginx Ingress Controller using Helm Chart
kubectl create namespace nginx-ingress-controller
Add new repo ingress-nginx/ingress-nginx
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo add stable https://charts.helm.sh/stable
helm repo update
Install ingress Nginx
helm install nginx-ingress-controller ingress-nginx/ingress-nginx
The output as below
$ helm install nginx-ingress-controller ingress-nginx/ingress-nginx
NAME: nginx-ingress-controller
LAST DEPLOYED: Sat Jun 26 16:11:27 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 nginx-ingress-controller-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
Check nginx-ingress-controller namespace have been created
kubectl get pod,svc,deploy
# The output as bellow
$ kubectl get pod,svc,deploy
NAME READY STATUS RESTARTS AGE
pod/guestbook-tnc42 1/1 Running 0 38m
pod/guestbook-vqgws 1/1 Running 0 38m
pod/guestbook-vqnxf 1/1 Running 0 38m
pod/nginx-ingress-controller-ingress-nginx-controller-7f8f65bf4g6c7 1/1 Running 0 4m23s
pod/redis-master-dp7h7 1/1 Running 0 41m
pod/redis-slave-54mt6 1/1 Running 0 39m
pod/redis-slave-8g8h4 1/1 Running 0 39m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/guestbook LoadBalancer 10.100.231.216 aff3d414c479f4faaa2ab82062c87fe5-264485147.us-west-2.elb.amazonaws.com 3000:32767/TCP 38m
service/kubernetes ClusterIP 10.100.0.1 <none> 443/TCP 88m
service/nginx-ingress-controller-ingress-nginx-controller LoadBalancer 10.100.57.204 a04b31985b6c64607a50d794ef692c57-291207293.us-west-2.elb.amazonaws.com 80:31382/TCP,443:32520/TCP 4m25s
service/nginx-ingress-controller-ingress-nginx-controller-admission ClusterIP 10.100.216.28 <none> 443/TCP 4m25s
service/redis-master ClusterIP 10.100.76.16 <none> 6379/TCP 40m
service/redis-slave ClusterIP 10.100.126.163 <none> 6379/TCP 39m
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/nginx-ingress-controller-ingress-nginx-controller 1/1 1 1 4m25s
TYPE of nginx-ingress-controller-controller service is LoadBalancer. This is the L4 Load balancer. How to nginx-ingress-controller-controller pod is running Nginx inside to do L7 load balancing inside the EKS cluster.
The result 404 as below
Create Ingress resource for L7 load balancing
For example, ingress_example.yaml file.
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
kubernetes.io/ingress.class: nginx
name: guestbook
namespace: default
spec:
rules:
- http:
paths:
- backend:
serviceName: guestbook
servicePort: 3000
path: /
Apply it
kubectl apply -f ingress_example.yaml
Get the public DNS of AWS ELB created from the Nginx ingress controller service
kubectl get svc nginx-ingress-controller-ingress-nginx-controller | awk '{ print $4 }' | tail -1
The output as below
a04b31985b6c64607a50d794ef692c57-291207293.us-west-2.elb.amazonaws.com
Access link on browser
Delete service guestbook
$ kubectl delete svc guestbook
service "guestbook" deleted
Conclusion
You have to install Nginx Ingress Controller using Helm Chart. I hope will this your helpful. Thank you for reading the DevopsRoles page!