What is Ingress Controller in Kubernetes?

13 Jun 2020 » kubernetes

In Deploy phpMyAdmin application on kubernetes blog I used NodePort service type to expose application to external world but disadvantage with that approach is port needs to be exposed on each node and there is a dependency on external load balancer for load balancing requests, custom hostname and SSL/TLS encryption support etc. With the help of Ingress controllers I can eliminate dependency on external load balancer. In this blog I am using Nginx Ingress controller to expose PHPMyAdmin application to external world. Learn more about ingress controller here.

Architecture

Architecture

Prerequisites

Step 1: Enable nginx ingress controller

minikube addons enable ingress
kubectl get pods --watch -n kube-system

Exit once controller pod goes into running state

This step is valid only for Minikube. Check steps to enable Nginx Ingress controller on Kubernetes here

Step 2: Delete PHPMyAdmin NodePort service

kubectl delete svc phpmyadmin

Step 3: Deploy PHPMyAdmin ClusterIP service

kubectl create -f phpmyadmin-service.yaml

Step 4: Deploy PHPMyAdmin Ingress rule

kubectl create -f phpmyadmin-ingress.yaml
kubectl get ingress --watch

Exit once address gets populated

Step 5: Update hosts file custome hostname

Add below entry in /etc/hosts

<INGRESS_ADDRESS> myapp.xyz

Get INGRESS_ADDRESS from kubectl get ingress

Step 6: Browse PHPMyAdmin application using custom hostname