1. 程式人生 > >理解OpenStack中的OpenvSwitch的幾個要點

理解OpenStack中的OpenvSwitch的幾個要點

OpenvSwitch是實現虛擬化網路的重要基礎元件,在OpenStack中利用OpenvSwitch作為底層部件來完成虛擬網路提供和租戶網路管理。
在部署和應用OpenStack的過程中,可能會碰到網路相關的一些問題,能夠準確的理解OpenStack中OpenvSwitch的角色和網路的理念,會有助於解決問題和快速部署。

OpenvSwitch可以認為是一種Linux Bridge的實現,只不過功能更多一些。因此,它完全可以替代Bridge。原先Bridge可以實現的功能在OpenvSwitch中都可以實現。

OpenvSwitch不等於OpenFlow Switch,恰恰相反,支援OpenFlow只是它的一個feature而已,可能還沒有支援OvsDB協議更重要。因此,它在實現上自定義了很多地方,只是相容OpenFlow協議。比如在OpenvSwitch中使用者態的vswitchd和核心態的datapath。vswitchd會總管流表,而datapath中有精確匹配的部分流表,類似cache架構。

正因為OpenvSwitch不僅僅是一個OpenFlow Switch,它的流表組成除了of流表外,還有其他一些(隱藏)流表。這些隱藏流表是由於預設交換機和控制器在同一網路中(in-band),因此要保證兩者互通。要關閉預設的inband可以通過“ovs
-vsctl set controller br0 connection-mode=out-of-band”。

檢查所有流表資訊可以通過ovs-appctl bridge/dump-flows br0,這往往要比ovs-vsctl dump-flows br0打印出更多的資訊來。ovs-dpctl dump-flows [dp]可以打印出datapath的流表資訊。ovs-appctl dpif/dump-flows <br>可以打印出指定bridge上的datapath流。

OpenvSwitch可以實現訪問控制功能,通過轉發規則,可以實現簡單的安全行為,包括通過、禁止等。現在OpenStack中的安全組是由iptables實現的,造成在節點上多了好幾級的Bridge。理論上,以後都可以統一由OpenvSwitch來管理。

支援VLan(eth0為trunk口,建立vlan 1的tap0口):
ovs
-vsctl add-br br0

ovs-vsctl add-port br0 eth0

ovs-vsctl add-port br0 tap0 tag=1

OpenvSwitch 在無法連線到控制器時候(fail mode)可以選擇兩種fail狀態,一種是standalone,一種是secure狀態。如果是配置了standalone(或者未設定fail mode)mode,在三次探測控制器連線不成功後,此時ovs-vswitchd將會接管轉發邏輯(後臺仍然嘗試連線到控制器,一旦連線則退出fail狀態),OpenvSwitch將作為一個正常的mac 學習的二層交換機。如果是配置了secure mode,則ovs-vswitchd將不會自動配置新的轉發流表,OpenvSwitch將按照原先有的流錶轉發。可以通過下面命令進行管理。

ovs-vsctl get-fail-mode bridge
ovs-vsctl del-fail-mode bridge
ovs-vsctl set-fail-mode bridge standalone|secure