<p>I have a k8 cluster deployed in AWS using kube-aws. When I deploy a service, a new ELB is added for exposing the service to internet. Can I use ingress-controller to replace ELB or is there any other way to expose services other than ELB?</p>

<p>First, replace  <code>type: LoadBalancer</code> with <code>type: ClusterIP</code> in your service definition. Then you have to configure the <a href="https://kubernetes.io/docs/user-guide/ingress/" rel="nofollow noreferrer">ingress</a> and deploy a controller, like <a href="https://github.com/kubernetes/contrib/tree/master/ingress/controllers/nginx" rel="nofollow noreferrer">Nginx</a></p>

<p>If you are looking for a full example, I have one here: <a href="https://github.com/camilb/prometheus-kubernetes/tree/master/definitions/k8s/ingress" rel="nofollow noreferrer">nginx-ingress-controller</a>.</p>

<p>The ingress will expose you services using some of your workers public IPs, usually 2 of them. Just check your ingress <code>kubectl get ing -o wide</code> and create the DNS records.</p>
