上一節我們通過 Web UI 創建為 cirros-vm3 分配了浮動 IP,今天將分析其工作原理。
首先查看 router 的 interface 配置:
可以看到,floating IP 已經配置到 router 的外網 interface qg-b8b32a88-03 上。 查看 router 的 NAT 規則:
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。
能夠 PING 通。 我們通過 tcpdump 可用在 router 的 interface 上觀察 floating IP 的行為。
ext_net interface qg-b8b32a88-03 的 tcpdump 輸出:
可見,在外網接口 qg-b8b32a88-03 上,始終是通過 floating IP 10.10.10.3 與外網通信。
vlan101 interface qr-e17162c5-00 的 tcpdump 輸出:
當數據轉發到租戶網絡,地址已經變為 cirros-vm3 的租戶 IP 172.16.101.3 了。
小結一下:
1. floating IP 能夠讓外網直接訪問租戶網絡中的 instance。這是通過在 router 上應用 iptalbes 的 NAT 規則實現的。
2. floating IP 是配置在 router 的外網 interface 上的,而非 instance,這一點需要特別注意。
至此,我們已經完成了 Neutron L3 服務連接不同 subnet,訪問外網,以及 floating IP 的學習。
下節開始,我們將學習 Neutron 如何支持 VxLAN 網絡類型。