Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What is the difference between an Ingress and a reverse proxy?

Currently, I am studying Kubernetes and I came across the term Ingress object. I was wondering if there is a list of differences between the two as to me they seem like synonyms. To me it seems that an NGINX is a more functional ingress as it allows for instance video and image compression, pre-fetching and caching.

On the other hand, Ingresses seem to overlap with NGINX' reverse proxies by providing load-balancing, traffic routing, TLS/SSL terminating. The only thing I see that an ingress may have compared to a NGINX/Envoy RP is that it is a "kubernetes API object".

Does this mean that it consists of 2 parts - an interfacing one between the API and some actual reverse proxy? Meaning, is an "ingress" just a kubernetes term for a wrapper of an NGINX RP enforcing Kubernetes' API on it OR it is a totally separate type of server?

Could you please list some list of the differences between the two?

like image 390
KDX2 Avatar asked Jan 13 '20 01:01

KDX2


Video Answer


2 Answers

You are right in your understanding.Ingress has two parts a controller which implements kubernetes ingress API interface for automated and fast way to configure a reverse proxy such as nginx or envoy.

The other part is the reverse proxy itself such as nginx, envoy.

So when you deploy a ingress setup in kubernetes it will deploy a ingress controller and a reverse proxy in your kubernetes cluster.

like image 85
Arghya Sadhu Avatar answered Oct 08 '22 10:10

Arghya Sadhu


There are multiple vendors implementing the IngressController. Even nginx has one.

You are correct about Ingress resource in Kubernetes just acting like a reverse proxy that we used to manually deploy. The IngressController service is the actual reverse proxy which receives the traffic. The kubernetes resource Ingress that you create is like the nginx.conf config file that you would have created. You can create and run your own Ingress by running an nginx deployment, wrap it with a LoadBalancer service and expressing your traffic rules by manually creating nginx.conf file. Using Ingress resource instead is just the native and simpler way to do this in Kubernetes.

like image 12
Shashank V Avatar answered Oct 08 '22 12:10

Shashank V