2.1 欧拉集群安装Keystone认证服务
文章目录
- 1. 欧拉集群
- 1.1 集群拓扑
- 1.2 查看主机名
- 1.3 查看IP地址
- 1.4 查看映射文件
- 1.5 查看防火墙状态
- 1.6 检测集群互通性
- 2. 任务描述
- 3. 任务实施
- 3.1 安装与配置Keystone
- 3.1.1 安装Keystone软件包
- 3.1.2 创建Keystone数据库并授权
- 3.1.3 修改Keystone配置文件
- 3.1.4 初始化Keystone数据库
- 3.2 Keystone组件初始化
- 3.2.1 初始化Fernet密钥库
- 3.2.2 初始化Credential密钥库
- 3.2.3 初始化用户身份认证信息
- 3.2.4 配置Web服务
- 3.3 模拟登录验证
- 3.3.1 创建初始化环境变量文件
- 3.3.2 导入环境变量进行验证
- 3.4 检测Keystone服务
- 3.4.1 获取 Token(最基础验证)
- 3.4.2 创建与查阅项目列表
- 3.4.3 创建角色与查询角色列表
- 3.4.4 创建域与查看域列表
- 3.4.5 创建用户与查看用户列表
- 4. 实战总结
1. 欧拉集群
1.1 集群拓扑
- Euler01 - 主控节点,Euler02和Euler03 - 从节点
1.2 查看主机名
- 查看Euler01节点主机名,执行命令:
hostname
- 查看Euler02节点主机名,执行命令:
hostname
- 查看Euler03节点主机名,执行命令:
hostname
1.3 查看IP地址
-
查看Euler01节点IP地址,执行命令:
ip addr
-
查看Euler02节点IP地址,执行命令:
ip addr
-
查看Euler03节点IP地址,执行命令:
ip addr
1.4 查看映射文件
-
查看Euler01节点映射文件,执行命令:
cat /etc/hosts
-
查看Euler02节点映射文件,执行命令:
cat /etc/hosts
-
查看Euler03节点映射文件,执行命令:
cat /etc/hosts
1.5 查看防火墙状态
-
查看Euler01节点防火墙状态,执行命令:
systemctl status firewalld
-
查看Euler02节点防火墙状态,执行命令:
systemctl status firewalld
-
查看Euler03节点防火墙状态,执行命令:
systemctl status firewalld
1.6 检测集群互通性
- 测试主节点Euler01到三个节点的连通性
- 执行命令:
ping euler01
- 执行命令:
ping euler02
- 执行命令:
ping euler03
- 执行命令:
- 测试从节点Euler02到三个节点的连通性
-
执行命令:
ping euler01
-
执行命令:
ping euler02
-
执行命令:
ping euler03
-
- 测试从节点Euler03到三个节点的连通性
-
执行命令:
ping euler01
-
执行命令:
ping euler02
-
执行命令:
ping euler03
-
2. 任务描述
-
本次任务在欧拉集群主节点Euler01上安装配置Keystone服务,用于提供身份认证、授权和服务目录功能。通过部署Keystone,实现对OpenStack各组件的统一用户管理与安全访问控制,为云平台提供核心的身份验证服务。
-
为了避免接下来的工作中由于操作不当而造成需要重装系统的情况发生,需要将前期工作拍摄快照保存。由于本次任务只在主节点上实施,因此仅需要给主节点拍摄快照。
-
单击【拍摄快照(T)…】菜单项,在弹出的对话框里设置快照名称和描述
-
单击【拍摄快照(T)】按钮,再次打开快照菜单,你会看到刚才我们拍摄的快照
-
打开快照管理器
-
选中我们刚才生成的快照
-
如果过段时间,系统想恢复到今天的快照
-
单击【恢复到快照……】菜单项,弹出消息框询问
-
单击【是(Y)】按钮,虚拟机状态开始恢复到快照
3. 任务实施
3.1 安装与配置Keystone
3.1.1 安装Keystone软件包
- 执行命令:
yum -y install openstack-keystone httpd mod_wsgi
- 命令说明:该命令使用 yum 安装 OpenStack Keystone 服务及依赖组件:
openstack-keystone
提供身份认证功能,httpd
作为 Web 服务器承载服务,mod_wsgi
使 Apache 能运行 Python 应用,三者结合实现高可用的 Keystone 身份验证服务。 - 在安装openstack-keystone软件包时,会自动创建名为keystone的Linux用户及同名用户组。
- 执行命令:
cat /etc/passwd | grep keystone
,查看keystone用户信息
- 执行命令:
cat /etc/groupd | grep keystone
,查看keystone用户组信息
3.1.2 创建Keystone数据库并授权
- 进入MariaDB数据库客户端
- 执行命令:
mysql -uroot -p903213
- 执行命令:
- 新建keystone数据库
- 执行命令:
create database keystone;
- 执行命令:
- 给用户授权使用keystone数据库
- 执行命令:
grant all privileges on keystone.* to 'keystone'@'localhost' identified by '903213';
,将keystone数据库的管理权限授予本地登录用户
- 执行命令:
grant all privileges on keystone.* to 'keystone'@'%' identified by '903213';
,将keystone数据库的管理权限授予远程登录用户
- 结果说明:已为keystone数据库用户分配权限:首先授予本地访问权限(
'keystone'@'localhost'
),随后扩展为允许从任意主机连接('keystone'@'%'
),确保Keystone服务在集群中可远程访问数据库,保障身份认证系统的正常运行。
- 执行命令:
- 退出MariaDB客户端
- 执行命令:
quit
- 执行命令:
3.1.3 修改Keystone配置文件
-
执行命令:
mv /etc/keystone/keystone.conf /etc/keystone/keystone.conf.bak
,备份配置文件
-
执行命令:
vim /etc/keystone/keystone.conf
[DEFAULT] debug = true log_dir = /var/log/keystone[database] connection = mysql+pymysql://keystone:903213@euler01/keystone idle_timeout = 60 max_pool_size = 10 max_overflow = 20 retry_interval = 3 max_retries = 5[token] provider = fernet expiration = 3600[fernet_tokens] key_repository = /etc/keystone/fernet-keys/ max_active_keys = 3[identity] driver = sql[assignment] driver = sql[credential] driver = sql key_repository = /etc/keystone/credential-keys/[revoke] driver = sql[cache] enabled = true backend = dogpile.cache.memcached backend_argument = url:euler01:11211 expiration_time = 3600[memcache] servers = euler01:11211 dead_retry = 30[paste_deploy] config_file = keystone-paste.ini
-
配置说明:该配置文件用于部署 OpenStack Keystone 服务,核心包括:连接 MySQL 数据库(euler01)、使用 Fernet 令牌机制、配置身份与角色管理驱动为 SQL,并启用 Memcached 缓存提升性能,通过 WSGI 模式由 Apache 托管服务,适用于控制节点集中部署的典型 OpenStack 环境。
3.1.4 初始化Keystone数据库
-
keystone-manage命令常见操作及说明
命令 说明 使用场景 keystone-manage db_sync
同步数据库模式,创建或更新表结构 首次部署或升级后必须执行 keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
初始化 Fernet 密钥目录并生成密钥 首次部署 Keystone 前执行 keystone-manage credential_setup --keystone-user keystone --keystone-group keystone
初始化凭证(credential)加密密钥 启用联邦身份认证前执行 keystone-manage bootstrap --bootstrap-password PASSWORD ...
引导初始化管理员用户、服务、端点和区域 首次部署时创建基础身份数据 keystone-manage doctor
检查 Keystone 配置与环境健康状态 排查启动失败或配置错误 keystone-manage mapping_purge --all
或--domain DOMAIN
清理 LDAP 映射缓存 修改映射规则后清理旧数据 keystone-manage token_flush
清除过期令牌(仅适用于 SQL 后端) 手动清理令牌表以释放空间 keystone-manage provider_rcache_setup
为资源提供者设置读取缓存(Placement 相关) 使用 Placement 服务时优化性能 💡 提示:所有命令建议以
keystone
用户运行,如使用su keystone -s /bin/sh -c "keystone-manage xxx"
。 -
同步数据库
- 执行命令:
su keystone -s /bin/sh -c "keystone-manage db_sync"
- 命令说明:该命令以
keystone
用户身份执行数据库同步,将 Keystone 的数据模型(如用户、项目、角色等)初始化到配置的数据库中。su
切换用户确保权限安全,-s /bin/sh -c
指定执行 shell 命令,是部署 Keystone 时必需的关键步骤。
- 执行命令:
-
检查数据库
- 执行命令:
mysql -uroot -p903213
,进入MariaDB客户端
- 执行命令:
use keystone;
,切换到keystone
数据库
- 执行命令:
show tables;
,查看数据库中的表,以此检验数据库同步是否成功
- 可以看到,数据库同步成功,里面有
49
张表
- 执行命令:
3.2 Keystone组件初始化
3.2.1 初始化Fernet密钥库
-
执行命令:
sudo -u keystone keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
-
命令说明:该命令以 keystone 用户身份运行,初始化 Fernet 加密密钥,用于 Keystone 服务中令牌的加密存储,确保安全性和一致性。
-
执行命令:
ll /etc/keystone/fernet-keys
-
结果说明:Fernet密钥已成功生成,
/etc/keystone/fernet-keys/
目录下存在编号为0
和1
的密钥文件,权限为600
,属主为keystone用户,表明密钥初始化完成,Keystone服务可正常进行令牌的加密与验证,为后续身份认证功能提供安全保障。
3.2.2 初始化Credential密钥库
-
执行命令:
sudo -u keystone keystone-manage credential_setup --keystone-user keystone --keystone-group keystone
-
命令说明:该命令以 keystone 用户身份初始化凭证(credential)密钥环,用于 OpenStack Keystone 服务中敏感数据的加密管理,确保凭证安全存储与多节点间的一致性,是部署高可用环境的必要步骤。
-
执行命令:
ll /etc/keystone/credential-keys
-
结果说明:凭证密钥已成功生成,
/etc/keystone/credential-keys/
目录下存在编号为0
和1
的密钥文件,权限为600
,属主为keystone用户,表明credential加密机制初始化完成,Keystone可安全存储和处理联邦身份、OAuth等敏感凭证数据,保障系统安全性。
3.2.3 初始化用户身份认证信息
-
执行命令:
sudo -u keystone keystone-manage bootstrap --bootstrap-password 903213 --bootstrap-admin-url http://euler01:5000/v3 --bootstrap-internal-url http://euler01:5000/v3 --bootstrap-public-url http://euler01:5000/v3 --bootstrap-region-id RegionOne
-
命令说明:该命令用于初始化 Keystone 的基础身份数据,创建 admin 用户、服务实体及 API 端点(URL),并设置默认区域为 RegionOne。
--bootstrap-password
设置管理员密码,各 URL 指定不同访问路径,是部署 OpenStack 时建立身份认证体系的关键步骤。 -
keystone-manage bootstrap
命令各参数说明表参数 说明 示例值 --bootstrap-password PASSWORD
设置管理员(admin)用户的密码 --bootstrap-password adminpass123
--bootstrap-username USERNAME
指定管理员用户名(默认为 admin
)--bootstrap-username cloudadmin
--bootstrap-project-name PROJECT_NAME
指定默认项目(租户)名称(默认为 admin
)--bootstrap-project-name system
--bootstrap-domain-name DOMAIN_NAME
指定管理用户所在域(默认为 default
)--bootstrap-domain-name system_domain
--bootstrap-role-name ROLE_NAME
指定管理员角色名称(默认为 admin
)--bootstrap-role-name sysadmin
--bootstrap-service-name SERVICE_NAME
指定 Keystone 服务在服务目录中的名称(默认为 keystone
)--bootstrap-service-name identity
--bootstrap-admin-url URL
设置管理员端点 URL(v3 API) http://controller:5000/v3/
--bootstrap-internal-url URL
设置内部端点 URL(内部服务调用) http://controller:5000/v3/
--bootstrap-public-url URL
设置公开端点 URL(外部访问) http://controller:5000/v3/
--bootstrap-region-id REGION_ID
设置服务所在的区域 ID(默认为 RegionOne
)--bootstrap-region-id Beijing
✅ 提示:所有 URL 应使用控制节点的主机名或 IP,且主机名需能被解析。首次部署时建议使用默认值,确保
admin
用户和default
域正确初始化。
3.2.4 配置Web服务
- 为Apache服务器增加WSGI支持
-
执行命令:
ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/
-
命令说明:该命令创建符号链接,将 Keystone 的 WSGI 配置文件
wsgi-keystone.conf
软链接到 Apache 的配置目录/etc/httpd/conf.d/
,使 Apache 能加载 Keystone 服务。这是在 RHEL/CentOS 系统中启用 Keystone 通过 HTTP 提供身份认证 API 的关键步骤。
-
- 修改Apache配置文件
- 执行命令:
vim /etc/httpd/conf/httpd.conf
- 配置说明:已配置 Apache 的
ServerName
为euler01:80
,确保服务器启动时能正确识别主机名和端口,避免因未指定导致的警告或服务异常。ServerAdmin
设置为root@euler01
,用于错误页联系信息。此配置是 Keystone 通过 Apache 提供服务的基础。 - 执行命令:
httpd -t
,验证配置是否正确
- 执行命令:
- 重启Apache服务
- 执行命令:
systemctl enable httpd
,设置开机启用Apache服务
- 执行命令:
systemctl restart httpd
,重启Apache服务
- 执行命令:
- 测试Web服务配置
- 在主节点Euler01上执行命令:
curl -i http://euler01:5000/v3
- 请求成功:
HTTP/1.1 200 OK
- 在主节点Euler01上执行命令:
3.3 模拟登录验证
3.3.1 创建初始化环境变量文件
-
执行命令:
vim admin-openrc
#!/bin/bash# Keystone 服务的访问地址(控制节点主机名或IP) export OS_AUTH_URL=http://euler01:5000/v3# 启用 v3 API export OS_IDENTITY_API_VERSION=3# 管理员用户名(默认为 admin) export OS_USERNAME=admin# 管理员密码 export OS_PASSWORD=903213# 管理员用户的默认项目(租户) export OS_PROJECT_NAME=admin# 项目所属的域(通常为 default) export OS_PROJECT_DOMAIN_NAME=Default# 用户所属的域(通常为 default) export OS_USER_DOMAIN_NAME=Default# 认证方式(密码认证) export OS_AUTH_TYPE=password
-
执行命令:
chmod 600 admin-openrc
,设置文件权限
3.3.2 导入环境变量进行验证
- 导入环境变量
- 执行命令:
source admin-openrc
- 执行命令:
- 验证是否生效
- 执行命令:
echo $OS_USERNAME
- 执行命令:
export -p
- 结果说明:该命令输出了当前 shell 环境中所有已设置的环境变量,包括系统路径、语言编码、用户身份认证信息(如
OS_AUTH_URL
、OS_USERNAME
、OS_PASSWORD
)等。其中OS_*
变量表明已配置 OpenStack 认证环境,可用于调用 OpenStack API 进行操作。
- 执行命令:
3.4 检测Keystone服务
3.4.1 获取 Token(最基础验证)
- 执行命令:
openstack token issue
- 结果解释:该命令成功获取了 OpenStack 认证令牌(token),显示了 token 的唯一标识、有效期、所属项目和用户 ID。说明 Keystone 身份认证服务正常,用户已通过身份验证,可访问 OpenStack 服务资源。
3.4.2 创建与查阅项目列表
- 创建名为
huawei
的项目- 执行命令:
openstack project create --domain default huawei
- 结果说明:成功创建名为“huawei”的项目,归属默认域(default),项目ID已生成,状态启用。该操作表明Keystone服务正常,用户具备创建项目的权限,为后续资源分配和用户管理奠定了基础。
- 执行命令:
- 查看现有项目列表
- 执行命令:
openstack project list
,可以看到我们刚才创建的huawei
项目
- 执行命令:
3.4.3 创建角色与查询角色列表
- 创建一个名为
user
的角色- 执行命令:
openstack role create user --description "普通用户"
- 执行命令:
- 查看现有角色列表
- 执行命令:
openstack role list
- 执行命令:
- 结果说明:该命令列出了当前Keystone中所有角色,包括admin、member、reader和user。每个角色有唯一ID,用于权限管理。admin为最高权限,user为自定义角色,可用于分配特定访问权限,表明身份认证体系已配置完成。
3.4.4 创建域与查看域列表
-
创建一个名为
huawei
的域- 执行命令:
openstack domain create --description "华为公司域" huawei
- 执行命令:
-
查看现有域列表
- 执行命令:
openstack domain list
- 结果说明:该命令显示当前Keystone中所有域,包括默认域(Default)和新增的“huawei”域。新域已成功创建并启用,描述为“华为公司域”,表明多租户环境配置完成,可用于隔离不同组织的用户与资源。
- 执行命令:
3.4.5 创建用户与查看用户列表
-
创建一个名为
huawei
的用户- 执行命令:
openstack user create --domain default --password-prompt huawei
- 结果说明:该命令成功创建名为“huawei”的用户,归属默认域(default),系统提示输入密码并确认。输出显示用户ID已生成,状态启用,密码未设置过期时间,options为空,表明用户创建成功,可后续分配角色和项目权限。
- 执行命令:
-
查看现有用户列表
- 执行命令:
openstack user list
- 结果说明:该命令列出了当前Keystone中的所有用户,显示有两个用户:admin和huawei,分别对应其唯一ID。表明用户创建成功,身份认证系统正常运行,可进行后续角色分配和权限管理操作。
- 执行命令:
4. 实战总结
- 本次实战在欧拉集群主节点Euler01上成功部署并配置了OpenStack Keystone服务。通过安装软件包、创建数据库、配置文件修改及服务初始化,完成了身份认证系统的核心搭建。使用
keystone-manage
完成数据库同步、Fernet密钥生成及管理员引导,并通过Apache发布服务。经环境变量加载与openstack token issue
验证,认证功能正常。后续创建了域、项目、用户和角色,验证了多租户管理能力。整个过程涵盖安装、配置、初始化与测试,实现了对OpenStack的统一身份认证与权限控制,为云平台安全运行奠定了坚实基础。