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. Linux下PPPoE Server测试环境搭建

    1.1  服务器软件安装 安裝PPPoE Server 所需的软件: 安装ppp模块: sudo apt-get install ppp   //一般默认下已安装 安装rp-pppoe,从网络上下载安 ...

  2. cron on Centos

    1. crond.service 2. configuration 2.0 format # Example of job definition: # .---------------- minute ...

  3. redis-3.0.1 sentinel 主从高可用 详细配置

    最近项目上线部署,要求redis作高可用,由于redis cluster还不是特别成熟,就选择了redis sentinel做高可用.redis本身有replication,实现主从备份.结合sent ...

  4. shell高级用法

    参考链接: http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=218853&page=7#pid1628522

  5. WPF知识点--渐变色(LinearGradientBrush、GradientStop)

    [LinearGradientBrush-- 使用线性渐变绘制区域](https://msdn.microsoft.com/zh-cn/library/system.windows.media.lin ...

  6. Python中yield函数浅析

    带有yield的函数在Python中被称之为generator(生成器),下面我们将使用斐波那契数列来举例说明下该函数:(环境是在Python3.x下)  如何生成斐波那契数列: 斐波那契(Fibon ...

  7. 笔试算法题(33):烙饼排序问题 & N!阶乘十进制末尾0的个数二进制最低1的位置

    出题:不同大小烙饼的排序问题:对于N块大小不一的烙饼,上下累在一起,由于一只手托着所有的饼,所以仅有一只手可以翻转饼(假设手足够大可以翻转任意块数的 饼),规定所有的大饼都出现在小饼的下面则说明已经排 ...

  8. org.dom4j.DocumentException

    在使用soapui测试webservice接口的时候如果需要传入xml格式的参数 这么写是不对的,会报错org.dom4j.DocumentException: Error on line 1 of ...

  9. python 用 PIL 模块 画验证码

    PIL 简单绘画 def get_code_img(request): from PIL import Image, ImageDraw, ImageFont import random def ra ...

  10. 集训第六周 数学概念与方法 数论 筛素数 H题

    Description 小明对数的研究比较热爱,一谈到数,脑子里就涌现出好多数的问题,今天,小明想考考你对素数的认识.  问题是这样的:一个十进制数,如果是素数,而且它的各位数字和也是素数,则称之为“ ...