KeyStone组件

openstack组件间的协同工作是通过rest api调用完成的,既然组件间需要相互调用API,那么安全认证是无法避免的对吧?

keystone的主要功能是分发各组件的endpoint并为组件之间的api调用提供认证服务

  • User: 指使用了openstack 服务的对象

  • Project(Tenant): 在openstack资源池,划分一个逻辑资源称之为1个项目

  • Role: 用于权限的划分,user关联了role,使user拥有不同的权限

  • Policy: 默认就是1个/etc/keystone/policy.json的文件,定义角色包含的权限

  • Tocken: 认证完毕之后发放的令牌

  • Credentials: 用于确认用户的身份

  • Authentication: 认证过程(从普通用户拿到token的认证过程)

  • Service: openstack中各个组件提供的服务

  • Endpoint: 在openstack中,每一个service(Nova/Glance/Newtron)都有三种不同的 web api end points. Admin, public, internal

    1. Admin是用作管理用途的,如它能够修改user/tenant(project)。
    2. public 是让客户调用的,比如可以部署在外网上让客户可以管理自己的云。
    3. internal是openstack内部调用的。
    # 以上3种endpoints 在网络上开放的权限一般也不同。Admin通常只能对内网开放,public通常可以对外网开放,internal通常只能对安装有openstack服务的机器开放;
    admin url----->面向admin用户 port:3557internal url ---->面向openstack内部组件间通信 port:5000public url----->大家都可以访问的api port:5000(与internal url 的端口相同绑定Ip不同)
    # 注意:用户的权限是根据角色赋予的,所以以上3中api能否调用成功是根据用户的角色决定的,只要有权限调用哪个api都可以,但是不要随便走这样配置会比较乱;

keystoneV3版新增概念

  • Tenant 重命名为 Project
  • 添加了 Domain 的概念:domain包含多个project
  • 添加了 Group 的概念:把N个用户加入1个组方便管理

工作流程

  1. 用户发送Credentials 给你 keystone,keystone返回1个temporary token(临时令牌) 和 1个 generic catalog(openstack中 Endpoint,也就是27个url)
  2. 用户再次拿着 临时令牌再次请求keystone,向kestone索取所有项目列表;
  3. 用户从项目列表中找到自己期望的项目发送给kestone,keystone颁发该项目的token给用户
  4. 用户拿着Token 直接访问Endpoint
  5. Endpoint所在的service去和kestone验证该token是否正确、过期?如果正确和未过期endpoint则向该用户提供服务

Clance组建

glance组件主要提供镜像服务,架构分为glance-api 和glance-registry。

glance-api负责接收客户端组件(Nova..)的 api请求,分发给glance registry

glance-registry去Maria DB中检索镜像元数据,把镜像的信息返回glance api

glance api 根据glance registry返回的镜像元数据,去存储后端拉取相应的镜像,响应给客户端

ps:

: glance内部组件(glance-api、glance-registry)间的通信不使用消息队列,所以在glance的配置文件中配置消息队列的socket是画蛇添足;

Cinder组件

"cinder主要提供块存储功能"

cinder包含以下组件:

  1. cinder-api:提供rest api接口,接收客户端请求分发给cinder-scheduler(承接业务的)
  2. cinder-scheduler: 通过算法选出合适的cinder-volume, 通过rpc把cinder-api的任务调度分发给后端 cinder-volume (调度员)
  3. cinder-volume:负责处理具体的volume请求,由不同后端存储提供 volume 存储空间。目前各大存储厂商已经积极地将存储产品的 driver 贡献到 cinder 社区(具体干活的)

RPC机制

openstack组件间通信: 调用各组件api提供的rest接口

组件内通信:基于rpc(远程过程调用)机制,而rpc机制是基于AMQP模型实现的

从rpc使用的角度出发,nova,neutron,和cinder的流程是相似的,以cinder为例阐述rpc机制:

Openstack 组件内部的 RPC(Remote Producer Call)机制的实现是基于 AMQP协议(Advanced Message Queuing Protocol)作为通讯模型,从而满足组件内部架构的松耦合性

AMQP是用于异步消息通讯的消息中间件协议,AMQP 模型有四个重要的角色:

  • Exchange: 根据 Routing key 转发消息到对应的 Message Queue 中(路由器)
  • Routing key: 用于 Exchange 判断哪些消息需要发送对应的 Message Queue(路由表)
  • Publisher: 消息的生产者者,publish把消息发送到Exchange,并指明Routing key,以保证消息队列(Message Queue)可以接收到消息(服务端)
  • Customer: 消息的消费者/接受者,从消息队列(Message Queue)中取出消息(客户端)

Publisher可以分为4类:

  • Direct Publisher发送点对点的消息;(发送1对1消息)
  • Topic Publisher采用“发布——订阅”模式发送消息;(发送组播)
  • Fanout Publisher发送广播消息的发送;(发送广播)
  • Notify Publisher同Topic Publisher,发送 Notification 相关的消息。

Exchange可以分为3类:

  1. Direct Exchange根据Routing Key进行精确匹配,只有对应的 Message Queue 会接受到消息;
  2. Topic Exchange根据Routing Key进行模式匹配,只要符合模式匹配的Message Queue都会收到消息;
  3. Fanout Exchange将消息转发给所有绑定的Message Queue。

cinder的工作流程

  • 虚拟机要使用存储资源,于是通过Nova rest full api 调用cinder api
  • cinder api 把任务通过Exchange 扔进消息队列1,cinder scheduler从消息队列1拿到到任务
  • cinder shcheduler 去MariaDB获取所有cinder volume信息通过算法选择出1个最佳的cinder-volume(存储节点)
  • cinder shcheduler反转为Publisher通过Exchange 把任务扔进消息队列2,最佳cinder-volume(存储节点)从消息队列2拿到到存储任务
  • volume-backen存储节点(没有存储数据的功能),存储节点只是调用后端真实的存储设备,创建出一块设备;

ps: volume-backen存储节点只是在云主机创建时,只是帮助其调用后端真实存储,开辟一块存储空间,让云主机使用,开辟完成之后,云主机和这块块设备完成挂载;

Nova组件

"没有虚拟机就没有云计算,Nova是通过调用hypervisor 创建出虚拟机"

nova主要组成:

  • nova-api:接收客户请求(控制节点1)
  • ​nova-scheduler:调度nova-api下发的请求,通过算法选择出最适合创建当前虚拟机的计算节点
  • nova-compute:通过调用 hypervisor创建出虚拟机(计算节点N)
  • nova-conductor:nova-compute通过 nova-conductor连接MariaDB

为什么会有nova-conductor这个“中间人”?

  1. Nova-computer 众多他们都要去数据库中获取Nova-api在数据库里存放的虚拟机创建信息,容易给数据库造成压力(性能考量)
  2. Nova-compyte被攻破了后,黑客直接通过Nova-compute 从Maria DB中窃取虚拟机信息(安全考量)

Nova的工作流程

  1. Nova-api接收到创建虚拟机的请求,Nova-api把虚拟机创建详细信息存到Maria DB,Maria DB 把数据创建成后 响应Nova-api创建完成
  2. Nova-api把创建虚拟机消息通过Exchange发到message queue中,Nova-scheduler从队列中获取消息
  3. Nova-scheduler从数据库中获取计算节点信息(安装了Nova-compute软件的服务器)拿到信息后根据特定算法选择当前最佳创建虚拟机的计算节点
  4. Nova-scheduler把创建虚拟机的任务Exchange发到message queue(连接当前最佳创建虚拟机的计算节点的队列)
  5. 当前最佳创建虚拟机的compute接收到创建虚拟机请求,把消息放到消息队列,发送给Nova-condutor
  6. Nova-condutor连接数据库查询到创建详细信息通过消息队列发送给compute
  7. nova-compute调用hypervisor开始创建虚拟机......开始要网络、要镜像.....

Neutron组件

neutron组件包含:

  • neutron-server:专门接收客户端rest full api请求,然后将不同的rest full api请求分发到不同的neutron-plugin上
  • neutron-plugin:neuton是提供网络资源的,在现实世界中会有很多网络设备厂商,而neutron-plugin就是各厂商通过plugin插件的形式把自己的网络设备的功能通过软件的实现
  • neutron-agent:和newtron-plugin对应为neutron-plugin实现功能

neutron-plugin分类

​ openstack刚刚兴起的时候每个网络设备厂商思科、思杰等都开发自己网络设备的插件集成到openstack,其实每个网络设备厂商开发的功能是差不多的,只是开发标准不一样,这就有一个反复造轮子、代码冗余的问题,针对这些问题 newtron-plugin一分为2。

  1. core-plugin:Neutron中即为ML2(Modular Layer 2)提供二层网络核心功能,其他网络设备厂商基于Core-plugin开发自己的 neutron-plugin;
  2. service-plugin:即为除core-plugin以外其它的plugin,包括三层网络router、firewall、loadbalancer、×××、metering等等,主要实现L3-L7的网络服务。这些plugin要操作的资源比较丰富,对这些资源进行操作的REST API被neutron-server看作Extension API,需要厂家自行进行扩展。

core-plugin ML2核心插件

ML2插件包括Type和Mechanism2部分,这2部分又都分为Manager和Driver;

所以我们要使用什么网络模式就去ML2配置文件种指定;

  1. neutron-server和各neutron-plugin部署在控制节点或者网络节点上(接收Nova 发送的api请求)
  2. neutron agent则部署在网络节点上和计算节点上(具体实现网络功能,安装一堆交换机、路由器、VPN等Agent)

neutron的工作流程

  1. neutron-server接收Nova创建网络的请求,neutron-server根据Nova创建虚拟机的请求分析出哪 个neutron-plugin可以干活,通过消息队列发送给该neutron-plugin;
  2. neutron-plugin接收到需求之后又通过消息队列把需求发送给neutron-agent
  3. neutron-agent复杂具体网络创建工作

转载于:https://www.cnblogs.com/jiumo/p/11502586.html

OpenStake组件相关推荐

  1. 第四天:Vue组件的slot以及webpack

    插槽 认识slot 在生活中,很多地方都有插槽,电脑的USB插槽,插板中的电源插槽等. 插槽的目的是让我们原来的设备具备更多的扩展性.比如电脑的USB我们可以插入U盘.鼠标.键盘.硬盘.手机.音响等等 ...

  2. 第三天:Vue的组件化

    1.认识组件化 我们将一个完整的页面分成很多个组件,每个组件都用于实现页面的一个功能块,而每一个组件又可以进行细分. 组件化是Vuejs中的重要思想,它提供了一种抽象,让我们可以开发出一个个独立可复用 ...

  3. 客快物流大数据项目(六):Docker与虚拟机的形象比喻及组件介绍

    目录 Docker与虚拟机的形象比喻及组件介绍 一.Docker与虚拟机的形象比喻

  4. 2021年大数据Hadoop(二十六):YARN三大组件介绍

    全网最详细的Hadoop文章系列,强烈建议收藏加关注! 后面更新文章都会列出历史文章目录,帮助大家回顾知识重点. 目录 本系列历史文章 前言 Yarn三大组件介绍 ResourceManager No ...

  5. android layout组件,Android UI学习 - Linear Layout, RelativeLayout

    1.一些常用的公共属性介绍 1) layout_width -宽 fill_parent: 宽度和父元素相同,wrap_content: 宽度随本身的内容所调整,或者指定 px值来设置宽 2) lay ...

  6. vue 拓扑组件_Authing 登录组件优化实践解析

    Authing Guard 是一种可嵌入的登录表单,可根据你的需求进行配置,它使你可以轻松添加各种社会化登录方式,以便你的用户可以无缝登录,并且在不同平台拥有一致的登录体验. Authing 2.0 ...

  7. 微信小程序自定义组件Component的简单使用

    首先为什么要使用component 这里列举2个例子, 1 如果项目中多个地方使用同一个弹框, 2 两个同事合作写一个界面, 这2中情况使用组件是比较好的选择 开始吧 第一步首先创建一个包用于存放组件 ...

  8. RelativeLayout布局,不希望文本盖住其他组件

    简单的图先看上一看 上面使用的是RelativeLayout布局(不要问为什么不用LinearLayout,因为最右边的信箱的右上角还会有个红点,相对布局直接些) 需要实现的效果是,TextView居 ...

  9. spring 组件基于注解的注册方式

    spring 中常用的组件标签有: @Controller:控制层 @Service:业务层 @Repository:数据层 @Component:普通的pojo注入到spring容器 组件注册方式: ...

最新文章

  1. sqoop 基本使用
  2. python内置函数用来返回数值型序列中所有元素之和_Python内置函数______用来返回数值型序列中所有元素之和...
  3. C++与Lua交互(四)
  4. 无表头单链表的总结----删除节点
  5. .netframework游戏编程入门——模拟魔兽学院永远的羁绊
  6. spring Boot环境下dubbo+zookeeper的一个基础讲解与示例
  7. 【报告分享】深扒Costco运营(The resilience of Costco).pdf
  8. 基于卷积神经网络的图像情感分析模型,Python实现
  9. 巧用Delphi制作溅射屏幕
  10. idea中本地git如何切换分支
  11. ubuntu linux多声卡设置默认声卡shell指令
  12. 英语六级常考核心词汇01
  13. AutoJs学习-传感器图像
  14. vue 组件通信合集
  15. iOS开发细碎知识点总结二
  16. java 线程池超时_Java定时线程池停止超时任务
  17. 如何利用文字推动业绩 ——营销人员的软文营销
  18. 台式电脑主机 前面音箱设置
  19. 5.3.5—二叉查找树—Convert Sorted List to Binary Sear Tree
  20. 在windbg调试的时候 针对ecx和eax说明

热门文章

  1. 安卓创建SQLite数据库
  2. java学习--2. Java入门
  3. J2EE,Java EE,Jakarta EE 命名之间的恩恩怨怨
  4. LabVIEW学习笔记(三)——程序结构
  5. php xml 转义字符,Android常见XML转义字符(总结)
  6. 在vmware环境下安装ubuntu
  7. 2022中国绿色钢铁国际峰会
  8. OPPO发布首款旗舰级平板,打造最流畅的安卓生产力工具
  9. css行内样式动态添加背景图片及样式
  10. SIGINT SIGPIPE SIGTERM SIGSEGV SIG_IGN产生原因及处理