Open vSwitch 入门实践(5)OVS Flow Table 流表规则

OpenvSwitch flow table 流表 OpenFlow(OF)被认为是第一个软件定义网络(SDN)标准之一。它最初在SDN环境中定义了通信协议,使SDN控制器能够与物理和虚拟的交换机和路由器等网络设备的转发平面直接进行交互,从而更好地适应不断变化的业务需求。 如果把OpenFlow控制器比作“大脑”,OVS流表就像是“大腿”一样接受来自“大脑”的指令,决定要向哪个方向前进。但OVS流表功能更加强大,在没有OpenFlow控制器时,也可以自主工作,它本身也供一些命令让我们可以直接管理流表。 操作命令 查看流表规则 # 查看br-tun上的全部流表规则 ovs-ofctl dump-flows br-tun 添加或修改流表规则 ovs-ofctl add−flow/add−flows/mod−flows “流表匹配条件,actions=[动作1][,动作2…]” 如果你有过编程的经验,流表规则其实就是一个个简单的if语句,伪代码如下。 if (流表匹配条件){ 动作1, 动作2... } if (流表匹配条件){ 动作1, 动作2... } 删除流表规则 # 删除br-tun上的全部流表规则 ovs-ofctl del-flows br-tun # 删除br-tun上匹配xx的全部流表规则 ovs-ofctl del-flows br-tun xx 流表匹配条件 OVS 流表匹配条件较多,下面我将其分成四部分来说明,分别是: OVS匹配条件 OSI模型第二层【数据链路层】 OSI模型第三层【网络层】 OSI模型第四层【传输层】 OVS匹配条件 in_port=port 流量进入的端口编号或者名称,示例 in_port=br-int table=number 规则保存的流表编号,范围是 0-254,默认值:0。 OSI模型第二层【数据链路层】 dl 即是 data link 的缩写。 dl_type=ethertype 匹配以太网协议类型以太类型,以10到65535之间的整数(包括0和65535)指定,以十进制或以0x前缀的十六进制数表示,示例如下。 dl_type=0x0800 匹配IPv4数据包,等同于dl_type=ip 。...

十二月 29, 2020 · 3 分钟 · dushixiang

Open vSwitch 入门实践(4)使用OVS配置端口镜像

前言 当我们想要在不影响虚拟网络设备数据报文收发的情况下获取对应虚拟网络设备的流量时,端口镜像是一个很好的选择。端口镜像是指将经过指定端口(镜像端口)的报文复制一份到另一个指定端口(观察端口),通过观察端口接收到的数据报文,就可以有效识别虚拟网络的运行情况。 OVS提供了相关命令来配置或删除端口镜像,下面我们来实验一下。 如何使用 端口镜像类型 端口镜像分为镜像源和镜像目的两部分。 镜像源 select_all:布尔类型(true,false)。设置为 true 时,表示此网桥上的所有流量。 select_dst_port:字符串(端口名称)。表示此端口接收的所有流量。 select_src_port:字符串(端口名称)。表示此端口发送的所有流量。 select_vlan:整型(0-4095)。表示携带此VLAN标签的流量。 镜像目的 output_port:字符串(端口名称)。接收流量报文的观察端口。 output_vlan:整型(0-4095)。表示只修改VLAN标签,原VLAN标签会被剥离。 基础操作命令 新增端口镜像 ovs-vsctl -- set Bridge <bridge_name> mirrors=@m \ -- --id=@<port0> get Port <port0> \ -- --id=@<port1> get Port <port1> \ -- --id=@m create Mirror name=<mirror_name> select-dst-port=@<port0> select-src-port=@<port0> output-port=@<port1> 这行命令会输出一个镜像ID 删除端口镜像 ovs-vsctl remove Bridge <bridge-name> mirrors <mirror-id> 在原端口镜像的基础上增加一个镜像源 # 获取端口的ID ovs-vsctl get port <port_name> _uuid # 在原端口镜像的基础上增加镜像源 ovs-vsctl add Mirror <mirror-name> select_src_port <port-id> ovs-vsctl add Mirror <mirror-name> select_dst_port <port-id> 在原端口镜像的基础上删除一个镜像源...

十二月 28, 2020 · 3 分钟 · dushixiang

Open vSwitch 入门实践(3)使用OVS构建分布式隔离网络

使用OVS构建分布式隔离网络 前言 上一节我们使用OVS构建了单机隔离网络,但是随着网络规模的扩张,单节点已经不再能满足业务的需要,分布式网络成了必不可少的环节。分布式网络与单节点网络在细节实现上基本一致,只有物理环境网络连线上的一点区别。 实验1:分布式无隔离网络 网络拓扑如下图所示,我们每一台节点都有两张网卡,一张用于管理,一张用于业务。之所以使用两张网卡有两个原因: 管理网卡用于日常的维护登录,业务网卡用于传输虚拟节点的数据报文,避免相互之间影响。 我们要将业务网卡绑定到OVS网桥上,也就是Normal类型的Port。这种方式添加的Port不支持分配IP地址,如果之前网卡上配置的有IP,挂载到OVS上面之后将不可访问。 需要注意的是,如果是使用物理环境搭建网络拓扑,需要把业务网卡对应的交换机端口配置为trunk模式。如果是使用VmWare搭建网络拓扑,业务网卡需要配置网络类型为仅主机模式。 配置 配置环境 主机A ovs-vsctl add-br br-int # 请修改eth1为当前实验环境的业务网卡名称 ovs-vsctl add-port br-int eth1 # 添加两个内部端口 ovs-vsctl add-port br-int vnet0 -- set Interface vnet0 type=internal ovs-vsctl add-port br-int vnet1 -- set Interface vnet1 type=internal # 添加两个netns ip netns add ns0 ip netns add ns1 # 将内部端口分别移动到netns中 ip link set vnet0 netns ns0 ip link set vnet1 netns ns1 # 启动端口并配置IP ip netns exec ns0 ip link set lo up ip netns exec ns0 ip link set vnet0 up ip netns exec ns0 ip addr add 10....

十二月 27, 2020 · 2 分钟 · dushixiang

Open vSwitch 入门实践(2)使用OVS构建隔离网络

前言 在前面我们已经使用Linux Bridge完成了多台网络设备的通信,但是它对于网络隔离的支持不是很好,长期以来,在Linux平台上缺少一个功能完备的虚拟交换机,直到OVS的出现。 实验 接下来我们来尝试完成两个实验,单机无隔离网络、单机隔离网络。 实验一:单机无隔离网络 使用ovs构建无隔离网络非常简单,只需要添加一个网桥,然后在这个网桥上再增加几个内部端口,最后把端口移动到netns中即可。 # 添加网桥 ovs-vsctl add-br br-int # 添加三个内部端口 ovs-vsctl add-port br-int vnet0 -- set Interface vnet0 type=internal ovs-vsctl add-port br-int vnet1 -- set Interface vnet1 type=internal ovs-vsctl add-port br-int vnet2 -- set Interface vnet2 type=internal # 添加三个netns ip netns add ns0 ip netns add ns1 ip netns add ns2 # 将内部端口分别移动到netns中 ip link set vnet0 netns ns0 ip link set vnet1 netns ns1 ip link set vnet2 netns ns2 # 启动端口并配置IP ip netns exec ns0 ip link set lo up ip netns exec ns0 ip link set vnet0 up ip netns exec ns0 ip addr add 10....

十一月 26, 2020 · 3 分钟 · dushixiang

Open vSwitch 入门实践(1)Open vSwitch 是什么

OVS简介 Open vSwitch 是什么? Open vSwitch(以下简称OVS)是一个用C语言开发的多层虚拟交换机,使用Apcahe 2开源许可证,现如今基本上已经成为了开源SDN(软件定义网络)基础设施层的事实标准。 OVS支持哪些功能? 支持NetFlow、sFlow(R)、IPFIX、SPAN、RSPAN和GRE隧道镜像等多种流量监控协议 支持LACP (IEEE 802.1AX-2008) 支持标准802.1Q VLAN协议,允许端口配置trunk模式 支持组播 支持BFD和802.1ag链路监控 支持STP(IEEE 802.1D-1998)和RSTP(IEEE 802.1D-2004) 支持细粒度的QoS(服务质量)配置 支持HFSC qdisc 支持接管每一个虚拟机的流量 支持基于源MAC的负载均衡、主备模式和L4哈希的端口绑带 支持OpenFlow协议(包含了很多对虚拟化的扩展) 支持IPv6 支持多种隧道协议(GRE、VXLAN、STT、Geneve和IPsec) 支持C和Python的远程配置协议 支持内核和用户空间的转发引擎选项 具有流缓存引擎的多表转发管道 转发层抽象以简化向新软件和硬件平台的移植 OVS的术语解释 Bridge 中文名称网桥,一个Bridge代表一个以太网交换机(Switch),一台主机中可以创建一个或多个Bridge,Bridge可以根据一定的规则,把某一个端口接收到的数据报文转发到另一个或多个端口上,也可以修改或者丢弃数据报文。 Port 中文名称端口,需要注意的是它和TCP里面的端口不是同样的概念,它更像是物理交换机上面的插口,可以接水晶头的那种。Port隶属于Bridge,必须先添加了Bridge才能在Bridge上添加Port。Port有以下几种类型: Normal 用户可以把操作系统中已有的网卡添加到Open vSwicth上,Open vSwitct会自动生成一个同名的Port开处理这张网卡进和出的数据报文。 不过需要注意的是这种方式添加的Port不支持分配IP地址,如果之前网卡上配置的有IP,挂载到OVS上面之后将不可访问。此类型的Port常用于VLAN模式的多台物理主机相连的那个口,交换机一端属于Trunk模式。 Internal 当Port的类型是Internal时,OVS会自动创建一个虚拟网卡(Interface),此端口收到的数据报文都会转发给这块网卡,从这块网卡发出的数据报文也会通过Port交给OVS处理。当OVS创建一个新的网桥时,会自动创建一个与网桥同名的Internal Port,同时也会创建一个与网桥同名的Interface,因此可以通过ip命令在操作系统中查看到这张虚拟网卡,但是状态是down的。 Patch Patch Port和veth pair功能相同,总是成双成对的出现,在其中一端收到的数据报文会被转发到另一个Patch Port上,就像是一根网线一样。Patch Port常用于连接两个Bridge,这样两个网桥就和一个网桥一样了。 Tunnel OVS 支持 GRE、VXLAN、STT、Geneve和IPsec隧道协议,这些隧道协议就是overlay网络的基础协议,通过对物理网络做的一层封装和扩展,解决了二层网络数量不足的问题,最大限度的减少对底层物理网络拓扑的依赖性,同时也最大限度的增加了对网络的控制。 Interface (iface/接口)接口是OVS与操作系统交换数据报文的组件,一个接口即是操作系统上的一块网卡,这个网卡可能是OVS生成的虚拟网卡,也有可能是挂载在OVS上的物理网卡,操作系统上的虚拟网卡(TUN/TAP)也可以被挂载在OVS上。...

十一月 25, 2020 · 2 分钟 · dushixiang