目录
- openStack核心组件的工作流程
- [1. Keystone](#1. Keystone)
- [1.1 User](#1.1 User)
- [1.2 Credentials](#1.2 Credentials)
- [1.3 Authentication](#1.3 Authentication)
- [1.4 Token](#1.4 Token)
- [1.5 Project](#1.5 Project)
- [1.6 Service](#1.6 Service)
- [1.7 Endpoint](#1.7 Endpoint)
- [1.8 Role](#1.8 Role)
- [1.9 keystone综述](#1.9 keystone综述)
- [2. glance](#2. glance)
- [2.1 glance-api](#2.1 glance-api)
- [2.2 glance-registry](#2.2 glance-registry)
- [2.3 backend](#2.3 backend)
- [2.4 glance综述](#2.4 glance综述)
- [3. placement](#3. placement)
- [4. nova](#4. nova)
- [4.1 nova-api](#4.1 nova-api)
- [4.2 nova-scheduler](#4.2 nova-scheduler)
- [4.3 nova-compute](#4.3 nova-compute)
- [4.4 nova-conductor](#4.4 nova-conductor)
- [4.5 nova-console](#4.5 nova-console)
- [4.6 nova综述](#4.6 nova综述)
- [5. Neutron](#5. Neutron)
- [5.1 网络的实现方式](#5.1 网络的实现方式)
- [5.1 local](#5.1 local)
- [5.2 flat](#5.2 flat)
- [5.3 vlan](#5.3 vlan)
- [5.4 vxlan](#5.4 vxlan)
- [5.5 GRE](#5.5 GRE)
- [1. Keystone](#1. Keystone)
openStack核心组件的工作流程
核心服务就是如果没有它,OpenStack 就跑不起来。很显然
- Nova 管理计算资源,是核心服务。
- Neutron 管理网络资源,是核心服务。
- Glance 为 VM 提供 OS 镜像,属于存储范畴,是核心服务。
- Cinder 提供块存储,VM怎么也得需要数据盘吧,是核心服务。你如果只是做测试,数据不需要落盘,也是可以不装Cinder的
- Keystone 认证服务,没它 OpenStack 转不起来,是核心服务。
- Horizon 大家都需要一个操作界面吧。
1. Keystone
作为openStack的基础服务,Keystone主要做下面这3件事情
- 管理用户及其权限
- 维护 OpenStack Services 的 Endpoint
- 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用来证明自己身份的信息
它可以是:
- 用户名/密码
- Token
- Api Key
- 其他高级方式
1.3 Authentication
Authentication是Keystone验证User身份的过程
User访问openStack时向Keystone提交用户名和密码形式的Credentials,Keystone验证通过后会给User签发一个Token作为后续访问的Credentials
1.4 Token
Token是由数字和字母组成的字符串,User成功Authentication后由Keystone分配给user
- Token用做访问Service的Credentials
- Service会通过keystone来验证Token的有效性
- Token的有效期默认为24小时
1.5 Project
Project用于将openStack的资源(计算,存储,网络)进行分组,隔离
根据openStack服务的对象不同,Project可以是一个客户、部门或者项目组
这里请注意:
- 资源的所有权是属于Project的,而不是User
- 每个User必须挂在Project里面才能访问该Project的资源(admin也不例外),一个User可以属于多个Project
- 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的工作流程就是这样的
- 用户提交自己的用户名/密码(也可以为其他方式)给到keystone
- keystone验证通过之后给用户返还一个Token
- 用户拿着这Token通过Endpoint去请求对应的服务
- 被请求的服务将用户的Token拿到之后交给Keystone验证是否有效,有效则继续后续的操作
这个就是keystone的工作流程了,所有的组件和用户都需要经过keystone,这也证实了openStack没有Keystone转不了的说法
2. glance
Glance为虚拟机提供镜像服务,这里不过多赘述组件的功能,glance有2个服务进程
- glance-api
- glance-registry
- 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有很多子组件,分别是
- nova-api
- nova-scheduler
- nova-compute
- nova-conductor
- 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种方式的控制台:
- nova-novncproxy,基于 Web 浏览器的VNC 访问
- nova-spicehtml5proxy,基于HTML5 浏览器的 SPICE 访问
- 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 进行封装。