I understand the principle of Ingress, how it routes to services by feeding an Ingress resource to the Ingress controller.
I use Docker for mac with the following Ingr
For your apps use a Service of type ClusterIP as you would for a cluster-internal Service. This is because they are now internal and it is only the ingress controller which is external. See examples in https://kubernetes.io/docs/concepts/services-networking/ingress/
For the Ingress controller itself you typically use LoadBalancer but it is your choice how you expose themselves ingress controller externally. You can use NodePort if that suits your cluster (e.g. it is on-prem). In that docker for Mac example the ingress controller is LoadBalancer type - https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/provider/cloud-generic.yaml This is typically used for cloud providers but docker for Mac supports it - Docker for Mac(Edge) - Kubernetes - LoadBalancer