2014年10月24日 星期五

設定 OpenStack Neutron 並讓 VM 取得外部連結

簡單說明一下環境,本篇文章中用的 OpenStack 是使用 Fuel 5.1 [1] 佈署出來的 Mirantis OpenStack
因為佈署時不想影響到其他實體網路,因此將 OpenStack 移至虛擬區網的網段,IP 位址為 10.5.*.*。

Fuel 5.1 佈署時的設定如下。

Public Network -- 聯外的實體網路。這個網路區段是讓被 Fuel 佈署的節點取得可被外部存取的 public IP,必須搭配節點佈署時的網路介面設定。
IP Range: Start 10.5.4.2, End 10.5.4.254
CIDR: 10.5.0.0/16
Use VLAN tagging: false
Gateway: 10.5.0.1

Management Network -- 內部溝通的區域網路。Fuel 佈署出來的節點會使用這個網段做溝通,例如 Compute Node 的 Nova 嘗試連接 Controller Node 的 AMQP 服務時,就會透過這個網段連接。
CIDR: 192.168.101.0/24
Use VLAN tagging: false

Storage Network -- 內部溝通的區域網路。照名字來看是被 Cinder、Swift 或者 Ceph 等儲存服務使用的網路..吧。
CIDR: 192.168.102.0/24
Use VLAN tagging: false

Neutron L3 Configuration -- OpenStack 佈署後的 Neutron 設定。此處的設定會反應在 OpenStack 佈署完後,預設建立出來的虛擬路由器的設定。
Internal network CIDR: 192.168.111.0/24
Internal network gateway: 192.168.111.1
Floating IP ranges: Start 10.5.5.2, End 10.5.5.254
DNS Servers: 8.8.4.4, 8.8.8.8

針對 Neutron L3 Configuration 的部份記錄一下,Fuel 佈署完的 OpenStack 預設會先產生好一個虛擬路由器
虛擬路由器會有兩個介面,一個是內部網路,IP 位址的分配會被 Internal network 的設定所限制;
另一個則是外部閘道,IP 位址的分配為 Floating IP ranges 設定的範圍。

OpenStack 佈署完以後,在介面上可以看到這樣的內容:



對照上面的 Neutron L3 Configuration,大概就可以看出 Fuel 在佈署時做了些什麼設定了。

設定安全性
在開啟 VM 之前,先調整一下預設的安全性 [2],允許 ICMP 以及 SSH 協定,以方便之後能夠透過 ping 指令或者 ssh 指令連接 VM。


啟動 VM 並設定網路
接著,因為目標是要讓 VM 能夠取得外部連結,所以要先開啟 VM。上傳映像檔跟開啟 VM 的步驟就略過了,只有特別在 VM 開啟時選擇介面 net04(即網段為 192.168.111.0/24 的子網路介面)並且設定了密鑰對。
VM 開啟之後,因為只有給它內部存取的介面卡,因此它只會有 192.168.111.* 的內部 IP
此時可以從介面上選擇「聯結浮動 IP」,然後選擇任意一個浮動 IP,對應的介面卡則是 VM 自己的內部介面卡,如下圖。


這麼做的意義可以參考官方文件 [3] 的說明,以下節錄部分內容。
The L3 router provides basic NAT capabilities on gateway ports that uplink the router to external networks. This router SNATs all traffic by default and supports floating IPs, which creates a static one-to-one mapping from a public IP on the external network to a private IP on one of the other subnets attached to the router. This allows a tenant to selectively expose VMs on private networks to other hosts on the external network (and often to all hosts on the Internet).

聯結之後,實際上 Neutron 是在虛擬路由器 router04 上建立一個封包轉向的記錄,將外部的封包轉向至內部的特定介面
而不是直覺地直接讓 VM 獲得一張可以直接聯結到網際網路的介面卡。
以我的佈署狀況來說,聯結完以後 VM 的 IP 在介面上會變成這樣:
192.168.111.6
    10.5.5.6
但如果能夠操作 VM 的話,在 VM 內使用指令查詢網路狀況,則會出現下列的回應,可以看到並沒有因為聯結而產生新的介面卡。此時網路的狀況實際上會變成在 OpenStack 的內網中,10.5.5.6 跟 192.168.111.6 都會被導向到同一張網卡上。
root@ubuntu:~# ifconfig
eth0      Link encap:Ethernet  HWaddr fa:16:3e:22:79:0a
          inet addr:192.168.111.6  Bcast:192.168.111.255  Mask:255.255.255.0
          inet6 addr: fe80::f816:3eff:fe22:790a/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1410 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1133 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:173636 (173.6 KB)  TX bytes:157232 (157.2 KB)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

透過 SSH 登入 VM
想要操作 VM 的話,如果 VM 是使用官方的 ubuntu 映像檔建立的,會需要使用金鑰去登入才行,可以透過 -i 參數指定金鑰檔案進行連接 [4-5]。
ssh -i default.pem 10.5.5.6

能夠成功登入後,如果想要直接用密碼登入,可以以 root 權限變更 /etc/ssh/sshd_config,並將 PasswordAuthentication 設為 yes
PasswordAuthentication yes
然後重新啟動 ssh 即可。
service ssh restart

參考資料:
1、Mirantis
2、OpenStack Manuals - OpenStack Cloud Administrator Guide - Enable ping and SSH on VMs (security groups)
3、OpenStack Manuals - OpenStack Cloud Administrator Guide - L3 Routing and NAT
4、OpenStack Manuals - OpenStack End User Guide - Connect to your instance by using SSH
5、Fix “Permissions are too open … private key will be ignored”

沒有留言: