您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 企业文化 > 深入理解OpenStack之Neutron
Neutron经典的三节点部署•分三个网络:•ExternalNetwork/APINetwork,这个网络是连接外网的,无论是用户调用Openstack的API,还是创建出来的虚拟机要访问外网,或者外网要ssh到虚拟机,都需要通过这个网络•DataNetwork,数据网络,虚拟机之间的数据传输通过这个网络来进行,比如一个虚拟机要连接另一个虚拟机,虚拟机要连接虚拟的路由都是通过这个网络来进行•ManagementNetwork,管理网络,Openstack各个模块之间的交互,连接数据库,连接MessageQueue都是通过这个网络来。架构•neutron分成多个模块分布在三个节点上。•Controller节点:•neutron-server,用于接受API请求创建网络,子网,路由器等,然而创建的这些东西仅仅是一些数据结构在数据库里面•Network节点:•neutron-l3-agent,用于创建和管理虚拟路由器,当neutron-server将路由器的数据结构创建好,它是做具体的事情的,真正的调用命令行将虚拟路由器,路由表,namespace,iptables规则全部创建好•neutron-dhcp-agent,用于创建和管理虚拟DHCPServer,每个虚拟网络都会有一个DHCPServer,这个DHCPServer为这个虚拟网络里面的虚拟机提供IP•neutron-openvswith-plugin-agent,这个是用于创建虚拟的L2的switch的,在Network节点上,Router和DHCPServer都会连接到二层的switch上•Compute节点:•neutron-openvswith-plugin-agent,这个是用于创建虚拟的L2的switch的,在Compute节点上,虚拟机的网卡也是连接到二层的switch上架构创建网络#!/bin/bashTENANT_NAME=openstackTENANT_NETWORK_NAME=openstack-netTENANT_SUBNET_NAME=${TENANT_NETWORK_NAME}-subnetTENANT_ROUTER_NAME=openstack-routerFIXED_RANGE=192.168.0.0/24NETWORK_GATEWAY=192.168.0.1PUBLIC_GATEWAY=172.24.1.1PUBLIC_RANGE=172.24.1.0/24PUBLIC_START=172.24.1.100PUBLIC_END=172.24.1.200TENANT_ID=$(keystonetenant-list|grep$TENANT_NAME|awk'{print$2}')(1)TENANT_NET_ID=$(neutronnet-create--tenant_id$TENANT_ID$TENANT_NETWORK_NAME--provider:network_typegre--provider:segmentation_id1|grepid|awk'{print$4}')(2)TENANT_SUBNET_ID=$(neutronsubnet-create--tenant_id$TENANT_ID--ip_version4--name$TENANT_SUBNET_NAME$TENANT_NET_ID$FIXED_RANGE--gateway$NETWORK_GATEWAY--dns_nameserverslist=true8.8.8.8|grepid|awk'{print$4}')(3)ROUTER_ID=$(neutronrouter-create--tenant_id$TENANT_ID$TENANT_ROUTER_NAME|grepid|awk'{print$4}')(4)neutronrouter-interface-add$ROUTER_ID$TENANT_SUBNET_ID(5)neutronnet-createpublic--router:external=True(6)neutronsubnet-create--ip_version4--gateway$PUBLIC_GATEWAYpublic$PUBLIC_RANGE--allocation-poolstart=$PUBLIC_START,end=$PUBLIC_END--disable-dhcp--namepublic-subnet(7)neutronrouter-gateway-set${TENANT_ROUTER_NAME}public先从逻辑上理解虚拟网络创建网络1.为这个Tenant创建一个privatenetwork,不同的privatenetwork是需要通过VLANtagging进行隔离的,互相之间broadcast不能到达,这里我们用的是GRE模式,也需要一个类似VLANID的东西,称为SegmentID2.创建一个privatenetwork的subnet,subnet才是真正配置IP网段的地方,对于私网,我们常常用192.168.0.0/24这个网段3.为这个Tenant创建一个Router,才能够访问外网4.将privatenetwork连接到Router上5.创建一个ExternalNetwork6.创建一个ExernalNetwork的Subnet,这个外网逻辑上代表了我们数据中心的物理网络,通过这个物理网络,我们可以访问外网。因而PUBLIC_GATEWAY应该设为数据中心里面的Gateway,PUBLIC_RANGE也应该和数据中心的物理网络的CIDR一致,否则连不通,而之所以设置PUBLIC_START和PUBLIC_END,是因为在数据中心中,不可能所有的IP地址都给Openstack使用,另外可能搭建了VMwareVcenter,可能有物理机器,仅仅分配一个区间给Openstack来用。7.将Router连接到ExternalNetwork虚拟网络的背后的实现GRE第一次看到这个图太头晕,不要紧,后面会慢慢解释每一部分虚拟网络的背后的实现VLANCompute节点Network节点更头晕则接着忽略ipaddrovs-vsctlshowIpnetnsexecXXX把GRE和VLAN混在一块,图画的不错,显然更晕怎么理解?•回到大学寝室,或者你的家里是不是只有寝室长的电脑插两块网卡,要上网,寝室长的电脑必须开着其他寝室同学只需要一张网卡什么?你们寝室直接买路由器?好吧,暴露年龄了,2000年初的时候,路由器还是不普遍的那就把Computer1和switch合在一起,想象成你们家的路由器怎么理解?•把寝室想象成物理机,电脑就变成了虚拟机室长的电脑或是路由器每个电脑都插的switch忽略qbr,虚拟机直接连到switch上怎么理解?•物理机分开,统一的br-int断开,如何连接ExternalNetworkPrivateNetworkSecurityGroupTapInterfaceInterconnectionNetworkBr-int分开了,在虚拟机眼里,还是同一个switch,至于物理机之间br-int怎么连在一起,虚拟机可不管。Br-int之下,是物理机之间的互联,有各种方法,GRE,VLAN,VXLAN更加深入:TapInterface•virshdumpxmlinstance-0000000c更加深入:TapInterface•Tap/TunDevice•将guestsystem的网络和hostsystem的网络连在一起•Tun/tap驱动程序中包含两个部分,一部分是字符设备驱动,还有一部分是网卡驱动部分更加深入:SecurityGroupLayer•iptables1、首先数据包进入,先进入mangle表的PREROUTING链,在这里可以根据需要改变数据包头内容2、之后进入nat表的PREROUTING链,在这里可以根据需要做DNAT,也就是目标地址转换3、进入路由判断,判断是进入本地的还是转发的1)如果进入本地的话进入INPUT链,之后按条件过滤限制进入之后进入本机,在进入OUTPUT链,按条件过滤限制出去离开本地2)如果是转发的话进入,进入FORWARD链,根据条件限制转发之后进入POSTROUTING链,这里可以做SNAT离开网络接口更加深入:SecurityGroupLayer1)filter表主要处理过滤功能的INPUT链:过滤所有目标地址是本机的数据包FORWARD链:过滤所有路过本机的数据包OUTPUT链:过滤所有由本机产生的数据包2)nat表主要处理网络地址转换,可以进行SNAT(改变数据包的源地址),DNAT(改变数据包的目标地址)PREROUTING链:可以再数据包到达防火墙是改变目标地址OUTPUT链:可以改变本地产生的数据包的目标地址POSTROUTING链:在数据包离开防火墙是改变数据包的源地址3)mangle表修改数据包:包含PREROUTING链,INPUT链,FORWARD链,OUTPUT链,POSTROUTING链这里mangle不做过多操作还有一个表示raw表的,不常用的优先级raw--mangle--nat--filterraw最高,filter最低iptables默认操作的是filter表更加深入:SecurityGroupLayer•iptables-nvL更加深入:br-int&br-tun•由Openvswitch实现•Openvswitch是一个virutalswitch,支持OpenFlow协议,当然也有一些硬件Switch也支持OpenFlow协议,他们都可以被统一的Controller管理,从而实现物理机和虚拟机的网络联通。更加深入:br-int&br-tun•FlowTable包含许多entry,每个entry是对packet进行处理的规则MatchField涵盖TCP/IP协议各层:Layer1–TunnelID,InPort,QoSpriority,skbmarkLayer2–MACaddress,VLANID,EthernettypeLayer3–IPv4/IPv6fields,ARPLayer4–TCP/UDP,ICMP,NDAction也主要包含下面的操作:Outputtoport(portrange,flood,mirror)Discard,ResubmittotablexPacketMangling(Push/PopVLANheader,TOS,...)Sendtocontroller,Learn更加深入:br-int&br-tun更加深入:br-int&br-tun更加深入:br-int&br-tun/etc/openvswitch/conf.db更加深入:br-int&br-tun•br-int主要使用openvswitch中port的vlan功能•Port的一个重要的方面就是VLANConfiguration,有两种模式:•trunkport•这个port不配置tag,配置trunks•如果trunks为空,则所有的VLAN都trunk,也就意味着对于所有的VLAN的包,本身带什么VLANID,就是携带者什么VLANID,如果没有设置VLAN,就属于VLAN0,全部允许通过。•如果trunks不为空,则仅仅带着这些VLANID的包通过。•accessport•这个port配置tag,从这个port进来的包会被打上这个tag•如果从其他的trunkport中进来的本身就带有VLANID的包,如果VLANID等于tag,则会从这个port发出•从其他的accessport上来的包,如果tag相同,也会被forward到这个port•从accessport发出的包不带VLANID•如果一个本身带VLANID的包到达accessport,即便VLANID等于tag,也会被抛弃。更加深入:br-int&br-tunovs-vsctlad
本文标题:深入理解OpenStack之Neutron
链接地址:https://www.777doc.com/doc-4455319 .html