I am building an app where I have 5 different instances on Azure. I want a way to use a single IP address for all these instances. I have tried to setup the "Application Gateway" because it works as reverse proxy where I can assign ports to different instances. But the problem is, Azure does not support Static public IP for Application Gateway. I need the IP to be static so that customer can assign this IP in their thousands of device's firewall, which is not easy to change every time I restart the instance. Is the Azure's "Load Balancer"/"Traffic Manager" correct technology for this or something else. Please suggest.
Are you actually looking for a reverse proxy, or just a way to assign a single IP to a set of resources?
Azure Loadbalancer allows you to distribute load over multiple VM's in the same region, you would have a single static IP for the LB and the traffic would be allocated to a particular VM. Your application obviously needs to support being load balenced.
Azure Traffic manager is similar, but on a global scale, load balancing between regions. It also has the ability to balance based on location or active/passive setup.
Neither of these are providing reverse proxy capabilities, but then neither is application gateway. If you really need a reverse proxy rather than a load balancer then you need to look at Azure Application Proxy (which I don't think allows a static IP eitehr, just a name), or running your own in a VM.
Edit: Ok, based on your comment what you really need is a Load Balancer, with NAT rules. This will allow you to have a single IP for the LB, and then forward individual ports to different machines. You would create an inbound NAT rule for each port, then on the NIC for the VM you want accessible on that port you would use that NAT rule. This article has a pretty good how to.