一、Keystone

1.概念

Keystone是一个负责身份管理与授权的组件,给整个openstack的各个组件(nova、cglance...)提供一个统一的验证方式。主要功能:实现用户的身份认证、基于角色的权限管理、openstack其他组件的访问地址和安全策略管理。

两大管理功能:用户管理(3A认证)、服务目录管理

租户(项目)、用户、角色三者需要区分清楚。

一个用户允许有多个租户

 一个用户可以绑定到不同的角色(角色代表权限)

一个角色可以绑定到不同的服务

Openstack常用组件 openstack各个组件介绍_云原生

Openstack常用组件 openstack各个组件介绍_云计算_02

2.组件间的沟通方式

 

Openstack常用组件 openstack各个组件介绍_openstack_03

主要过程:第一次user想访问任何组件会先经过Keystone,用户名+密码,如果用户有效且密码正确返回token1,token1对应的含义和权限会进行记录,但是用户必须有相应的租户(项目)才可以访问openstack的组件。如果user不知道当前有哪些租户(通常情况下是不知道的),user拿着token1访问Keystone当前的租户列表(tenant list)有哪些,user才可以在进行下一步访问。

第二次user确定了想访问nova服务,向Keystone提交用户名密码,Keystone放回token2和endpoint(端点),user拿着token2访问对应的endpoint,endpoint并不知道该user有没有权限,endpoint拿着token2提交给Keyston,如果token2认证成功,Keystone直接通知novatoken2是认证成功,你处理一下,nova处理完成后将结果提交给user。

二、Glance镜像服务

 1.概念

openstact镜像服务使用户能够发现、注册并检索虚拟机镜像(.img文件),简而言之,就是镜像文件的存储仓库。

镜像URL:<Glance Server Location>/images/<ID> ,一般这三者组成一个全局唯一的URL。如果有两个glance服务,可以更改ID。

镜像的五种状态:
Queued(镜像ID已被保留,镜像还没有上传)

Saving(镜像正在被上传)

Active(镜像已经可以被使用)

Killed(镜像损坏或不可用)

Deleted(镜像已被删除)

2. 组件间工作流程

Openstack常用组件 openstack各个组件介绍_docker_04

暴露接口Glance-api, 两种访问方式,一个是通过编程接口,一般上传的是json格式化存储文件,Glance-api下封装Glance-registry和底层,Glance-registry直接连接数据库,并且Glance-registry接口只暴露给Glance-api,不会直接暴露给用户。另外Glance-api可以直接操作底层S3、Object...

三、Nova 

1.概念

Iaas的核心组件,也是openstack的核心组件,提供云计算服务、虚拟化服务,Nova本身不支持虚拟化,而是去管理底层的虚拟化(KVM或redhat)。

Nova-api:用于接收请求,请求的发起方可以是用户user通过命令或者程序编程接口或仪表台的套件。

Scheduler:调度服务,如果接收到的是新建虚拟机请求,Scheduler需要选择一个compute去启动一个虚拟机。

Compute Manager:管理虚拟机的启动、关闭、停止,管理虚拟化的整个生命周期。Compute Manager并不直接管理虚拟机,而是通过编写的底层驱动Compute Driver去控制Libvirt(redhat开发的虚拟机管理平台),Libvirt再而控制KVM、Xen等虚拟化平台。

Openstack常用组件 openstack各个组件介绍_docker_05

Libvirt支持多种虚拟化监视器(hypervisor)

Openstack常用组件 openstack各个组件介绍_openstack_06

 nova实质上有两种形式,通常由一个Controller和多个Compute计算节点组成,用户通过命令想nova-api发起创建一个虚拟机请求,nova-api向消息队列(queue)编写数据,随后调度Scheduler、nova-network、nova-volumne。调度成功后也向消息队列写数据,最后Compute接收到消息队列的数据开始响应请求。

Openstack常用组件 openstack各个组件介绍_云计算_07

 虚拟机启动流程:如果创建虚拟机没有指定节点,进行权重计算,计算各个节点的剩余资源,Libvirty会自动检测(一般是1分钟)资源并保存在数据库中,nova-Scheduler可以在数据库拿到节点资源,一旦有新的数据写入Compute 节点,会马上更新资源统计并保存在数据库。

Openstack常用组件 openstack各个组件介绍_云原生_08

 三、Netutron

1.概念

Linux环境下网络设备的虚拟化主要有以下几种形式,Neutron也是基于这些技术来完成项目私有虚拟网络network的构建。
(1) TAP/TUN
TAP/TUN是 Linux内核实现的一对虚拟网络设备, TAP工作在二层,TUN工作在三层,Linux内核通过TAP/TUN设备向绑定该设备的用户空间程序发送数据,反之,用户空间程序也可以像操作硬件网络设备那样,通 过 TAP/TUN设备发送数据。

(2) Linux Bridge/VLAN
Linux Bridge (网桥)是工作于二层的虚拟网络设备,功能类似于物理的交换机。
(3) Open vSwitch
Open vSwitch 是一个具有产品级质量的虚拟交换机,它使用C语言进行开发 。可以区分被桥接的物理网卡上流淌的数据包属于哪个VM 、哪 个 OS 及哪个用户。接入到OpenvSwitch上的各个 VM分配到不同的VLAN中实现网络的隔离。
实现了分布式的虚拟交换机( Distributed Virtual Switch),一个物理Server上的vSwtch可以透明地与另一Server上的vSwitch连接在一起。

L3 agent

l3 agent可以为project(租户)创建router,提供Neutron subnet之间的路由服务。路由功能默认通过 IPtables 实现。

neutron agent服务:

(1)plug-in agent(neutron-*-agent)

插件代理,需要部署在每一个运行hypervisor的主机上,它提供本地的vSwitch配置,更多的时候得依赖你具体所使用的插件类型。(常用的插件是OpenvSwitch,还包括Big Switch,Floodinght REST Proxy,Brocade, NSX, PLUMgrid, Ryu)

(2)dhcp agent(neutron-dhcp-agent)

DHCP代理,给租户网络提供动态主机配置服务,主要用途是为租户网络内的虚拟机动态地分配IP地址。

(3)l3 agent(neutron-l3-agent)

L3代理,提供三层网络功能和网络地址转换(NAT)功能,来让租户的虚拟机可以与外部网络通信。

(4)metering agent(neutron-metering-agent)

计量代理,为租户网络提供三层网络流量数据计量服务。

Network--->Vlan

Subnet--->一段地址段(比Network的范围更小)

Router--->三层路由

Port--->虚拟交换机的端口号

Vif--->主机

Openstack常用组件 openstack各个组件介绍_云原生_09

流程:

Openstack常用组件 openstack各个组件介绍_Openstack常用组件_10

 

 主要组件功能:

Openstack常用组件 openstack各个组件介绍_openstack_11

 ML2 Plugin功能实现以及对应协议:

Openstack常用组件 openstack各个组件介绍_docker_12

 拓网络扑

不同组件上运行的服务是不同的!每台Nova节点都会有ML2-agent代理端,管理端则在Neutron节点上Neutron ML2 plugin。

Openstack常用组件 openstack各个组件介绍_云计算_13

Per-tenant Routers with Private Network 

这是一种最具意义的网络构建方式,不同的租户有各自的路由器,同一个租户可以拥有不同的网段,租户间的通信使用各自的路由器通过浮动网络进行通信,浮动网络后就是物理路由器了,通过物理路由器就可以与外网通信了。

绿色租户,蓝色vlan,每个租户一个路由,一个路由多个vlan。

Openstack常用组件 openstack各个组件介绍_openstack_14

 

 五、Horizon仪表盘套件

Horizon安装前必须安装Compute、Keystone组件,必须安装Python2.6或2.7,并支持Django。

演示:

Openstack常用组件 openstack各个组件介绍_云计算_15

 

六、 Cinder块存储

controller节点运行The Block Storage API服务和Schedule服务,The volume service运行在一个或多个存储节点,存储节点可以是本地磁盘、SAN、NAS等设备,为云主机提供卷存储。

cinder-api:允许API请求,并路由他们到cinder-volume。

cinder-volume:直接与块存储服务通信,支持多种存储类型。

cinder-scheduler daemon:类似于nova-scheduler组件,用于计算节点资源,选择最优的存储节点创建卷。

swift和cinder的区别

 swift类似于网盘,而cinder类似于移动硬盘,随意格式化,随意存取。swift对象存储通常存储一些不会修改的数据,比如用于存储 VM 镜像、备份和归档以及较小的文件,例如照片和电子邮件消息。更倾向于系统的管理。