If using neutron + OVSNeutronPlugin or ML2Plugin, you can set up as many external networks, as many you want.
$> neutron net-create --provider:network_type=flat \
--provider:physical-network=br-ex --shared ext_net -- --router:external=True
Then create a floating IP from this subnet
$> neutron floatingip-create ext_net
| id | 547d4156-078c-426f-8534-027169d51026 |
Then you can assign this floating IP to one of you servers
$> nova interface-list 6c79552c-7006-4b74-a037-ebe9707cc9ce
| Port State | Port ID | Net ID | IP addresses | MAC Addr |
| ACTIVE | 392d179d-7d30-4250-ac27-f166d8b62f9d | ed83138a-7d3a-4365-897a-e742d33c65aa | 10.6.0.1 | fa:16:3e:ff:5 |
$> neutron floatingip-associate 547d4156-078c-426f-8534-027169d51026 \
392d179d-7d30-4250-ac27-f166d8b62f9d
Note, that bridge 'br-ex' should exists before the first command, so on RedHat you should have a config like
ifcfg-br-ex
DEVICE=br-ex
IPADDR=192.168.100.52
NETMASK=255.255.255.0
ONBOOT=yes
DEVICETYPE=ovs
TYPE="OVSBridge"
An plumb your 'public interface' into br-ex.
ifcfg-eth2
DEVICE=eth2
ONBOOT=yes
OVS_BRIDGE=br-ex
DEVICETYPE=ovs
TYPE="OVSPort"
If you public network is defined as a vlan over eth2, use
$> neutron net-create --provider:network_type=vlan --provider:physical-network=br-ex \
--provider:segmentation_id=<vlan id> --shared ext_net -- --router:external=True
You might also check http://docs.openstack.org/admin-guide-cloud/content/l3_workflow.html (l3_workflow)