<p>It seems to be TCP and UDP support is going to be deprecated in next version of ingress-nginx controller . Any other ingress controllers supports TCP and UDP ? 
or any other solutions for exposing non-http ports outside kubernetes ?</p>

<ul>
<li>kubernetes beginner here *</li>
</ul>

<p>The nginx-ingress (and the <a href="https://kubernetes.io/docs/concepts/services-networking/ingress/" rel="nofollow noreferrer">Ingress</a> resource in K8s for that matter) is a layer 7 facility and doesn't support layer 4, in any case, layer 4 might be supported at some point in the future.  Note that <a href="https://docs.nginx.com/nginx/admin-guide/load-balancer/tcp-udp-load-balancer/" rel="nofollow noreferrer">nginx itself supports layer 4 traffic</a> but not the K8s Ingress.</p>

<p>If you like to directly terminate TCP or UDP you can use standard <a href="https://kubernetes.io/docs/concepts/services-networking/service/" rel="nofollow noreferrer">Kubernetes services</a>. <a href="https://kubernetes.io/docs/concepts/services-networking/service/#nodeport" rel="nofollow noreferrer">NodePort</a> and <a href="https://kubernetes.io/docs/concepts/services-networking/service/#loadbalancer" rel="nofollow noreferrer">LoadBalancer</a> (depending on the cloud provider) types of services should also support TCP/UDP.</p>

<p>Update:</p>

<p>There's a tutorial on how to support TCP/UDP with an nginx ingress (from the NGINX company) <a href="https://github.com/nginxinc/kubernetes-ingress/tree/master/examples/tcp-udp" rel="nofollow noreferrer">here</a>.</p>
