nginx ingress

  • Community version – Found in the kubernetes/ingress-nginx repo on GitHub, the community Ingress controller is based on NGINX Open Source with docs on It is maintained by the Kubernetes community with a commitment from F5 NGINX to help manage the project
  • NGINX version – Found in the nginxinc/kubernetes-ingress repo on GitHub, NGINX Ingress Controller is developed and maintained by F5 NGINX with docs on It is available in two editions:
    • NGINX Open Source‑based (free and open source option)
    • NGINX Plus-based (commercial option) (ingress-nginx)


git clone
helm repo add nginx-stable
helm repo update

Installing via Helm Repository

helm install my-release nginx-stable/nginx-ingress --skip-crds
helm upgrade --install ingress-nginx ingress-nginx \
  --repo \
  --namespace ingress-nginx --create-namespace

Upgrade via Helm Repository:

helm upgrade my-release nginx-stable/nginx-ingress (nginx-ingress)


helm upgrade --install ingress-nginx ingress-nginx \
  --repo \
  --namespace ingress-nginx --create-namespace


kubectl get pods --namespace=ingress-nginx

Let's create a simple web server and the associated service:

kubectl create deployment demo --image=httpd --port=80
kubectl expose deployment demo

Then create an ingress resource. The following example uses an host that maps to localhost:

kubectl create ingress demo-localhost --class=nginx \*=demo:80

Now, forward a local port to the ingress controller:

kubectl port-forward --namespace=ingress-nginx service/ingress-nginx-controller 8080:80

For baremetal

kubectl apply -f

For more information about bare metal deployments (and how to use port 80 instead of a random port in the 30000-32767 range), see bare-metal considerations.


NAMESPACE       NAME                                         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                      AGE
default         service/demo                                 ClusterIP   <none>        80/TCP                       64m
default         service/kubernetes                           ClusterIP       <none>        443/TCP                      77m
ingress-nginx   service/ingress-nginx-controller             NodePort   <none>        80:30556/TCP,443:30637/TCP   69m
ingress-nginx   service/ingress-nginx-controller-admission   ClusterIP   <none>        443/TCP                      69m
kube-system     service/kube-dns                             ClusterIP      <none>        53/UDP,53/TCP,9153/TCP       77m


<html><body><h1>It works!</h1></body></html>

Install with Manifests