文章目录
一、keystone概述
Keystone是一项OpenStack服务,通过实现OpenStack的Identity API来提供API客户端身份验证,服务发现和分布式多租户授权 。同时它也同Nova, Cinder, Glance,Neutron一样是OpenStack的核心组件
二、keystone基本概念
User(用户)
- 在openstack中,用户是使用openstack云服务的人、系统或服务。用户可以登录或使用指定的token访问云中的资源,并可以被指派到指定的项目或角色。
- 认证服务通过 对用户身份的确认,来判断一个请求是否被允许。用户通过认证信息如密码、 API Keys等进行验证
project(项目/租户)
- 租户,可以理解为一个人、项目或者组织拥有的资源的合集。在一个租户中可以拥有很多个用户,这些用户可以根据权限的划分使用租户中的资源。
- 项目是各个服务中的一些可以访问的资源集合,用来分组或隔离资源或身份对象。不同服务中,项目所涉及的资源不同。在Nova服务中项目可以是云主机,在 Swift和Glance中项目可以是镜像存储,在Neutron中项目可以是网络资源。默认情况下,用户总是被绑定到项目中。一个项目中可以有多个用户,一个用户可以属于一个或多个项目。
Role(角色)
- Role即角色,Roles代表一组用户可以访问的资源权限,例如Nova中的虚拟机、Glance中的镜像。
- Users可以被添加到任意一个全局的或租户内的角色中。在全局的role中,用户的role权限作用于所有的租户,即可以对所有的租户执行role规定的权限;在租户内的role中,用户仅能在当前租户内执行role规定的权限。
Service(服务)
- Service即服务,如Nova、Glance、Swift。根据前三个概念(User,Tenant和Role)一个服务可以确认当前用户是否具有访问其资源的权限。但是当一个user尝试着访问其租户内的service时,他必须知道这个service是否存在以及如何访问这个service,这里通常使用一些不同的名称表示不同的服务
Endpoint(端点)
- Endpoint,翻译为“端点”,我们可以理解它是一个服务暴露出来的访问点,如果需要访问一个服务,则必须知道他的endpoint。因此,在keystone中包含一个endpoint模板,在安装keystone的时候我们可以在conf文件夹下看到这个文件),这个模板提供了所有存在的服务endpoints信息
- 一个endpoint 模板包含一个URLs列表,列表中的每个URL都对应一个服务实例的访问地址,并且具有public、private和admin这三种权限。publicurl可以被全局访问(如http://compute.example.com),privateurl只能被局域网访问(如http://compute.example.local),admin url被从常规的访问中分离。
token(令牌)
- 是一串数字字符串,用于访问openstack服务的API以及 资源。一个令牌可以在特定的时间生效,并可以在任意时间释放
三、keystone认证的流程图
1、用户通过dashboard界面或者命令行的形式登录
2、keystone会对用户进行验证,通过后会发送一个令牌和端点模板给用户
3、用户查看端点模板可以看见所有存在的服务endpoints信息,比如用户此时想创建一个实例,会拿着令牌通过端点地址访问nova模块,nova会拿着令牌向keystone校验,通过后nava模块启动,开始调用glance模块和neutron模块
4、glance和neutron模块会拿着令牌再次向keystone校验,认证成功后开始工作。
5、nova模块开始创建实例,并将信息返回给user
四、keystone常用命令
user(用户)
- 列出keystone用户
openstack user-list
- 创建用户
openstack user create [-h] [-f {json,shell,table,value,yaml}]
[-c COLUMN] [--max-width <integer>]
[--print-empty][--noindent][--prefix PREFIX]
[--domain <domain>] [--project <project>]
[--project-domain <project-domain>]
[--password <password>] [--password-prompt]
[--email <email-address>]
[--description <description>]
[--enable | --disable] [--or-show]
<name>
- 删除用户
openstack user delete <user-id>
- 显示用户详细信息
openstack user show <user-id>
- 更新用户的信息
openstack user set [-h] [--name <name>] [--domain <domain>]
[--project <project>]
[--project-domain <project-domain>]
[--password <password>] [--password-prompt]
[--email <email-address>]
[--description <description>] [--enable | --disable]
<user>
project(项目)
- 显示项目列表
openstack project list
- 创建项目
openstack project create (--domain domain名字) name
- 删除项目
openstack project delete <project-id>
- 更新项目信息
openstack project set [-h] [--name <name>] [--domain <domain>]
[--description <description>]
[--enable | --disable] [--property <key=value>]
<project-id>
- 显示项目详细信息
openstack project show <project-id>
Role(角色)
- 显示角色列表
openstack role list
- 创建角色
openstack role create name
- 删除角色
openstack role delete <role-id>
- 显示角色详细信息
openstack role show <role-id>
- 赋予用户一个角色
openstack role add --project(项目名) --user(用户名) role(角色名)
- 查看用户与角色的对应关系—显示的表格是id
openstack role assignment list
- 删除用户的一个角色
openstack role remove [-h] [--domain <domain> | --project <project>]
[--user <user> | --group <group>]
[--group-domain <group-domain>]
[--project-domain <project-domain>]
[--user-domain <user-domain>] [--inherited]
<role-id>
Service(服务)
- 显示服务列表
openstack service list
- 创建服务
openstack service create [-h] [-f {json,shell,table,value,yaml}]
[-c COLUMN] [--max-width <integer>]
[--print-empty] [--noindent] [--prefix PREFIX]
[--name <name>] [--description <description>]
[--enable | --disable]
<type>
- 删除服务
openstack service delete <service-id>
- 显示服务详细信息
openstack service show <service-id>
Endpoint(端点模板)
- 显示Endpoint列表
openstack endpoint list
- 创建Endpoint
openstack endpoint create [-h]
[-f {json,shell,table,value,yaml}]
[-c COLUMN] [--max-width <integer>]
[--print-empty] [--noindent]
[--prefix PREFIX] [--region <region-id>]
[--enable | --disable]
<service> <interface> <url>
- 删除Endpoint
openstack endpoint delete <endpoint-id>
- 显示Endpoint详细信息
openstack endpoint show <service-id>