Neutron:浮动ip

时间:2024-11-02 15:06:31
如果需要从外网直接访问 instance,则可以利用 floating IP。
下面是关于 floating IP 必须知道的事实:
1. floating IP 提供静态 NAT 功能,建立外网 IP 与 instance 租户网络 IP 的一对一映射。 
2. floating IP 是配置在 router 提供网关的外网 interface 上的,而非 instance 中。 
3. router 会根据通信的方向修改数据包的源或者目的地址。
下面我们通过实验深入学习 floating IP。
点击 Project -> Compute -> Access & Security 菜单,打开 Floating IPs 标签页。
Neutron:浮动ip
点击 “Allocate IP To Project” 按钮。
Neutron:浮动ip
floating IP Pool 为 ext_net,点击 “Allocate IP” 按钮。
Neutron:浮动ip
从 Pool 中成功分配了一个 IP 10.10.10.3。 下面我们将它分配给 cirror-vm3,点击 “Associate” 按钮。
Neutron:浮动ip
在下拉列表中选择 cirror-vm3,点击 “Associate” 按钮。
Neutron:浮动ip
分配成功,floating IP 10.10.10.3 已经对应到 cirros-vm3 的租户 IP 172.16.101.3。
首先查看 router 的 interface 配置:
Neutron:浮动ip
可以看到,floating IP 已经配置到 router 的外网 interface qg-b8b32a88-03 上。 
查看 router 的 NAT 规则:
Neutron:浮动ip
iptables 增加了两条处理 floating IP 的规则: 
1. 当 router 接收到从外网发来的包,如果目的地址是 floating IP 10.10.10.3,将目的地址修改为 cirros-vm3 的 IP 172.16.101.3。这样外网的包就能送达到 cirros-vm3。 
2. 当 cirros-vm3 发送数据到外网,源地址 172.16.101.3 将被修改为 floating IP 10.10.10.3。
下面我们通过 PING 测试一下。 在我的实验环境中,10.10.10.1 是外网中的物理交换机,现在让它 PING cirros-vm3。
Neutron:浮动ip
能够 PING 通。 
我们通过 tcpdump 可用在 router 的 interface 上观察 floating IP 的行为。
ext_net interface qg-b8b32a88-03 的 tcpdump 输出:
Neutron:浮动ip
可见,在外网接口 qg-b8b32a88-03 上,始终是通过 floating IP 10.10.10.3 与外网通信。
vlan101 interface qr-e17162c5-00 的 tcpdump 输出:
Neutron:浮动ip
当数据转发到租户网络,地址已经变为 cirros-vm3 的租户 IP 172.16.101.3 了。
小结一下: 
1. floating IP 能够让外网直接访问租户网络中的 instance。这是通过在 router 上应用 iptalbes 的 NAT 规则实现的。 
2. floating IP 是配置在 router 的外网 interface 上的,而非 instance,这一点需要特别注意。