学习或者使用OpenStack普遍有这样的现象:50%的时间花费在了网络部分;30%的时间花费在了存储方面;20%的时间花费在了计算方面。OpenStack网络是不得不逾越的鸿沟,接下来我们一起尝试努力穿越这个沟壑吧……J 主要参考: RDO官网对GRE网络的分析: http://openstack./Networking_in_too_much_detail OpenStack网络出错处理的一般步骤: http://docs./trunk/openstack-ops/content/network_troubleshooting.html OpenStack的主要网络部署场景: http://docs./admin-guide-cloud/content/section_networking-scenarios.html == OpenStack整体系统架构: http://docs./trunk/openstack-ops/content/architecture.html OpenStack网络设计: http://docs./trunk/openstack-ops/content/network_design.html OpenStack网络组件详细介绍: http://docs./admin-guide-cloud/content/ch_networking.html 一OpenStack软件架构 下图是OpenStack软件架构,可以看出主要的组件: OpenStack Dashboard [Horizon]:提供web管理接口; OpenStack Object Store [swift]:提供对象存储服务; OpenStack Image Service [glance]:提供镜像管理服务; OpenStack Computer [nova]:提供计算和简单的网络服务; OpenStack Block Storage [cinder]:提供块存储服务; OpenStack Networking[Neutron]:提供网络服务; OpenStack Identity Service [keystone]:提供认证服务。 各个组件详细介绍请参考: http://docs./admin-guide-cloud/content/ch_install-dashboard.html 二OpenStack系统架构介绍 请参考: http://docs./trunk/openstack-ops/content/example_architecture.html#example_architecture-nova http://docs./trunk/openstack-ops/content/network_design.html#network_topology http://blog.csdn.net/lynn_kong/article/details/8083924 第二种是OpenStackNetworking架构(先不理会HA),此种架构常用的网络拓扑模式包括:VlanManager,GRE和VXLAN。 http://docs./trunk/openstack-ops/content/example_architecture.html#example_architecture-neutron 三Neutron组件详细介绍 接下来是OpenStack Networking 组件Neutron的软件架构图,它作为OpenStack的一个独立组件,因此既可以独立部署在单独的主机上,也能与其它组件组合部署在同一主机上。但大多数情况下,Neutron组件在OpenStack架构中常以单独的host形式提供网络服务,作为网络节点,这也是我们下面将重点介绍的架构。 Neutron提供多种服务,具体而言: neutron-server服务: neutron-server是一个守护进程,用来提供外部调用的API和与其它组件交互的接口。从图中可看出,其中包括horizon组件,nova-compute服务和keystone认证服务。 neutron agent服务: (1) 插件代理,需要部署在每一个运行hypervisor的主机上,它提供本地的vSwitch配置,更多的时候得依赖你具体所使用的插件类型。(常用的插件是OpenvSwitch,还包括BigSwitch,FloodinghtREST Proxy,Brocade,NSX,PLUMgrid,Ryu) http://docs./admin-guide-cloud/content/section_plugin-arch.html (2) DHCP代理,给租户网络提供动态主机配置服务,主要用途是为租户网络内的虚拟机动态地分配IP地址。 (3) L3代理,提供三层网络功能和网络地址转换(NAT)功能,来让租户的虚拟机可以与外部网络通信。 (4) 计量代理,为租户网络提供三层网络流量数据计量服务。 查看方式: [root@rdo-allinone ~(keystone_admin)]# cd/etc/init.d/ [root@rdo-allinone init.d(keystone_admin)]# llneutron-* -rwxr-xr-x. 1 root root 1778 Feb 19 11:10 neutron-dhcp-agent -rwxr-xr-x. 1 root root 1814 Feb 19 11:10 neutron-l3-agent -rwxr-xr-x. 1 root root 1783 Feb 19 11:10 neutron-lbaas-agent -rwxr-xr-x. 1 root root 1798 Feb 19 11:10 neutron-metadata-agent -rwxr-xr-x. 1 root root 1836 Feb 19 11:10 neutron-openvswitch-agent -rwxr-xr-x. 1 root root 1160 Feb 19 11:10 neutron-ovs-cleanup -rwxr-xr-x. 1 root root 1820 Feb 19 11:10 neutron-server [root@rdo-allinone ~(keystone_admin)]# neutronagent-list +--------------------------------------+--------------------+--------------+-------+----------------+ |id +--------------------------------------+--------------------+--------------+-------+-------------- | 16436773-3170-46fa-8558-902d4d9c05de | DHCPagent | 7dbebfde-128c-43a8-9c70-fdbe8e49a89e | L3agent | 98cb47b5-bc50-4cd2-be24-913bf8111c57 | Open vSwitchagent | rdo-computer | :-) |True| | ad9a4799-94a0-4541-be6a-5cab1fcb3dbf | Open vSwitchagent | rdo-allinone | :-) +--------------------------------------+--------------------+--------------+-------+-------------- 从图中也能看出Neutron不可避免与消息系统Queue和数据库neutrondatabase交互。 四OpenStack-Neutron-OVS-GRE部署 前面提到了OpenStack系统架构,接下来介绍的GRE网络使用的是上面提到的第二种架构,图上的HA可以暂不理会。概括来说这种系统架构有着独立的控制节点运行horizon,glance,cinder,keystone组件服务,还包括数据库,消息系统等;独立的网络节点运行neutron组件服务;一个或多个独立的计算节点运行nova组件服务。 · · · 为了安全和有机的让各个组件稳定的运行,划分网络是很重要的工作。OpenStack的网络主要有两类,内部网络和外部网络;再细分内部网络包括管理网络和虚拟机之间的数据网络,外部网络包括互联internet网络和API管控网络。其中:管理网络主要是来管理OpenStack中各个组件的,在安装部署时,很多配置文件项相关的网络IP就属于管理网络范畴;数据网络主要用于虚拟机之间的通信,虚拟网络划分,Networkas a Service等,它由OpenStack的网络组件Neutron和网络插件管理并操作;外部网络就是指可以访问互联网和被cloud之外主机访问或接入的通道;API网络是对cloud之外提供的可以管理的通道,一般不与外部网络区分开来。 · · · · 具体网络划分如下: 管理网络:192.168.10.0/24(配置在eth0上),部署OpenStack环境时,各种服务的配置文件均会使用这个网卡上的IP。 数据网络:192.168.100.0/24(配置在eth1上),用来连通各个节点上的br-tun网桥,构造通信平面,这个通信层可以构建隧道[GRE],也可以构建L3通信协议层[VXLAN]。同时它也负责连通租户虚拟网络内的网络设备,使虚拟机之间进行网络通信。 Public/API网络:10.1.101.0/24(配置在eth2上)外部网关是10.1.101.254,一般用在控制节点和网络节点上,需要和外部通信。 租户网络:是用软件定义出来的虚拟网络[10.0.0.0/24],参考如下 neutron net-create Ext-Net--provider:network_type gre/vxlan--provider:segmentation_id 1 --router:external true neutronsubnet-create vim A_prepare.sh #!/bin/bash # Create Tenant and User# tenant=TenantA user=UserA usermail=usera@stackinsider.com role=Member if keystone tenant-list | grep-q $tenant;then else fi if keystone user-list | grep -q$user;then else fi keystone user-role-add --tenant$tenant --user $user --role $role neutron --os-tenant-name$tenant --os-username $user --os-password password--os-auth-url=http://localhost:5000/v2.0 net-create$tenant-Net subnet_id=`neutron--os-tenant-name $tenant --os-username $user --os-password password--os-auth-url=http://localhost:5000/v2.0 subnet-create $tenant-Net10.0.0.0/24 | awk '$2~/^id/{print $4}'` neutron --os-tenant-name$tenant --os-username $user --os-password password--os-auth-url=http://localhost:5000/v2.0 router-create$tenant-R1 neutron --os-tenant-name$tenant --os-username $user --os-password password--os-auth-url=http://localhost:5000/v2.0 router-interface-add$tenant-R1 ${subnet_id} neutron router-gateway-set$tenant-R1 Ext-Net
可以参考RDO官方文档http://openstack./GettingStartedHavana_w_GRE使用RDO部署多节点的OpenStack-Neutron-OVS-GRE环境。按照以上网络划分和网卡地址分配,你将更容易的修改RDO的配置文件,部署你所需要的网络环境。 CONFIG_NEUTRON_OVS_TENANT_NETWORK_TYPE=gre CONFIG_NEUTRON_OVS_TUNNEL_RANGES=1:1000 CONFIG_NEUTRON_OVS_TUNNEL_IF=eth1 安装完成后在安装了neutron组/插件的主机上可以看到vim/etc/neutron/plugins/openvswitch/ovs_neutron_plugin.ini +157配置项local_ip为eth1地址。 五 先了解一下这些网络设备命名的规律: (1)TenantA的router和Linux网络命名空间qrouter名称 # neutron --os-tenant-name TenantA --os-username UserA--os-password password --os-auth-url=http://localhost:5000/v2.0router-list --field id | 165f931b-4e08-46eb-a048-f8c62b72b48e| # ip netns qrouter-165f931b-4e08-46eb-a048-f8c62b72b48e 即租户虚拟路由器的ID号,与qrouter命名相对应。 (2)TenantA的network和Linux网络命名空间qdhcp名称 # neutron --os-tenant-name TenantA --os-username UserA--os-password password --os-auth-url=http://localhost:5000/v2.0net-list |id | 4b9ccec6-0d8c-496c-bad3-a26ce01af708 | TenantA-Net| | 7f70cae2-fd78-486f-ac62-dabadfbb0959 |Ext-Net # ip netns qdhcp-4b9ccec6-0d8c-496c-bad3-a26ce01af708 即租户虚拟网络的ID号,与qdhcp命名相对应。 (3)TenantA网络端口和其它的网络设备的名称 # neutron --os-tenant-name TenantA --os-username UserA--os-password password --os-auth-url=http://localhost:5000/v2.0port-list +--------------------------------------+------+-------------------+------------------------------- |id +--------------------------------------+------+-------------------+------------------------------- | 4c2c44d9-4b00-4094-9b21-aeb811d213d9| | 6455f9c4-2c63-4c22-abe6-a93bb59130fa| | 9e6562b4-6bc8-4e73-b794-55215c1a9d7c| | f2ce023b-aa4d-4a78-a36f-ae121c4164f7| +--------------------------------------+------+-------------------+------------------------------- 可以使用下面这些命令验证: # neutron port-list # ifconfig # ovs-vsctl show # ip netns execqrouter-165f931b-4e08-46eb-a048-f8c62b72b48e ifconfig # ip netns exec qdhcp-4b9ccec6-0d8c-496c-bad3-a26ce01af708ifconfig 举例说明: 系统中的网络设备: 一个外部网络Ext-Net(8583f2ba-37da-4fa0-b312-f9b0979a4fea);它的子网是ef11b954-d328-4851-a31e-f4bcaefba42b,网段为10.1.101.0/24,但是分配的地址池是从10.1.101.240到10.1.101.252。 还有一个租户网络TenantA-Net(TenantA的网络,ID号为84191af8-269f-485a-b394-85d79e53a39a,对应着qdhcp-84191af8-269f-485a-b394-85d79e53a39a);它的子网是b2bc3ba5-667c-4df1-a74f-448ce8261fff,网段为10.0.0.0/24,地址池是10.0.0.2到10.0.0.254。TenantA还有一个私有的路由器TenantA-R1(ID号为45765633-1bd6-41c7-bdfc-7d425818135a,对应着qrouter-45765633-1bd6-41c7-bdfc-7d425818135a)。 系统中的网络端口: neuron port-list出来一共有6个端口: 显然端口974a43e3-90a5-4066-83b1-ac819b29966b(10.0.0.2)和端口0f474d5d-519d-4aef-a633-e4d910cc1b1a(10.0.0.4)是虚拟机cirros-0001和cirros-0002的私有IP地址端口(虚拟机tap网络设备端口)。[并且虚拟机cirros-0001位于computer-02上,cirros-0002位于computer-01上] 端口beabcafe-044d-43f2-bed9-7597d9dfe051(10.1.101.241)是一个浮点IP端口,它绑定在了虚拟机cirros-0001(0aaecb00-0ca2-4c60-bf7c-869eb0570ba8)上。 端口6defad4c-b22c-4216-8de6-8eba533f6c5b(10.0.0.1)和端口d7e5d255-6247-4483-841b-19860161392f(10.1.101.240)是qrouter上面的网络端口。分别作TenantA的网络环境中,子网是b2bc3ba5-667c-4df1-a74f-448ce8261fff(网段为10.0.0.0/24)的网关qr-6defad4c-b2和外网通道qg-d7e5d255-62。[多个网络对应多个qrouter,即qr和qg设备] 端口ae8517df-a628-4252-ad0c-38806d8549d8(10.0.0.3)是qdhcp上面的网络端口tapae8517df-a6,为TenantA的网络环境中,子网是b2bc3ba5-667c-4df1-a74f-448ce8261fff(网段为10.0.0.0/24)的网段动态分配私有IP地址,提供子网dhcp服务。[多个子网对应多个qdhcp,即tap设备] 网络节点上的Linux网桥和OVS网桥: 由上图可以看出网络节点没有运行虚拟机,所以Linux网桥为空。 computer-01节点上的Linux网桥和OVS网桥: 由上图可以看出计算节点computer-01节点上面运行虚拟机cirros-0002(3a0ad0d1-ae47-486b-98b2-6e56181fda9e)网络端口为0f474d5d-519d-4aef-a633-e4d910cc1b1a(10.0.0.4)。可以看到qvb0f474d5d-51端口qbr0f474d5d-51端口和tap0f474d5d-51端口。 computer-02节点上的Linux网桥和OVS网桥:
虚拟机中数据包传递路径: 分别介绍数据包途径的网络设备: 计算节点: 从上图中可以看出,Computer-02上面的虚拟机VM-003的eth0网口与一个tap设备相连。但这个tap设备为什么不直接与计算节点上的br-int网桥相连,而是上图黄色框中所展现的连接情况呢?理想的情况应该是Computer-01上面的绿色框所示。 既然br-int也是网桥,为什么还要穿过Linux bridgeqbr设备,这样qbr设备,qvb设备,qvo设备岂不是就显得多余了。没办法,哲学上说存在即合理,qbr的存在当然另有它用,官网文档有这样的一句话: Security groups:iptables and Linux bridges Ideally, the TAPdevice Networking uses an extra Linuxbridge and a veth pair as a workaround for this issue. Instead ofconnecting (2)OVS一体化网桥br-int br-int是OpenvSwitch创建的虚拟网桥,但在实际运行中它充当着虚拟交换机的角色,br-int上的端口tap设备将宿主机上的虚拟机实例连接到同一网络交换层上。再透过本机OVS网桥br-tun的互联协议可以将OpenStack系统架构中所有节点的br-int组织成一个更大的虚拟交换机BR-INT{compuer-01-br-int+ compuer-02-br-int….}。这是一种很重要的抽象思想,如此一来就好像OpenStack环境中所有的虚拟机实例都连接到了一个巨型的虚拟机交换机上。遗憾的是这个虚拟机交换机的功能有限,不能设定iptables规则实现安全组服务,因此通过qvo,qvb去连接qbr借助linux网桥完成这个工作。所以在计算节点ovs-vsctlshow中的br-int网桥看到tap设备和qvo设备共存也就不足为奇了。 网络节点: br-int是OpenvSwitch创建的虚拟网桥,也起到了虚拟交换机作用。上面主要有两类设备:一类是tap设备;另一类是qr设备。linux网络命名空间namespace 六 VXLAN介绍:http://blog.sina.com.cn/s/blog_6de3aa8a0101oisp.html 通过上面介绍OVS在neutron中的使用及各个网桥的功能,那么也就能很容易的理解OVS-GRE和OVS-VXLAN的区别了:关键在于各个节点br-tun网桥构成的通道层的连通方式。若br-tun之间两两点对点的连接,通信封包为GRE格式,那么这样的网络环境就是OpenStack-Neutron-OVS-GRE网络模式。同理,若br-tun之间跑三层网络协议,封包方式为VXLAN格式,这样的网络环境就是OpenStack-Neutron-OVS-VXLAN网络模式。对于GRE和VXLAN网络模式而言,可以抽象地将每个br-tun看成隧道端点,有状态的隧道点对点连接即为GRE;无状态的隧道使用UDP协议连接则为VXLAN。这样说的依据是RDO的官方文档(http://openstack./Using_VXLAN_Tenant_Networks)部署VXLAM_Tenant_Networs的过程就可以看出。 VXLAN:http://tools./html/draft-mahalingam-dutt-dcops-vxlan-09 |
|
来自: BaldEagle > 《OpenStack》