Openstack Identity service为认证管理,授权管理和服务目录服务管理提供单点整合。keystone的部署相对比较简单,在本文结尾附录mariadb最大连接数设置未生效的问题。实际上ocata的认证服务安装上来说和之前版本还是有一定的区别,官方可以说是非常人性化的取消了很多繁琐的步骤。
先决条件:创建keystone库为数据库授予恰当的权限。
# mysql -u root -p
MariaDB [(none)]> CREATE DATABASE keystone;
MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY 'KEYSTONE_DBPASS';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY 'KEYSTONE_DBPASS';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'controller' IDENTIFIED BY 'KEYSTONE_DBPASS';
安装并配置keystone组件
# yum install openstack-keystone httpd mod_wsgi
# vim /etc/keystone/keystone.conf
[database]
connection = mysql+pymysql://keystone:KEYSTONE_DBPASS@controller/keystone
[token]
provider = fernet
值得注意的是ocata版本没有包括Mitaka在内诸多版本的admin_token配置,鉴于众多新手经常混乱admin_token和admin_pass,也算是好事一件。
# su -s /bin/sh -c "keystone-manage db_sync" keystone
# keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
# keystone-manage credential_setup --keystone-user keystone --keystone-group keystone
# keystone-manage bootstrap --bootstrap-password ADMIN_PASS \
--bootstrap-admin-url http://controller:35357/v3/ \
--bootstrap-internal-url http://controller:5000/v3/ \
--bootstrap-public-url http://controller:5000/v3/ \
--bootstrap-region-id RegionOne
Ocata的keystone实际是依赖于Apache http进行运行,因此需要在这里进行配置Apache。另外与之前不同的是,ocata这里添加的wsgi-keystone.conf文件,直接通过软连接的方式,之前版本没记错的话应该是手动创建。
# vim /etc/httpd/conf/httpd.conf
找到ServerName并修改为
ServerName controller
# ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/
设置开机自启并启动httpd
# systemctl enable httpd.service
# systemctl start httpd.service
设置环境变量(请修改ADMIN_PASS为之前设置的密码)
$ export OS_USERNAME=admin
$ export OS_PASSWORD=ADMIN_PASS
$ export OS_PROJECT_NAME=admin
$ export OS_USER_DOMAIN_NAME=Default
$ export OS_PROJECT_DOMAIN_NAME=Default
$ export OS_AUTH_URL=http://controller:35357/v3
$ export OS_IDENTITY_API_VERSION=3
创建服务实体和API端点(输出结果建议直接参考官方文档)
创建service project
# openstack project create --domain default \
--description "Service Project" service
创建demo project
# openstack project create --domain default \
--description "Demo Project" demo
创建demo user
# openstack user create --domain default \
--password-prompt demo
User Password:
Repeat User Password:
创建user role
# openstack role create user
添加user role到demo project和suer
# openstack role add --project demo --user demo user
由于安全性原因,关闭临时认证令牌机制
# vim /etc/keystone/keystone-paste.ini
找到以下三项中的admin_token_auth,删掉即可(光标选到a,按17x,即可)
[pipeline:public_api]
[pipeline:admin_api]
[pipeline:api_v3]
重置环境变量
# unset OS_AUTH_URL OS_PASSWORD
分别作为admin用户和demo用户请求认证令牌
# openstack --os-auth-url http://controller:35357/v3 \
--os-project-domain-name default --os-user-domain-name default \
--os-project-name admin --os-username admin token issue
Password:
# openstack --os-auth-url http://controller:5000/v3 \
--os-project-domain-name default --os-user-domain-name default \
--os-project-name demo --os-username demo token issue
Password:
创建脚本
# vi admin-openrc
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://controller:35357/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
---------------------------------------------
# vi demo-openrc
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://controller:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
验证
# . admin-openrc
# openstack token issue
附录:调整mariadb最大连接数
在我的部署过程中,屡次因为mariadb最大连接数问题报错,虽然我按照官方设置了4096,但是实际查询却发现只有214(查看max_connection)
MariaDB [(none)]> show global variables like '%connect%'
原因:10.X版本mariadb默认最大连接数应该就是214(有些版本可能是150)
在这里,我尝试修改/etc/my.cnf和/etc/my.cnf.d/openstack.cnf中的max_connection,重启mariadb后目测没有发生变化。
由于mariadb有默认打开文件数限制,需要通过配置mariadb.service来调大打开文件数目
# vim /usr/lib/systemd/system/mariadb.service
[Service]新添加两行如下参数:
LimitNOFILE=10000
LimitNPROC=10000
重新加载系统服务,并重启mariadb服务
systemctl --system daemon-reload
systemctl restart mariadb.service
在这时再查看,就可能会看到一个令你满意的结果
MariaDB [(none)]> show variables like 'max_connections';
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| max_connections | 4096 |
+-----------------+-------+
但是我在这时又遇到一个问题,这样修改以后,我的默认字符集变成了latin1,很尴尬,我还没有比较好的解决办法,但是目前也没有出现什么问题,算是比较nice吧。