云计算国产化之路 vnc登录 文件系统直通(virtio-9p) 扩展qemu接口 gpg WARNING 珍藏博客 虚拟内存情况dommemstat分析 免密码自动登录脚本 Linux网桥 测试网段IP占用情况 Linux 进程状态 systemc强制依赖 调试openstack ut uefi p2v 重做ubuntu内核 virsh创建虚拟机简介 virtio IO路径 虚拟化层升级后磁盘无法卸载卷 vmtouch使用 Taint flags 主机和虚拟机文件共享处理的几种方法 kvm分析工具 kvm中对磁盘的io cache 虚拟化不同导致的guestos中软件安装差异(未解决) 设备直通(PCI Assignment)到底是咋整的 virtio到底是咋整的 内核启动参数 虚拟化实时性提升(零)之配置步骤 中断虚拟化(pic)到底是咋整的 中断虚拟化(apic)到底是咋整的 Raid卡配置丢失导致服务器无法启动 tainted kernels cpu stuck for 23s问题分析 虚拟化实时性提升(一)之hostOS切换为强实时系统 内存虚拟化到底是咋整的 qemu-kvm中vcpu虚拟化到底是咋整的 风河虚拟化技术点分析 使用qga的好处 qemu迁移代码分析 虚拟机串口配置及其导出到主机pts和console.log System-based I/O vs. Raw I/O 虚拟机使用Hugepage(大页) 硬件辅助分页(hardware assisted paging) 修改centos7默认启动项目 virtio的工作流程——kernel中virtio-pci初始化(2) virtio的工作流程——qemu中virtio-backend初始化(1) qmp ceilometer取不到memory.usage指标 Virtio-Balloon超详细分析 slabtop输出 虚拟机磁盘cache导致的host os kernel崩溃 虚拟机cpu和memory性能优化测评 PCI配置空间(PCI Configuration Space) centos下网卡设备直通(VT-dpci passthrough)遇到的问题及其解决思路 libguestfs详解 yum卸载软件包及其依赖 通过原始Centos ISO来定制自己的ISO centos下网卡设备直通(VT-d,pci passthrough) (占位符)window虚拟机中拔盘如何通知到libvirt和qemu后端的 cirrus漏洞分析CVE-2017-2615 XSA-208 qcow2随笔 控制寄存器概览 ceilometer对接postgresql 解压initrd和vmlinuz qemu guest agent验证 QEMU升级指南(待续) ubuntu中kdump的配置 qemu(2.3)接口梳理 热迁移导致的FC存储场景下的multipath卷残留问题分析 virsh命令(4)secret,snapshot,pool,volume部分 virsh命令(3)之interface,filter,network virsh命令(2)monitor,host,nodedev部分 virsh命令(1)之domain部分 QEMU内存管理之FlatView模型(QEMU2.0.0) ovirt基于sanock的高可用(主机粒度HA) Sanlock防脑裂场景功能测试用例 gnocchi配置及与ceilometer对接指南 make patch for libvirt in centos centos使用sanlock指导 高可用nfs资料 ubuntu14中使用sanlock指导 LVM操作指南 sanlock相关功能验证流程汇总 make patch for libvirt in ubuntu libvirt.so.0-version `LIBVIRT_PRIVATE_1.2.7' not found gdb debug libvirt 基于ubuntu社区源码包编译libvirt compile libvirt(centos) No PCI buses available nfs lead to Linux halt nfs install and config anti-virus for cloud platform nova fetch image from glance(something about _base) token auth process ovs入门指南 virt software anti-virus something about ceilometer disk sample context interview questions openstack vm injection openstack Restful and RPC murano 概览 创建虚拟机流程(compute节点)之网络创建 创建虚拟机流程之compute_api之虚拟机实例填充之配额检测 创建虚拟机流程之compute_api之基本参数生成 创建虚拟机流程之compute_api 创建虚拟机流程(主) 创建虚拟机之image 创建虚拟机流程之准备网桥 创建虚拟机流程之virt 创建虚拟机流程之compute节点 CI/CD研发流程之工程创建 CI/CD研发流程之代码合入 CI/CD研发流程之UT(单元测试) 向openstack社区合入代码记 openstack/ceilometer/gnocchi杂谈 影子页表原理 mem_add(exec.c) qemu编译安装调试 openstack/ceilometer/gnocchi之Grafana简介 openstack wiki etcd openstack计量ceilometer openstack计费cloudKitty enventlet backdoor USB 安装VMWARE ESX pycharm设置指南 无法执行modprobe -a kvm-intel解决办法 QEMU配置项 网络不通小记 libvirt之XML(虚拟机定义文件) openstack-horizon 证书认证 ceilometer与ceph对接 openstack定时任务剖析(TODO) 服务器重启后mongodb进程无法启动 ubuntu14下新增openstack服务到service的导引 ERROR 1045(28000)-数据库连不上 Python两个内置函数—locals和globals unknown exit, hardware reason 31

ovs入门指南

2016年06月01日

功能

neutron中含有如下几个虚拟设备

  • network
  • router
    用来连接网络,使得不同的网络间能够相互通信。
    分别使用interface和网络进行连接。

  • subnet
    包含在network中

  • port
    类似于交换机上的插入网线的网口。
    给虚拟机连接网络用的槽口

架构

  • neutron-server
    接收api请求,然后将请求转给后面的agent去处理,另外数据该入库的入库。

  • neutron-plugin-XXX
    有很多很多的插件,提供琳琅满目的网络功能
    根据不同情况选择所需

网络分类

  • provider网络
    管理侧的网络,可以有多种形式Flat、VLAN、GRE等

  • tenant网络
    租户侧的网络,默认租户间隔离
    所以,可以创建router,使用l3-agent使得不同的网络实现互相通信。

ovs实例模型

  • package:

    包,网络转发的最小数据单元,来自某一个端口,被转发到一个或者多个端口。

  • bridge

    网桥,Linux中用于表示一个能连接不同网络设备的虚拟设备
    linux中传统实现的网桥类似一个hub设备,而ovs管理的网桥一般类似交换机。
    其作用是根据一定规则,把从端口收到的数据包转发到另一个或者多个端口。

    1. br-int:综合网桥,常用于表示实现主要内部网络功能的网桥。
    2. br-ex:外部网桥,通常表示负责跟外部网络通信的网桥。
  • port: openvSwitch中,每个端口都属于一个特定的网桥。
    端口收到的数据包会经过流规则的处理,发往其他端口
    也会把其他端口来的数据包发送出去.
    主要有如下几种端口:
    1. normal:操作系统中的网卡绑定到ovs上,ovs会生成一个普通端口处理这块网卡进出的数据包。
    2. Internal:端口类型为internal时,ovs会创建一块虚拟网卡,端口收到的所有数据包都会交给该网卡,发出的包会通过该端口交给ovs。当ovs创建一个新网桥时,默认会创建一个与网桥同名的Internal Port.
    3. Patch:当机器中有多个ovs网桥时,可以使用Patch Port把两个网桥连起来。Patch Port总是成对出现,分别连接在两个网桥上,在两个网桥之间交换数据。
      VETH:虚拟ethernet接口,通常以pair的方式出现,一端发出的网包,会被另一端接收,可以形成两个网桥之间的通道。
      • qvb:neutron veth, Linux Bridge-side
      • qvo:neutron veth, OVS-side
    4. Tunnel:隧道端口是一种虚拟端口,支持使用gre或vxlan等隧道技术与位于网络上其他位置的远程端口通讯。
      GRE:一种通过封装来实现隧道的方式,在openstack中一般是基于L3的GRE,即original pkt/GRE/IP/Ethernet
  • TAP设备:模拟一个二层的网络设备,可以接受和发送二层网包。

  • TUN设备:模拟一个三层的网络设备,可以接受和发送三层网包。

  • iptables:Linux 上常见的实现安全策略的防火墙软件。

  • Vlan:虚拟 Lan,同一个物理 Lan 下用标签实现隔离,可用标号为1-4094。

  • VXLAN:一套利用 UDP 协议作为底层传输协议的 Overlay 实现。一般认为作为 VLan 技术的延伸或替代者。

  • namespace:用来实现隔离的一套机制,不同 namespace 中的资源之间彼此不可见。
    这里使用namaspace作为租户间隔离的。

命令简述

  • ovs-dpctl
    datapath控制器,可以创建删除DP,控制DP中的FlowTables,最常使用show命令,其他很少手动操作
    常用命令: ovs-dpctl show -s

  • ovs-ofctl 流表控制器,控制bridge上的流表,查看端口统计信息等

    ovs-ofctl show, dump-ports, dump-flows, add-flow, mod-flows, del-flows

  • ovsdb-tool 专门管理ovsdb的client

    ovsdb-tools show-log -m

  • ovs-vsctl 最常用的命令,通过操作ovsdb去管理相关的bridge,ports什么的

1.ovs-vsctlshow 显示数据库内容
关于桥的操作ovs-vsctl add-br, list-br, del-br, br-exists.
关于port的操作ovs-vsctl list-ports, add-port, del-port, add-bond, port-to-br.
关于interface的操作ovs-vsctl list-ifaces, iface-to-br
ovs-vsctl list/set/get/add/remove/clear/destroy table record column [value], 常见的表有bridge, controller,interface,mirror,netflow,open_vswitch,port,qos,queue,ssl,sflow.

  • ovs-appctl 这个可以直接与openvswitch daemon进行交互,上图中没有列出来,这么命令较少使用

    ovs-appctl list-commands, fdb/show, qos/show

实验

创建虚拟机的时候,会给虚拟机分配一个tap设备作为虚拟机的网卡,名为tapXXX。
在计算节点使用ifconfig查看,可以看到

建立一个linux网桥

把上面的tap接在qbr网桥上,使用brctl-show查看网桥设备和端口

小结:

veth是linux的虚拟网络设备,总是成对出现
一对veth设备的数据总是从一个流入,一个流出
neutron会建立一对分别命名为qvbXXX和qvoXXX的veth设备
并使用他们把qbr和br-int进行连接,使用brctl show查

使用ovs-vsctl show查看br-int上绑定情况
  

小结:虚拟机的tap已经联通到br-int

br-int和br-tun之间通过patch-in和patch-tun进行连接

小结: 至此,网络数据已经可以达到br-tun
通过GRE隧道与其他节点上的tap设备通信(要求拥有相同segmentation,也就是项目中同一网络)

参考文献

http://www.tuicool.com/articles/neQBzmr 《openstack实战指南》