讲清楚说明白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的流量就介绍完毕。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
CentOS 7.6构建MariaDB MHA高可用集群,实现VIP漂移和邮件告警
一、MHA相关概念及原理: 1、MHA简介: MHA(Master High Availability)是开源的MariaDB高可用解决方案。MHA在监控master节点故障时,会提升其中拥有最新数据的slave节点成为新的master节点。MHA还提供了master节点的在线切换功能,即按需切换master/slave节点。构建MHA的前提条件是要先构建主从复制。MHA集群中的各节点彼此之间均需要基于SSH互信通信,以实现远程控制及数据管理功能。 2、MHA工作原理: MHA的目的在于维持MariaDB主从复制中master节点的高可用性,其最大特点是可以修复多个slave节点之间的差异日志,最终使所有slave节点保持数据一致,然后从中选择一个作为新的master节点,并将其它slave节点指向它。当master节点出现故障时,可以通过对比slave节点之间I/O线程读取master节点二进制日志的position事件位置,选取最接近的slave节点作为备选master节点,其它的slave节点可以通过与备选master节点对比生成差异的中继日志,在备选master节点上应用从原来...
- 下一篇
多方面来保证Linux服务器的基本系统安全
作为一种开放源代码的操作系统,Linux服务器以其安全,高效和稳定的显著优势而得以广泛应用,但是,若不加以控制,也不见得安全到哪里,这篇博文主要从账号安全控制、系统引导和登录控制的角度,来进行Linux系统安全优化。并且使用辅助工具来查找安全隐患,以便我们运维人员及时采取相应的措施。 安全方面确实需要注意的比较多,这篇博文从各个方面写了下来,比较琐碎,还需要耐心些看,根据需要来配置服务器的安全性 一、基本安全措施: 1、 系统各种冗余账号,如“games”等,可直接删除,包括一些程序账号,若卸载程序后,账号没能被删除,则需要我们手动进行删除。 2、 当服务器中的用户账号已经固定,不再进行更改,可以直接锁定账号配置文件,锁定以后,便不可以添加用户及更改用户密码: [root@localhost ~]# chattr +i /etc/passwd /etc/shadow #锁定文件 [root@localhost ~]# lsattr /etc/passwd /etc/shadow #查看是否锁定 ----i----------- /etc/passwd ----i----------- ...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Red5直播服务器,属于Java语言的直播服务器
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- CentOS关闭SELinux安全模块
- CentOS8安装Docker,最新的服务器搭配容器使用
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- MySQL8.0.19开启GTID主从同步CentOS8