当前所用版本juno,其他版本也应该可行。
虚拟机的(虚拟)网络接口相关概念:
虚拟网络(内部网络,私有网络):虚拟机的虚拟机网卡所在的私有网络
fixed ip:虚拟机网卡在虚拟网络上的IP
floating ip: 虚拟网络对应的外部网络上的IP
port: 一个网络接口对应一个Port
interface: 一个网络接口
场景1:单网卡
参照安装手册:
1. neutron floatingip-create ext-net 其中ext-net是对应外部网络的名字
2. nova floating-ip-associate demo-instance1 203.0.113.102 其中demo-instance1是云主机(也称为实例)的名字,203.0.113.102是前面步骤获得的floating ip
场景2:双网卡
预先知道虚拟机的名字(放到变量VMNAME中)、私有网络名字(放到变量DEMONET中)和与之对应的外部网络名字(放到变量EXTNET中)。
方法一(仍然是给虚拟机赋予浮动IP的方法)
1. neutron floatingip-create $EXTNET
2. 获取固定IP:nova show $VMNAME | awk '/ '$DEMONET' / {print $5}'
3. nova floating-ip-associate --fixed-address $VMNAME
方法二(分配外部IP的同时指定虚拟机对应的port,分配的同时就将浮动IP关联到对应的虚拟机网络接口了) 1. 获取port-id。 方法有几种: 可以是先像上面那样获取虚拟机的固定IP,然后使用 neutron port-list | awk 组合从该固定IP获取port-id; 或者也是先获取固定IP,然后使用 nova interface-list | awk的组合获取port-id; 也可以使用nova net-list | awk 组合通过DEMONET获得其net-id,然后用nova interface-list | awk 组合获取port-id。 建议使用最后一种; 2. 创建的同时指定PORTid: neutron floatingip-create --port-id PORT_ID $EXTNET