高手教你如何在OVS上創建vlan
Neutron自身并不提供任何網絡功能,它只是一個架子。Neutron的網絡功能大部分是Plugin提供的,除了DHCP和L3-agent等的某些部分功能。
Neutron將網絡按照三層交換機的概念分為:
Network:相當于交換機根據vlan創建的一個三層接口;
Subnet:相當于交換機創建了一個三層接口地址;
Port:相當于交換機的一個物理端口,但是這個端口有一個MAC地址;
Neutron 有什么?
L2
在 L2 層,由虛擬交換機來實現。虛擬交換機有下列這些種:
Linux 網橋,基于 Linux 內核的網橋。需要說明的是,網橋就是交換機,是交換機的一種常用的書面叫法。
OpenvSwitch(OVS):OVS 有兩種模式,一種是當普通的虛擬交換機來使用,另一個是和 OpenFlow 控制器協作當作 OpenFlow 控制器來使用。
一些基于 Overlay 技術的 SDN 實現,如 Dove 等。
一些非開源的商業交換機。
目前,Neutron 已經實現的 L2 層插件如下圖 6 所示,linuxbridge 實現了 Linux 網橋,openvswitch 插件實現了 openvswitch 網橋,bigswitch 插件實現了一種 SDN 控制器,ml2 是一種通用的插件(這些 L2 層的插件主要分寫數據庫的 plugin 部分和運行在計算節點的 agent 部分,plugin 寫數據庫的字段有差異但不多,所以代碼重復,ml2 可以理解為一個公共的 plugin)。且每種插件基本上實現了 FLAT, VLAN, VXLAN, GRE 等四種拓撲。
Neutron 中 L2 層插件
Neutron 中 L2 層插件
L3
Neutron 的 L3 層由基于 namespace ipv4 forward + iptables 實現。
需要啟動 l3-agent 進程,如果需要 DHCP 服務的話也需要啟動 dhcp-agent 進程。
L4-L7
LBaaS 基于 Haproxy 實現;FWaaS 基于 iptables 實現;VPNaaS 有基于 IPSec 的 VPN 實現,也有基于 MPLS 的 VPN 實現,也有基于 SSL 的 VPN 實現。
截止到筆者寫此文為止,目前只有 LBaaS 能用,其他的 FWaaS, VPNaaS 和 NATaaS 仍在開發中。但對于 FWaaS 有 Security Group 功能可用,區別在于前者由于作為獨立服務也能部署在網絡節點上提供邊緣防火墻特性,后者依然能夠在計算節點上使用 iptables 規則控制從虛機出去的,進來虛機的,虛機之間的流量。
這樣neutron的CLI或者horizon的頁面配置了網絡功能后,就會調用neutron的API,然后如果plugin是OVS的話,就會生成對應的比如OVS的命令下發到底層虛擬網絡設備,底層就提供了相應的網絡功能(如果支持的話,有的不支持也不會報錯,比如H版對IPV6轉發的支持)。這些網絡功能包括二層vlan或vxlan等租戶之間的隔離、floating IP之間的三層轉發和NAT轉換、防火墻、VPN和負載均衡等,看官網還提供有IDS和DC互聯,但是還沒有驅動力去調研。
如果你能配置出如下圖3中網絡且都能訪問外網和相互隔離,說明你已經對底層有了一定了解:
neutron配置后的一種網絡拓撲實例
上面圖中,如果用OVS作為plugin的話需要注意,里面的一個虛擬路由器并不是直接對應創建一個OVS,很有迷惑性,在底層其僅僅是在OVS上創建了一個vlan,配置了一個三層接口地址,并且添加了一個和這個網段相連的虛擬port。有興趣的可以配置成功后,到底層詳細dump下。