openstack setup demo Identity service

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

posted on 2016-05-30 16:25  kramer  阅读(432)  评论(0编辑  收藏  举报

导航