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

最新文章

  1. mysql5.7安装配置
  2. SQLite Learning、SQL Query Optimization In Multiple Rule
  3. 我要阻止做java开发的男朋友去创业型公司工作吗?
  4. 4-1 yum源文件
  5. codeforces 387C George and Number
  6. MongoDB 2.6.x 的安装部署
  7. copy模块
  8. 卸载mysql残留
  9. SQL Server获取连续区间的日期
  10. java 的基本数据类型及转换
  11. C#使用Mutex实现单例应用程序
  12. 使用 vscode + chrome debuger断点调试 Vue 程序
  13. Android Studio自动排版的两种方法
  14. 添加类似navigationController自带的返回按钮
  15. bootstrap5
  16. Oracle Study之-AIX6.1构建Oracle 10gR2 RAC(3)
  17. 【SSH网上商城项目实战17】购物车基本功能的实现
  18. Traffic Steering for Service Function Chaining
  19. Java RSA加密算法生成公钥和私钥
  20. RC4 in TLS is Broken: Now What?

热门文章

  1. 最新最强短视频SDK——来自RDSDK.COM
  2. JData 整合ArtTemplate的前端框架
  3. Farseer.net轻量级ORM开源框架 V1.x 入门篇:表实体类映射
  4. swift派发机制的核心是确定一个函数能否进入动态派发列表
  5. 使用Caliburn.Micro系列2:Convention
  6. Uncaught TypeError: Cannot assign to read only property &#39;exports&#39; of object &#39;#&lt;Object&gt;&#39;
  7. tinyXml输出utf-8文档
  8. mxnet.base.MXNetError: src/imperative/./imperative_utils.h:70: Check failed: inputs[i]-&gt;ctx().dev_mask() == ctx.dev_mask() (1 vs. 2)
  9. 零基础入门学习Python(16)--序列!序列!
  10. 零基础入门学习Python(6)--Python之常用操作符