转载

在 Openstack 中使用 HTTPD 运行 Keystone

Openstack 简介

Openstack 是目前世界上增长最快速的开源软件之一,提供了基础设施即服务 (IaaS) 解决方案,是除亚马逊 AWS 和微软的 Azure 之外的最重要的云计算产品。来自于一百多个国家的数万开发技术人员和云计算专家工作在 Openstack 社区,为包括公有云和私有云在内的云计算平台提供各种解决方案,制定相关的技术标准。

Openstack 由多个核心开源项目组成,主要有以下:

计算服务(Compute)- Nova

对象存储(Object Storage)- Swift

镜像服务(Image)- Glance

身份服务(Identity)- Keystone

网络服务(Network)- Neutron

随着 Openstack 不断发展,还有很多新的项目被加入,这里就不一一介绍了。(具体见参考资源一)。

Keystone 简介

身份服务(Identity)- Keystone 是 Openstack 核心开源项目中的最重要的组件之一,自从 Openstack Essex 发布的时候就被采用(具体见参考资源二)。

它是为 Openstack 的其他核心组件,诸如计算、存储等提供用户认证、令牌、策略和目录服务的,它本身并不提供这些功能,只是一个抽象层,类似于封装器,用来集成具体的插件,例如,PAM(Pluggable Authentication Module),LDAP 或者 OAuth。通过这些插件,它能够实现多种形式的身份验证。

使用 Apache HTTPD 运行 Keystone

Keystone 缺省是使用内置的 Eventlet 服务器来运行的,Eventlet 本身非常简单易用,但是它已经缺失了很多早已经实现的、基于互联网的网络服务器的安全功能,所以从安全性考虑,随着 Openstack 最新的版本 Kilo 发布以后,不建议使用 Eventlet 来启动 Keystone,推荐使用 Apache HTTPD。而对于使用 EventLet 的支持将从 Openstack 的 Mitaka 版本中彻底移除。

那如何使用 HTTPD 来运行 Keystone,过程如下:

  • 安装 Keystone 软件
  • 配置 Keystone
  • 创建 Keystone 数据库
  • 配置并同步数据库
  • 安装 HTTPD 相关的软件
  • 配置 Apache HTTPD
  • 启动并验证 HTTPD 服务
  • 后续配置和验证

注意:以下所有操作均在 Red Hat Enterprise Linux 7 上运行。

步骤一,安装 Keystone 软件

注意:必须要有 RHEL 的 yum repo 的支持。(具体见参考资源五)

yum install openstack-keystone python-openstackclient

步骤二,配置 Keystone

Keystone 的配置文件一般是 /etc/keystone/keystone.conf

1.首先需要先产生一个随机数,用作初始配置时的管理员令牌

# openssl rand -hex 10 5eb4014ecffaa4f053b5

2.编辑/etc/keystone/keystone.conf,在 DEFAULT 段落定义刚刚得到的管理员令牌

[DEFAULT] … admin_token = ADMIN_TOKEN

3.在 token 段落定义令牌供应和后台驱动器

[token] … provider = keystone.token.providers.uuid.Provider driver = keystone.token.persistence.backends.sql.Token

4.在 signing 段落定义算法

[signing] … token_format = UUID

步骤三,创建 Keystone 数据库

注意:假定使用 MariaDB(自 RHEL 7 以后,MariaDB 是 yum repo 中缺省数据库),并且已经安装好。如果没有安装,需要先行安装,并且配置相关文件,启动数据库服务

yum install mariadb-server MySQL-python … systemctl enable mariadb.service systemctl start mariadb.service

1.创建 Keystone 数据库

mysql -u root -p mysql> CREATE DATABASE keystone

2.创建 Keystone 用户并授权

mysql> GRANT ALL PRIVILEGES ON keystone.* TO ’keystone’@‘localhost’ IDENTIFIED BY ‘KEYSTONE_DBPASS’; mysql> GRANT ALL PRIVILEGES ON keystone.* TO ‘keystone’@‘%’ IDENTIFIED BY ‘KEYSTONE_DBPASS’; mysql> FLUSH PRIVILEGES;

步骤四,配置并同步数据库

1.编辑/etc/keystone/keystone.conf,在 database 段落定义数据库存取

[database] … connection = mysql://keystone:KEYSTONE_DBPASSWORD@/ CONTROLLER_NODE_IP/keystone?charset=utf8

注意: CONTROLLER_NODE_IP 需要设置成正确的控制节点的 IP 地址

2.同步 Keystone 数据库

keystone-manage db_sync

步骤五,安装 HTTPD 相关的软件

yum install httpd mod_wsgi

步骤六,配置 Apache HTTPD

1.首先需要在正确的 HTTPD 的配置文件目录下面创建一个 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 / /var/www/cgi-bin/keystone/main  WSGIApplicationGroup %{GLOBAL}  WSGIPassAuthorization On  <IfVersion >= 2.4>  ErrorLogFormat "%{cu}t %M"  </IfVersion>  ErrorLog /var/log/httpd/keystone.log  CustomLog /var/log/httpd/keystone_access.log combined </VirtualHost> <VirtualHost *:35357>  WSGIDaemonProcess keystone-admin processes=5 threads=1 user=                               keystone group=keystone display-name=%{GROUP}  WSGIProcessGroup keystone-admin  WSGIScriptAlias / /var/www/cgi-bin/keystone/admin  WSGIApplicationGroup %{GLOBAL}  WSGIPassAuthorization On  <IfVersion >= 2.4>  ErrorLogFormat "%{cu}t %M"  </IfVersion>  ErrorLog /var/log/httpd/keystone.log  CustomLog /var/log/httpd/keystone_access.log combined </VirtualHost>

注意:一般情况下,HTTPD 的配置文件目录是 /etc/httpd/conf.d ,但也有例外的,需要结合具体系统安装而定。

注意:这个文件可以手工编写,或者从步骤一安装 Keystone 的软件源代码里面去拷贝一份,一般是在 /usr/share/keystone/wsgi-keystone.conf.

注意:用户和组在步骤一就已经被创建出来了,用户和组一定要设置正确;存放日志文件的路径一定要设置正确;进程数目是可以调节的,取决于系统的硬件资源多少。

2.创建目录用来存放 WSGI 组件

mkdir -p /var/www/cgi-bin/keystone

3.从步骤一中安装的 Keystone 软件源代码中把 WSGI 组件拷贝到新创建的目录中,一般是/usr/share/keystone/keystone.wsgi

cp /usr/share/keystone/keystone.wsgi /var/www/cgi-bin/keystone/admin cp /usr/share/keystone/keystone.wsgi /var/www/cgi-bin/keystone/main

4.给新创建的目录和文件正确的用户、组和权限

chown -R keystone:keystone /var/www/cgi-bin/keystone chmod 755 /var/www/cgi-bin/keystone/*

步骤七,启动并验证 HTTPD 服务

systemctl enable httpd.service systemctl start httpd.service systemctl status httpd.service ... httpd.service - The Apache HTTP Server  Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled)  Active: active (running) since Wed 2015-07-15 17:50:06 CDT; ...  CGroup: /system.slice/httpd.service  651 /usr/sbin/httpd -DFOREGROUND  653 (wsgi:keystone- -DFOREGROUND  654 (wsgi:keystone- -DFOREGROUND  656 (wsgi:keystone- -DFOREGROUND  658 (wsgi:keystone- -DFOREGROUND ...

到这一步结束,Keystone 的所有服务均已经正常启动。

步骤八,后续配置和验证

注意:接下来的步骤并不是本文所重点关注的内容,即使使用 Eventlet 服务器也需要。考虑到文章的完整性,还是在这里加以阐述。

现在的 Keystone 还不能响应别的服务的请求,是因为数据库里面还没有任何信息,需要继续完成最后的配置工作。

1.设置 OS_URL 和 OS_TOKEN

export OS_URL=http://CONTROLLER_NODE_IP:35357/v2.0 export OS_TOKEN=ADMIN_TOKEN

注意: ADMIN_TOKEN 就是在步骤二中设置在 /etc/keystone/keystone.conf

2.创建服务实体和 API 端点

openstack service create --name keystone --description "Keystone Identity Service" identity +-------------+----------------------------------+ | Field | Value | +-------------+----------------------------------+ | description | OpenStack Identity | | enabled | True | | id | 4ddaae90388b4ebc9d252ec2252d8d10 | | name | keystone | | type | identity | +-------------+----------------------------------+ openstack endpoint create / --publicurl http://CONTROLLER_NODE_IP:5000/v2.0 / --internalurl http://CONTROLLER_NODE_IP:5000/v2.0 / --adminurl http://CONTROLLER_NODE_IP:35357/v2.0 / --region RegionOne identity +--------------+------------------------------------------+ | Field | Value | +--------------+------------------------------------------+ | adminurl | http://CONTROLLER_NODE_IP:35357/v2.0 | | id | 4a9ffc04b8eb4848a49625a3df0170e5 | | internalurl | http://CONTROLLER_NODE_IP:5000/v2.0 | | publicurl | http://CONTROLLER_NODE_IP:5000/v2.0 | | region | RegionOne | | service_id | 4ddaae90388b4ebc9d252ec2252d8d10 | | service_name | keystone | | service_type | identity | +--------------+------------------------------------------+

3.创建项目、用户和角色

创建 admin 项目

openstack project create --description "Admin Project" admin +-------------+----------------------------------+ | Field | Value | +-------------+----------------------------------+ | description | Admin Project | | enabled | True | | id | cf12a15c5ea84b019aec3dc45580896b | | name | admin | +-------------+----------------------------------+

创建 service 项目

openstack project create --description "Service Project" service +-------------+----------------------------------+ | Field | Value | +-------------+----------------------------------+ | description | Service Project | | enabled | True | | id | 55cbd79c0c014c8a95534ebd16213ca1 | | name | service | +-------------+----------------------------------+

创建 admin 用户

openstack user create --password ADMIN_PASSWORD admin +------------+----------------------------------+ | Field | Value | +------------+----------------------------------+ | email | None | | enabled | True | | id | 4d411f2291f34941b30eef9bd797505a | | name | admin | | username | admin | +------------+----------------------------------+

创建 admin 角色

openstack role create admin +-------+----------------------------------+ | Field | Value | +-------+----------------------------------+ | id | cd2cb9a39e874ea69e5d4b896eb16128 | | name | admin | +-------+----------------------------------+

把角色 admin 加入到项目 admin 和用户 admin 中。

openstack role add --project admin --user admin admin +-------+----------------------------------+ | Field | Value | +-------+----------------------------------+ | id | cd2cb9a39e874ea69e5d4b896eb16128 | | name | admin | +-------+----------------------------------+

如果还想创建别的数据,可以按需操作。

4.创建环境变量文件并验证

因为安全性的考虑,一般建议现在可以取消初始化配置的管理员安全令牌机制。

编辑文件/etc/keystone/keystone-paste.ini.

在 pipeline:public_api、pipeline:admin_api 和 pipeline:api_v3 这三个段落中删除 admin_token_auth.

复位 OS_TOKEN 和 OS_URL:

unset OS_TOKEN OS_URL

由于很多命令都需要带很长的参数,一般建议把这些环境变量写入到一个文件中。

创建 keystone_rc 文件,在其中加入以下的选项:

export OS_PROJECT_DOMAIN_ID=default export OS_USER_DOMAIN_ID=default export OS_PROJECT_NAME=admin export OS_TENANT_NAME=admin export OS_USERNAME=admin export OS_PASSWORD=ADMIN_PASSWORD export OS_AUTH_URL=http://CONTROLLER_NODE_IP:35357

装入 keystone_rc 文件:

source keystone_rc

执行以下命令验证 Keystone 否可以工作:

openstack token issue +------------+----------------------------------+ | Field | Value | +------------+----------------------------------+ | expires | 2015-08-26T04:25:58.669478Z | | id | de5be235afff46c4b3d225dfae06cf00 | | project_id | 1641ce674b7c4e99a1fb29760b1635f4 | | user_id | 6bed1eb1b2574aa1a6d189cf4278bb9f | +------------+----------------------------------+  openstack service list  +----------------------------------+----------+----------+ | ID | Name | Type | +----------------------------------+----------+----------+ | a1cd48a281634e32afbd1977cd2e6e66 | keystone | identity | +----------------------------------+----------+----------+  openstacl project list +----------------------------------+---------+ | ID | Name | +----------------------------------+---------+ | 1641ce674b7c4e99a1fb29760b1635f4 | admin | | dcfadbae7e4a4928bfd100c07f6a1550 | service | +----------------------------------+---------+

至此,Keystone 可以正常和其他 Openstack 的核心组件一起工作了。

限于篇幅,还有一些细节未能在这里展开,例如,如何配置公钥机制 PKI(Public Key Infrastructure);如何配置 SSL。有兴趣的读者可以自己先行研究一下。

结束语

Openstack 的更新变化非常快,新旧功能的交替已经成为常态化,希望本文对工作学习在云计算领域的读者了解新动向有所裨益。

原文  http://www.ibm.com/developerworks/cn/cloud/library/1603-openstack-keystone-httpd/index.html?ca=drs-
正文到此结束
Loading...