<p>I am setting up Kubernetes cluster on Azure (using AKS) to host Elasticsearch, Kibana, custom api, UI, nginx, etc.</p>

<p>As I don't want separate public IP per service, I need a way to setup a common load balancer/Ingress and then just add the port numbers to there and setup routing.</p>

<p>I tried using the approach mentioned in this stackoverflow question - <a href="https://stackoverflow.com/questions/45147664/how-to-expose-multiple-port-using-a-load-balancer-services-in-kubernetes">How to expose multiple port using a load balancer services in kubernetes</a> but didn't work out. </p>

<p>As there are technology clients connecting to my cluster, I need to have service per technology. </p>

<p>Basically I need to expose 9200, 5601, 80 - all on same IP but on accessing the IP with port, user must be re-directed to appropriate technology service.</p>

<p>Below is sample configuration for what am looking for.</p>

<pre><code>apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: myingress
spec:
  rules:
  - host: myurl.domain.com
    http:
      paths:
      - path: /
        backend:
          serviceName: elasticsearch
          servicePort: 9200
      - path: /
        backend:
          serviceName: kibana
          servicePort: 5602
</code></pre>

<p>Any thoughts?</p>

<p>With your issue, the ingress is what you want. You can create all your services as you want. And expose the ports for your service. Then create the ingress with a public IP and create the ingress route that routes the access from the ingress to your backend services. </p>

<p>Take a look at the example in <a href="https://learn.microsoft.com/en-us/azure/aks/ingress-basic" rel="nofollow noreferrer">Create an ingress controller in Azure Kubernetes Service (AKS)</a>. It will show you what the steps need to be done. And if you have more questions please let me know.</p>
