春節前在研究Openstack最新版本Liberty網絡時,發現了一篇較好的介紹Liberty網絡實現和一些新技術的文章。經過仔細研究后決定寫寫研究后的體會。
此系列文章分為7個部分,分別介紹:
1.Liberty網絡總覽
2.網絡架構
3.Neutron配置
4.網絡創建
5.添加路由、網絡和子網
6.在租戶網絡啟動虛機
7.在FLAT網絡啟動虛機
文章連接:OpenStack Liberty Neutron Deployment (Part 1-7 Overview) http://www.opencloudblog.com/?p=557
下面我也會分7個部分來寫寫自己閱讀和實驗后的一些心得體會。
1、Liberty網絡總覽
從構架圖中可以看到節點、網絡和服務的總體架構,其中有一下幾點比較重要:
1.在傳統三節點(控制、網絡、計算)環境中,添加了API節點,API節點暴露給外部網絡,保證控制節點不直接對外,以此提高系統的安全性。
2.網絡方面涉及以下內容:
1)內網和外網兩個路由器,內網路由器單純跑管理數據,保證各個節點之間通訊。
2)外網路由器包含API訪問網絡、虛機網絡和Vxlan網絡
3.各個節點跑的服務分布來看基本和傳統Openstack一致,但其中nova-metadata元數據服務,從控制節點挪到了網絡節點,此改變會減小虛機訪問元數據信息對網絡造成的壓力。
4.為租戶提供的虛擬網絡資源
1)每個租戶可以添加路由器掛接floating pool浮動ip池網絡與租戶自身內網實現虛機訪問外網
2)為租戶提供多個浮動IP池網絡,並且浮動IP池網絡的gateway可以是一個物理router
3)為租戶提供多個flat網絡,flat網絡提供物理的router,只有虛機能夠連接這個網絡。
2.網絡架構
根據以上節點和網絡圖可以發現:
1)兩個floating網絡使用vlan100和vlan101,snat和dnat通過iptables路由
2)兩個flat網絡使用vlan200和vlan201,虛機不需iptables路由
3)Vxlan網絡使用vlan4000
在使用Vxlan和GRE隧道模式時,因為會對IP和UDP報文添加隧道頭信息,造成報文MTU超過1500的情況,傳統解決方案有通過DHCP下發MTU=1400配置給虛機,降低虛機的MTU數值以達到保證報文小於1500,由於會導致生產環境產生大的問題,作者不推薦降低MTU數值,作者建議修改交換機MTU為1600保證網絡包的轉發。
具體vlan配置信息:
vlan 100 name Floating-Pool-1 vlan 101 name Floating-Pool-2 vlan 200 name Flat-Net-1 vlan 201 name Flat-Net-2 # set the mtu to 1600 for vlan 4000 vlan 4000 name vxlan mtu 1600 # do not use vlan 1 for untagged packets vlan 4090 name native vlan # ############ interface vlan 100 description Floating-Network-1 ip address 198.18.0.1/20 interface vlan 10 description Floating-Network-2 ip address 198.18.16.1/20 interface vlan 200 description Flat-Network- ip address 198.19.1.1/24 interface vlan 201 description Flat-Network-2 ip address 198.19.2.1/24 # a L3 interface for the vxlan vlan may be added # ############# # # the ports to the nodes (network and compute) # They use the same config ! # just one link to each node - multiple links using LACP may also be used interface port description to-network-node mode trunk trunk native vlan 4090 trunk vlan 100,101,200,201,4000,4090 mtu 1600 interface port2 description to-compute-node mode trunk trunk native vlan 4090 trunk vlan 100,101,200,201,4000,4090 mtu 1600
網絡節點配置
網絡節點和計算節點的配置使用了一個物理口或一個綁定端口實現了虛機流量的傳輸還是非常有創新的一種配置方式。如果按照官方Openstack的部署方案,可能就需要四個物理網卡來支撐此種網絡配置,但按作者的方案,可以通過一個物理網口實現這四個網口的功能,這樣還是會大大降低組網的復雜度,也是一種不錯的解決方案。
1)Vxlan的物理口可以不需要,因為Vxlan傳輸需要的是IP層地址,可以在br-uplink上創建internal port(l3vxlan),並給port配置一個IP地址,來實現Vxlan隧道信息的傳輸。
2)br-uplink是建立在一個物理網口例如eth1上的一個ovs網橋,它實現了隧道網絡br-tun和vlan網絡br-vlan的上聯功能。
3)br-uplink和它與br-int與br-vlan的patch對虛擬網卡設備需要用戶自己創建,br-tun、br-vlan和br-int網橋設備由Openstack代碼創建和維護。
4)傳統Openstack方案兩個floating外網池對應兩個L3 agent並且分配兩個物理網卡配置br-ex外網橋。可實際上L3 agent現在已經足夠智能,可以使用任何網橋設備了。任何一個L3 agent可以管理多個floating pools。
5)Liberty Neutron代碼已經不必須使用br-ex來實現L3 agent的路由功能
網絡節點和計算節點虛擬設備配置:
# # the bridge, which connects the nodes to the transport network ovs-vsctl add-br br-uplink # the bridge used by Openstack Neutron to connect vlans and flatdhcp networks ovs-vsctl add-br br-vlan # the integration bridge used by Openstack ovs-vsctl add-br br-int # # add the uplink (with dot1q tags 101,102,...) # we assume, that eth1 is the uplink interface ip link set dev eth1 up # set the mtu of the physical uplink to the switch ip link set dev eth1 mtu 1600 # # disable gro and lro !! on the uplink ethtool -K eth1 gro off ethtool -K eth1 lro off # # enable for intel NICs udp port hashing to distribute traffic to different queues ethtool -N eth1 rx-flow-hash udp4 sdfn # ovs-vsctl add-port br-uplink eth1 -- set port eth1 vlan_mode=trunk trunk=100,101,200,201,4000 # # patch ports between br-uplink and br-vlan ovs-vsctl add-port br-vlan patch-to-uplink -- set Interface patch-to-uplink type=patch options:peer=patch-to-vlan ovs-vsctl add-port br-uplink patch-to-vlan -- set Interface patch-to-vlan type=patch options:peer=patch-to-uplink # # !! on br-uplink the allowed vlan tags on the patch port from br-vlan must be filtered using Openflow rules # !! if this is not done, there is a risk that vlans from the infrastructure may get mixed with local vlans # !! of br-int, if the neutron Openvswitch agent fails to set up the vlan mapping on br-vlan or br-int # TBD ### # create the Linux IP interface required for VXLAN transport # this interface is attached to vlan 4000 of br-uplink # XXX = Last octet of the VXLAN interface ip address of the node ovs-vsctl add-port br-uplink l3vxlan tag=4000 -- set Interface l3vxlan type=internal ip addr add 10.255.255.XXX/24 dev l3vxlan ip link set dev l3vxlan up # set the mtu of the logical vxlan interface ip link set dev l3vxlan mtu 1600
3.Neutron配置
關於neutron配置項可以參考原文的配置,說幾點比較重要的項:
1)在ml2_conf.ini中:
###>>>>>>>>> local_ip is only used on compute and network nodes ###
# local_ip = <ip address of the l3vxlan interface>
local_ip在此處需設置為l3vxlan openvswitch的internal port的ip地址,實現Vxlan隧道的ip
2)在l3_agent.ini中
# # very important - set the two following entries to an empty string # do not leave the default values gateway_external_network_id = external_network_bridge =
傳統l3外部網絡需要配置br-ex外網網橋,由於liberty網絡的l3 agnet可以不指定外網網橋,外網ip的qg虛擬設備可以建立在網絡節點br-int集成網橋中,以實現l3路由的snat和dnat。
metadata_ip = 127.0.0.1
傳統openstack的nova-metadata服務部署在控制節點,但此處metadata服務部署在network節點中,因此metadata_ip需配置為127.0.0.1
3)在nova-metadata.conf中
metadata_host = 127.0.0.1 metadata_listen = 127.0.0.1
在此metadata服務只監聽本地127.0.0.1
以上步驟基本完成了liberty網絡環境准備工作,下一部分將就介紹網絡、路由、外網配置與虛機創建。
作者簡介:趙俊峰,現為北京新雲東方系統科技有限責任公司 雲計算部Openstack開發工程師。主要從事Power和x86混合環境下Openstack相關計算、網絡、存儲相關服務軟件開發和系統架構設計工作。