openstack Identity service 名叫keystone。它提供了用户校验,以及服务目录查询(即列出所有的服务以及相关信息)等功能。

keystone 主要包含以下几个部分

Server

一个中心化的服务器,提供RESTful接口进行认证等服务。

Drivers

driver实际上集成在了server中。它的作用是访问一些不存在于openstack系统中的外部用户管理认证服务。如果你的系统中之前安装过openstack并且留下了一些用户信息,这些信息一般存在mysql等关系型数据库中。driver可以读取这部分信息提供给server

Modules

这部分其实是运行在openstack 各个服务组件中的中间件。这些中间件能够解析openstack服务的请求,读取用户信息,并发送给server进行验证。这些中间件遵循wsgi接口标准。比如swift服务中,就有一个专门的中间件叫auth(大概是这个名字)。像swift发送的每个API请求都会通过一系列的pipeline,该中间件一般位于pipeline的最前端,它会解析请求发给keystone进行认证,如果认证通过则继续把请求向后传递处理,如果认证不通过则返回。

在安装openstack 各服务时,需要把这些服务注册到identity service中,这样identity service能够追踪这些服务,并且知道怎么访问它们。

Prerequisites

keystone 需要一个数据库。所以这里我们需要先在mysql上创建一个数据库。

# 连接到数据库
mysql -u root -p
# 创建数据库
CREATE DATABASE keystone;
# 给keystone用户赋予权限
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' \
IDENTIFIED BY 'KEYSTONE_DBPASS';
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' \
IDENTIFIED BY 'KEYSTONE_DBPASS';

除了创建数据库,我们还需要创建一个token(最好是一个随机产生的值)在初始化管理keystone的时候用。我们的创建方式如下。

openssl rand -hex 10

安装配置

我们的例子中,用httpd 和 mod_wsgi 来调用keystone的服务。因此需要安装openstack-keystone以及httpd,mod_wsgi

yum install openstack-keystone httpd mod_wsgi

编辑 /etc/keystone/keystone.conf 做如下配置(ADMIN_TOKEN是之前生成的做管理用的token):

[default]
...
admin_token = ADMIN_TOKEN [database]
...
connection = mysql+pymysql://keystone:KEYSTONE_DBPASS@controller01/keystone [token]
...
provider = fernet

运行如下命令同步keystone数据库

su -s /bin/sh -c "keystone-manage db_sync" keystone

配置keystone用户和组,初始化fernet(Fernet is a secure messaging format explicitly designed for use in API tokens by Heroku)

keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone

配置apache

编辑/etc/httpd/conf/httpd.conf配置

ServerName controller01

编辑/etc/httpd/conf.d/wsgi-keystone.conf 内容如下:

Listen 5000
Listen 35357 <VirtualHost *:5000>
WSGIDaemonProcess keystone-public processes=5 threads=1 user=keystone group=keystone display-name=%{GROUP}
WSGIProcessGroup keystone-public
WSGIScriptAlias / /usr/bin/keystone-wsgi-public
WSGIApplicationGroup %{GLOBAL}
WSGIPassAuthorization On
ErrorLogFormat "%{cu}t %M"
ErrorLog /var/log/httpd/keystone-error.log
CustomLog /var/log/httpd/keystone-access.log combined <Directory /usr/bin>
Require all granted
</Directory>
</VirtualHost> <VirtualHost *:35357>
WSGIDaemonProcess keystone-admin processes=5 threads=1 user=keystone group=keystone display-name=%{GROUP}
WSGIProcessGroup keystone-admin
WSGIScriptAlias / /usr/bin/keystone-wsgi-admin
WSGIApplicationGroup %{GLOBAL}
WSGIPassAuthorization On
ErrorLogFormat "%{cu}t %M"
ErrorLog /var/log/httpd/keystone-error.log
CustomLog /var/log/httpd/keystone-access.log combined <Directory /usr/bin>
Require all granted
</Directory>
</VirtualHost>

启动apache并配置开机启动

systemctl enable httpd.service
systemctl start httpd.service

Create the service entity and API endpoints

Identity service提供了一个目录服务。能够列出系统中包含的所有openstack服务,以及他们的位置。对于每一个添加到你openstack环境中的openstack服务,都需要在keystone中创建一个service与其对应,并且每一个service都需要若干个API ENDPOINT.

keystone本身也是一个服务,因此也需要在keystone中创建相应的service和API Endpoint. 这时候我们需要使用最开始配置的admin_token. 命令如下:

openstack service create \
--name keystone \
--os-token $ADMIN_TOKEN \
--os-url http://controller01:35357/v3 \
--os-identity-api-version 3 \
--description "OpenStack Identity" identity

创建完service后创建API EndPoint. 在openstack中,每一个service都有三种end points. Admin, public, internal。 Admin是用作管理用途的,如它能够修改user/tenant(project)。 public 是让客户调用的,比如可以部署在外网上让客户可以管理自己的云。internal是openstack内部调用的。三种endpoints 在网络上开放的权限一般也不同。Admin通常只能对内网开放,public通常可以对外网开放internal通常只能对安装有openstack对服务的机器开放。

接下来我们创建 keystone的三个end points. 注意这里,我们处于减少命令长度的目的,把之前的一些option放入了环境变量。

export OS_TOKEN=ADMIN_TOKEN
export OS_URL=http://controller01:35357/v3
export OS_IDENTITY_API_VERSION=3 openstack endpoint create --region RegionOne identity public http://controller01:5000/v3
openstack endpoint create --region RegionOne identity internal http://controller01:5000/v3
openstack endpoint create --region RegionOne identity admin http://controller01:35357/v3

Create a domain, projects, users, and roles

openstack keystone对其它openstack service提供验证服务。验证的对象是 domains, projects (tenants), users, roles的组合。

下面创建一个名叫default的domain, 一个admin project,一个admin role 以及一个admin user

openstack domain create --description "Default Domain" default

openstack project create --domain default --description "Admin Project" admin

openstack user create --domain default --password-prompt admin

openstack role create admin

openstack role add --project admin --user admin admin

在我们的环境中还需要创建一个service project。该project对每一你添加到openstack 中的service都有一个unique的uesr对应。

openstack project create --domain default --description "Service Project" service

Regular (non-admin) task应该用非特权的project以及user,所以我们创建一个demo project和user。

openstack project create --domain default --description "Demo Project" demo
openstack user create --domain default --password-prompt demo
openstack role create user
openstack role add --project demo --user demo user

Verify 以及创建 client environment 脚本

出于安全考虑首先应该做如下操作:

Edit the /etc/keystone/keystone-paste.ini file and
remove admin_token_auth from the [pipeline:public_api], [pipeline:admin_api], and [pipeline:api_v3] sections.

然后删掉环境变量

unset OS_TOKEN OS_URL

使用admin用户尝试获取token

openstack --os-auth-url http://controller01:35357/v3 \
--os-project-domain-name default --os-user-domain-name default \
--os-project-name admin --os-username admin token issue

使用demo用户尝试获取token

openstack --os-auth-url http://controller01:5000/v3 \
--os-project-domain-name default --os-user-domain-name default \
--os-project-name demo --os-username demo token issue

如果都没问题,接下来创建两个环境变量脚本,后面使用keystone客户端会很有帮助

创建admin.openrc文件,内容如下:

(注意ADMIN_PASS要替换成你为admin用户设置的密码)

export OS_PROJECT_DOMAIN_NAME=default
export OS_USER_DOMAIN_NAME=default
export OS_PROJECT_NAME=admin
export OS_USERNAME=admin
export OS_PASSWORD=ADMIN_PASS
export OS_AUTH_URL=http://controller01:35357/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2

创建demo.openrc文件,内容如下:

(注意DEMO_PASS要替换成你为demo用户设置的密码)

export OS_PROJECT_DOMAIN_NAME=default
export OS_USER_DOMAIN_NAME=default
export OS_PROJECT_NAME=demo
export OS_USERNAME=demo
export OS_PASSWORD=DEMO_PASS
export OS_AUTH_URL=http://controller01:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2

测试,load admin.openrc 并运行

openstack token issue

openstack setup demo Identity service的更多相关文章

  1. openstack setup demo Compute service

    本文包含以下部分 Compute service overview Install and configure controller node Prerequisites Install and co ...

  2. openstack setup demo Image service

    Image service (glance)是openstack中管理vm image的service.本文包含以下内容: overview install overview glance包含以下部分 ...

  3. openstack setup demo Overview

    Overview openstack是一套开源的云计算部署平台,通过一系列service提供IAAS.每一个service都提供API.具体的service列表如下: dashboard Horizo ...

  4. openstack setup demo 前言

    我们搭建一套三节点的openstanck集群.一个controller节点,两个compute节点.操作系统采用Centos7,操作系统版本信息如下. [root@controller01 ~]# c ...

  5. openstack setup demo Enviroment

    Enviroment 本文包含以下部分. Host networking Network Time Protocol (NTP) OpenStack packages SQL database NoS ...

  6. OpenStack (1) - Keystone OpenStack Identity Service

    echo deb http://ubuntu-cloud.archive.canonical.com/ubuntu precise-updates/grizzly main >> /etc ...

  7. Identity Service - 解析微软微服务架构eShopOnContainers(二)

    接上一篇,众所周知一个网站的用户登录是非常重要,一站式的登录(SSO)也成了大家讨论的热点.微软在这个Demo中,把登录单独拉了出来,形成了一个Service,用户的注册.登录.找回密码等都在其中进行 ...

  8. Identity Service

    Identity Service - 解析微软微服务架构eShopOnContainers(二)   接上一篇,众所周知一个网站的用户登录是非常重要,一站式的登录(SSO)也成了大家讨论的热点.微软在 ...

  9. Inno Setup for Windows service

    Inno Setup for Windows service? up vote86down votefavorite 77 I have a .Net Windows service. I want ...

随机推荐

  1. OC 实现一个TODO宏

    实现一个TODO宏 转载http://blog.sunnyxx.com/2015/03/01/todo-macro/ 实现一个能产生warning的TODO宏,用于在代码里做备忘,效果: 下面一步步来 ...

  2. greenplum4.3.8.2安装

    GREENPLUM总体结构:   数据库由Master Severs和Segment Severs通过Interconnect互联组成. Master主机负责:建立与客户端的连接和管理:SQL的解析并 ...

  3. java规范与标准?

    所谓规范,即指由很多人同时遵守的行为或理论. java的规范并不是指其中一种,而是有很多种,比如java编码规范,java命名规范,java虚拟机规范等等,甚至于一个编码规范都有很多种,不同的公司.组 ...

  4. Android(java)学习笔记187:多媒体之SurfaceView

    1. SurfaceView:     完成单位时间内界面的快速切换(游戏界面流畅感). 我们之前知道一般的View,只能在主线程里面显示,主线程中更新UI.但是SurfaceView可以在子线程中里 ...

  5. iOS UI 顶级布局

    状态栏. 导航栏. tabbar. uiviewcontroller视图区域.

  6. 使用Gson解析Json数组遇到的泛型类型擦除问题解决方法

    谷歌Gson转换Json串有如下方法: public Object fromJson(String json, Type typeOfT);1可以使用它进行数组解析.如下,使用此方法解析Json串为类 ...

  7. 用数据集跑一个模型遇到bug如何解决

    自己在用fast rcnn和ssd跑自己数据集过程中都遇到了bug,fast rcnn中是loss下降但值较高,并且测试出来结果一直不对,ssd是loss从一开始到后面loss都一直为0. 遇到这种情 ...

  8. SQL函数解释(待补)

    1.SQL— CONCAT(字符串连接函数) 有的时候,我们有需要将由不同栏位获得的资料串连在一起.每一种资料库都有提供方法来达到这个目的: MySQL: CONCAT() Oracle: CONCA ...

  9. Bootstrap table的基础用法

    一.官方文档 Bootstrap 中文网:http://www.bootcss.com/ Bootstrap Table 中文网 : http://bootstrap-table.wenzhixin. ...

  10. js使用canvas在前端压缩图片

    HTML代码: <input id="file" type="file"> JS代码: var eleFile = document.querySe ...