首页 > 其他分享 >Openstack Nova Security Group——安全组之架构篇

Openstack Nova Security Group——安全组之架构篇

时间:2023-08-27 10:32:44浏览次数:41  
标签:Group 组之 虚拟机 Nova 安全 API nova openstack 定义


哈,又回来了!


公司同事说不要只停留在逻辑层,你要对跑在你程序底下的数据流也要非常的清楚。但是这里还是先介绍一下逻辑层,在代码的角度看是如何实现这个功能的,关于底层的数据流,还需要哦酝酿一段时间,之后会再总结一篇底层数据流的文章,真难为我了!


一、什么是安全组

安全组,翻译成英文是 security group。安全组是一些规则的集合,用来对虚拟机的访问流量加以限制,这反映到底层,就是使用iptables,给虚拟机所在的宿主机添加iptables规则。

可以定义n个安全组,每个安全组可以有n个规则,可以给每个实例绑定n个安全组,nova中总是有一个default安全组,这个是不能被删除的。创建实例的时候,如果不指定安全组,会默认使用这个default安全组。

现在nova中安全组应该会移到quantum中,并且会增加对虚拟机外出流量的控制。现在nova中的安全组只是对进入虚拟机的流量加以控制,对虚拟机外出流量没有加以限制。

关于security group的详细使用,见这里


二、整体架构

Security Group在nova中是通过扩展的形式实现的,关于Nova API的扩展又是一大篇的文章才能介绍的清楚,这里就不说了。其实感觉到REST API是整个openstack项目中非常重要的组成部分,只有理解了REST API才能更好的掌握openstack。真是长见识了,原来API还可以是这样。

nova 中的API扩展机制非常的好,可以让开发人员很方便的定制自己想要的功能,只要添加一个文件到那个目录中,工作就完成了80%了吧。

安全组就是这样一个扩展,位于nova/api/openstack/compute/contrib/security_groups.py中,还是先来看一下实现它的静态类图吧:

Openstack Nova Security Group——安全组之架构篇_API


每一个扩展文件中都必须有一个和文件名同名的类,比如这里的类就是Security_groups,这个类就是把REST API需要的controller和wsgi_action聚合在一起,加载扩展的时候,就是加载的这个类,controller和wsgi_action中定义了对资源的各种操作,controller定义了show, create, index, delete等等操作,action定义了一些除了CIDR之外的额外的操作:

SecurityGroupController类定义了security group的操作,也即对安全组,这个“组”的增删查改操作。

SecurityGroupRulesController类定义了对组中的规则的操作。

ServerSecurityGroupController类定义了对和实例绑定的安全组的查询操作。

SecurityGroupActionController类中定义了把实例从安全组中添加/删除。


nova中有两个非常重要的组件,一个是db,一个是message queue,db用来记录各种状态,message queue用来在各个服务和各个节点之间传递消息,这种机制,在这里可以得到非常好的体现。这些操作被封装成为了一个类:SecurityGroupAPI,定义在了compute/api.py中,看代码,在E版中这些代码是和compute.API混在一起的,到了F版将和Security Group相关的代码抽取出来,封装成了SecurityGroupAPI,这个类主要是封装了对db的操作和rpc的操作。


安全组在架构上的实现想想其实也很简单,也没什么架构,基本上openstack中所有的组件都是这一个模式,db记录状态,然后发送rpc消息,调用一个第三方包去做xxx工作,然后再用db记录状态。

compute_rpcapi.SecurityGroupAPI是用来发送cast/call消息的,主要是用来在安全组更新之后刷新规则。


三、进一步深入

在由API层发送rpc消息之后,API层的工作就算做完了,接下来就到了compute.ComputeManager中了,他们之间的依赖关系如下图:

Openstack Nova Security Group——安全组之架构篇_类定义_02

ComputerManager中有一个driver,都知道这个driver默认的就是libvirt,还有就是init_host()方法比较重要,每个Manager都有这样一个方法,是相对应的服务在启动的时候调用的,用来进行一些初始化,主要做的工作是对网络进行初始化,建立一些初始的chain和rule,这在下一篇文章中会详细讲到。

最下面的是linux_net,这可以说是最接近底层的代码层了,在它里面封装了对Iptables的各种抽象,具体看下类图:

Openstack Nova Security Group——安全组之架构篇_API_03

OK,就暂时深入到这里吧。


四、功能测试

http://paste.openstack.org/show/33422/



标签:Group,组之,虚拟机,Nova,安全,API,nova,openstack,定义
From: https://blog.51cto.com/u_5173797/7251138

相关文章

  • 子查询用order by,外层用group by但是order by没生效
    今天遇见一个需求:从entity表查询name在我传过来的一个name集合里面,但是同一个name可能会重复,所以我需要根据plan字段判断取每个name的第一条,如果plan=我传进来的plan,优先,plan不等于我传进来的参数的情况下,如果plan不为空,优先,最后就是plan为空的数据。返回的数据就是每个name的第一......
  • GROUP BY的理解
    sql GROUPBY怎么理解呢就是数据分类,select后面跟上要分类的物品假如有一个仓库表---------------------------------------水果|颜色苹果| 绿苹果| 红梨子|黄--------------------------------------------------------------比如select水果from仓库 GRO......
  • 【算法】在vue3的ts代码中分组group聚合源数据列表
    有一个IList<any>()对象列表,示例数据为[{id:'1',fieldName:'field1',value:'1'},{id:'1',fieldName:'field2',value:'2'},{id:'2',fieldName:'field1',value:'1'},{id:'2',......
  • jmeter详解-线程组详解(9)-bzm - Free-Form Arrivals Thread Group
    bzm-Free-FormArrivalsThreadGroup介绍: 顾名思义,相当于自由形式的ArrivalsThreadGroup,它只是提供了自由形式的时间表的能力。相当于我们可以更灵活的控制 每分钟/每秒钟的请求数。页面说明:ThreadsSchedule(线程场景):Startvalue:开始时的用户数Endvalue:结束时......
  • jmeter详解-线程组详解(8)-bzm - Arrivals Thread Group
    bzm-ArrivalsThreadGroupArrival:到来,抵达介绍这个线程组使用“arrivals”调度作为一种表达负载的方式。“arrivals”表示线程迭代开始。如果所有现有线程在迭代过程中都很忙,它将创建新线程。注意,恒定的到达率意味着增加并发性,所以要小心你输入的值。使用“ConcurrencyLimi......
  • 服务器数据恢复-HP EVA存储VDISK被删,磁盘被UNGROUP的数据恢复案例
    服务器数据恢复环境:某单位有一台HPEVA存储,连接2组扩展柜,扩展柜中有12块FATA磁盘和10块FC磁盘,不确定数量的LUN,主机安装WINDOWSSERVER操作系统,存储设备用来存放该单位的重要资料。服务器故障初检:存储不可用。因故障存储在多家数据恢复服务商处理过,所以在暂时无法直接定位故障原......
  • jmeter详解-线程组详解(6)-jp@gc - Stepping Thread Group
    jp@gc-SteppingThreadGroup线程组模拟测试场景:从某个值开始不断增加压力,直至达到某个值,然后持续运行一段时间。添加方式:页面说明:thisgroupwillstart:表示总共要启动的线程数;若设置为100,表示总共会加载到100个线程first,waitfor:从运行之后多长时间开始启动线程;若......
  • jmeter详解-线程组详解(5)-jp@gc - Ultimate Thread Group
    添加方式:右键测试计划->添加->Threads(Users)->jp@gc-UltimateThreadGroup页面说明:StartThreadsCount:当前行的线程总数InitialDelay/sec:延时启动当前行的线程,单位:秒StartupTime/sec:启动当前行所有线程达峰值所需时间,单位:秒HoldLoadFor/sec:当前行线程达到峰值......
  • jmeter详解-线程组详解(4)-tearDown Thread Group
    tearDownThreadGroup线程组:在测试任务线程组运行结束后被运行。通常用来做清理测试脏数据、登出、关闭资源等工作。应用场景举例:A、测试数据库操作功能时,用于执行关闭数据库连接的操作。B、测试用户购物功能时,用于执行用户的退出等操作。tearDownThreadGroup线程的行为与......
  • 【刷题笔记】25. Reverse Nodes in k-Group
    题目Givenalinkedlist,reversethenodesofalinkedlistkatatimeandreturnitsmodifiedlist.kisapositiveintegerandislessthanorequaltothelengthofthelinkedlist.Ifthenumberofnodesisnotamultipleofkthenleft-outnodesint......