There is this article article with description of Ingress:
Although pods and services have their own IP addresses on Kubernetes,
these IP addresses are only reachable within the Kubernetes cluster and not accessible to the outside clients. The Ingress object in
Kubernetes, although still in beta, is designed to signal the
Kubernetes platform that a certain service needs to be accessible to
the outside world and it contains the configuration needed such as an
externally-reachable URL, SSL, and more.
Is this actually a thing that Ingress was necessary to be introduced to make a service accessible to the outside world?
There is another article with description of NodePort:
NodePort – Exposes the Service on the same port of each selected Node
in the cluster using NAT. Makes a Service accessible from outside
the cluster using < NodeIP >:< NodePort >. Superset of ClusterIP.
It looks like NodePort also makes a service accessible from outside of the cluster. There is also a LoadBalancer kind of service which as an extension should also serve this purpose. I assume there might be some functionalities of Ingress that NodePort / LoadBalancer services do not cover but to me it looks like some architectural choices during the development of kubernetes lead to overlap in the functionalities offered by this platform which leads to confusion. Am I wrong?