Open vSwitch

Open vSwitch 概述

Open vSwitch是由Nicira Networks主導的,運行在虛擬化平臺上的虛擬交換機。OVS可以動態變化的端點提供2層交換功能,很好的控制虛擬網絡中訪問策略、網絡隔離、流量監控等等。OVS遵循Apache2.0許可證,能同時支持多種標準的管理接口和協議。OVS也提供對OpenFlow協議的支持,用戶可以使用任何OpenFlow協議的控制器對OVS進行遠程管理控制。

Bridge:Bridge代表一個以太網交換機(Switch),一個機中可以創建一個或者多個Bridge設備。

Port:端口與物理交換機的端口概念類似,每個Port都隸屬於一個Bridge。

Interface:連接到Port的網絡接口設備。Port和Interface是一對一關係,只有在配置Port爲bond模式,Port和Interface纔是一對多關係。

Controller:OpenFlow控制器。OVS可以同時接受一個或多個OpenFlow控制器的管理。

datapath:在OVS中,datapath負責執行數據交換,從接受端口收到的數據包在流標中進行匹配,並執行匹配到的動作。

Flow table:每個datapath都和一個‘flow table’關聯,當datapath接收到數據後,OVS會在flow table中查找可以匹配的的flow,並執行對應的操作,例如轉發數據到另外的端口。

VMware vNetwork distributed switch 以及思科的Cisco Nexus 1000V這種虛擬交換機提供的是一個集中式的控制方式。而OVS則是一個獨立的vswitch,運行在每個實現虛擬化的物理機器上,並提供遠程管理。OVS提供兩種在虛擬化環境中遠程管理的協議,一個是OpenFlow,通過流表來管理交換機行爲,一個是OVSDB management protocol,用來暴露sietch的port狀態

OpenvSwitch,簡稱OVS是一個虛擬交換軟件,主要用於虛擬機VM環境,作爲一個虛擬交換機,支持Xen/XenServer, KVM, and VirtualBox多種虛擬化技術。在虛擬化平臺上,OVS可以動態變化的端口提供2層交換功能,很好控制虛擬網絡中的訪問策略、網絡隔離、流量監控等等。

 

OpenvSwitch功能

Standard 802.1Q VLAN model with trunk and access ports

NIC bonding with or without LACP on upstream switch

NetFlow, sFlow(R), and mirroring for increased visibility

QoS (Quality of Service) configuration, plus policing

GRE, GRE over IPSEC, VXLAN, and LISP tunneling

802.1ag connectivity fault management

OpenFlow 1.0 plus numerous extensions

Transactional configuration database with C and Python bindings

High-performance forwarding using a Linux kernel module

 

Open vSwitch組成

ovs-vswitchd:守護進程,實現交換功能,和linux內核兼容模塊一起,實現基於流的交換flow-based switching

ovs-server:輕量級的數據庫服務,主要保存了整個OVS的配置信息,包括接口,交換內容,VLAN等。ovs-vswitchd會根據數據庫中的配置信息工作

ovs-dpctl:一個工具,用來配置交換機內核模塊,可以控制轉發規則

ovs-vsctl:主要是獲取或更改ovs-vswitchd的配置信息,此工具操作時候會更新ovsdb-server中的數據庫

ovs-appctl:GUI工具用來顯示ovsdb-server中數據信息

ovs-controller:一個簡單的OpenFlow控制器

ovs-ofctl:用來控制OVS作爲OpenFlow交換機工作時候的流表內容

 

OpenFlow

OpenFlow是用於管理交換機流表的協議,ovs-ofctl則是提供命令行工具。在沒有配置OpenFlow控制器的模式下,用戶可以使用ovs-ofctl命令通過OpenFlow協議去連接OVS,創建、修改或刪除OVS中的流標項,並對OVS的運行狀況進行動態監控。

所謂流表,可被視作是OpenFlow對網絡設備的數據轉發功能的一種抽象。在傳統網絡設備中,交換機和路由器的數據轉發需要依賴設備中保存的二層MAC地址轉發或者三層IP地址路由表,而OpenFlow交換機使用的流表也是如此,不過在它的表項中整合了整個網絡中各個層次的網絡配置信息,從而在進行數據轉發時可以使用更豐富的規則。

在OpenFlow中,Flow被定義爲某個特定的網絡流量。例如,一個TCP連接就是一個Flow,或者從某個IP地址發出來的數據包,都可以被認爲是一個Flow。支持OpenFlow協議的交換機應該包括一個或者多個流表,流表中的條目包含:數據包頭信息、匹配成功後要執行的指定和統計信息。

當數據包進入OVS後,會將數據包和流表中的流表項進行匹配,如果發現了匹配的流表項,則執行該流表項中的指令集。相反,如果數據包在流表中沒有發現任何匹配,OVS會通過控制通道把數據包發送到OpenFlow控制器中。

流表中常用字段:

in_port=port                傳遞數據包的端口OpenFlow的端口編號

dl_vlan=valn                數據包的Vlan Tag值,範圍是0-4095,0xffff 代表不包含 VLAN Tag 的數據包

dl_src=<MAC>                匹配源或目標的MAC地址

dl_dst=<MAC>                01:00:00:00:00:00/01:00:00:00:00:00 代表廣播地址

        00:00:00:00:00:00/01:00:00:00:00:00 代表單薄地址

dl_type=ethertype                匹配以太網協議類型

        dl_type=0x0800 代表IPv4協議

        dl_type=0x086dd 代表IPv6協議

        dl_type=0x0806  代表ARP協議

nw_src=ip[/netmask]        當dl_type=0x0800時,匹配源後目標的ipv4地址,可以使ip或者域名

nw_dst=ip[/netmask]

nw_proto=proto                和dl_type字段協同使用,當 dl_type=0x0800 時,匹配 IP 協議編號;當 dl_type=0x086dd 代表 IPv6 協議編號

table=number                 指定要使用的流表的編號,範圍是 0-254。在不指定的情況下,默認值爲 0。通過使用流表編號,可以創建或者修改多個 Table 中的 Flow

reg<idx>=value[/mask]         交換機中的寄存器的值。當一個數據包進入交換機時,所有的寄存器都被清零,用戶可以通過 Action 的指令修改寄存器中的值

 

一個流規則中可能有多個動作,按照指定的先後順序執行。

    output:port: 輸出數據包到指定的端口。port 是指端口的 OpenFlow 端口編號

    mod_vlan_vid: 修改數據包中的 VLAN tag

    strip_vlan: 移除數據包中的 VLAN tag

    mod_dl_src/ mod_dl_dest: 修改源或者目標的 MAC 地址信息

    mod_nw_src/mod_nw_dst: 修改源或者目標的 IPv4 地址信息

    resubmit:port: 替換流表的 in_port 字段,並重新進行匹配

    load:value>dst[start..end]: 寫數據到指定的字段

OpenvSwitch和其它vswitch

這裏其它的vswitch,包括VMware vNetwork distributed switch以及思科的Cisco Nexus 1000V

VMware vNetwork distributed swtich以及思科的Cisco Nexus 1000V這種虛擬交換機提供一個集中式的控制方式。而OVS則是一個獨立的vswitch,他運行在每個現實虛擬化的物理機器上,並提供遠程管理

OVS提供了兩種在虛擬化環境中遠程管理的協議:

一個OpenFlow通過流表來管理交換機的行爲

一個OVSDB management protocol用來暴露sietch的port狀態

vswitch、Bridge、Datapath

在網絡中,交換機和橋都是同一個概念,OVS實現了一個虛擬機以太網交換機,OVS也就是實現了一個以太橋。在OVS中,給一個交換機或一個橋叫DataPath

網橋也叫橋接器,連接兩個局域網的設備,網橋工作在數據鏈路層,將兩個LAN連接,根據MAC地址轉發幀

Bridge:bridge代表一個以太網交換機,一個主機中可以創建多個Bridge設備

Port:端口相當於物理交換機的端口,每個Port都隸屬於一個Brdige

Interface:連接到Port爲bond模式後,Port和Interface纔是已對多關係

Controller:OpenFlow控制器。OVS可以同事接受一個或多個OpenFlow控制器的管理

datapath:在OVS中,datapath負責執行數據交換,也就是把接收端口收到的數據在流表中匹配,並執行匹配到的動作

Flow table:每個datapath都和一個Flow table關聯,當datapath接收到數據之後,OVS會在Flow table中查找可以匹配的Flow,執行對應的操作

 

安裝openvswitch,配置外網網橋

yum install openvswitch-2.3.1-2.el7.x86_64.rpm -y

systemctl restart  openvswitch && systemctl enable openvswitch

ovs-vsctl add-br br-wan  添加網橋

ovs-vsctl add-br br-lan

ovs-vsctl del-br br-lan  刪除網橋

ovs-vsctl del-br br-wan

給網橋配置管理ip

ip address add 192.168.1.1/24 dev br-wan

 

將br-wan連接到上聯(機房外網交換機)網卡設備

ovs-vsctl add-port br-wan ${uploadeth} -- set Port ${uploadeth} trunks=80,140,210,260,300,440,610 -- set Interface ${uploadeth} ofport_request=32

ovs-vsctl add-port br-wan ens160

ovs-vsctl del-port br-wan ens160

 

添加外網網絡節點到計算節點的隧道vtep,請將計算節點IP放置在/tmp/file下,也可以單條逐個添加!

cat /tmp/file.txt |while read line

do

ovs-vsctl add-port br-wan vxlan${line} -- set Interface vxlan${line} type=vxlan option:remote_ip=${line} option:key=flow

done

 

查表

ovs-vsctl list bridge br-wan

 

 

openvswihch組成

每個of交換機(switch)都有一張流表,進行包查找和轉發。交換機可以通過of協議經一個安全通道連接到外部控制器(controller),對流表進行查詢和管理。

流表包括包頭域(header fileds,匹配包頭多個域)、活動計數器(counters)、0個或多個執行行動(actions)。對每個包進行查找,如果匹配則執行相關策略,否則通過安全通道將包轉發到控制器,控制器來決策相關行爲。流表項可以將包轉發到一個或者多個接口。

流表

流表是交換機進行轉發策略控制的核心數據結構。交換芯片通過查找流表項來決策對進入交換機的網絡流量採取合適的行爲。

包頭域

包頭域包括12個域,進入接口、Ethernet源地址、目標地址、類型、vlan idvlan優先級、ip源地址、目標地址、協議、IP Tos位、TCP/UDP目標端口、源端口。每個域包括一個確定值或者所有值(any),更準確的匹配可以通過掩碼實現。

流表包頭域

Ingress port

Ether Source

Ether Dst

Ether Type

Vlan id

Vlan priority

IP src

IP dst

IP proto

IP ToS   bits

TCP/UDP   Src Port

TCP/UDP   Dst Port

 

 

 

 




























http://www.ibm.com/developerworks/cn/cloud/library/1401_zhaoyi_openswitch/


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章