一、安装和配置服务令牌功能的组件keystone(controller)
身份识别服务(keystone)概述
OpenStack 身份识别服务 为管理身份验证、授权和服务目录提供了单点集成。
身份识别服务通常是用户与之交互的第一个服务。经过身份验证后,最终用户可以使用其身份访问其他OpenStack服务。类似地,其他OpenStack服务利用身份服务来确保用户是他们所说的人,并发现其他服务在部署中的位置。身份识别服务还可以与一些外部用户管理系统(如LDAP)集成。
用户和服务可以使用由身份识别服务管理的服务目录来定位其他服务。顾名思义,服务目录是OpenStack部署中可用服务的集合。每个服务可以有一个或多个终端,每个终端可以是三种类型中的一种:admin、internal或public。在生产环境中,出于安全原因,不同的终端类型可能位于暴露给不同类型用户的不同网络上。例如,公共API网络可以从互联网上看到,因此客户可以管理他们的云。管理API网络可能仅限于管理云基础设施的组织内的运营商。内部API网络可能仅限于包含OpenStack服务的主机。此外,OpenStack支持多个区域以实现可伸缩性。为简单起见,本指南对所有终端类型和默认RegionOne区域使用管理网络。在身份识别服务中创建的区域、服务和终端共同构成部署的服务目录。部署中的每个OpenStack服务都需要一个服务条目,其中包含存储在身份识别服务中的相应终端。这一切都可以在安装和配置身份识别服务后完成。
身份识别服务包含以下组件:
- Server(服务端):集中式服务器使用RESTful接口提供身份验证和授权服务。
- Drivers(驱动程序):驱动程序或服务后端集成到集中式服务器。它们用于访问OpenStack外部存储库中的标识信息,并且可能已经存在于部署OpenStack的基础设施中(例如,SQL数据库或LDAP服务器)。
- Modules(模块):中间件模块在使用身份识别服务的OpenStack组件的地址空间中运行。这些模块拦截服务请求,提取用户凭据,并将其发送到集中式服务器进行授权。中间件模块和OpenStack组件之间的集成使用Python Web服务器网关接口。
安装配置
yum install openstack-keystone httpd python3-mod_wsgi
vim /etc/keystone/keystone.conf
:set nu
G
2000多行配置太难找位置了,
做个备份,去除注释后就40多行,配置好找多了
cp /etc/keystone/keystone.conf /etc/keystone/keystone.conf.bak
grep -Ev '^$|#' /etc/keystone/keystone.conf.bak >/etc/keystone/keystone.conf
vim /etc/keystone/keystone.conf
增加下面的配置,KEYSTONE_DBPASS
可替换为数据库设置的密码。
[database]
connection = mysql+pymysql://keystone:KEYSTONE_DBPASS@controller/keystone
[token]
provider = fernet
同步数据库
su -s /bin/sh -c "keystone-manage db_sync" keystone
初始化Fernet key
keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
keystone-manage credential_setup --keystone-user keystone --keystone-group keystone
引导身份识别服务
在Queens发布之前,keystone需要在两个单独的端口上运行,以容纳Identity v2 API,该API通常在端口357上运行单独的仅管理的服务。删除v2 API后,keystone可以在所有接口的同一端口上运行。
keystone-manage bootstrap --bootstrap-password ADMIN_PASS \
--bootstrap-admin-url http://controller:5000/v3/ \
--bootstrap-internal-url http://controller:5000/v3/ \
--bootstrap-public-url http://controller:5000/v3/ \
--bootstrap-region-id RegionOne
编辑/etc/httpd/conf/httpd.conf
文件并配置ServerName选项以引用控制器节点:
tips:如果ServerName条目不存在,则需要添加它。
sudo sh -c 'echo "ServerName controller" >> /etc/httpd/conf/httpd.conf'
创建指向/usr/share/keystone/wsgi-keystone.conf文件的链接:
ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/
安全部署应将web服务器配置为使用SSL或在SSL终止符后面运行。
启动Apache HTTP服务,并将其配置为在系统引导时启动:
systemctl enable httpd.service
systemctl start httpd.service
通过设置适当的环境变量来配置管理帐户:
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_DOMAIN_NAME=Default
export OS_PROJECT_NAME=admin
export OS_USERNAME=admin
export OS_PASSWORD=ADMIN_PASS
export OS_AUTH_URL=http://controller:5000/v3
export OS_IDENTITY_API_VERSION=3
这里显示的这些值是从keystone manage引导创建的默认值。
将ADMIN_PASS替换为keystone install configure rdo中[keystone manage bootstrap]
创建域、项目、用户和角色
keystone manage bootstrap步骤中已经存在“默认”域,但创建新域的正式方法是:
openstack domain create --description "An Example Domain" example
创建服务项目(该项目包含您添加到环境中的每个服务的唯一用户):
openstack project create --domain default \
--description "Service Project" service
常规(非管理员)任务应使用非特权项目和用户。例如创建myproject项目和myuser。
创建myproject项目:
openstack project create --domain default \
--description "Demo Project" myproject
创建myuser用户:
openstack user create --domain default \
--password-prompt myuser
创建myrole角色:
openstack role create myrole
将myrole角色添加到myproject项目和myuser用户(关联项目,用户,角色):
openstack role add --project myproject --user myuser myrole
您可以重复以上命令以创建其他项目和用户。
验证操作
取消设置临时OS_AUTH_URL和OS_PASSWORD环境变量:
unset OS_AUTH_URL OS_PASSWORD
作为管理员用户,请求身份验证令牌:
openstack --os-auth-url http://controller:5000/v3 \
--os-project-domain-name Default --os-user-domain-name Default \
--os-project-name admin --os-username admin token issue
作为上一节中创建的myuser用户,请求身份验证令牌:
openstack --os-auth-url http://controller:5000/v3 \
--os-project-domain-name Default --os-user-domain-name Default \
--os-project-name myproject --os-username myuser token issue
创建OpenStack客户端环境脚本
前面的部分结合使用了环境变量和命令选项,通过openstack客户端与身份识别服务交互。为了提高客户端操作的效率,OpenStack支持简单的客户端环境脚本(也称为OpenRC文件)。这些脚本通常包含所有客户端的通用选项,但也支持唯一选项。有关更多信息,请参阅OpenStack最终用户指南。
创建脚本
为admin、demo projects和users创建客户端环境脚本。后续将引用这些脚本来为客户端操作加载适当的凭据。
tips:客户端环境脚本的路径不受限制。为方便起见,您可以将脚本放置在任何位置,但请确保脚本可访问并位于适合您部署的安全位置,因为它们确实包含敏感凭据。
创建和编辑admin-openrc文件,并添加以下内容(使用身份识别服务中admin用户设置的密码替换ADMIN_PASS):
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:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
创建并编辑demo-openrc文件,并添加以下内容(使用身份识别服务中demo用户设置的密码替换ADMIN_PASS):
export OS_PROJECT_DOMAIN_NAME=Default
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_NAME=myproject
export OS_USERNAME=myuser
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文件填充环境变量以使用身份识别服务的位置、admin project和用户凭据:
. admin-openrc