I'm missing something about how services and ingress work, help please?

Cluster information:

Kubernetes version:
Cloud being used: bare-metal
Installation method: bare metal on VMWare vsphere vms
Host OS: Ubuntu 20.04
CNI and version: Calico, the latest as of 10/31/2021
CRI and version: Docker 20.10.10

So, I’ve had 0 luck getting Kubernetes to serve a basic test website app. I’m 90% certain I’m missing a step, but I’m just not finding that step in the docs or via web searching.

I’ve set up K8s within a VMWare vsphere. I have 6 vm’s, 3 control planes, 3 worker nodes.

kube-vip is running and the kube api is available on the virtual ip.

I have calico installed and all its pods are “ready”.

I can successfully deploy my app with its ingress, service, and deployment pieces. As well as a wildcard cert secret.

The issue is that when I go to the apps url, I get a connection refused. The apps domain name is set up in /etc/hosts on my local machine to point at the kube-vip virtual ip.

nmap said that port 443 on the virtual ip was closed. So my firewall is not in the way.

I thought the missing piece, at this point, was an ingress controller. But installing nginx-ingress did not help. (I also redeployed my app.) nmap still said that port 443 on the virtual ip was closed.

I tried removing ngnix-ingress and installing MetalLB. MetalLB did provision an external ip for my app after I told the service to have a LoadBalancer type.

Again, nmap said that port 443 on the virtual ip was closed.

I thought that K8s would detect the traffic from my browser on the VIP, see the hostname, then send the traffic on to the proper service. But with nothing, apparently, listening on ports 80 or 443, there’s no way for that to work.

I thought that nginx-ingress or MetalLB would take on those ports, but they didn’t.

So, I’ve got to be missing a step in how I’ve set my cluster up. Any ideas what I’m missing?

Thanks in advance!