讲清楚说明白openstack中vm流量走向之1——集中式网络节点

一、背景介绍

openstack被广大公有云厂商所采用,对于公有云场景来讲Newtron组件所提供的网络功能,一直是较难理解的部分,本文详细介绍在openstack集中网络节点架构下,vm的南北向与东西向流量实现。

二、网络节点功能

由于openstack默认部署模式下,计算节点通过ml2插件实现二层互通,所有三层流量都要经过网络节点,如下图所示:
在这里插入图片描述

图中同一tenant下有2个不同子网,vm1/2和vm3/4分别属于不同的subnet,通过上图可以看出不同子网之间通信,以及未绑定fip的vm与公网间通信,和拥有fip的vm通过公网访问都需要经过网络节点,网络节点存在单点隐患,对此需要通过L3 HA来对该节点进行高可用。

三、openstack中的网络类型

openstack中网络模式分为2种:provider网络和self-service网络。provider是一个半虚拟化的二层网络架构,只能通过桥接的方式实现,处于provider网络模式下vm获取到的ip地址与物理网络在同一网段,可以看成是物理网络的扩展,在该模式下,控制节点不需要安装L3 agent,也不需要网络节点,vm直接通过宿主机的NIC与物理网络通信,provider网络只支持flat和vlan两种模式。其架构如下:
在这里插入图片描述

而self-service模式允许租户自己创建网络,最终租户创建的网络借助provider网络以NAT方式访问外网,所以self-service模式可以看成是网络层级的延伸,要实现self-service模式必须先创建provider网络,self-service网络支持flat、vlan、vxlan、gre模式。其架构如下:
在这里插入图片描述

vm从self-service获取到的IP地址称为fix ip,vm从provider网络获取到的IP地址称为floating IP。不管租户创建的网络类型为vxlan或者vlan(br-tun或br-vlan)租户vm之间通过fix ip之间的互访流量称为东西走向,只有当vm需要通过snat访问外网或者从通过fip访问vm时,此时的流量称为南北走向。

四、网络节点内部组件

相对于计算机点,网络节点中多了租户的dhcp和router空间和连接internet的br-ex(计算节点同样拥有br-int和br-tun/vlan的OVS,详见作者其他博文),
网络节点的内部组件通信如下图所示:
在这里插入图片描述

从上图得知:fix ip最终需要借助router namespace中的iptables规则,以sant或dnat的方式实现vm访问外网或被外网访问。当然也可以让vm直接接入provider网络,但provider网络只是一个二层的虚拟化网络,需要借助物理设备来实现三层及以上功能。以下就以self-service模式为例,详细说明vm的东西和南北流量走向。

五、vm的东西流量分析

通过前面知道,一个tenant可以创建多个subnet,此时vm之间的通信就分为同一个subnet和不同subnet之间两种情况,区别就是,不同subnet之间的通信需要经过网关(网络节点),而同subnet之间的通信不需要经过网络节点。

1.不同subnet之间的通信

无论tenant创建的网络类型是隧道还是vlan,不同subnet之间的通信必须借助L3 Agent完成,而在集中式网络节点架构中,只有网络节点部署了该角色,vm之间的流量如下图所示:
在这里插入图片描述

  • 1.vm1向vm2发出通信请求,根据目的IP地址得知vm2和自己不在同一网段,将数据包送往网关。
  • 2.数据包经过linux bridge通过其上的iptables安全策略检查,按后送往br-int并打上内部vlan号。
  • 3.数据包脱掉br-int的内部vlan号进入br-tun/br-vlan。
  • 4.进入br-tun的数据包此时vxlan封装并打上vni号,进入br-vlan的数据包此时打上外部vlan号,通过nic离开compute1。
  • 5.数据包进入网络节点,经过br-tun的数据包完成vxlan的解封装去掉vni号,经过br-vlan的数据包去掉vlan号。
  • 6.数据包进入br-int,此时会被打上内部vlan号。
  • 7.进入router namespace路由空间找到网关,vm1的网关配置在此路由器接口qr-1口上。
  • 8.将数据包路由到vm2的网关,vm2的网关配置在qr-2口上,送回br-int并打上内部vlan号。
  • 9.数据包脱掉br-int的内部vlan号进入br-tun/br-vlan。
  • 10.进入br-tun的数据包此时vxlan封装并打上vni号,进入br-vlan的数据包此时打上外部vlan号,通过nic离开network node。
  • 11.数据包进入compute2,经过br-tun的数据包完成vxlan的解封装去掉vni号,经过br-vlan的数据包去掉vlan号。
  • 12.数据包进入br-int,此时会被打上内部vlan号。
  • 13.数据包经过离开br-int并去掉内部vlan号,送往linux bridge通过其上的iptables安全策略检查。
  • 14.最后数据包送到vm2。

2.相同subnet间通信

相同subnet之间通信不需要借助L3 Agent,vm之间流量如下图所示:
在这里插入图片描述

  • 1.vm1向vm2发起请求,通过目的IP地址得知vm2与自己在同一网段。
  • 2.数据包经过linux bridge,进行安全策略检查,进入br-int打上内部vlan号。
  • 3.数据包脱掉br-int的内部vlan号进入br-tun/br-vlan。
  • 4.进入br-tun的数据包此时vxlan封装并打上vni号,进入br-vlan的数据包此时打上外部vlan号,通过nic离开compute1。
  • 5.数据包进入compute2,经过br-tun的数据包完成vxlan的解封装去掉vni号,经过br-vlan的数据包去掉vlan号。
  • 6.数据包进入br-int,此时会被打上内部vlan号。
  • 7.数据包经过离开br-int并去掉内部vlan号,送往linux bridge通过其上的iptables安全策略检查。
  • 8.最后数据包送到vm2。

六、vm的南北流量分析

南北流量也分为有floating ip和无floating ip(fix ip)两种情况,唯一的区别在于vm最终离开network node访问internet时,有floating ip的vm源地址为floating ip,而使用fix ip的vm通过snat方式,源地址为network node的ip,vm南北流量如下图所示:
在这里插入图片描述

  • 1.vm1向公网发出通信请求,数据包被送往网关。
  • 2.数据包经过linux bridge通过其上的iptables安全策略检查,按后送往br-int并打上内部vlan号。
  • 3.数据包脱掉br-int的内部vlan号进入br-tun/br-vlan,进入br-tun的数据包此时vxlan封装并打上vni号,进入br-vlan的数据包此时打上外部vlan号,通过nic离开compute1。
  • 4.数据包进入网络节点,经过br-tun的数据包完成vxlan的解封装去掉vni号,经过br-vlan的数据包去掉vlan号,再被送往br-int,此时会被打上内部vlan号。
  • 5.进入router namespace路由空间查询路由表项,vm1的网关配置在此路由器qr接口上。
  • 6.数据包在此路由器上完成地址转换,源地址变成qg口network node节点的外网地址(floating ip在qg口使用的是给vm分配的外网地址,需要提前将fix ip和floating ip绑定),送回br-int并打上内部vlan号。
  • 7.数据包离开br-int进入br-ex,脱掉内部vlan号,打上外网ip的vlan号。
  • 8.最后借助provider网络访问公网,此处也印证了provider网络只能是vlan或flat类型。

七、网络节点HA

通过前文得知,整个架构的三层通信需要借助安装在网络节点的L3 Agent来完成,这样,网络节点在架构中就成了单点隐患,为了解决这个问题,需要对network node做高可用,L3 Agent实现ha的方式是利用keepalive的VRRP协议提供一个vip,同时在br-int和Router上增加一个ha接口,以实现心跳传递,此时网络节点的内部组件通信如下图所示:
在这里插入图片描述

从部署结构来看,route namespace的接口上分别是subnet的网关地址和外网地址(或者floating ip地址),所以当使用keepalive此时网络节点架构如下图所示:
在这里插入图片描述

至此集中网络节点模式下vm的流量就介绍完毕。

  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在OpenStack,可以使用Nova调度器来控制虚拟机的放置。默认情况下,Nova调度器会根据一定的规则将虚拟机放置在可用的计算节点上。如果需要修改调度器规则,可以使用Nova Scheduler Filters和Weighers。 要将虚拟机放置在load最低的节点上,可以使用Nova Scheduler Filters的LoadFilter。LoadFilter会根据计算节点的负载情况筛选出负载最低的节点。要使用LoadFilter,需要在nova-scheduler.conf添加以下配置: ``` scheduler_default_filters = RetryFilter,AvailabilityZoneFilter,RamFilter,ComputeFilter,ComputeCapabilitiesFilter,ImagePropertiesFilter,ServerGroupAntiAffinityFilter,ServerGroupAffinityFilter,LoadFilter ``` 这样配置后,Nova调度器会优先将虚拟机放置在负载最低的节点上。同时,可以使用Nova Weighers进一步调整节点的优先级。例如,可以使用CPUWeigher或RAMWeigher来根据节点的CPU或内存情况调整节点的优先级,使得更适合放置虚拟机的节点优先级更高。 需要注意的是,LoadFilter需要计算节点的负载情况,因此需要开启Nova compute节点上的nova-compute-stats-api服务。可以在nova.conf添加以下配置: ``` compute_monitors = nova.compute.monitors.cpu.monitors.LoadMonitor ``` 这样配置后,Nova compute节点会定期采集计算节点的负载情况,并将其报告到nova-scheduler服务。这样,Nova Scheduler就可以根据节点的负载情况来做出更合理的虚拟机放置决策。 ### 回答2: 在OpenStack,调度器的作用是根据一定的规则将虚拟机(VM)分配到合适的计算节点上,以提供高效的计算资源利用和服务质量。如果要修改调度器规则为将VM放置到负载最低的节点上,需要进行以下几个步骤: 1. 确定负载计算规则:首先,需要确定负载的计算规则或指标,常见的负载指标包括CPU利用率、内存使用率、磁盘IO、网络带宽等。根据实际需求,选择一个或多个合适的负载指标来评估计算节点的负载。 2. 在调度器增加负载计算逻辑:打开OpenStack调度器的源代码,通过添加负载计算逻辑,计算每个计算节点的负载值。可以根据负载指标的权重和计算公式来计算节点的加权负载值,然后将其与其他节点进行比较。 3. 修改调度器的调度规则:在调度器的调度规则,根据负载值选择负载最低的计算节点。可以使用最小负载优先的策略,即将VM分配给负载最低的计算节点;也可以设置负载的阈值,只有当负载低于阈值时才会将VM分配给该计算节点。 4. 部署和测试:将修改后的调度器部署到OpenStack环境,并进行测试验证。可以创建一些虚拟机实例,观察调度器是否将其分配到负载较低的计算节点上。 通过以上步骤,我们可以成功将OpenStack的调度器规则修改为将虚拟机放置到负载最低的计算节点上的调度器。这样可以减轻部分计算节点的负载,提高整体系统的性能和资源利用率。 ### 回答3: 在OpenStack,修改调度器规则为会将虚拟机(Virtual Machine, VM)放置到负载最低的节点上的调度器是非常重要的。当OpenStack集群节点数量增加时,节点的负载均衡变得尤为关键,以确保资源的高效利用和性能的优化。 为了实现这一目标,可以进行以下步骤来修改调度器规则: 1. 调查调度器规则:首先,需要了解当前OpenStack集群默认的调度器规则。OpenStack使用Nova调度器来负责VM的调度,这些规则可能会根据不同的部署环境和需求而有所不同。可以通过查阅OpenStack文档或参考配置文件来获取这些信息。 2. 修改调度器参数:找到并编辑Nova调度器的配置文件(通常命名为nova.conf)。在此文件,可以找到与调度器规则相关的参数,例如scheduler_default_filters和scheduler_weight_classes。根据需求,可以使用适当的过滤器和权重类来定义新的调度器规则。 3. 实现调度算法:修改调度器代码以实现根据负载最低原则进行VM放置的调度算法。可以使用负载均衡技术,例如加权轮询或最小连接数,来选择负载最低的节点。在此过程,需要考虑节点的各项指标,如CPU使用率、内存利用率、网络流量等。 4. 测试和验证:完成修改调度器规则后,需要进行测试和验证以确保其正常运行。可以通过创建虚拟机并观察其被分配到的节点来验证调度器规则是否生效。同时,还可以使用负载测试工具模拟高负载场景,以验证调度器能够正确地将VM放置在负载最低的节点上。 通过以上步骤,可以在OpenStack修改调度器规则,使其能够根据负载最低原则将虚拟机放置到最合适的节点上,从而提高集群的性能和资源利用率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值