Openstack 网络知识资料详细介绍及总结
Openstack网络知识资料总结:
Openstack概念
我刚听说要去做openstack开发的时候,蛮激动的啊。虽然我不知道openstack是什么东西,但是我知道这个东西和云计算有关。云计算这东西,听着就高大上,各大互联网公司都有投人进去搞,所以大方向上是必须肯定的。于是我按捺不住了,想在自己的主机上部署openstack,来体验下这个是什么东西。经过一顿折腾之后,终于在虚拟机里面用devstack把openstack给部署出来了(部署过程中,最坑的就是国内的防火墙)。
部署的过程,其实就是把一堆Python包安装到主机系统的过程。openstack有一个python包叫做Dashboard,这个东西提供了一个Web界面,从那里我真正体验到了openstack是个啥。在Dashboard上创建一台虚拟机的过程蛮有趣的,这个过程涉及到的步骤,很多都和现实中安装电脑很像。
Openstack
RealLife
创建ubuntu镜像
使用Ultraiso刻录好一个ubuntu系统的U盘
创建provider网络
叫电信的来给家里开通网络
创建Instance主机
买了一台主机,并用刚刚的U盘给它装好Ubuntu系统
启动Instance主机
把电信的网口插到主机网卡上
我在Dashboard创建了两台Instance主机,两台主机跑的好好的。就目前来说,这个效果和VMwareWorkstation软件就很像了,可以在一台物理机上,跑多虚拟主机。只不过VMwareWorkstation软件面向的是单台物理机,而openstack却可以面对物理机集群进行管理和虚拟化。当成百上千的物理机被openstack管理着,而终端使用用户只需要面对唯一的一个Dashboard界面,这个时候私有云的概念就体现出来了。
有了感性的认识后,再去openstack官网是什么定义自己的:
Opensourcesoftwareforcreatingprivateandpublicclouds.
OpenStacksoftwarecontrolslargepoolsofcompute,storage,andnetworkingresourcesthroughoutadatacenter,managedthroughadashboardorviatheOpenStackAPI.OpenStackworkswithpopularenterpriseandopensourcetechnologiesmakingitidealforheterogeneousinfrastructure.
Hundredsoftheworld'slargestbrandsrelyonOpenStacktoruntheirbusinesseseveryday,reducingcostsandhelpingthemmovefaster.OpenStackhasastrongecosystem,andusersseekingcommercialsupportcanchoosefromdifferentOpenStack-poweredproductsandservicesintheMarketplace.
Thesoftwareisbuiltbyathrivingcommunityofdevelopers,incollaborationwithusers,andisdesignedintheopenatourSummits.
OpenStack软件控制整个数据中心的大型计算,存储和网络资源,用户可以通过Dashboard或OpenStackAPI进行管理。就我理解,Openstack更像是一个操作系统,一个强大的云计算操作系统。
Openstack网络概念
我前面通过Dashboard创建的两个Instance虚拟机,它们之间是可以互相ping通的,因为它们两是处于同一个二层网络的,都是直接链接到Provider网络。
|VM1||VM2| |-------||-------| || |Eth(172.24.4.2)|Eth(172.24.4.3) ____|______________________|___________ --------------------Provider(172.24.4.0/24)
上面的拓扑其实已经涵盖了openstack中比较核心的三个网络概念:Network,Subnet,Port。我们把这三个概念和上面的网络拓扑映射一下:
- “Provider”这个名字,对应的就是openstack的Network
- “172.24.4.0/24”这个IP地址池,对应的就是openstack的Subnet
- “Eth(172.24.4.2)”这个Instance网卡,对应的就是openstack的Port
其实我们还可以让VM1和VM2不在一个二层网络上,只不过这个时候,就需要引入openstack网络的另一核心概念Router。
|VM2| |-------| | |Eth(10.0.0.2) _______|_______ --------Private(10.0.0.0/24) | |If(10.0.0.1) | |VM1||Router1| |-------||----------| || |Eth(172.24.4.2)|Gw(172.24.4.3) ____|_______________________|__________ --------------------Provider(172.24.4.0/24)
这样一来VM1和VM2就不在同一个二层网络了,两个Instance虚拟机的网络环境也就实现了隔离。从拓扑上可以看出,这里多出了三样新部件:
- Router:也就是拓扑中的Router1
- Router-Gateway:也就是拓扑中的Gw(172.24.4.3),主要是为了Router1后面的虚拟机访问Provider网络。
- Router-Interface:也就是拓扑中的If(10.0.0.1),让Router1作为Private网络的L3网关。
上面两个网络拓扑,就覆盖openstack网络的核心概念了,当然仅仅有以上四个核心概念,是没办法适应实际DataCenter复杂的网络拓扑需求的,为此有了其他虚拟网络概念如:FloatingIP,SecurityGroup,ServiceFunctionChain等。
Openstack网络组件介绍
Openstack包含了非常多的子项目,目前几个核心的子项目如下:
- Nova:提供compute计算能力(虚拟机)
- Neutron:提供networking网络连接能力
- Glance:提供image镜像存储能力
- Keystone:提供identity身份认证能力
- Cinder/Swift:提供storage存储能力
网络虚拟化是块发展比较快的领域,到目前Neutron已经很好的支持L2,L3,HA,SecurityGroup,LBaas,FWaas,VPNaas,DVR等等。只不过我看过一些文章,里面说到Neutron的发展方向应该是,专注于API标准的定制。让各个网络功能从Neutron中剥离出去,让各个网络设备商的SDNControllerPlugin去聚焦和实现这部分功能。Neutron需要设计出一组良好的北向接口规范,让自己成为一个纯粹的APIServer(这些观点的正确性,我也不确定,只不过换个高度看事情,未尝不是件好事)。
Neutron里面有两个框架比较有趣,ML2框架和ExtensionPlugin框架。ML2是对L2网络功能的一次抽象,这让不同的L2虚拟化技术(LinuxBridge,OpenvSwitch…)只需统一对接到ML2即可。而ExtensionPlugin为一些在开发中的SDNControlerorNetworkFunctionVirtual,能够方便的对接到Neutron中,进行部署测试,待其孵化成熟之后,再合并到Neutron项目中。我在主机上部署的Openstack(Neutron+OVN),其实就是充分利用了NeutronML2和ExtensionPlugin才得以实现,从这点上也看出了Neutron的灵活性非常强大。
上面简单介绍了Neutron,现在说说OVN(OpenVirtualNetworkforOpenvSwitch),它是OpenvSwitch团队自己孵化OVS的子项目,目的是为了让OVS更加友好的支持虚拟网络,容我引用IBM的一篇博文的精彩观点:
Pickupfrom如何借助OVN来提高OVS在云计算环境中的性能
众所周知,OpenvSwitch以其丰富的功能和不错的性能,已经成为Openstack部署中最受欢迎的虚拟交换机。由于OpenstackNeutron的架构引入了一些性能问题,比如neutron-server要与非常多的agent通信,RPC就是一个性能瓶颈,还有neutron里面用到非常多的namespace,namespace资源有限而且系统开销比较大,这也是一个性能瓶颈。OVS社区觉得从长远来看,Neutron应该让一个其它的项目来做虚拟网络的控制平面,Neutron只需要提供API的处理,于是OVS社区推出了OVN(OpenVirtualNetwork)这个项目,OVN是OVS的控制平面,它给OVS增加了对虚拟网络的原生支持,大大提高了OVS在实际应用环境中的性能和规模。
如果想用OVN和Neutron进行集成使用,还需要Networking-ovnPlugin的帮助。Networking-ovn是个比较简单的Plugin,它的工作是将Neutron中对虚拟网络的定义,翻译到OVN对虚拟网络的定义中去。它的简单,来源于优美的NeutronAPI接口设计,和精简的OVN北向数据库表设计。
|OPENSTACK| || |(neutron)|APIServer ----------------------- || vv --->networing-ovn<---ServiceandPlugin || vv |----------| |OVN|SDNControllerforOpenvSwitch |----------| | v ---------------------- |OpenvSwitch|DataPlansupportforVirtualNetworkingFunction ||
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!