首页 星云 工具 资源 星选 资讯 热门工具
:

PDF转图片 完全免费 小红书视频下载 无水印 抖音视频下载 无水印 数字星空

openStack核心组件的工作流程

编程知识
2024年07月16日 18:13

目录

openStack核心组件的工作流程

核心服务就是如果没有它,OpenStack 就跑不起来。很显然

  1. Nova 管理计算资源,是核心服务。
  2. Neutron 管理网络资源,是核心服务。
  3. Glance 为 VM 提供 OS 镜像,属于存储范畴,是核心服务。
  4. Cinder 提供块存储,VM怎么也得需要数据盘吧,是核心服务。你如果只是做测试,数据不需要落盘,也是可以不装Cinder的
  5. Keystone 认证服务,没它 OpenStack 转不起来,是核心服务。
  6. Horizon 大家都需要一个操作界面吧。

1. Keystone

作为openStack的基础服务,Keystone主要做下面这3件事情

  1. 管理用户及其权限
  2. 维护 OpenStack Services 的 Endpoint
  3. Authentication(认证)和 Authorization(鉴权)

要弄懂Keystone就得理解下面这些概念

  • User
  • Credentials
  • Authentication
  • Token
  • Project
  • Service
  • Endpoint
  • Role

1.1 User

User指代任何使用openStack的实体

可以是真正的用户,也可以是某个程序,openStack为每一个组件都会创建对应的用户,当User访问openStack时,Keystone会对其验证身份

1.2 Credentials

Credentials是User用来证明自己身份的信息

它可以是:

  1. 用户名/密码
  2. Token
  3. Api Key
  4. 其他高级方式

1.3 Authentication

Authentication是Keystone验证User身份的过程

User访问openStack时向Keystone提交用户名和密码形式的Credentials,Keystone验证通过后会给User签发一个Token作为后续访问的Credentials

1.4 Token

Token是由数字和字母组成的字符串,User成功Authentication后由Keystone分配给user

  1. Token用做访问Service的Credentials
  2. Service会通过keystone来验证Token的有效性
  3. Token的有效期默认为24小时

1.5 Project

Project用于将openStack的资源(计算,存储,网络)进行分组,隔离

根据openStack服务的对象不同,Project可以是一个客户、部门或者项目组

这里请注意:

  1. 资源的所有权是属于Project的,而不是User
  2. 每个User必须挂在Project里面才能访问该Project的资源(admin也不例外),一个User可以属于多个Project
  3. admin相当于root用户,具有最高权限

1.6 Service

OpenStack 的 Service 包括 Compute (Nova)、Block Storage (Cinder)、Object Storage (Swift)、Image Service (Glance) 、Networking Service (Neutron) 等。

每个 Service 都会提供若干个 Endpoint,User 通过 Endpoint 访问资源和执行操作。

1.7 Endpoint

Endpoint是一个网络上可访问的地址,通常是一个URL,Service通过Endpoint来暴露自己的API

Keystone负责维护管理每个Service的Endpoint

1.8 Role

安全包含2个部分,一个是认证(Authentication),另一个是鉴权(Authorization)

Authentication解决的是你是谁的问题

Authorization解决的是你能干什么的问题

Keystone是借助Role来实现Authorization的,也就是给Role定义好权限之后将Role绑定用User,那么User就拥有这个Role下定义的权限了

1.9 keystone综述

所以Keystone的工作流程就是这样的

  1. 用户提交自己的用户名/密码(也可以为其他方式)给到keystone
  2. keystone验证通过之后给用户返还一个Token
  3. 用户拿着这Token通过Endpoint去请求对应的服务
  4. 被请求的服务将用户的Token拿到之后交给Keystone验证是否有效,有效则继续后续的操作

这个就是keystone的工作流程了,所有的组件和用户都需要经过keystone,这也证实了openStack没有Keystone转不了的说法

2. glance

Glance为虚拟机提供镜像服务,这里不过多赘述组件的功能,glance有2个服务进程

  1. glance-api
  2. glance-registry
  3. backend

2.1 glance-api

glance-api 是系统后台运行的服务进程。 对外提供 REST API,响应 image 查询、获取和存储的调用。

glance-api 不会真正处理请求。

如果是与 image metadata(元数据)相关的操作,glance-api 会把请求转发给 glance-registry;

如果是与 image 自身存取相关的操作,glance-api 会把请求转发给该 image 的 store backend。

2.2 glance-registry

glance-registry 是系统后台运行的服务进程。负责处理和存取 image 的 metadata,例如 image 的大小和类型。

2.3 backend

glance本地并不存储image,真正的image存储是放在backend中的,默认是本地的文件系统

2.4 glance综述

当用户请求到达glance-api时,glance-api会将请求转发给对应的服务进程,如:当用户想要查询有哪些镜像存在时,glance-api就会将请求给到glance-registry处理,处理完成之后再由glance-api将结果返回给到用户,同样,存储的请求就会交给backend去处理,至于你存储到哪,glance-api是不管的,这个就是glance的工作流程

3. placement

这个组件以前集成在nova之中,现在独立出来了,他的作用的用来跟踪硬件的利用率,将收集到的数据提供给后续的nova使用,这个没啥多说的

4. nova

Compute Service, Nova 是 OpenStack 最核心的服务,负责维护和管理云环境的计算资源。OpenStack 作为 IaaS 的云操作系统,虚拟机生命周期管理也就是通过 Nova 来实现的。

nova有很多子组件,分别是

  1. nova-api
  2. nova-scheduler
  3. nova-compute
  4. nova-conductor
  5. nova-console

数据库和消息队列这也是nova所依赖的,但是他们俩并不是nova独享的。

4.1 nova-api

与glance-api一样,只负责接受请求,不处理请求,只会将请求接受然后发布到消息队列当中

4.2 nova-scheduler

虚拟机调度服务,通过placement提供的各项数据再结合各种算法,打分机制来决定虚拟机最终运行在哪个计算节点上,并将消息通过消息队列发布出去

4.3 nova-compute

管理虚拟机的核心服务,运行在每个计算节点上,nova-compute是实际工作者,他会从消息队列中拿到nova-scheduler发布的消息,然后来创建虚拟机,每个虚拟机的状态都是需要写入数据库的,也就是说nova-compute需要经常更新数据库,但是nova-compute并不能直接操作数据库,为了安全考虑,由另外一个组件来操作数据库。

4.4 nova-conductor

nova-compute 经常需要更新数据库,比如更新虚机的状态。
出于安全性和伸缩性的考虑,nova-compute 并不会直接访问数据库,而是将这个任务委托给 nova-conductor,为什么说为了安全考虑呢?我们不妨设想一下,现在集群内有100个计算节点,他们如果能够直接操作数据库的话,那么只有要其中的一台服务器被侵入,那么他是可以直接拿到数据库操作的权限的,这样做风险太大了,所以将更新数据库的操作交给了nova-conductor这个进程来处理

4.5 nova-console

现在虚拟机创建好了,我们是不是需要使用虚拟机呢?假设现在网络不通,无法通过ssh或者RDP连接到虚拟机,那我们如何去管理呢?也就是通过nova-console为我们提供的控制台,nova-console是一个统称,并不是某一个服务。

它包含3种方式的控制台:

  1. nova-novncproxy,基于 Web 浏览器的VNC 访问
  2. nova-spicehtml5proxy,基于HTML5 浏览器的 SPICE 访问
  3. nova-xvpnvncproxy,基于 Java 客户端的 VNC 访问

4.6 nova综述

当有一个创建虚拟机的请求到达nova-api时,nova-api会将请求发送到消息队列,此时nova-scheduler从消息队列读取消息,然后选举一个最适合创建虚拟机的节点,然后将结果再通过消息队列发布出去,nova-compute从消息队列中读取到了消息之后开始干活,并将虚拟机的状态信息发布到消息队列,然后nova-conductor读取到了nova-compute发布的消息之后去操作数据库修改对应的数据

5. Neutron

Neutron 为整个 OpenStack 环境提供网络支持,包括二层交换,三层路由,负载均衡,防火墙和 VPN 等。

Neutron 提供了一个灵活的框架,通过配置,无论是开源还是商业软件都可以被用来实现这些功能。

关于网络的话我们就不讨论他的工作流程了。我们来聊聊他的实现方式

5.1 网络的实现方式

neutron通过在每个节点上模拟一个软路由出来,跑在该节点上的虚拟机都接到这个软路由上,这样同节点的虚拟机网络就实现了互通,那不同节点之间呢?模拟出来的软路由也不能够直接跨主机通信吧,这个时候就需要借助到物理网卡了,我们配置neutron的时候,有一个配置是将某个网卡给neutron去使用的,所以,在同一节点内,所有的虚拟机都连接上这个软路由实现互联,不同节点之间通过配置的物理网卡来实现互联,这样一套操作下来,所有的网络就都能打通了。这也就是neutron的实现方式,但是neutron又提供了好种网络类型,接下来我们来一个个看

Neutron提供的网络有这几种:

5.1 local

local类型的网络与其他节点的网络隔离,也就是说local类型的网络只能够与跑在同一节点上的虚拟机进行通信,无法跨主机通信,这种网络是没有意义的,实验环境都没有太大的意义。

5.2 flat

flat网络是无vlan tag的网络,能够与其他节点的虚拟机互联,但是无法实现隔离,如果集群内节点过多,那么相应的,广播域也就越大,这种类型的网络在local网络之上做到了与其他节点互联

5.3 vlan

这个网络类型就是网络里的Vlan,交换机可以通过不同的Vlan ID来实现隔离,可以这样去理解,Vlan就是在flat网络之上给每个人分一个组,只有在同一个组里面的虚拟机才可以互相访问,在不同的组就访问不到,这样就解决了flat网络的广播域过大的问题。最多可以支持4094个分组

5.4 vxlan

VLAN有4096个ID,而VXLAN有1600万个ID。这也就意味着vxlan支持隔离更多的区域,但是vxlan是工作在三层的,使用upd协议进行传输,而vlan是一个二层的,由于需要进行封装和解封装操作,性能开销比VLAN高,但可以通过硬件卸载来优化性能。

5.5 GRE

gre 是与 vxlan 类似的一种 overlay 网络。主要区别在于使用 IP 包而非 UDP 进行封装。

From:https://www.cnblogs.com/fsdstudy/p/18305930
本文地址: http://shuzixingkong.net/article/100
0评论
提交 加载更多评论
其他文章 痞子衡嵌入式:瑞萨RA8系列高性能MCU开发初体验
大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是瑞萨RA8系列高性能MCU开发上手体验。 我们知道瑞萨电子的通用 MCU 产品线主要包含基于自有内核 8/16bit RL78 系列以及 32bit RX 系列,还有这两年明显增加研发投入的基于 Arm Cortex-M 内核的 RA、
痞子衡嵌入式:瑞萨RA8系列高性能MCU开发初体验 痞子衡嵌入式:瑞萨RA8系列高性能MCU开发初体验 痞子衡嵌入式:瑞萨RA8系列高性能MCU开发初体验
36岁,大龄剩男,2024上半年总结......
不知道我在等什么,也不知道这样等了多久,相信看到这句话的你,可能也是一头雾水吧! 还是以往的风格写到哪算哪,写东西真的是看感觉和心情都具备,写出来的东西才更有灵性,或者说更容易引起共鸣吧! 我在逃避? 可以这么说,但也不完全是,在一部分事情开始收尾的时候,情绪脑就占据了主导地位,就是想摆烂,什么也不
基于 Vagrant 手动部署多个 Redis Server
环境准备 宿主机环境:Windows 10 虚拟机环境:Vagrant + VirtualBox Vagrantfile 配置 首先,我们需要编写一个 Vagrantfile 来定义我们的虚拟机配置。假设已经在 D:\Vagrant\redis 目录下创建了一个 Vagrantfile,其内容如下:
基于 Vagrant 手动部署多个 Redis Server 基于 Vagrant 手动部署多个 Redis Server 基于 Vagrant 手动部署多个 Redis Server
Microsoft宣布将在开发人员会议上专注于.NET Aspire
2024年7月15日微软宣布,其开发执行团队将在下个月的开发者大会上聚焦于使用 .NET Aspire 的云原生开发,以及结合人工智能的“现代 SQL”在 Microsoft Fabric 中的应用。微软的 Visual Studio LIVE! 2024 大会不仅是一个会议,而是创新、学习和社区庆
Microsoft宣布将在开发人员会议上专注于.NET Aspire Microsoft宣布将在开发人员会议上专注于.NET Aspire
Docker通信全视角:原理、实践与技术洞察
本文全面深入地探讨了Docker容器通信技术,从基础概念、网络模型、核心组件到实战应用。详细介绍了不同网络模式及其实现,提供了容器通信的技术细节和实用案例,旨在为专业从业者提供深入的技术洞见和实际操作指南。 关注【TechLeadCloud】,分享互联网架构、云服务技术的全维度知识。作者拥有10+年
tensorflow学习率指数衰减ExponentialDecay的参数介绍与使用方法
本文介绍在tensorflow库中,用于动态调整神经网络的学习率的一种方法——指数衰减ExponentialDecay()策略的参数含义及其具体用法~
tensorflow学习率指数衰减ExponentialDecay的参数介绍与使用方法 tensorflow学习率指数衰减ExponentialDecay的参数介绍与使用方法 tensorflow学习率指数衰减ExponentialDecay的参数介绍与使用方法
PixiJS源码分析系列:第二章 渲染在哪里开始?
第二章 渲染在哪里开始? 牢记,按第一章介绍的 npm start 启动本地调式环境才可进行调式 如果是 example 文件夹内的例子还需要 serve . 开启本地静态服务器 上一章介绍了 PixiJS 源码调式环境的安装,以及基本的调试方法。本章要研究一下它是如何渲染的 渲染大致步骤: 注册渲
PixiJS源码分析系列:第二章 渲染在哪里开始? PixiJS源码分析系列:第二章 渲染在哪里开始? PixiJS源码分析系列:第二章 渲染在哪里开始?
iOS开发基础109-网络安全
在iOS开发中,保障应用的网络安全是一个非常重要的环节。以下是一些常见的网络安全措施及对应的示例代码: Swift版 1. 使用HTTPS 确保所有的网络请求使用HTTPS协议,以加密数据传输,防止中间人攻击。 示例代码: 在Info.plist中配置App Transport Security (