<p>My institution has firewall settings that block most of the external ports, currently, I have internal Linux virtual machine, for example, <strong><a href="http://abc.xyz:5555" rel="nofollow noreferrer">http://abc.xyz:5555</a></strong> (this link can only be accessed in the internal network), and a Netscaler is set up by the admin so that the internal link is forward to a  publicly available link: <strong><a href="https://def.edu" rel="nofollow noreferrer">https://def.edu</a></strong>. </p>

<p>Now I have multiple web servers that use ports like 5556,5557,5558. I want to set up Kubernetes ingress that all traffic goes into the ingress controller first, and the ingress will forward traffic to my multiple web services. Typically as the below image shows. 
<a href="https://i.stack.imgur.com/wMIM6.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/wMIM6.png" alt="Objective"></a></p>

<p>I only have port 5555 available, but all tutorials of Ingress seem only to support HTTP 80 and HTTPS 443 port. My question is, can I set up the Ingress controller host as <strong><a href="http://abc.xyz:5555" rel="nofollow noreferrer">http://abc.xyz:5555</a></strong>? Or I should go for other approaches, like this said: <a href="https://kubernetes.io/docs/concepts/services-networking/ingress/" rel="nofollow noreferrer"><code>An Ingress does not expose arbitrary ports or protocols. Exposing services other than HTTP and HTTPS to the internet typically uses a service of type Service.Type=NodePort or Service.Type=LoadBalancer.</code></a>, if so, what terms/techniques should I use?</p>

<p>I suggest to use an ingress, since each loadbalancer gets an own external ip assigned. You can specify a custom port and protocols (tcp,udp,http). I worked with nginx, but the documentation seemed outdated (last checked last week). So we are currently using <a href="https://docs.traefik.io/providers/kubernetes-ingress/" rel="nofollow noreferrer">Traefik</a>. The web dashboard was also a big help in debugging it.</p>

<p>How we solved it:</p>

<ol>
<li><p>Install traefik via helm with custom values, so it listens to other ports besides 80 and 443; Add custom entrypoints in your <a href="https://github.com/containous/traefik-helm-chart/blob/master/traefik/values.yaml" rel="nofollow noreferrer">values.yaml</a> and install traefik with:
<code>helm install --values values.yaml stable/traefik</code></p></li>
<li><p>Install your ingress http/tcp/udp routes</p></li>
<li><p>Forward your web dashboard and go to <a href="http://localhost:9000/dashboard" rel="nofollow noreferrer">http://localhost:9000/dashboard</a> </p></li>
</ol>

<p>Please see the official docs for more detailed steps: <a href="https://docs.traefik.io/getting-started/install-traefik/#use-the-helm-chart" rel="nofollow noreferrer">https://docs.traefik.io/getting-started/install-traefik/#use-the-helm-chart</a></p>
