您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码:  验证码,看不清楚?请点击刷新验证码 必填



  求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Modeler   Code  
会员   
 
   
 
 
     
   
 订阅
  捐助
在OpenStack云端快速搭建Neutron网络
 
 来源:www.ustack.com  发布于 2016-11-21
   次浏览      
 

在这个详细的教程中,我们将学习如何创建多个网络和子网,然后学习创建横跨这些网络的多个虚拟机,以及为静态IP地址确认网络连接性。

如果你缺乏网络经验,或是对OpenStack感到陌生,那么理解Neutron将是一项挑战。按照OpenStack官方文件,Neutron是一个OpenStack项目,用于在由其他OpenStack服务(例如Nova)托管的接口设备(例如vNIC)之间提供“网络连接即服务”。Neutron可简单地描述为:

允许用户创建和管理网络、子网和端口等网络对象,其他的OpenStack服务能够通过API使用它们。

它们能够让大量运营者通过使用代理、插件和驱动器部署复杂的网络技术,从而驱动他们的网络基础设施。

首先,我们先通过实例来理解OpenStack中的网络。在本次的教程中,我们将分四个步骤来具体操作。具体包括:网络、子网和端口;安全组;路由器;浮动IP。

我们首先将创建多个网络和子网。然后我们将横跨这些网络创建多个虚拟机,并为静态IP确认网络连接性。随后我们将浏览一下使用安全群组的虚拟机对访问的限制,最后我们再看一下使用路由和浮动IP的不同网络之间的连接性。

▼ 准备好了吗?我们现在开始。

网络、子网和端口

正如上面所说的那样,让我们先创建一些网络。我们的计划如下:

创建一个网络(GREEN)。为这个网络创建一个子网,然后创建两个使用该网络的虚拟机。

创建另一个使用不同子网的网络(RED),创建两个使用该网络的虚拟机。

作为上述程序的一部分确认所创建的端口,理解OpenStack网络端口为什么有用。

完成这些任务后,我们将有一个如上图所示的网络基础设施,其中包含:

两个虚拟网络(GREEN和RED)

两个子网,10.10.10.0/24和20.10.10.0/24虚拟网络各一个。

4台虚拟机(每个虚拟网络各两台),每台虚拟机的IP地址由对应网络中的DHCP动态分配。

两个DHCP主机(在网络创建时如果勾选将被自动创建)。

六个在用的网络端口。

首先让我们确认没有已有网络。关于下列所有命令,我们将使用OpenStack绑定的python CLI(python-neutronclient 或 python-novaclient)。

现在我们创建名为GREEN的第一个网络。

正如我们所看到的,名为GREEN的新网络被创建。这个网络的类型为GRE类型,网段ID为101。你会发现它们没有外部网络(router:external 为False)。

现在让我们在这个网络中创建一个子网。我们为这个子网选择10.10.10.0./24地址段,其名称为10_10_10。

我们可以看到子网被创建,其默认分配池为10.10.10.2-10.10.10.254。该子网中所有新设备的IP地址将在这个范围内分配。第一个和最后一个IP地址是特殊的,因此它们将被保留。如neutron subnet-create命令输出所示,10.10.10.1为默认网关。最后一个IP地址10.10.10.255为广播地址,出于广播用途而被保留。

再看一个网络列表,我们能够确认GREEN网络有一个10.10.10.0/24的新子网。

现在我们的基本网络组件已经完成。让我们使用cirros镜像启动这个网络的虚拟机。

提示中称两个带有cirros 镜像的m1.tiny虚拟机正在创建。

上述简短的 nova list 显示虚拟机已经启动,并在10_10_10子网中占了两个IP地址。作为启动程序的一部分,网络虚拟交换的端口附属于虚拟机的虚拟接口。看一下这个网络的端口,我们应该能够对添加到这个网络中的设备有一个了解。

上面的neutron port-list显示有三个端口被创建。两个附属于VM接口,一个附属于虚拟DHCP服务器。因为在创建网络时,我们不能禁止DHCP,因此DHCP服务器将会被创建。这个DHCP服务负责向虚拟机分配动态IP地址。

另外,确认端口创建的一个更简单的办法是利用horizon 仪表盘。点击特定的网络,我们会进入网络详情页面,在这里我们能够看到所选择网络正在使用的端口。例如,打开GREEN网络的网络详情页面,我们会看到:

我们可以看到两个Compute:None端口,这告诉我们这些端口被连接至虚拟机。一个端口(10.10.10.4)连接至DHCP服务。

OpenStack中Network 是一种VLAN,但是更具灵活性。

Subnet 为IP地址段和相关的配置状态。在新的端口在网络中被创建时,子网被用于分配IP地址。

Neutron Port为连接单个设备至虚拟网络的连接点,如虚拟服务器的NIC。这个端口也被称为相关网络配置,如用在该端口中使用的MAC和IP地址。

现在我们的第一组虚拟机和网络组件已经创建。我们将创建另一个新网络(名为RED),并为该网络创建一个新的子网,同时启动两台使用该网络和子网的新虚拟机。假设我们重复了之前的步骤,我们能够确认在Horizon仪表盘的4个实例,如下图所示。这4个实例运行在两个节点中,两个连接至GREEN网络(10.10.10.X),另外两个连接至RED网络(20.10.10.X)。

4个实例在运行,GREEN网络(10.10.10.X)和RED网络(20.10.10.X)各两个。

这里存在着两个网络:

总共有6个端口被创建。4个端口用于4台虚拟机,2个端口被连接至GREEN网络和RED网络中的DHCP服务。

我们已经创建了前面提到的网络基础设施。这表明,在Neutron网络、子网和端口的帮助下,我们能够创建一个满足我们需求的、高度复杂、且灵活的网络设置。

安全组

在上一章节,即便虚拟机在同一网络中被创建和连接,但由于安全组的原因我们可能也无法ping或ssh它们。这是因为有一个针对计算实例的虚拟防火墙控制着流入和流出的流量。OpenStack中的安全组在每台虚拟机上被执行。你可以创建一系列安全组规则,并将它们指定给实例。

让我们列出所有的安全组:

列出一个默认安全组包含的规则:

让我们查找一下任意一台虚拟机的安全组:

这表明我们的VM1(greenboxes-b2647e00-81e3-4290-b9c3-ce5e584c7265)带有默认的安全组。现在让我们添加一个规默认允许ssh连接(port 22):

>

列出针对默认安全组的安全组,我们能够确认默认安全组有一个针对port 22的规则。这意味着任意一台虚拟机在启动时都带有默认安全组,port 22将针对接入连接开放,因此我们能够执行ssh连接。这些安全组规则是针对项目的,项目成员能够编辑针对他们组的默认规则,以及添加新的规则。

路由器

在上述图表中,只要在同一网络中,GREEN网络中的实例就能够与其他任意设备进行对话。这意味着VM1能够向VM2发送并接收来自VM2的数据包,但是VM3或 VM4则不行。为了在两个不同网络之间提供连接性,路由器将成为其中的一部分。

路由器是逻辑网络组件,它们的功能包括:

在网络间转发数据包

提供L3和NAT转发,从而提供对租户网络中的虚拟机的外部访问。

让我们展示一下这两个功能。在本章节,我们将介绍一种新的路由器。将每个网络的一端连接至路由器,让它们相互连接。我们将创建一个模拟外部网络,并让这个路由器成为网关。在这种情况下,我们的虚拟机能够与外部世界进行通信。在本章节的后面,我们将有一下如下所示的设置。

我们需要一台路由器将任意两个网络连接在一起。让我们创建一台名为EXT_VR的外部虚拟路由器。

现在我们需要将每个网络的虚拟接口添加至刚创建的EXT_VR路由器上。通过这种办法,我们能够获取一个带有多个子网的网络,并决定将哪个子网与路由器相连。

现在这些网络通过EXT_VR连接在了一起,我们能够确认它们的连接性。

即便我们能够看到不同网络的虚拟机之间的连接性,但是它们仍然没有Internet连接。来自虚拟机的数据包无法到达外部网络。网络基础设施的当前状态如下图所示:

两个网络(RED和GREEN)被连接至路由器,但是路由器与Internet之间没有连接。我们需要将路由器设置为网关。这意味着将路由器的一个接口连接至外部网络。在我们的案例中,我们有一个现成的外部网络,我们将这些网络添加作为路由器的网关。

这将创建一个新的端口,而这个端口将把外部网络连接至路由器。我们来确认一下。

正如我们所见,有了(针对192.168.100.104和192.168.100.105的)两个新端口。这是两个新的连接点,一个连接路由器至外部网络,另一个将连接外部网络至Internet。现在,来自内部虚拟机的数据包就能够到达Internet了。

浮动IP

我们可以看到,通过上面的步骤,虚拟机能够到达外部公共网络。但是逆向则不可能。我们不能通过外部网络到达虚拟机。任何直接与(拥有私有IP地址10.10.0.5的)VM1对话的数据包能够到达外部路由器,但是这个网关路由器没有办法识别目标虚拟机。让我们尝试着更为详细地理解这其中的含意。

上面的简图与我们之前的网络基础设施相似。首先,我们试着将来自VM1的数据包发送至外部机器(IP地址为56.57.58.59)。由于VM1的外部连接性是通过连接虚拟路由器获得的,因此这个数据包能够到达拥有源IP地址10.10.10.5的虚拟路由器和目标IP地址56.57.58.59。我们的虚拟外部路由器EXT_VR随后会将源IP地址改成自己的IP地址(192.168.0.19),并将数据包发送至正确的目的地。

对于由任何外源至任意虚拟机的数据包传输,数据包能够到达我们使用路由器公共IP地址的外部虚拟路由器EXT_VR。但是根据数据包中提供的信息,虚拟路由器没有办法识别目标虚拟机。

允许虚拟机获得外部网络连接性的一个办法是,为每台虚拟机创建公共IP。但是这在较长时间内不具备可持续性。总体上,除了偶尔的情况之外,我们还是希望我们的虚拟机不与公共网络连接在一起。每台虚拟机使用公有IP将导致我们必须要维护庞大的虚拟机IP地址池。

浮动IP为可路由的公共IP,其能够被分配给一台虚拟机,并可以撤消。它们可以在路由器层进行维护。

作为本章节的一部分,让我们在公共网络EXT中生成一些浮动IP。随后我们把它们动态地分配给VM1,并确认连接性。

最初neutron floatingip-list命令是没有结果的。这意味着没有现成的浮动IP。随后我们要在ext网络中生成一个浮动IP。这个IP将从ext网络的网络地址池中随机选取一个。然后我们找到希望联系在一起的虚拟机端口。通过使用neutron floatingip-associate ,我们能够将这个浮动的IP地址与虚拟机端口联系在一起。这将创建一个从外部网络至VM1的连接。

结论

现在,我们已经对如何在OpenStack云端创建网络和子网有了基本的认知。我们还看到了通过安全组阻止每台虚拟机的流量。此外,我们学习到了使用L3交换和路由器连接不同网络,以及使用浮动IP允许外部连接到达虚拟机的具体方法。

   
次浏览       
 
相关文章

云计算的架构
对云计算服务模型
云计算核心技术剖析
了解云计算的漏洞
 
相关文档

云计算简介
云计算简介与云安全
下一代网络计算--云计算
软浅析云计算
 
相关课程

云计算原理与应用
云计算应用与开发
CMMI体系与实践
基于CMMI标准的软件质量保证
最新活动计划
LLM大模型应用与项目构建 12-26[特惠]
QT应用开发 11-21[线上]
C++高级编程 11-27[北京]
业务建模&领域驱动设计 11-15[北京]
用户研究与用户建模 11-21[北京]
SysML和EA进行系统设计建模 11-28[北京]

专家视角看IT与架构
软件架构设计
面向服务体系架构和业务组件的思考
人人网移动开发架构
架构腐化之谜
谈平台即服务PaaS
更多...   
相关培训课程

云计算原理与应用
Windows Azure 云计算应用

摩托罗拉 云平台的构建与应用
通用公司GE Docker原理与实践
某研发中心 Openstack实践
知名电子公司 云平台架构与应用
某电力行业 基于云平台构建云服务
云计算与Windows Azure培训
北京 云计算原理与应用