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. 【C++】异常简述(一):C语言中的异常处理机制

    人的一生会遇到很多大起大落,尤其是程序员. 程序员写好的程序,论其消亡形式无非三种:无疾而终.自杀.他杀. 当然作为一名程序员,最乐意看到自己写的程序能够无疾而终,因此尽快的学习异常处理机制是非常重要 ...

  2. golang zip 解压、压缩文件

    package utils import (    "archive/zip"    "fmt"    "io"    "io/i ...

  3. Android APK生成证书并签名方法

    Android APK生成证书并签名方法 android cordova keystore android证书签名 阅读:925 时间:2018年09月20日 Android开发者可能对此很熟悉.使用 ...

  4. 移动端1px线适配问题-------适配各种编译CSS工具 stylus sass styled-componet实现方法

    其实在stylus与sass中实现移动端1像素线各个手机设备的适配问题的原理是一样的, 首先我还是先介绍一下原理和所依赖的方法 原理:其实他们都是通过css3的媒体查询来实现的 步骤思路: 1.给目标 ...

  5. wdcp 打开网页显示 Apache 2 Test Page powered by CentOS -- 来自辉哥博客

    是因为更新过系统,安装并更新了系统自带的apache 执行这个命令即可 #ln -sf /www/wdlinux/init.d/httpd /etc/rc.d/init.d/httpd#reboot ...

  6. 第3节 mapreduce高级:10、11、分组求取topN

    只要修改OrderReducer.java的reduce方法,修改为: int i = 0;for(NullWritable nullWritable:values){ if(i>=2) bre ...

  7. vim common usage

    vim normal模式下 1.c+i+分隔符,删除分隔符里面的内容(不删除分隔符,c+a+分隔符则包括分隔符一起删掉) 如将光标位于'%s : %d years old ' 中,此时按c+i+'   ...

  8. Chrome插件:浏览器后台与页面间通信

    content.js 与 background.js和popup.js 通信和 background.js与popup.js  这些通信都用 chrome.runtime.sendMessage 这个 ...

  9. 大项目之网上书城(七)——书页面以及加入购物车Servlet

    目录 大项目之网上书城(七)--书页面以及加入购物车Servlet 主要改动 1.shu.jsp 代码 效果图 2.shu.js 代码 3.index.jsp 代码 效果图 4.FindBookByC ...

  10. vuex相关(actions和mutation的异曲同工)

    vuex说明: Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式.它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化. 包含的内容: state: ...