0.环境

硬件环境见上一篇博客:学习OpenStack之(5):在Mac上部署Juno版本OpenStack 四节点环境

OpenStack网络配置:一个tenant, 2个虚机

  • Type driver: GRE, Mechanism driver: OVS
  • 一个public network: ext-net 和相应的subnet ext-subnet
  • 一个VM network:demo-net 和相应的subnet:demo-subnet
  • 一个router连接ext-subnet和demo-subnet

1、Compute 节点上networking组件

下面会用到OVS的两个重要命令:

  • ovs-vsctl: 查询和更新ovs-vswitchd的配置
  • ovs-ofctl: 查询和控制OpenFlow交换机和控制器

首先查询Compute节点上ovs-vswitchd的配置的配置:

root@compute1:/var/lib/nova# ovs-vsctl show
205a13a2-1ad6-4ae0-8c84-abed97444aa9Bridge br-int //OVS integration 桥 br-intfail_mode: securePort "qvo37b25c08-e8" //端口,用来连接一个虚机网卡的TAP设备所连接的linux bridgetag: 1Interface "qvo37b25c08-e8"Port patch-tun //端口,用来连接桥br-tunInterface patch-tuntype: patchoptions: {peer=patch-int} //和桥 br-tun上的patch-int是对等端口Port br-intInterface br-inttype: internalPort "qvo155845ae-5e" //端口,用来连接另一个虚机网卡的TAP设备所连接的linux bridgetag: 1Interface "qvo155845ae-5e"Bridge br-tun //OVS Tunnel 桥br-tunPort br-tunInterface br-tuntype: internalPort patch-int //端口patch-int,用来连接桥br-intInterface patch-inttype: patchoptions: {peer=patch-tun}Port "gre-0a000115" //端口,连接GRE TunnelInterface "gre-0a000115"type: greoptions: {df_default="true", in_key=flow, local_ip="10.0.1.31", out_key=flow, remote_ip="10.0.1.21"}ovs_version: "2.0.2" //GRE Tunnel是点到点之间建立的,这头的IP为10.0.1.31,那头的IP地址为 10.0.1.21

继续看桥 br-tun:

root@compute1:/var/lib/nova# ovs-ofctl show br-tun
OFPT_FEATURES_REPLY (xid=0x2): dpid:0000f6b428614747
n_tables:254, n_buffers:256
capabilities: FLOW_STATS TABLE_STATS PORT_STATS QUEUE_STATS ARP_MATCH_IP
actions: OUTPUT SET_VLAN_VID SET_VLAN_PCP STRIP_VLAN SET_DL_SRC SET_DL_DST SET_NW_SRC SET_NW_DST SET_NW_TOS SET_TP_SRC SET_TP_DST ENQUEUE1(patch-int): addr:3e:7b:d5:fa:26:8d //端口 patch-int的ID 是 1config:     0state:      0speed: 0 Mbps now, 0 Mbps max2(gre-0a000115): addr:2a:26:b2:99:f3:5a //端口 gre-0a000115的ID 是 2config:     0state:      0speed: 0 Mbps now, 0 Mbps maxLOCAL(br-tun): addr:f6:b4:28:61:47:47config:     0state:      0speed: 0 Mbps now, 0 Mbps max
OFPT_GET_CONFIG_REPLY (xid=0x4): frags=normal miss_send_len=0

每个虚机有个虚机网卡 eth0,eth0和host上的一个TAP设备连接,该TAP设备直接挂载在一个Linux Bridge上,该Linux Bridge和OVS integration bridge br-int相连。其实理想情况下,TAP设备能和OVS Integration Bridge 直接相连就好了,但是,因为OpenStack实现Security Group的需要,这里要多加一层Linux bridge。OpenStack使用Linux TAP设备上的iptables来实现Security Group规则,而OVS不支持直接和br-int桥相连的TAP设备上的iptables。通过查看虚机的libvirt XML定义文件 /var/lib/nova/instances/<instance-id>/libvirt.xml可以看出来虚机所连接的TAP设备:

<interface type="bridge"><mac address="fa:16:3e:fe:c7:87"/> //<source bridge="qbr37b25c08-e8"/> //虚机TAP设备所挂接的linux bridge<target dev="tap37b25c08-e8” /> //虚机所连接的interface
</interface>

通过以上信息,我们可以画出compute 节点上的网络组建图:

2. Neutron使用TAP设备的iptables来实现Security groups

查看第一个虚机的TAP设备上的iptables:

root@compute1:/var/lib/nova# iptables -S | grep tap37b25c08-e8
-A neutron-openvswi-FORWARD -m physdev --physdev-out tap37b25c08-e8 --physdev-is-bridged -j neutron-openvswi-sg-chain
-A neutron-openvswi-FORWARD -m physdev --physdev-in tap37b25c08-e8 --physdev-is-bridged -j neutron-openvswi-sg-chain
-A neutron-openvswi-INPUT -m physdev --physdev-in tap37b25c08-e8 --physdev-is-bridged -j neutron-openvswi-o37b25c08-e
-A neutron-openvswi-sg-chain -m physdev --physdev-out tap37b25c08-e8 --physdev-is-bridged -j neutron-openvswi-i37b25c08-e
-A neutron-openvswi-sg-chain -m physdev --physdev-in tap37b25c08-e8 --physdev-is-bridged -j neutron-openvswi-o37b25c08-e

OpenStack Neutron在neutron-openvswi-sg-chain上实现security groups。在使用默认security group的情况下:

  • neutron-openvswi-o37b25c08-e 控制从虚机出去的traffic
-A neutron-openvswi-o37b25c08-e -p udp -m udp --sport 68 --dport 67 -j RETURN
-A neutron-openvswi-o37b25c08-e -j neutron-openvswi-s37b25c08-e
-A neutron-openvswi-o37b25c08-e -p udp -m udp --sport 67 --dport 68 -j DROP
-A neutron-openvswi-o37b25c08-e -m state --state INVALID -j DROP
-A neutron-openvswi-o37b25c08-e -m state --state RELATED,ESTABLISHED -j RETURN
-A neutron-openvswi-o37b25c08-e -j RETURN
-A neutron-openvswi-o37b25c08-e -j neutron-openvswi-sg-fallback

  • neutron-openvswi-i37b25c08-e 控制进入虚机的traffic
-A neutron-openvswi-i37b25c08-e -m state --state INVALID -j DROP
-A neutron-openvswi-i37b25c08-e -m state --state RELATED,ESTABLISHED -j RETURN
-A neutron-openvswi-i37b25c08-e -s 10.0.0.116/32 -p udp -m udp --sport 67 --dport 68 -j RETURN
-A neutron-openvswi-i37b25c08-e -p tcp -m tcp --dport 22 -j RETURN
-A neutron-openvswi-i37b25c08-e -p icmp -j RETURN
-A neutron-openvswi-i37b25c08-e -m set --match-set IPv48c0dc337-0a6d-4ad7-9 src -j RETURN
-A neutron-openvswi-i37b25c08-e -j neutron-openvswi-sg-fallback

使用下面的命令来添加一条secrutiy group 规则来允许使用TCP 22端口:

neutron security-group-rule-create --protocol tcp --port-range-min 22 --port-range-max 22 --direction ingress default

那么该TAP设备的iptables会出现下面的变化:

root@compute1:/var/lib/nova# iptables -S | grep 22
-A FORWARD -d 192.168.122.0/24 -o virbr0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -s 192.168.122.0/24 -i virbr0 -j ACCEPT
-A neutron-openvswi-i155845ae-5 -p tcp -m tcp --dport 22 -j RETURN
-A neutron-openvswi-i155845ae-5 -p tcp -m tcp --dport 22 -j RETURN
-A neutron-openvswi-i37b25c08-e -p tcp -m tcp --dport 22 -j RETURN
-A neutron-openvswi-i37b25c08-e -p tcp -m tcp --dport 22 -j RETURN

3. OVS integration 桥 br-int添加和删除traffic的VLAN ID

每一个使用 neutron net-create 命令创建的network都有一个新的 VLAN ID.本例中因为只有一个network,所以VLAN ID是1,见ovsctl-vsctl show命令中的port tag值。

4. OVS Tunnel 桥 br-tun 处理 VLAN ID 和 Tunnel ID的转化

从以下OpenFlow rule tables可见两种ID的处理过程:

root@compute1:/var/lib/nova# ovs-ofctl dump-flows br-tun
NXST_FLOW reply (xid=0x4):cookie=0x0, duration=11509.036s, table=0, n_packets=1059, n_bytes=116533, idle_age=740, priority=1,in_port=1 actions=resubmit(,2) //从端口1及patch-int进来的traffic会被重新执行table 2的rulecookie=0x0, duration=2089.491s, table=0, n_packets=1082, n_bytes=115494, idle_age=741, priority=1,in_port=2 actions=resubmit(,3) //从端口2 即 gre 端口进来的traffic重新执行table 3cookie=0x0, duration=11508.939s, table=0, n_packets=5, n_bytes=390, idle_age=11500, priority=0 actions=dropcookie=0x0, duration=11508.84s, table=2, n_packets=955, n_bytes=106446, idle_age=741, priority=0,dl_dst=00:00:00:00:00:00/01:00:00:00:00:00 actions=resubmit(,20) //重新执行table 20的rulecookie=0x0, duration=11508.745s, table=2, n_packets=104, n_bytes=10087, idle_age=740, priority=0,dl_dst=01:00:00:00:00:00/01:00:00:00:00:00 actions=resubmit(,22)cookie=0x0, duration=2260.307s, table=3, n_packets=1082, n_bytes=115494, idle_age=741, priority=1,tun_id=0x1 actions=mod_vlan_vid:1,resubmit(,10) //从neutron node来的traffic,打上VLAN ID 1,重新执行table 10的 rulecookie=0x0, duration=11508.646s, table=3, n_packets=15, n_bytes=1274, idle_age=2098, priority=0 actions=dropcookie=0x0, duration=11508.495s, table=4, n_packets=0, n_bytes=0, idle_age=11508, priority=0 actions=dropcookie=0x0, duration=11508.293s, table=10, n_packets=1082, n_bytes=115494, idle_age=741, priority=1 actions=learn(table=20,hard_timeout=300,priority=1,NXM_OF_VLAN_TCI[0..11],NXM_OF_ETH_DST[]=NXM_OF_ETH_SRC[],load:0->NXM_OF_VLAN_TCI[],load:NXM_NX_TUN_ID[]->NXM_NX_TUN_ID[],output:NXM_OF_IN_PORT[]),output:1 //学习规则 table 20,从port 1 即 patch-int发出cookie=0x0, duration=11508.093s, table=20, n_packets=0, n_bytes=0, idle_age=11508, priority=0 actions=resubmit(,22) //重新执行table 22的rulecookie=0x0, duration=2260.372s, table=22, n_packets=77, n_bytes=7817, idle_age=740, hard_age=2089, dl_vlan=1 actions=strip_vlan,set_tunnel:0x1,output:2,output:2 //去掉VLAN ID,打上TUNNEL ID 1 即 neutron 节点的TUNNEL ID,从端口2 即 gre 端口发出cookie=0x0, duration=11507.901s, table=22, n_packets=27, n_bytes=2270, idle_age=1664, priority=0 actions=drop

下一节将neutron节点。

本文转自SammyLiu博客园博客,原文链接http://www.cnblogs.com/sammyliu/p/4201143.html:,如需转载请自行联系原作者

学习OpenStack之(6):Neutron 深入学习之 OVS + GRE 之 Compute node 篇相关推荐

  1. 学习 OpenStack 的方法论 - 每天5分钟玩转 OpenStack(150)

    作为 OpenStack 的核心教程,我们已经到了最后总结的部分. OpenStack 目前已经有好几十个模块,本教程讨论的是最最重要的核心模块:Keystone,Nova,Glance,Cinder ...

  2. 愣头青法学习openstack——零基础学习openstack的建议

    由于收到很多人的私信,问我如何高效快速学习openstack,今天在这里就给大家分享一下我的openstack学习心得. 我也是刚入门学习openstack的小黑,所以先写几句话放在前面,应该很合逻辑 ...

  3. 学习openstack(五)

    OpenStack OpenStack介绍 OpenStack是一种免费的开源平台,帮助服务提供商实现类似于亚马逊EC2和S3的基础设施服务.OpenStack当前有三个核心项目:计算(Nova),对 ...

  4. 零基础学习openstack【完整中级篇】及openstack资源汇总

    1.你是如何学习openstack的? 2.你对openstack的组件了解多少? 3.你认为openstack该如何学习? 一直想写关于openstack的方面的内容,今天终于整理完成.算是完成一桩 ...

  5. openstack 学习_需要IT工作吗? 学习OpenStack

    openstack 学习 无论您是喜欢生活在云中,还是仍然愿意继续使用桌面应用程序,近年来,人们越来越清楚地知道云是计算的发展方向. 而且,如果您想使自己的技能与现在和将来的IT工作相关,那么了解云服 ...

  6. 通过demo学习OpenStack开发所需的基础知识 -- 单元测试

    本文将进入单元测试的部分,这也是基础知识中最后一个大块.本文将重点讲述Python和OpenStack中的单元测试的生态环境. 单元测试的重要性 github上有个人画了一些不同语言的学习曲线图:Le ...

  7. 通过demo学习OpenStack开发——单元测试

    本文将进入单元测试的部分,这也是基础知识中最后一个大块.本文将重点讲述Python和OpenStack中的单元测试的生态环境. 通过demo学习OpenStack开发--单元测试\ 单元测试的重要性\ ...

  8. OpenStack(Kilo版本)基础架构学习笔记

    一.OpenStack项目简介 OpenStack是一个由NASA(美国国家航空航天局)和Rackspace合作研发并发起的,以Apache许可证授权的自由软件和开放源代码项目. OpenStack  ...

  9. 探索 OpenStack 之(7):Neutron 深入探索之 Open vSwitch (OVS) + GRE 之 Neutron节点篇

    0. 测试环境 硬件环境:还是使用四节点OpenStack部署环境,参见 http://www.cnblogs.com/sammyliu/p/4190843.html OpenStack配置: ten ...

最新文章

  1. 极客新闻——03、陈庆敏:项目管理的三个关键
  2. 使用计算机的缺点英文作文,网络与计算机的好处与坏处英文作文
  3. ML之xgboost :xgboost.plot_importance()函数的解读
  4. oracle常见问题
  5. 硬盘温度70度正常吗_读懂固态硬盘:NVMe SSD的SMART健康数据这样看
  6. AOP技术研究 再续
  7. PointNet论文笔记
  8. windows更改pip源_windows环境下 更换pip镜像源
  9. 你了解京东云区块链吗?点开有详情!
  10. 简单的excel上传解析和错误反馈信息下载
  11. 基于注解的组件扫描——Spring IOC/DI(五)
  12. 锐起无盘安装图文教程
  13. 【谷歌浏览器打不开Axure解决办法~】
  14. 以树莓派为控制中心的软硬件之开发之脑电波模块
  15. Android 好看的登录界面
  16. QQ空间掉帧率优化实战
  17. java抽象类中的变量修饰符_菜鸟整理的三个权限修饰符与接口、抽象类的总结...
  18. 如何去除短视频中的硬字幕
  19. python大学生生活信息交互平台的设计与实现毕业设计源码031315
  20. python什么意思k_对python中的*args与**kwgs的含义与作用详解

热门文章

  1. jsjq面试笔记(下)
  2. JS实现将所有超链接指向同一个页面地址
  3. Vue中如何实现代码高亮功能?
  4. Git如何配置多个SSH-Key呢?
  5. Windows 下使用ftp批处理脚本
  6. Windows下使用taskkill 命令批量结束进程
  7. android异步工作,Android异步消息机制详解
  8. matlab移动文件到另一个文件夹里,Matlab将文件分类移动到不同文件夹中
  9. java 获取调用者方法_java获取调用当前方法的方法名和行数
  10. mysql 存储过程 条件_如何在MySQL存储过程中正确实现条件?