You do not need a static public IP address for each node. You can easily run multiple relays on a single public IP address using different ports (eg. behind NAT/port forwarding).
Eg.
1.2.3.4 port 3001 -> relay 1 1.2.3.4 port 3002 -> relay 2
Of course to do this, you'd need to be able to forward the ports so this may depend on your exact setup.
Your relays/producer will still need some static internal IP address/hostname that they can connect to each other on (since they will need to be listed in each others topology files).