<p>I understand the principle of Ingress, how it routes to services by feeding an Ingress resource to the Ingress controller.  </p>

<p>I use Docker for mac with the following Ingress controller: <a href="https://github.com/kubernetes/ingress-nginx/blob/master/docs/deploy/index.md#docker-for-mac" rel="nofollow noreferrer">https://github.com/kubernetes/ingress-nginx/blob/master/docs/deploy/index.md#docker-for-mac</a></p>

<p>There is just one thing I don't quite understand, and that is what type of service you are supposed to use.  </p>

<p>Is it ok to use replica sets as you would do with regular load balancer services, and should you provide a resource of 'Kind' 'service' while omitting the 'spec/type' attribute in the service resource altogether?  </p>

<p>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 <a href="https://kubernetes.io/docs/concepts/services-networking/ingress/" rel="nofollow noreferrer">https://kubernetes.io/docs/concepts/services-networking/ingress/</a></p>

<p>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 - <a href="https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/provider/cloud-generic.yaml" rel="nofollow noreferrer">https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/provider/cloud-generic.yaml</a> This is typically used for cloud providers but docker for Mac supports it - <a href="https://stackoverflow.com/questions/49480737/docker-for-macedge-kubernetes-loadbalancer">Docker for Mac(Edge) - Kubernetes - LoadBalancer</a></p>
