2、认证服务 keystone部署
控制节点:
2.1、安装和配置服务
2.1.1、建库建用户
mysql -u root -p
CREATE DATABASE keystone;
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY 'P@ssw0rd';
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY 'P@ssw0rd';
flush privileges;
2.1.2、安装相关包
yum install openstack-keystone httpd mod_wsgi -y
如下图所示安装缺失的rpm包,不知道是不是离线源没下载好,附带网站链接:https://pkgs.org/
在网站上直接搜索缺失的rpm包就可以了,确实2个包,但是其中一个包有依赖包,所以最终下载安装3个包:
python-jinja2-2.7.2-4.el7.noarch.rpm
python-markupsafe-0.11-10.el7.x86_64.rpm
python-zope-interface-4.0.5-4.el7.x86_64.rpm
然后安装成功
2.1.3、生成一个随机值在初始的配置中作为管理员的令牌:
[root@controller ~]# openssl rand -hex 10
38cffecbd035b2589040
2.1.4、编辑/etc/keystone/keystone.conf
[DEFAULT]
admin_token = 38cffecbd035b2589040
#这里的作用主要是先手动指定admin_token,为了部署keystone,因为keystone没部署,认证环节还不能工作,等keystone部署好,会把手动指定admin_token认证方式去掉
[database]
connection = mysql+pymysql://keystone:P@ssw0rd@controller/keystone
[token]
provider = fernet
2.1.5、同步修改到数据库 ---可能是虚拟机比较卡,这一步等了两分钟
su -s /bin/sh -c "keystone-manage db_sync" keystone
2.1.6、初始化fernet keys
keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
2.1.7、配置apache服务 ---这里的名称就是主机名
vi /etc/httpd/conf/httpd.conf
ServerName controller
vi /etc/httpd/conf.d/wsgi-keystone.conf
新增配置
Listen 5000
Listen 35357
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
Require all granted
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
Require all granted
---不知道是不是粘贴复制的原因,从这里复制的失败了,从官方文档复制的内容就成功启动了httpd
2.1.8、启动服务:
# systemctl enable httpd
# systemctl start httpd
2.2、创建服务实体和API端点
2.2.1、实现配置管理员环境变量,用于获取后面创建的权限
export OS_TOKEN=38cffecbd035b2589040
#要与前面的/etc/keystone/keystone.conf中的admin_token相同
export OS_URL=http://controller:35357/v3
export OS_IDENTITY_API_VERSION=3
2.2.2、基于上一步给的权限,创建认证服务实体(目录服务)
openstack service create --name keystone --description "OpenStack Identity" identity
#如遇到报500错误,ArgsAlreadyParsedError: arguments already parsed: cannot register CLI option,可把--description "OpenStack Identity"去掉
2.2.3、基于上一步建立的服务实体,创建访问该实体的三个api端点
openstack endpoint create --region RegionOne identity public http://controller:5000/v3
openstack endpoint create --region RegionOne identity internal http://controller:5000/v3
openstack endpoint create --region RegionOne identity admin http://controller:35357/v3
2.3、创建域,租户,用户,角色
2.3.1、创建域``default``:
openstack domain create --description "Default Domain" default
2.3.2、为进行管理操作,创建管理的项目、用户和角色
创建 admin 项目:
openstack project create --domain default --description "Admin Project" admin
创建 admin 用户: --默认密码:P@sswrd
openstack user create --domain default --password-prompt admin
创建 admin 角色:
openstack role create admin
添加``admin`` 角色到 admin 项目和用户上:
openstack role add --project admin --user admin admin
2.3.3、本指南使用一个你添加到你的环境中每个服务包含独有用户的service 项目。创建``service``项目:
为后续的服务创建统一租户service
解释:后面每搭建一个新的服务都需要在keystone中执行四种操作:1.建租户 2.建用户 3.建角色 4.做关联
后面所有的服务公用一个租户service,都是管理员角色admin,所以实际上后续的服务安装关于keysotne的操作只剩2,4
openstack project create --domain default --description "Service Project" service
2.3.4、常规(非管理)任务应该使用无特权的项目和用户,创建 demo 项目和用户
普通用户:demo
openstack project create --domain default --description "Demo Project" demo
openstack user create --domain default --password-prompt demo
默认密码:P@ssw0rd
openstack role create user
openstack role add --project demo --user demo user
2.4、验证操作:
2.4.1、因为安全性的原因,关闭临时认证令牌机制:
编辑 /etc/keystone/keystone-paste.ini 文件,从``[pipeline:public_api]``,[pipeline:admin_api]``和``[pipeline:api_v3]``部分删除``admin_token_auth 。
下图三个红色方框内的admin_token_auth全部删除
下图为删除后的配置
2.4.2、重置``OS_TOKEN``和``OS_URL`` 环境变量:
# unset OS_TOKEN OS_URL
2.4.3、作为 admin 用户,请求认证令牌:
# 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
注解:这个命令使用``admin``用户的密码。我这里全程都是:P@ssw0rd
2.4.4、作为``demo`` 用户,请求认证令牌:
# 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
密码全程都是:P@ssw0rd
注解:这个命令使用``demo`` 用户的密码和API端口5000,这样只会允许对身份认证服务API的常规(非管理)访问。
2.5、创建 OpenStack 客户端环境脚本
2.5.1、编辑文件 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=P@ssw0rd
export OS_AUTH_URL=http://controller:35357/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
2.5.2、编辑文件 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=P@ssw0rd
export OS_AUTH_URL=http://controller:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
2.5.3、使用脚本
使用特定租户和用户运行客户端,你可以在运行之前简单地加载相关客户端脚本。例如:
加载``admin-openrc``文件来身份认证服务的环境变量位置和``admin``项目和用户证书:
# . admin-openrc
请求认证令牌:
# openstack token issue