- 浏览: 303186 次
- 性别:
- 来自: 西安
最新评论
-
happyxiaomo:
...
【openstack】openstack的调度(Scheduler) -
linuxgao:
请问,OpenStack在关心消息返回值的情况下,两个队列一发 ...
【架构】关于RabbitMQ -
wangchao719:
zfj_0928 写道引用1. 消息ACK,通知RabbitM ...
【架构】关于RabbitMQ -
zfj_0928:
引用1. 消息ACK,通知RabbitMQ消息已被处理,可以从 ...
【架构】关于RabbitMQ -
zhangwind:
写的好,很感谢!
【架构】关于RabbitMQ
OpenStack网络知识片断(持续更新)
LinuxBridge创建虚拟机
生成设备名:tap+portid
如果不是Xen,执行ip link show dev “tap+portid”看设备是否已存在,若存在返回;若不存在:
ip tuntap add “tap+portid” mode tap
ip link set “tap+portid” address <mac_address>
ip link set “tap+portid” up
LinuxBridge agent
使用pydev库获取本机所有以tap开头的设备
对每一个tap设备(port)循环:
向Quantum获取port的详细信息
ip lingk show dev <dev>
获取设备所在的网桥(对于新增设备应该是空):在/sys/devices/virtual/net/目录下找到以brq开头的网桥名,对每一个网桥:
获取/sys/devices/virtual/net/<bridge>/brif/目录下所有设备
生成network对应的网桥(brq+networkid)
获取network对应phynet所对应的phyinterface(必须已存在)
ip link add link <phyinterface> name <phyinterface.vlanid> type vlan id <vlanid>
ip link set <phyinterface.vlanid> up
brctl addbr <brq+networkid>
brctl setfd <brq+networkid>
brctl stp <brq+networkid> off
ip link set <brq+networkid> up
brctl addif <brq+networkid> <phyinterface.vlanid>
brctl addif <brq+networkid> <dev>
循环结束
OVS run_instance(准备网络)
创建虚拟机,例如网卡portid:1e2b09d7-e9d6-4aba-964e-79fdd8bcf3ba
ip link show dev qbr1e2b09d7-e9 #判断
brctl addbr qbr1e2b09d7-e9 #增加Linux网桥
ip link show dev qvo1e2b09d7-e9 #判断
ip link show dev qvb1e2b09d7-e9 #判断
ip link add qvb1e2b09d7-e9 type veth peer name qvo1e2b09d7-e9 #增加对等设备
ip link set qvb1e2b09d7-e9 up #激活设备
ip link set qvb1e2b09d7-e9 promisc on #混杂模式
ip link set qvo1e2b09d7-e9 up
ip link set qvo1e2b09d7-e9 promisc on
ip link set qbr1e2b09d7-e9 up #激活网桥
brctl addif qbr1e2b09d7-e9 qvb1e2b09d7-e9 #向Linux网桥添加设备
#下面的命令向OVS添加port
ovs-vsctl -- --may-exist add-port br-int qvo1e2b09d7-e9 -- set Interface qvo1e2b09d7-e9 external-ids:iface-id=1e2b09d7-e9d6-4aba-964e-79fdd8bcf3ba external-ids:iface-status=active external-ids:attached-mac=fa:16:3e:ea:ad:8d external-ids:vm-uuid=49b6d841-163f-4aab-b309-149727c227b4
OVS agent
初始化:
ovs-vsctl -- --if-exists del-port br-int patch-tun
ovs-ofctl del-flows br-int
ovs-ofctl add-flow br-int hard_timeout=0,idle_timeout=0,priority=1,actions=normal
循环主体:
1) ovs-vsctl list-ports br-int
输出:qvo1e2b09d7-e9\nqvo2d58d5dc-db\nqvo2e505b97-bb\nqvo5739b2dc-78\nqvo69121bea-6a\nqvod58fde4e-5f\nqvoe0a0b269-53\n
2) 循环调用:ovs-vsctl get Interface qvo1e2b09d7-e9 external_ids,获取iface-id(portid)
输出:
{attached-mac="fa:16:3e:ea:ad:8d", iface-id="1e2b09d7-e9d6-4aba-964e-79fdd8bcf3ba", iface-status=active, vm-uuid="49b6d841-163f-4aab-b309-149727c227b4"}\n
3) 根据portid循环:
a) 向Quantum查询信息,调用get_device_details接口
b) ovs-vsctl -- --columns=external_ids,name,ofport find Interface external_ids:iface-id="1e2b09d7-e9d6-4aba-964e-79fdd8bcf3ba",输出:
external_ids : {attached-mac="fa:16:3e:ea:ad:8d", iface-id="1e2b09d7-e9d6-4aba-964e-79fdd8bcf3ba", iface-status=active, vm-uuid="49b6d841-163f-4aab-b309-149727c227b4"}
name : "qvo1e2b09d7-e9"
ofport : 6
c) 给port所属的network自动分配(如果已记录过该net,直接跳到下一步)local vlan id(1-4094),且对于network对应的physical net,节点上要有一个OVS网桥与之对应,如果是vlan模式,需要做如下操作:
# outbound,出口的vlan转换
br.add_flow(priority=4,
in_port=self.phys_ofports[physical_network], #与br-int连接的port的标号
dl_vlan=lvid, #自动分配的local vlan,从1开始
actions="mod_vlan_vid:%s,normal" % segmentation_id) #segmentation_id是plugin分配的vlan号
# inbound,入口的vlan转换
self.int_br.add_flow(priority=3,
in_port=self.int_ofports[physical_network], #与上面的br连接的port的标号
dl_vlan=segmentation_id,
actions="mod_vlan_vid:%s,normal" % lvid)
d) ovs-vsctl set Port qvo1e2b09d7-e9 tag=1 #这里的1是为network分配的local vlan id
e) ovs-ofctl del-flows br-int in_port=6 #这里的6指port的标号,表示不允许数据流入
dhcp agent
dhcp agent需要为不同的plugin配置不同的interface_driver dhcp agent需要为不同的plugin配置不同的interface_driver OVS:quantum.agent.linux.interface.OVSInterfaceDriver dhcp agent执行的命令及输出: ip netns exec qdhcp-c6e38a5a-2adf-42a5-8c6f-5eab99208869 ip -o link show tap9739ea30-d6 '17: tap9739ea30-d6: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN \\ link/ether fa:16:3e:de:19:12 brd ff:ff:ff:ff:ff:ff\n' ip netns exec qdhcp-c6e38a5a-2adf-42a5-8c6f-5eab99208869 ip addr show tap9739ea30-d6 permanent scope global '17: tap9739ea30-d6: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN \n link/ether fa:16:3e:de:19:12 brd ff:ff:ff:ff:ff:ff\n inet 10.10.11.2/24 brd 10.10.11.255 scope global tap9739ea30-d6\n' cat /proc/13695/cmdline 'dnsmasq\x00--no-hosts\x00--no-resolv\x00--strict-order\x00--bind-interfaces\x00--interface=tap9739ea30-d6\x00--except-interface=lo\x00--domain=openstacklocal\x00--pid-file=/var/lib/quantum/dhcp/c6e38a5a-2adf-42a5-8c6f-5eab99208869/pid\x00--dhcp-hostsfile=/var/lib/quantum/dhcp/c6e38a5a-2adf-42a5-8c6f-5eab99208869/host\x00--dhcp-optsfile=/var/lib/quantum/dhcp/c6e38a5a-2adf-42a5-8c6f-5eab99208869/opts\x00--dhcp-script=/usr/bin/quantum-dhcp-agent-dnsmasq-lease-update\x00--leasefile-ro\x00--dhcp-range=set:tag0,10.10.11.0,static,120s\x00' ip netns exec qdhcp-c6e38a5a-2adf-42a5-8c6f-5eab99208869 kill -9 13695 QUANTUM_RELAY_SOCKET_PATH=/var/lib/quantum/dhcp/lease_relay QUANTUM_NETWORK_ID=c6e38a5a-2adf-42a5-8c6f-5eab99208869 ip netns exec qdhcp-c6e38a5a-2adf-42a5-8c6f-5eab99208869 dnsmasq --no-hosts --no-resolv --strict-order --bind-interfaces --interface=tap9739ea30-d6 --except-interface=lo --domain=openstacklocal --pid-file=/var/lib/quantum/dhcp/c6e38a5a-2adf-42a5-8c6f-5eab99208869/pid --dhcp-hostsfile=/var/lib/quantum/dhcp/c6e38a5a-2adf-42a5-8c6f-5eab99208869/host --dhcp-optsfile=/var/lib/quantum/dhcp/c6e38a5a-2adf-42a5-8c6f-5eab99208869/opts --dhcp-script=/usr/bin/quantum-dhcp-agent-dnsmasq-lease-update --leasefile-ro --dhcp-range=set:tag0,10.10.11.0,static,120s
OVS:quantum.agent.linux.interface.OVSInterfaceDriver
LinuxBridge:quantum.agent.linux.interface.BridgeInterfaceDriver
dhcp agent执行的命令及输出:
#查看设备是否存在
ip netns exec qdhcp-c6e38a5a-2adf-42a5-8c6f-5eab99208869 ip -o link show tap9739ea30-d6
'17: tap9739ea30-d6: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN \\ link/ether fa:16:3e:de:19:12 brd ff:ff:ff:ff:ff:ff\n'
#查看设备IP
ip netns exec qdhcp-c6e38a5a-2adf-42a5-8c6f-5eab99208869 ip addr show tap9739ea30-d6 permanent scope global
'17: tap9739ea30-d6: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN \n link/ether fa:16:3e:de:19:12 brd ff:ff:ff:ff:ff:ff\n inet 10.10.11.2/24 brd 10.10.11.255 scope global tap9739ea30-d6\n'
#查看DHCP进程信息,其中的进程号是从文件中获取/var/lib/quantum/dhcp/{netid}/pid
cat /proc/13695/cmdline
'dnsmasq\x00--no-hosts\x00--no-resolv\x00--strict-order\x00--bind-interfaces\x00--interface=tap9739ea30-d6\x00--except-interface=lo\x00--domain=openstacklocal\x00--pid-file=/var/lib/quantum/dhcp/c6e38a5a-2adf-42a5-8c6f-5eab99208869/pid\x00--dhcp-hostsfile=/var/lib/quantum/dhcp/c6e38a5a-2adf-42a5-8c6f-5eab99208869/host\x00--dhcp-optsfile=/var/lib/quantum/dhcp/c6e38a5a-2adf-42a5-8c6f-5eab99208869/opts\x00--dhcp-script=/usr/bin/quantum-dhcp-agent-dnsmasq-lease-update\x00--leasefile-ro\x00--dhcp-range=set:tag0,10.10.11.0,static,120s\x00'
#停止进程
ip netns exec qdhcp-c6e38a5a-2adf-42a5-8c6f-5eab99208869 kill -9 13695
#启动进程
QUANTUM_RELAY_SOCKET_PATH=/var/lib/quantum/dhcp/lease_relay QUANTUM_NETWORK_ID=c6e38a5a-2adf-42a5-8c6f-5eab99208869 ip netns exec qdhcp-c6e38a5a-2adf-42a5-8c6f-5eab99208869 dnsmasq --no-hosts --no-resolv --strict-order --bind-interfaces --interface=tap9739ea30-d6 --except-interface=lo --domain=openstacklocal --pid-file=/var/lib/quantum/dhcp/c6e38a5a-2adf-42a5-8c6f-5eab99208869/pid --dhcp-hostsfile=/var/lib/quantum/dhcp/c6e38a5a-2adf-42a5-8c6f-5eab99208869/host --dhcp-optsfile=/var/lib/quantum/dhcp/c6e38a5a-2adf-42a5-8c6f-5eab99208869/opts --dhcp-script=/usr/bin/quantum-dhcp-agent-dnsmasq-lease-update --leasefile-ro --dhcp-range=set:tag0,10.10.11.0,static,120s
LinuxBridge:quantum.agent.linux.interface.BridgeInterfaceDriver
l3 agent
l3 agent需要配置与plugin对应的interface_driver:
OVS: quantum.agent.linux.interface.OVSInterfaceDriver,此时external_network_bridge为br-ex
LinuxBridge: quantum.agent.linux.interface.BridgeInterfaceDriver
初始化:
1. 加载interface_driver
2. ip netns list #列出以'qrouter-'开头的namespace
输出:
qdhcp-487f81ab-98d3-457a-b712-b29e71e89b52
qdhcp-084ae80a-b108-4f8a-90ca-f44aa1ca738a
qdhcp-7c25296d-bc81-45f6-bcc0-37fa44588b83
qdhcp-c6e38a5a-2adf-42a5-8c6f-5eab99208869
qrouter-0e38e30f-4fae-4f48-be4c-76d2fb803b23
qrouter-ccf5f323-2a41-41d1-8bb6-b772a8ae17fc
循环: ip netns exec qrouter-ccf5f323-2a41-41d1-8bb6-b772a8ae17fc ip -o link list
'9: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN \\ link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00\n25: qr-012c9d13-85: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN \\ link/ether fa:16:3e:f2:a8:56 brd ff:ff:ff:ff:ff:ff\n26: qg-388798a1-55: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN \\ link/ether fa:16:3e:f6:23:b9 brd ff:ff:ff:ff:ff:ff\n'
对命名空间内的设备名作循环(加粗字体):
如果是qr开头:ovs-vsctl --timeout=2 -- --if-exists del-port br-int qr-012c9d13-85
如果是qg开头:ovs-vsctl --timeout=2 -- --if-exists del-port br-ex qg-388798a1-55
循环结束
循环结束
工作任务:
1. 保证br-ex存在
2. 向Quantum获取router:external的网络(一个l3 agent只处理一个external网络,默认是br-ex,可以在配置文件中配置external_network_bridge)
3.
循环获取Quantum中的router对象(只处理连接外网的router):
增加qrouter-routerid命名空间
ip netns exec qrouter-0e38e30f-4fae-4f48-be4c-76d2fb803b23 sysctl -w net.ipv4.ip_forward=1
如果配置了metadata_ip,执行
rules.append(('INPUT', '-s 0.0.0.0/0 -d %s -p tcp -m tcp --dport %s -j ACCEPT' % (self.conf.metadata_ip, self.conf.metadata_port)))
rules.append(('PREROUTING', '-s 0.0.0.0/0 -d 169.254.169.254/32 -p tcp -m tcp --dport 80 -j DNAT --to-destination %s:%s' % (self.conf.metadata_ip, self.conf.metadata_port)))
应用iptable规则
ip netns exec qrouter-0e38e30f-4fae-4f48-be4c-76d2fb803b23 /sbin/iptables-save -t filter
ip netns exec qrouter-0e38e30f-4fae-4f48-be4c-76d2fb803b23 /sbin/iptables-restore
ip netns exec qrouter-0e38e30f-4fae-4f48-be4c-76d2fb803b23 /sbin/iptables-save -t nat
ip netns exec qrouter-0e38e30f-4fae-4f48-be4c-76d2fb803b23 /sbin/iptables-restore
对于router的新增内部port循环:
ip netns exec qrouter-ccf5f323-2a41-41d1-8bb6-b772a8ae17fc ip -o link show qr-012c9d13-85,如果设备不存在:
ovs-vsctl -- --may-exist add-port br-int qr-012c9d13-85
-- set Interface qr-012c9d13-85 type=internal
-- set Interface qr-012c9d13-85 external-ids:iface-id=012c9d13-8554-4b39-96b8-e4bd2e787559
-- set Interface qr-012c9d13-85 external-ids:iface-status=active
-- set Interface qr-012c9d13-85 external-ids:attached-mac=fa:16:3e:f2:a8:56
ip link set qr-012c9d13-85 address fa:16:3e:f2:a8:56
ip link set qr-012c9d13-85 netns qrouter-ccf5f323-2a41-41d1-8bb6-b772a8ae17fc
ip netns exec qrouter-ccf5f323-2a41-41d1-8bb6-b772a8ae17fc ip link set qr-012c9d13-85 up
ip netns exec qrouter-ccf5f323-2a41-41d1-8bb6-b772a8ae17fc ip addr show qr-012c9d13-85 permanent scope global
ip netns exec qrouter-ccf5f323-2a41-41d1-8bb6-b772a8ae17fc ip -4 addr add 10.10.10.1/24 brd 10.10.10.255 scope global dev qr-012c9d13-85
如果router连接到外部网络,增加snat规则(将内部的IP转换为外网的IP),应用iptable规则
循环结束
对于router上删除的port循环:
在OVS上删除port
删除nat规则
循环结束
初始化gw_port:ip netns exec qrouter-ccf5f323-2a41-41d1-8bb6-b772a8ae17fc ip -o link show qg-388798a1-55,如果设备不存在,同上(操作br-ex)
ip netns exec qrouter-ccf5f323-2a41-41d1-8bb6-b772a8ae17fc route add default <gw_port的网关IP>
增加snat规则
处理router上的floatingIP,对br-ex上的port(qg-388798a1-55)配置外网地址,配置snat/dnat规则
循环结束
发表评论
-
【OpenStack】OpenStack服务的启动
2013-03-15 13:35 12262OpenStack服务的启动 本博客欢迎转发,但请保 ... -
【OpenStack】使用Rest工具向OpenStack消息发送指导
2013-03-13 20:15 3364本博客欢迎转发,但请保留原作者(新浪微博:@孔令贤HW;博客 ... -
【OpenStack】【转】Openstack之Cinder服务初探
2013-03-11 14:22 2089这篇blog是一个同事不久前写的,得到允许后,在此转载 ... -
【OpenStack】创建虚拟机时与Quantum的交互(F版)
2013-02-27 14:33 1793本博客欢迎转发,但请保留原作者(新浪微博:@孔令贤HW;博 ... -
【OpenStack】 Grizzly中的nova-conductor
2013-02-24 11:26 5358OpenStack Grizzly中的nova ... -
【OpenStack】Folsom版Quantum对象模型
2013-02-19 11:43 1533本博客欢迎转发,但请保留原作者信息(@孔令贤HW)!内容系 ... -
【openstack】Quantum(Folsom版)中update_floatingIP流程
2013-02-18 17:56 1292本博客欢迎转发,但请保留原作者信息(@孔令贤HW)!内容系 ... -
【OpenStack】G版中关于Nova的Cell
2013-02-02 03:02 4049本博客欢迎转发,但请保留原作者(新浪微博:@孔令贤HW;博 ... -
【OpenStack】G版Keystone对象模型
2013-02-02 01:14 3392本博客欢迎转发,但请保留原作者信息(@孔令贤HW)!内 ... -
【OpenStack】Grizzly版本中Scheduler filter机制详解
2013-01-26 18:11 2578Grizzly版本中Scheduler filter机制详 ... -
【OpenStack】Grizzly目前版本相对于Folsom的变更
2013-01-24 10:05 2962本博客欢迎转发,但请保留原作者(新浪微博:@孔令贤HW;博 ... -
Grizzly中的LoadBalancer初步分析
2013-01-22 09:41 2141Grizzly中的LoadBalancer初步分析 ... -
Quantum中的L3模型实战
2012-12-20 09:01 5054Quantum中的L3模型实战 ... -
在OpenStack使用XenServer资源池浅析
2012-12-13 13:33 3056在OpenStack使用XenServer资源池浅析 ... -
使用Komodo远程调试python(OpenStack)
2012-12-10 14:42 7189使用Komodo远程调试python(OpenStack) ... -
如何在openstack环境中实现定制化功能
2012-12-03 20:02 2758本博客欢迎转发,但请保留原作者(@孔令贤HW)信息!内容系本 ... -
由浅入深(源码)分析nova的资源刷新机制
2012-11-30 17:06 5133本博客欢迎转发,但请保留原作者(@孔令贤HW)信息!内容系本 ... -
【转】Ubuntu12.04 OpenStack Folsom 安装(VLAN模式)
2012-11-27 16:45 4003Ubuntu12.04 OpenStack Folsom ... -
【openstack】Nova中的policy
2012-11-10 13:32 3988Nova中的policy 本博 ... -
【openstack】Nova(Folsom)虚拟化层Driver分析
2012-11-07 11:50 3786【转载】Nova(Folsom)虚拟化层Driver分析 ...
相关推荐
### OpenStack网络配置及管理深度解析 #### 一、OpenStack网络概述 OpenStack作为一款开源的云操作系统,其核心组件之一便是网络管理组件Neutron(原名Quantum)。网络配置与管理在OpenStack中扮演着至关重要的...
本文档可帮助希望学习或部署OpenStack的新手快速找到所需资源
I版openstack网络结构图,描述了I版openstack的网络结构,便于调节其网络
fuel 官网给的3张网卡的网络示例有点误导人。实际上可以更加简化一些。只用两张网卡就可以了。 我画了一个详细的拓扑图
添加删除openstack网络,可以删除以后的浮动IP网络配置
### OpenStack网络深入介绍 #### 一、OpenStack Networking概览与挑战 OpenStack作为一款开源的云操作系统,其核心组件之一就是Networking服务,通常称为Neutron。它为虚拟机提供了一个灵活且强大的网络环境,使得...
随着OpenStack技术的不断进步,相关技能和知识也在不断更新。IT专业人员需要通过不断学习和实践,才能紧跟云计算技术的发展步伐,为云计算服务的提供和管理提供更加专业的技术支持。通过对这些知识点的学习,专业...
深入理解OpenStack中的网络实现
Openstack基础知识
"OpenStack基础知识概述" OpenStack是当前最流行的开源云平台管理项目,可以控制整个数据中心计算、存储和网络资源的大小资源池。OpenStack是一个非常年轻的开源项目,最初是由美国国家航空航天局(NASA)和...
本书是一本介绍 OpenStack网络的专著,本书将会从传统的网络技术开始,让读者在大脑中建立传统网络与 Neutron网络的一一对应关系,然后介绍了深入讲解 Neutron一些重要特性背后的网络背景知识,以及它在 Neutron中是...
OpenStack网络实现,有关网络知识,希望对大家有用,谢谢
不可多得的 openstack 网络模块详细介绍的 neutron
深入理解Neutron--OpenStack网络实现
深入理解Neutron-- OpenStack 网络实现- PDF版本 深入理解Neutron 中文版资源,可以放心下载!
了解上述知识后,对于企业来说,选择OpenStack作为云平台的基础架构时,能够更加清晰地认识到其网络组件Neutron的重要性,以及在高可用和分布式设计上面临的挑战和解决路径。通过不断优化和引入创新技术,企业能够...
### OpenStack网络管理知识点详解 #### 一、Linux网络虚拟化基础 在深入探讨OpenStack的网络管理之前,我们先来了解一下Linux网络虚拟化的基础知识。Linux网络虚拟化是指在单个物理服务器上创建多个独立的虚拟网络...
openstack网络详解,详细的介绍的openstack的网络模式。
红帽OpenStack资深架构师李劲涛在OpenCloud 2015大会OpenStack专场的演讲PPT:OpenStack基于Atomic Host的持续集成,分享企业用OpenStack的常见组网,如何让这些组网通过持续集成进行上线前的自动测试,以及在线升级...
开源,是openstack的一个重要属性。不理解开源,就不能真正理解openstack的发展历程与未来趋势。 openstack社区遵循的,是一种更为深入、更为彻底的开源理念。在openstack社区中,对于每一个组件,每一个特性,...