Neutron 了解 (1): Neutron 所實作的虛拟化網絡
Neutron 了解 (2): 使用 Open vSwitch + VLAN 組網
目前,OpenStack Neutron 支援使用兩種隧道網絡技術 通用路由封裝(GRE) 和 VxLAN 來實作虛拟的二層網絡。這兩種技術大緻看起來非常相似,都是需要使用 OpenStack 在計算和網絡節點上建立隧道來傳輸封裝的虛機發出的資料幀:
1. Overlay 網絡
1.1 Overlay 技術概述
Overlay 在網絡技術領域,指的是一種網絡架構上疊加的虛拟化技術模式,其大體架構是對基礎網絡不進行大規模修改的條件下,實作應用在網絡上的承載,并能與其它網絡業務分離,并且以基于IP的基礎網絡技術為主。Overlay 技術是在現有的實體網絡之上建構一個虛拟網絡,上層應用隻與虛拟網絡相關。一個Overlay網絡主要由三部分組成:
- 邊緣裝置:是指與虛拟機直接相連的裝置
- 控制平面:主要負責虛拟隧道的建立維護以及主機可達性資訊的通告
- 轉發平面:承載 Overlay 封包的實體網絡
目前主流的 Overlay 技術主要有VXLAN, GRE/NVGRE和 STT。這三種二層 Overlay 技術,大體思路均是将以太網封包承載到某種隧道層面,差異性在于選擇和構造隧道的不同,而底層均是 IP 轉發。如下表所示為這三種技術關鍵特性的比較。其中VXLAN利用了現有通用的UDP傳輸,其成熟性高。總體比較,VLXAN技術相對具有優勢。
1. 1 GRE 技術
GRE(Generic Routing Encapsulation,通用路由協定封裝)協定,是一種 IP-over-IP 的隧道,由 Cisco 和 Net-smiths 等公司于1994年送出給IETF,它對部分網絡層協定(IP)的資料報進行封裝,使這些被封裝的資料報能夠在 IPv4/IPv6 網絡中傳輸。其協定格式見RFC2784(https://tools.ietf.org/html/rfc2784)。簡單的說,GRE是一種協定封裝的格式。它規定了如何用一種網絡協定去封裝另一種網絡協定,很多網絡裝置都支援該協定。說得直白點,就是 GRE 将普通的包(如ip包)封裝了,又按照普通的ip包的路由方式進行路由,相當于ip包外面再封裝一層 GRE 包。在本例子中,在 GRE 包外圍實際上又有一層公網的ip包。
GRE 使用 tunnel(隧道)技術,資料報在 tunnel 的兩端封裝,并在這個通路上傳輸,到另外一端的時候解封裝。你可以認為 tunnel 是一個虛拟的點對點的連接配接。(實際 Point To Point 連接配接之後,加上路由協定及nat技術,就可以把兩個隔絕的區域網路連接配接在一起,就實作了NetToNet的互聯)。一般 GRE turnel 是在多個網絡裝置(一般為路由器)之間建立。因為 linux 服務具備路由轉發功能,是以當您缺少專業的路由裝置的時候,可使用 linux 伺服器實作 gre turnel 的建立(實際上巨大多數網絡裝置都使用unix或linux系統)。
1.1.1 應用場景
辦公網(LAN 192.168.1.0/24,并通過固定的公網IP上網)和 IDC (LAN 10.1.1.0/24,并有多個公網ip,兩者通過公網ip互聯)這兩個區域網路 (或者任意兩個不同區域網路) 互相隔離。但是在日常運維和研發過程中,需要在辦公網通路IDC網絡。如果都通過公網 IP 繞,既不友善,也不安全;拉專線是最穩定可靠的辦法,但是成本高。
1.1.2 使用 GRE 的配置
如果公司有多餘的固定的公網 ip 或者路由器本身支援GRE,建議使用 GRE 方案。
(1)辦公網路由器(linux伺服器實作):區域網路IP 192.168.1.254,公網 IP 180.1.1.1 配置。
cat /usr/local/admin/gre.sh #并把改腳本加入開機啟動
#!/bin/bash
modprobe ip_gre #加載gre子產品
ip tunnel add office mode gre remote . local . ttl #使用公網 IP 建立 tunnel 名字叫 ”office“ 的 device,使用gre mode。指定遠端的ip是110.2.2.2,本地ip是180.1.1.1。這裡為了提升安全性,你可以配置iptables,公網ip隻接收來自110.2.2.2的包,其他的都drop掉。
ip link set office up #啟動device office
ip link set office up mtu #設定 mtu 為1500
ip addr add ./ dev office #為 office 添加ip 192.192.192.2
echo > /proc/sys/net/ipv4/ip_forward #讓伺服器支援轉發
ip route add ./ dev office #添加路由,含義是:到10.1.1.0/24的包,由office裝置負責轉發
iptables -t nat -A POSTROUTING -d ./ -j SNAT --to .#否則 192.168.1.x 等機器通路 10.1.1.x網段不通
IDC路由器(linux伺服器實作):區域網路 ip:10.1.1.1,公網 ip110.2.2.2配置
cat /usr/local/admin/gre.sh#并把改腳本加入開機啟動
#!/bin/bash
modprobe ip_gre
ip tunnel add office mode gre remote . local . ttl
ip link set office up
ip link set office up mtu
ip addr add ./ dev office #為office添加 ip 192.192.192.1
echo > /proc/sys/net/ipv4/ip_forward
ip route add ./ dev office
iptables -t nat -A POSTROUTING -s . -d ./ -j SNAT --to . #否則192.168.1.X等機器通路10.1.1.x網段不通
iptables -A FORWARD -s . -m state --state NEW -m tcp -p tcp --dport -j DROP #禁止直接通路線上的3306,防止内網被破
配置示意圖:
然後兩個區域網路中的機器就可以互通了。
1.1.3 過程
過程:
- GRE turnel 的打通:這個過程就是雙方建立turnel的過程。
-
區域網路路由過程
(1)主機 A 發送一個源為192.168.1.2,目的為 10.1.1.2 的包。
(2)封裝過程
- 根據内網路由,可能是你的預設路由網關将之路由至 192.168.1.254。
- 192.168.1.254 第一次封裝包,增加 GRE 標頭,說明包的目的位址 192.192.192.1 和源位址192.192.192.2。
- 192.168.1.254 第二次封裝包,增加公網的標頭(否則在公網上無法路由),說明包的目的位址 110.2.2.2 和源位址 180.1.1.1。
- 192.168.1.254 把所有到 10.1.1.0/24 的包,源位址都轉換為從192.192.192.2 出(snat)。
- 公網路由過程:經過n個路由裝置,該包最終路由到110.2.2.2。
- 拆包過程
- B端的路由器檢測到是到達自己的 IP,就開始拆包。
- 拆包之後發現有GRE協定,就進一步拆包。
- 拆包之後發現目的地不是自己的内網ip、發現自己本地做了snat,就将其源IP替換為10.1.1.1。
- 區域網路路由
- 實際上從 10.1.1.1 出發的,到達目的地為 10.1.1.2 的包,無需路由,直接在區域網路内廣播。10.1.1.2 的機器确定是發送給自己的包,就接收。然後進一步處理了。
1.1.4 GRE 的不足
GRE 技術本身還是存在一些不足之處:
(1)Tunnel 的數量問題
GRE 是一種點對點(point to point)标準。Neutron 中,所有計算和網絡節點之間都會建立 GRE Tunnel。當節點不多的時候,這種組網方法沒什麼問題。但是,當你在你的很大的資料中心中有 40000 個節點的時候,又會是怎樣一種情形呢?使用标準 GRE的話,将會有 780 millions 個 tunnels。
(2)擴大的廣播域
GRE 不支援多點傳播,是以一個網絡(同一個 GRE Tunnel ID)中的一個虛機發出一個廣播幀後,GRE 會将其廣播到所有與該節點有隧道連接配接的節點。
(3)GRE 封裝的IP包的過濾和負載均衡問題
目前還是有很多的防火牆和三層網絡裝置無法解析 GRE Header,是以它們無法對 GRE 封裝包做合适的過濾和負載均衡。
1.2. VxLAN 技術
VxLAN 主要用于封裝、轉發2層封包。VXLAN 全稱 Virtual eXtensible Local Area Network,簡單的說就是擴充了的 VLAN,其使得多個通過三層連接配接的網絡可以表現的和直接通過一台一台實體交換機連接配接配置而成的網絡一樣處在一個 LAN 中。
它的實作機制是,将二層封包加上個 VxLAN header,封裝在一個 UDP 包中進行傳輸。VxLAN header 會包括一個 24 位的 ID(稱為VNI),含義類似于 VLAN id 或者 GRE 的 tunnel id。GRE 一般是通過路由器來進行 GRE 協定的封裝和解封的,在 VXLAN 中這類封裝和解封的元件有個專有的名字叫做 VTEP。相比起 VLAN 來說,好處在于其突破了VLAN隻有 4000+ 子網的限制,同時架設在 UDP 協定上後其擴充性提高了不少(因為 UDP 是高層協定,屏蔽了底層的差異,換句話說屏蔽了二層的差異)。
1.2.1 VxLAN 主要的網絡裝置與組網方案
VXLAN網絡裝置主要有三種角色,分别是:
(1)VTEP(VXLAN Tunnel End Point):直接與終端裝置比如虛機連接配接的裝置,負責原始以太封包的 VXLAN 封裝和解封裝,形态可以是虛拟交換機比如 Open vSwitch,也可以是實體交換機。
(2)VXLAN GW(VXLAN Gateway/二層網關):用于終結VXLAN網絡,将VXLAN封包轉換成對應的傳統二層網絡送到傳統以太網絡,适用于VXLAN網絡内伺服器與遠端終端或遠端伺服器的二層互聯。如在不同網絡中做虛拟機遷移時,當業務需要傳統網絡中伺服器與VXLAN網絡中伺服器在同一個二層中,此時需要使用VXLAN二層網關打通VXLAN網絡和二層網絡。如下圖所示,VXLAN 10網絡中的伺服器要和IP網絡中VLAN100的業務二層互通,此時就需要通過VXLAN的二層網關進行互聯。VXLAN10的封包進入IP網絡的流量,剝掉VXLAN的封包頭,根據VXLAN的标簽查詢對應的VLAN網絡(此處對應的是VLAN100),并據此在二層封包中加入VLAN的802.1Q封包送入IP網絡;相反VLAN100的業務流量進入VXLAN也需要根據VLAN獲知對應的VXLAN網絡編号,根據目的MAC獲知遠端VTEP的IP位址,基于以上資訊進行VXLAN封裝後送入對應的VXLAN網絡。可見,它除了具備 VTEP 的功能外,還負責 VLAN 封包與 VXLAN 封包之間的映射和轉發,主要以實體交換機為主。
(3)VXLAN IP GW(VXLAN IP Gateway/三層網關):用于終結 VXLAN 網絡,将 VXLAN 封包轉換成傳統三層封包送至 IP 網絡,适用于 VXLAN 網絡内伺服器與遠端終端之間的三層互訪;同時也用作不同VXLAN網絡互通。如下圖所示,當伺服器通路外部網絡時,VXLAN三層網關剝離對應VXLAN封包封裝,送入IP網絡;當外部終端通路VXLAN内的伺服器時,VXLAN根據目的IP位址确定所屬VXLAN及所屬的VTEP,加上對應的VXLAN封包頭封裝進入VXLAN網絡。VXLAN之間的互訪流量與此類似,VXLAN網關剝離VXLAN封包頭,并基于目的IP位址确定所屬VXLAN及所屬的VTEP,重新封裝後送入另外的VXLAN網絡。可見,具有 VXLAN GW 的所有功能,此外,還負責處理不同 VXLAN 之間的封包通信,同時也是資料中心内部服務向往釋出業務的出口,主要以高性能實體交換機為主。
可見,無論是二層還是三層網關,均涉及到查表轉發、VXLAN封包的解封裝和封裝操作。從轉發效率和執行性能來看,都隻能在實體網絡裝置上實作,并且傳統裝置無法支援,必須通過新的硬體形式來實作。以上裝置均是實體網絡的邊緣裝置,而有三種邊緣裝置構成了VXLAN Overlay 網絡,對于應用系統來說,隻與這三種裝置相關,而與底層實體網絡無關。
Overlay 網絡架構就純大二層的實作來說,可分為 網絡Overlay、主機Overlay以及兩種方式同時部署的混合Overlay。 Overlay網絡與外部網絡資料連通也有多種實作模式,并且對于關鍵網絡部件有不同的技術要求。
(1)網絡 Overlay 方案:使用實體交換機做VxLAN網絡裝置
網絡Overlay
網絡Overlay 方案如上圖所示,所有的實體接入交換機支援VXLAN,實體伺服器支援SR-IOV功能,使虛拟機通過SR-IOV技術直接與實體交換機相連,虛拟機的流量在接入交換機上進行VXLAN封包的封裝和解除安裝,對于非虛拟化伺服器,直接連接配接支援VXLAN的接入交換機,伺服器流量在接入交換機上進行VXLAN封包封裝和解除安裝;當VXLAN網絡需要與VLAN網絡通信時,采用實體交換機做VXLAN GW,實作VXLAN網絡主機與VLAN網絡主機的通信;采用高端交換機做VXLAN IP GW,實作VXLAN網絡與WAN以及Internet的互連。
(2)主機Overlay方案:使用伺服器上的軟體實作VxLAN網絡裝置
主機Overlay
在主機Overlay方案中(如上圖所示),VTEP、VXLAN GW、VXLAN IP GW 均通過安裝在伺服器上的軟體實作,
- vSwitch 實作VTEP功能,完成VXLAN封包的封裝解封裝;
- vFW 等實作VXLAN GW功能,實作VXLAN網絡與VLAN網絡、實體伺服器的互通;
- vRouter作為VXLAN IP GW,實作 VXLAN 網絡與 Internet和WAN的互聯。
在本組網中,由于所有VXLAN封包的封裝解除安裝都通過軟體實作,會占用部分伺服器資源,當通路量大時,vRouter會成為系統瓶頸。
(3)混合Overlay組網方案
混合Overlay
上述兩種組網方案中,網絡Overlay方案與虛拟機相連,需要通過一些特殊的要求或技術實作虛拟機與VTEP的對接,組網不夠靈活,但是主機Overlay方案與傳統網絡互通時,連接配接也比較複雜,且通過軟體實作 VXLAN IP GW 也會成為整個網絡的瓶頸,是以最理想的組網方案應該是一個結合了網絡Overlay與主機Overlay兩種方案優勢的混合Overlay方案。
如上圖所示,它通過 vSwitch 實作虛拟機的VTEP,通過實體交換機實作實體伺服器的VTEP,通過實體交換機實作VXALN GW和VXLAN IP GW;混合式Overlay組網方案對虛拟機和實體伺服器都能夠很好的相容,同時通過專業的硬體交換機實作VXLAN IP GW進而承載超大規模的流量轉發,是目前應用比較廣泛的組網方案。
VxLAN 網絡中,虛機之間的三種互訪形式:
- 相同VXLAN内 VM之間互訪:
- 單點傳播封包在 VTEP 處查找目的MAC位址,确定對應的VTEP主機IP位址
- 根據目的和源VTEP主機IP位址封裝VXLAN封包頭後發送給IP核心網
- IP 核心内部根據路由轉發該UDP封包給目的VTEP
- 目的VTEP解封裝VXLAN封包頭後按照目的MAC轉發封包給目的VM
- 不同VXLAN内 VM之間需要互訪經過VXLAN IP GW 完成,
- 在VXLAN IP GW上比對 VXLAN Maping 表項進行轉發,封包封裝模式同同一VXLAN内VM一緻
- VXLAN VM與VLAN VM之間互訪,通過VXLAN GW來完成,
- VXLAN 封包先通過VXLAN 内部轉發模式對封包進行封裝,目的IP為VXLAN GW
- 在VXLAN GW把VXLAN封包解封裝後,比對二層轉發表項進行轉發,VLAN到VXLAN的通路流程正好相反
1.2.2 VXLAN 的實作
1.2.2.1 VxLAN 将二層資料幀封裝為 UDP 包
含義:
- Outer MAC destination address (MAC address of the tunnel endpoint VTEP)
- Outer MAC source address (MAC address of the tunnel source VTEP)
- Outer IP destination address (IP address of the tunnel endpoint VTEP)
- Outer IP source address (IP address of the tunnel source VTEP)
- Outer UDP header:Src port 往往用于 load balancing,下文有提到;Dst port 即 VXLAN Port,預設值為 4789.
- VNID:表示該幀的來源虛機所在的 VXLAN 網段的 ID
特點:
- VNID: 24-bits,最大 16777216。每個不同的 24-bits VNI 代表一個 VXLAN 網段。隻有同一個網段中的虛機才能互相通信。
- VXLAN Port:目的 UDP 端口,預設使用 4789 端口。使用者可以自己配置。
- 兩個 VTEP 之間的 VXLAN tunnels 是無狀态的。
- VTEP 可以在虛拟交換機上,實體交換機或者實體伺服器上通過軟體或者硬體實作。
- 使用多點傳播來傳送未知目的的、廣播或者多點傳播幀。
- VTEP 不可以對 VXLAN 包分段。
1.2.2.2 VTEP 尋址
一個 VTEP 可以管理多個 VXLAN 隧道,每個隧道通向不同的目标。那 VTEP 接收到一個二層幀後,它怎麼根據二層幀中的目的 MAC 位址找到對應的 VXLAN 隧道呢?VXLAN 利用了多點傳播和 MAC 位址學習技術。如果它收到的幀是個廣播幀比如 ARP 幀,也會經過同樣的過程。
以下圖為例,每個 VTEP 包含兩個 VXLAN 隧道。VTEP-1 收到二層 ARP 幀1(A 要查找 B 的 MAC) 後,發出一個 Dst IP 位址為VTEP多點傳播組 239.1.1.1 的 VXLAN 封裝 UDP 包。該包會達到 VTEP-2 和 VTEP-3。VTEP-3 收到後,因為目的 IP 位址不在它的範圍内,丢棄該包,但是學習到了一條路徑:MAC-A,VNI 10,VTEP-1-IP,它知道要到達 A 需要經過 VTEP-1 了。VTEP-2 收到後,發現目的 IP 位址是機器 B,交給 B,同時添加學習到的規則 MAC-A,VNI 10,VTEP-1-IP。B 發回響應幀後,VTEP-2 直接使用 VTEP-1 的 IP 直接将它封裝成三層包,通過實體網絡直接到達 VTEP-1,再由它交給 A。VTEP-1 也學習到了一條規則 MAC-B,VNI 10,VTEP-2-IP。
1.2.2.3 VxLAN 組網
- 邏輯 VxLAN Tunnel:建立在實體的 VxLAN 網絡之上,向虛機提供虛拟的二層網絡,以 VNID 做區分。
- VTEP (VxLAN Tunnel End Point):對虛機的二層包封裝和解封。
1.2.2.4 資料流向
發送端:
- 計算目的位址:Linux 核心在發送之前會檢查資料幀的目的MAC位址,需要選擇目的 VTEP。
- 如果是廣播或者多點傳播位址,則使用其 VNI 對應的 VXLAN group 多點傳播位址,該多點傳播組内所有的 VTEP 将收到該多點傳播包;
- 如果是單點傳播位址,如果 Linux 的 MAC 表中包含該 MAC 位址對應的目的 VTEP 位址,則使用它;
- 如果是單點傳播位址,但是 LInux 的 MAC 表中不包含該 MAC 位址對應的目的 VTEP IP,那麼使用該 VNI 對應的多點傳播位址。
- 添加Headers:依次添加 VXLAN header,UDP header,IP header。
接收端:
- UDP監聽:因為 VXLAN 利用了 UDP,是以它在接收的時候勢必須要有一個 UDP server 在監聽某個端口,這個是在 VXLAN 初始化的時候完成的。
- IP包剝離:一層一層剝離出原始的資料幀,交給 TCP/IP 棧,由它交給虛機。
實作代碼在這裡。
1.2.2.6 負載均衡
組成 VXLAN 隧道的三層路由器在有多條 ECMP (Equal-cost multi-path routing)路徑通往目的 VTEP 時往往會使用基于每個包( per-package) 的 負載均衡(load balancing)。因為兩個 VTEP 之間的所有資料包具有相同的 outer source and destination IP addresses 和 UDP destination port,是以 ECMP 隻能使用 soure UDP port。VTEP 往往将其設定為原始資料幀中的一些參數的 hash 值,這樣 ECMP 就可以使用該 hash 值來區分 tunnels 直接的網絡流量了。
這裡有更詳細的 VXLAN 介紹。
1.3. 相關技術對比
1.3.1 VLAN 和 VxLAN 的對比
該圖中的網絡元件和Neutorn 中相應的元件一一對應:
VLAN | VXLAN |
cloudVirBrX 對應于 br-int ethY.X 對應于 br-eth3 (實體bridge) ethY 對應于 Hypervisor NIC | cloudVirBrX 對應于 br-int vxlanX 對應于 Neutron 中的 br-tun。 cloudbrZ 對應于 Neutorn 中的 br-tun 上的 vxlan interface。 ethY 對應于Hypervisor NIC |
1.3.2 GRE 和 VXLAN 對比
Feature | VXLAN | GRE |
---|---|---|
Segmentation | 24-bit VNI (VXLAN Network Identifier) | Uses different Tunnel IDs |
Theoretical scale limit | 16 million unique IDs | 16 million unique IDs |
Transport | UDP (default port 4789) | IP Protocol 47 |
Filtering | VXLAN uses UDP with a well-known destination port; firewalls and switch/router ACLs can be tailored to block only VXLAN traffic. | Firewalls and layer 3 switches and routers with ACLs will typically not parse deeply enough into the GRE header to distinguish tunnel traffic types; all GRE would need to be blocked indiscriminately. |
Protocol overhead | 50 bytes over IPv4 (8 bytes VXLAN header, 20 bytes IPv4 header, 8 bytes UDP header, 14 bytes Ethernet). | 42 bytes over IPv4 (8 bytes GRE header, 20 bytes IPv4 header, 14 bytes Ethernet). |
Handling unknown destination packets, broadcasts, and multicast | VXLAN uses IP multicast to manage flooding from these traffic types. Ideally, one logical Layer 2 network (VNI) is associated with one multicast group address on the physical network. This requires end-to-end IP multicast support on the physical data center network. | GRE has no built-in protocol mechanism to address these. This type of traffic is simply replicated to all nodes. |
IETF specification | http://tools.ietf.org/html/draft-mahalingam-dutt-dcops-vxlan-01 | http://tools.ietf.org/html/rfc2784.html |
2. Neutron 通過 OVS 對 GRE 和 VXLAN 的支援
因為 OVS 對兩種協定的實作機制,Neutron 對兩個協定的支援的代碼和配置幾乎是完全一緻的,除了一些細小差别,比如名稱,以及個别配置比如VXLAN的UDP端口等。OVS 在計算或者網絡節點上的 br-tun 上建立多個 tunnel port,和别的節點上的 tunnel port 之間建立點對點的 GRE/VXLAN Tunnel。Neutron GRE/VXLAN network 使用 segmentation_id (VNI 或者 GRE tunnel id) 作為其網絡辨別,類似于 VLAN ID,來實作不同網絡内網絡流量之間的隔離。
2.1 Open vSwitch 實作的 VxLAN VTEP
從上面的基礎知識部分,我們知道 VTEP 不隻是實作包的封裝和解包,還包括:
(1)ARP 解析:需要盡量高效的方式響應本地虛機的 ARP 請求
(2)目的 VTEP 位址搜尋:根據目的虛機的 MAC 位址,找到它所在機器的 VTEP 的 IP 位址
通常的實作方式包括:
(1)使用 L3 多點傳播
(2)使用 SDN 控制器(controller)來提供集中式的 MAC/IP 對照表
(一個基于 Linuxbrige + VxLAN + Service Node 的集中式 Controller node 解決 VNI-VTEP_IPs 映射的提議,替代L3多點傳播和廣播,來源: 20140520-dlapsley-openstack-summit-vancouver-vxlan-v0-150520174345-lva1-app6891.pptx)
(3)在VTEP本地運作一個代理(agent),接收(MAC, IP, VTEP IP)資料,并提供給 VTEP
那 Open vSwitch 是如何實作這些功能需求的呢?
(1)在沒有啟用 l2population 的情況下,配置了多點傳播就使用多點傳播,沒的話就使用廣播
(2)在啟用 l2population 的情況下,在虛機 boot 以後,通過 MQ 向用于同網絡虛機的節點上的 l2population driver 發送兩種資料,再将資料加入到 OVS 流表
(2.1)FDB (forwarding database): 目的位址-所在 VTEP IP 位址的對照表,用于查找目的虛機所在的 VTEP 的 IP 位址
(2.2)虛機 IP 位址 - MAC 位址的對照表,用于響應本地虛機的 ARP 請求
2.2 隧道端口 (tunnel port)
下面是一個執行個體。該例子中,10.0.1.31 Hypervisor上的 br-tun 上分别有兩個 GRE tunnel 端口和兩個 VXLAN tunnel 端口,分别連接配接 目标 Hypervisor 10.0.1.39 和 21。
Bridge br-tun
Port "vxlan-0a000127"
Interface "vxlan-0a000127"
type: vxlan
options: {df_default="true", in_key=flow, local_ip="10.0.1.31", out_key=flow, remote_ip="10.0.1.39"}
Port "vxlan-0a000115"
Interface "vxlan-0a000115"
type: vxlan
options: {df_default="true", in_key=flow, local_ip="10.0.1.31", out_key=flow, remote_ip="10.0.1.21"}
Port "gre-0a000127"
Interface "gre-0a000127"
type: gre
options: {df_default="true", in_key=flow, local_ip="10.0.1.31", out_key=flow, remote_ip="10.0.1.39"}
Port "gre-0a000115"
Interface "gre-0a000115"
type: gre
options: {df_default="true", in_key=flow, local_ip="10.0.1.31", out_key=flow, remote_ip="10.0.1.21"}
當有多個節點時,Neutron 會建立一個 tunnel 網:
2.3 在不使用 l2population 時的隧道建立過程
要使用 GRE 和 VXLAN,管理者需要在 ml2 配置檔案中配置 local_ip(比如該實體伺服器的公網 IP),并使用配置項 tunnel_types 指定要使用的隧道類型,即 GRE 或者 VXLAN。當 enable_tunneling = true 時,Neutorn ML2 Agent 在啟動時會建立 tunnel bridge,預設為 br-tun。接着,ML2 Agent 會在 br-tun 上建立 tunnel ports,作為 GRE/VXLAN tunnel 的一端。具體過程如圖所示:
OVS 預設使用 4789 作為 VXLAN port。下表中可以看出 Neutron 節點在該端口上監聽來自所有源的UDP包:
root@compute1:/home/s1# netstat -lnup
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
udp ...: ...:*
2.4 Neutron tunnel 資料流向
Neutron 中的資料流向是受 Neutron 添加在 integration bridge 和 tunnel bridge 中的 OpenFlow rules 控制的,而且和 L2 population 直接相關。具體内容在下一篇文章中會仔細分析。
2.5 MTU 問題
VXLAN 模式下虛拟機中的 mtu 最大值為1450,也就是隻能小于1450,大于這個值會導緻 openvswitch 傳輸分片,進而導緻虛拟機中資料包資料重傳,進而導緻網絡性能下降。GRE 模式下虛拟機 mtu 最大為1462。
計算方法如下:
- vxlan mtu = 1450 = 1500 – 20(ip頭) – 8(udp頭) – 8(vxlan頭) – 14(以太網頭)
- gre mtu = 1462 = 1500 – 20(ip頭) – 4(gre頭) – 14(以太網頭)
可以配置 Neutron DHCP 元件,讓虛拟機自動配置 mtu,官方文檔連結 http://docs.openstack.org/juno/install-guide/install/yum/content/neutron-network-node.html
#/etc/neutron/dhcp_agent.ini
[DEFAULT]
dnsmasq_config_file = /etc/neutron/dnsmasq-neutron.conf
#/etc/neutron/dnsmasq-neutron.conf
dhcp-option-force=,或
重新開機 DHCP Agent,讓虛拟機重新擷取 IP,然後使用 ifconfig 檢視是否正确配置 mtu。
3. H3C 選擇 VxLAN 的理由
H3C 是國内領先的網絡裝置供應商之一,在其一篇文章中,談到了他們為什麼選擇 VxLAN 技術。這對别的使用者具有一定的參考性。
3.1 為什麼選擇 VxLAN
從Overlay網絡出現開始,業界陸續定義了多種實作Overlay網絡的技術,主流技術包括:VXLAN、NVGRE、STT、Dove等(如圖所示)。
Overlay主流技術概覽
從标準化程度進行分析,DOVE和STT到目前為止,标準化進展緩慢,基本上可以看作是IBM和VMware的私有協定。是以,從H3C的角度來看無法選擇這兩種技術。
從技術的實用性來看,XLAN和NVGRE兩種技術基本相當。其主要的差别在于鍊路Hash能力。由于NVGRE采用了GRE的封裝報頭,需要在标準GRE報頭中修改部分位元組來進行Hash實作鍊路負載分擔。這就需要對實體網絡上的裝置進行更新改造,以支援基于GRE的負載分擔。這種改造大部分客戶很難接受。相對而言,VXLAN技術是基于UDP報頭的封裝,傳統網絡裝置可以根據UDP的源端口号進行Hash實作鍊路負載分擔。這樣VXLAN網絡的部署就對實體網絡沒有特殊要求。這是最符合客戶要求的部署方案,是以VXLAN技術是目前業界主流的實作方式。
3.2 VXLAN為什麼選擇SDN
VXLAN的标準協定目前隻定義了轉發平面流程,對于控制平面目前還沒有協定規範,是以目前業界有三種定義VXLAN控制平面的方式。
方式1:多點傳播。由實體網絡的多點傳播協定形成多點傳播表項,通過手工将不同的VXLAN與多點傳播組一一綁定。VXLAN的封包通過綁定的多點傳播組在多點傳播對應的範圍内進行泛洪。簡單來說,和VLAN方式的多點傳播泛洪和MAC位址自學習基本一緻。差別隻是前者在三層網絡中預定義的多點傳播範圍内泛洪,而後者是在二層網絡中指定VLAN範圍内泛洪。這種方式的優點是非常簡單,不需要做協定擴充。但缺點也是顯而易見的,需要大量的三層多點傳播表項,需要複雜的多點傳播協定控制。顯然,這兩者對于傳統實體網絡的交換機而言,都是巨大的負荷和挑戰,基本很難實作。同時,這種方式還給網絡帶來大量的多點傳播泛洪流量,對網絡性能有很大的影響。
方式2:自定義協定。通過自定義的鄰居發現協定學習Overlay網絡的拓撲結構并建立隧道管理機制。通過自定義(或擴充)的路由協定透傳Overlay網絡的MAC位址(或IP位址)。通過這些自定義的協定可以實作VXLAN控制平面轉發表項的學習機制。這種方式的優點是不依賴多點傳播,不存在大量的多點傳播泛洪封包,對網絡性能影響很小。缺點是通過鄰居發現協定和路由協定控制所有網絡節點,這樣網絡節點的數量就受到協定的限制。換句話說,如果網絡節點的數量超過一定範圍,就會導緻對應的協定(例如路由協定)運作出現異常。這一點在網際網路行業更加明顯,因為網際網路行業雲計算的基本特征就是大規模甚至超大規模。尤其是在vSwitch上運作VXLAN自定義路由協定,其網絡節點數量可以達到幾千甚至上萬個,沒有路由協定可以支援這種規模的網絡。
方式3:SDN控制器。通過SDN控制器集中控制VXLAN的轉發,經由Openflow協定下發表項是目前業界的主流方式。這種方式的優點是不依賴多點傳播,不對網絡造成負荷;另外,控制器通過叢集技術可以實作動态的擴容,是以可以支援大規模甚至超大規模的VXLAN網絡。當然,SDN控制器本身的性能和可靠性決定了全網的性能和可靠性,是以如何能夠提高控制器的性能和可靠性就是核心要素。
3.3 VXLAN Fabric網絡架構的優勢
雲計算網絡一直都有一個理念:Network as a Fabric,即整網可以看作是一個交換機。通過VXLAN Overlay可以很好地實作這一理念——VXLAN Fabric(如下圖所示)。
VXLAN Fabric網絡架構
Spine和Leaf節點共同建構了Fabric的兩層網絡架構,通過VXLAN實作Spine和Leaf之間的互聯,可以看做是交換機的背闆交換鍊路。Spine節點數量可以擴容,最大可以達到16台。Leaf節點數量也可以平滑擴容。理論上隻要Spine節點的端口密度足夠高,這個Fabric可以接入數萬台實體伺服器。
另外,通過VXLAN隧道可以實作安全伺服器節點的靈活接入。這些安全服務節點可以集中部署在一個指定區域,也可以靈活部署在任意Leaf節點下。通過Service Chain技術實作任意兩個虛拟機之間可以通過任意安全服務節點互聯。保證網絡中虛拟機業務的安全隔離和控制通路。同理,Fabric的出口節點也可以部署在任意位置,可以靈活擴充。
簡而言之,VXLAN Fabric建構了一個靈活的、穩定的、可擴充的Overlay網絡。這個網絡可以有效地解決雲計算對網絡的挑戰,是雲計算網絡發展的趨勢。
作者資訊:劉世民(Sammy Liu),IBM 雲架構師,十餘年IT行業從業經曆,在電信、企業軟體、存儲以及雲計算等領域做過研發、管理和架構設計等工作。從 2012 年開始學習 OpenStack,對其核心子產品有較深入的了解;帶領過團隊開發OpenStack子產品。
責編:陳晨,關注雲計算,聯系請添加微信:violace95 備注公司+職位+姓名。尋求報道或投稿,請聯系 [email protected]
2016年5月13日-15日,由CSDN重磅打造的2016中國雲計算技術大會(CCTC 2016)将于5月13日-15日在北京舉辦,今年大會特設“中國Spark技術峰會”、“Container技術峰會”、“OpenStack技術峰會”、“大資料核心技術與應用實戰峰會”四大技術主題峰會,以及“雲計算核心技術架構”、“雲計算平台建構與實踐”等專場技術論壇。大會講師陣容囊括Intel、微軟、IBM、AWS、Hortonworks、Databricks、Elastic、百度、阿裡、騰訊、華為、樂視、京東、小米、微網誌、迅雷、國家電網、中國移動、長安汽車、廣發證券、民生銀行、國家超級計算廣州中心等60+頂級技術講師,CCTC必将是中國雲計算技術開發者的頂級盛會。目前會議門票限時7折(截止至4月29日24點),詳情通路CCTC 2016官網。