I am trying to understand Kubernetes High Availability for calls that originate outside the cluster. (For my new On-Premises Kubernetes cluster)
For Example: a desktop application needs to call a service hosted in Kubernetes.
I see two primary ways this can happen, NodePort and Ingress.
NodePort
What will happen during a node failure with NodePort seem fairly obvious. Any calls that are using the newly offline node as the node they are addressing will fail. If you are using a NodePort you need to make sure you have some way of detecting that the node you are using is down, and moving traffic to another node. (And recovering any lost traffic that happened before you detected the downtime.)
This seems like the job of a load balancer. It can do health monitoring and send the traffic to nodes that are up.
Ingress
I am less sure about how an Ingress Controller and an Ingress resource work. It seems like there is a bit of magic here. Does the Ingress controller use NodePort under the hood? I see a lot of assumptions around a load balancer balancer that are not explained in the posts I read. Is it expected that there will be a load balancer in place outside the cluster?
In which case what is the difference between NodePort with a load balancer and Ingress with a load balancer? The load balancer presents a single URL to the calling systems and then it does its best to make the call get to a Kubernetes Node that is up (either via NodePort or Ingress Controller). (Which makes me ask why both are present if both really require a load balancer to hide the node that gets called.)
But I am again confused because you use a single URL to send to an Ingress resource, so how is the node decided by the load balancer?
As I look at this, it seems that Kubernetes only has High Availability inside the cluster. From outside the cluster, it is the job of the caller to ensure that the node they will be addressing, either via your own ping system, or a load balancer.
Does Kubernetes have any features to help with node down times? From the point of view of a desktop application addressing the cluster, not from the point of view of the pods keeping the service up.
