本节书摘来异步社区《OpenStack云计算实战手册(第2版)》一书中的第1章,第1.4节,作者: 【英】Kevin Jackson , 【美】Cody Bunch 译者: 黄凯 , 杜玉杰 责编: 杨海玲,更多章节内容可以访问云栖社区“异步社区”公众号查看。
1.4 安装OpenStack身份认证服务
OpenStack云计算实战手册(第2版)
我们将会使用Ubuntu Cloud Archive安装和配置OpenStack身份认证服务,也就是Keystone项目。配置完成之后,连接到OpenStack云环境都需经过这里所安装的OpenStack身份认证服务。
OpenStack身份认证服务的默认后台数据库是MySQL数据库。
准备工作
为保证运行的是Ubuntu Cloud Archive,必须配置Ubunut 12.04安装使用该服务。
我们将配置Keystone使用MySQL作为数据库后端,因此,安装Keystone之前需要安装MySQL。如果MySQL尚未安装,请执行以下步骤安装配置MySQL:
MYSQL_ROOT_PASS=openstack
MYSQL_HOST=172.16.0.200
# To enable non-interactive installations of MySQL, set the following
echo "mysql-server-5.5 mysql-server/root_password password \
$MYSQL_ROOT_PASS" | sudo debconf-set-selections
echo "mysql-server-5.5 mysql-server/root_password_again password \
$MYSQL_ROOT_PASS" | sudo debconf-set-selections
echo "mysql-server-5.5 mysql-server/root_password seen true" \
| sudo debconf-set-selections
echo "mysql-server-5.5 mysql-server/root_password_again seen true" \
| sudo debconf-set-selections
export DEBIAN_FRONTEND=noninteractive
sudo apt-get update
sudo apt-get -q -y install mysql-server
sudo sed -i "s/^bind\-address.*/bind-address = ${MYSQL_HOST}/g" \
/etc/mysql/my.cnf
sudo service mysql restart
mysqladmin -uroot password ${MYSQL_ROOT_PASS}
mysql -u root --password=${MYSQL_ROOT_PASS} -h localhost \
-e "GRANT ALL ON *.* to root@\"localhost\" IDENTIFIED BY \"${MYSQL_
ROOT_PASS}\" WITH GRANT OPTION;"
mysql -u root --password=${MYSQL_ROOT_PASS} -h localhost \
-e "GRANT ALL ON *.* to root@\"${MYSQL_HOST}\" IDENTIFIED BY
\"${MYSQL_ROOT_PASS}\" WITH GRANT OPTION;"
mysql -u root --password=${MYSQL_ROOT_PASS} -h localhost \
-e "GRANT ALL ON *.* to root@\"%\" IDENTIFIED BY \"${MYSQL_ROOT_
PASS}\" WITH GRANT OPTION;"
mysqladmin -uroot -p${MYSQL_ROOT_PASS} flush-privileges
接下来,请确保已经登录到OpenStack 身份认证服务器或者需要安装Keystone的OpenStack控制节点上,并且确保该服务器可以被其他的OpenStack主机访问到。
执行以下命令,登录到使用Vagrant创建的OpenStack 控制节点:
vagrant ssh controller
操作步骤
要安装OpenStack身份认证服务,需要执行如下指令。
1.安装OpenStack身份认证服务可通过指定安装Ubuntu资源库里的keystone软件包来完成。只需执行如下命令:
sudo apt-get update
sudo apt-get -y install keystone python-keyring
2.安装好之后,需要配置后台数据库存储。首先需要在MySQL里创建一个keystone数据库,按照如下步骤来执行(在本例中,假定MySQL的用户名是root,对应的密码是openstack,该用户有创建数据库的权限):
MYSQL_ROOT_PASS=openstack
mysql -uroot -p$MYSQL_ROOT_PASS -e "CREATE DATABASE \
keystone;"
3.一个最佳实践是在数据库中为OpenStack身份认证服务单独创建一个特定的用户。创建命令如下:
MYSQL_KEYSTONE_PASS=openstack
mysql -uroot -p$MYSQL_ROOT_PASS -e "GRANT ALL PRIVILEGES \
ON keystone.* TO 'keystone'@'%'"
mysql -uroot -p$MYSQL_ROOT_PASS -e "SET PASSWORD FOR \
'keystone'@'%' = PASSWORD('$MYSQL_KEYSTONE_PASS');"
4.接下来,配置OpenStack身份认证服务来使用该数据库。编辑配置文件/etc/keystone/keystone.conf,修改sql_connection行来匹配数据库证书。命令如下所示:
MYSQL_HOST=172.16.0.200
sudo sed -i "s#^connection.*#connection = \
mysql://keystone:openstack@172.16.0.200/keystone#" \
/etc/keystone/keystone.conf
5.超级用户admin的token在/etc/keystone/keystone.conf 文件中,需要配置该token。
sudo sed -i "s/^# admin_token.*/admin_token = ADMIN" \
/etc/keystone/keystone.conf
6.Grizzly版本发布后,Keystone支持PKI架构的token签名加密。如果不使用该功能,可编辑/etc/keystone/ keystone.conf文件,使用非签名的token。
sudo sed -i "s/^#token_format.*/token_format = UUID" \
/etc/keystone/keystone.conf
7.现在重启keystone服务。
sudo stop keystone
sudo start keystone
8.Keystone启动之后,用如下命令为keystone数据库填充必需的数据表:
sudo keystone-manage db_sync
恭喜!现在已经为OpenStack环境安装好了OpenStack身份认证服务。
工作原理
通过使用Ubuntu的包,可以便捷地为OpenStack环境安装好OpenStack身份认证服务。安装完成之后,在MySQL数据库服务器中配置了keystone数据库,并且设置了keystone.conf文件来使用它。启动Keystone服务之后,运行keystone-manage db_sync命令来为keystone数据库填充合适的数据表,以方便向其中添加OpenStack环境中所必需的用户(user)、角色(role)和租户(tenant)。