十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

OpenStack Keystone认证服务安装配置实战指南

OpenStack Keystone认证服务安装配置实战指南 这次我们来看一个 OpenStack 核心组件——Keystone 认证服务的安装与配置实战。对于任何想要搭建私有云、学习云平台架构或者需要在本地环境验证 OpenStack 功能的开发者来说Keystone 都是必须跨过的第一道门槛。它负责整个云平台的用户、角色、项目和服务的身份验证与授权是 OpenStack 的“大脑”和“门卫”。这篇文章的重点不是讲复杂的认证理论而是提供一套清晰、可落地的“无脑操作”指南。我们将从零开始在一个干净的 Linux 环境以 Ubuntu 22.04 为例上完成 Keystone 服务的安装、数据库配置、服务启动和基础功能验证。整个过程会重点关注命令执行、配置文件修改和常见错误的排查确保你跟着做就能跑通。如果你关心的是如何在单机或实验环境中快速部署 Keystone、需要哪些前置依赖、服务启动后如何验证、以及遇到“Internal Server Error”或数据库连接失败时怎么办那么这篇文章可以直接收藏备用。我们将按照“环境准备 - 数据库初始化 - 服务安装与配置 - 启动与验证 - 问题排查”的顺序一步步拆解整个流程。1. 核心能力速览在动手之前我们先快速了解 Keystone 是什么以及这次实验的核心目标。能力项说明项目类型OpenStack 身份认证服务属于 IaaS 云平台核心组件。核心功能管理用户Users、项目Projects、角色Roles、服务目录Catalog和令牌Tokens为其他 OpenStack 服务如 Nova, Glance提供统一的认证和授权。实验环境单节点部署All-in-One适用于学习、开发和测试。生产环境需要高可用架构。推荐硬件虚拟机或物理机至少 2核 CPU4GB 内存20GB 磁盘空间。本次实验在满足此配置的 Ubuntu 22.04 虚拟机上完成。数据库使用 MariaDB/MySQL 作为后端数据库存储身份信息。消息队列使用 RabbitMQ 进行服务间通信某些操作需要。启动方式通过 Systemd 管理apache2服务Keystone 以 WSGI 应用形式运行。管理工具主要使用openstack命令行客户端进行交互。是否支持 API是提供完整的 RESTful API所有操作最终都通过 API 完成。适合场景OpenStack 学习入门、功能验证、开发测试、小型私有云 PoC概念验证。简单来说这次实验就是要在你的机器上安装并启动一个 Keystone 服务然后能用命令行创建用户、项目并成功获取到访问令牌。这标志着你的 OpenStack 认证基石已经搭建完成。2. 适用场景与使用边界Keystone 是 OpenStack 的入口但它本身不直接提供计算、存储或网络资源。理解它的适用边界能帮助你更好地规划学习或部署路径。它非常适合以下场景学习 OpenStack 架构通过亲手搭建 Keystone你能最直观地理解 OpenStack 的认证、授权和服务发现机制。开发与集成测试如果你在开发需要与 OpenStack 集成的应用一个本地的 Keystone 服务是完美的沙盒环境。小型实验环境部署用于搭建一个完整的、但非生产级的 OpenStack 环境验证云主机创建、镜像上传等完整流程。理解云身份管理学习多租户Multi-tenancy模型下的用户、项目、角色权限设计。需要注意的使用边界非生产级高可用本文的单节点部署不提供数据库、消息队列和服务进程的高可用不能直接用于承载关键业务。性能极限单机部署的性能和并发能力有限主要用于功能验证。安全强化实验配置采用了简化的密码和权限设置。在生产环境中必须强化数据库密码、Keystone 令牌机制、SSL/TLS 加密和防火墙策略。依赖其他服务Keystone 可以独立运行并提供认证功能但要发挥 OpenStack 的全部能力它必须与 Nova、Glance、Neutron 等服务协同工作。合规与安全提醒在实验环境中使用弱密码是可以接受的但务必确保该环境与公网隔离。如果计划未来用于测试外部应用务必修改所有默认密码和令牌并考虑启用 HTTPS。任何涉及用户凭证的操作都应在受控环境中进行。3. 环境准备与前置条件开始之前请确保你有一个干净的 Linux 环境。我们以Ubuntu 22.04 LTS为例其他发行版如 CentOS Stream 9的命令和包名会有所不同。3.1 系统与网络要求操作系统Ubuntu 22.04 LTS 服务器版无需桌面环境。网络主机需要能访问互联网以下载软件包。确保防火墙如ufw未阻断后续需要用到的端口如 HTTP 的 5000, 35357。主机名建议设置一个完整的主机名FQDN例如controller.example.com。这会影响某些服务的配置。# 设置主机名临时重启失效 sudo hostnamectl set-hostname controller # 编辑 /etc/hosts添加一行 # 127.0.1.1 controller3.2 基础工具安装更新系统并安装必要的工具。sudo apt update sudo apt upgrade -y sudo apt install -y net-tools curl wget vim git3.3 配置 NTP 时间同步OpenStack 服务对时间一致性要求很高务必修正时区并启用 NTP。# 设置时区为上海或你的本地时区 sudo timedatectl set-timezone Asia/Shanghai # 安装并启用 chrony 作为 NTP 客户端 sudo apt install -y chrony sudo systemctl enable chrony sudo systemctl start chrony # 验证时间同步状态 chronyc sources完成以上步骤后你的基础环境就准备好了。接下来我们将安装 Keystone 所依赖的核心服务数据库和消息队列。4. 安装核心依赖数据库与消息队列Keystone 需要后端数据库来存储其数据用户、项目等并可能使用消息队列进行内部通信。4.1 安装与配置 MariaDB安装 MariaDB 服务器sudo apt install -y mariadb-server python3-pymysql安全初始化 MariaDB可选但推荐sudo mysql_secure_installation按照提示操作设置 root 密码实验环境可简单设置如KEYSTONE_DBPASS移除匿名用户禁止 root 远程登录等。创建 Keystone 数据库和用户 首先登录 MariaDBsudo mysql -u root -p输入你设置的 root 密码。然后在 MariaDB 提示符下执行以下 SQL 语句-- 创建 keystone 数据库 CREATE DATABASE keystone; -- 创建 keystone 数据库用户并授予权限 -- 请将 ‘KEYSTONE_DBPASS’ 替换为一个强密码 GRANT ALL PRIVILEGES ON keystone.* TO keystonelocalhost IDENTIFIED BY KEYSTONE_DBPASS; GRANT ALL PRIVILEGES ON keystone.* TO keystone% IDENTIFIED BY KEYSTONE_DBPASS; -- 刷新权限 FLUSH PRIVILEGES; -- 退出 EXIT;4.2 安装与配置 RabbitMQ消息队列用于 OpenStack 服务间的协调。安装 RabbitMQ 服务器sudo apt install -y rabbitmq-server启动并启用 RabbitMQsudo systemctl enable rabbitmq-server sudo systemctl start rabbitmq-server添加 OpenStack 用户这里以openstack用户为例密码设为RABBIT_PASSsudo rabbitmqctl add_user openstack RABBIT_PASS # 授予该用户对所有虚拟主机的配置、写、读权限 sudo rabbitmqctl set_permissions openstack .* .* .*至此Keystone 运行所需的外部依赖已就绪。接下来进入 Keystone 本身的安装与配置环节。5. Keystone 服务安装与配置这是最核心的步骤我们将安装 Keystone 软件包并对其进行详细配置。5.1 安装 Keystone 及相关组件Ubuntu 22.04 的默认仓库提供了 OpenStack Yoga 版本的软件包适合我们的实验。# 安装 keystone 以及 apache2 和 mod_wsgi用于托管 WSGI 应用 sudo apt install -y keystone apache2 libapache2-mod-wsgi-py3 # 安装 openstack 命令行客户端用于后续管理 sudo apt install -y python3-openstackclient5.2 配置 KeystoneKeystone 的主配置文件是/etc/keystone/keystone.conf。我们需要修改它。备份原始配置好习惯sudo cp /etc/keystone/keystone.conf /etc/keystone/keystone.conf.bak编辑配置文件sudo vim /etc/keystone/keystone.conf找到以下部分并进行修改。你可以使用vim的搜索功能按/然后输入关键词。在[database]部分配置数据库连接。将KEYSTONE_DBPASS替换为你之前为keystone数据库用户设置的密码。[database] # ... connection mysqlpymysql://keystone:KEYSTONE_DBPASScontroller/keystone在[token]部分配置令牌提供者。我们使用 Fernet 令牌它无需持久化到数据库。[token] # ... provider fernet可选为了简化实验你还可以在[DEFAULT]部分调整日志级别以便在出错时看到更详细的信息。[DEFAULT] # ... log_dir /var/log/keystone debug True5.3 初始化数据库使用keystone-manage命令来填充数据库表结构。sudo keystone-manage db_sync成功标志命令执行后没有报错并输出一系列INFO日志显示创建了哪些表。你可以通过登录 MariaDB 查看keystone数据库中的表来验证。sudo mysql -u keystone -p -D keystone -e SHOW TABLES;5.4 初始化 Fernet 密钥仓库Fernet 令牌用于加密和验证令牌需要初始化密钥。sudo keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone sudo keystone-manage credential_setup --keystone-user keystone --keystone-group keystone5.5 引导身份服务Bootstrap这一步将创建初始的管理员账户、服务项目和端点Endpoint。这是一个关键步骤。sudo 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请将ADMIN_PASS替换为一个强密码例如MY_ADMIN_PASS这是后续管理员用户admin的密码。controller是你的主机名或 IP 地址。RegionOne是默认区域。6. 配置 Apache HTTP Server 托管 KeystoneKeystone 通过 WSGI 接口运行由 Apache 托管。配置 Apache 虚拟主机 编辑 Keystone 的 Apache 配置文件。sudo vim /etc/apache2/sites-available/keystone.conf将以下内容写入该文件如果文件已存在内容请替换Listen 5000 Listen 35357 VirtualHost *:5000 WSGIDaemonProcess keystone-public processes5 threads1 userkeystone groupkeystone display-name%{GROUP} WSGIProcessGroup keystone-public WSGIScriptAlias / /usr/bin/keystone-wsgi-public WSGIApplicationGroup %{GLOBAL} WSGIPassAuthorization On ErrorLogFormat %{cu}t %M ErrorLog /var/log/apache2/keystone-error.log CustomLog /var/log/apache2/keystone-access.log combined Directory /usr/bin Require all granted /Directory /VirtualHost VirtualHost *:35357 WSGIDaemonProcess keystone-admin processes5 threads1 userkeystone groupkeystone display-name%{GROUP} WSGIProcessGroup keystone-admin WSGIScriptAlias / /usr/bin/keystone-wsgi-admin WSGIApplicationGroup %{GLOBAL} WSGIPassAuthorization On ErrorLogFormat %{cu}t %M ErrorLog /var/log/apache2/keystone-error.log CustomLog /var/log/apache2/keystone-access.log combined Directory /usr/bin Require all granted /Directory /VirtualHost启用虚拟主机并重启 Apachesudo a2ensite keystone sudo systemctl restart apache2验证 Apache 服务状态sudo systemctl status apache2确保状态为active (running)。同时检查端口监听情况sudo netstat -tlnp | grep -E ‘:(5000|35357)’应该能看到apache2进程在监听 5000 和 35357 端口。7. 功能测试与效果验证服务启动后最关键的一步是验证它是否正常工作。我们将使用openstack命令行客户端进行操作。7.1 配置管理员环境变量为了避免每次命令都输入密码和端点信息我们设置环境变量。创建一个文件例如admin-openrcvim admin-openrc将以下内容写入并替换ADMIN_PASS为你之前引导时设置的密码controller为你的主机 IP 或域名。export OS_USERNAMEadmin export OS_PASSWORDADMIN_PASS export OS_PROJECT_NAMEadmin export OS_USER_DOMAIN_NAMEDefault export OS_PROJECT_DOMAIN_NAMEDefault export OS_AUTH_URLhttp://controller:5000/v3 export OS_IDENTITY_API_VERSION3然后加载这个环境变量文件source admin-openrc7.2 基础功能验证测试现在我们可以执行一系列命令来测试 Keystone。测试 1获取认证令牌这是最直接的测试。如果能成功获取令牌说明认证服务基本正常。openstack token issue预期输出应该返回一个 JSON 格式的令牌信息包含id令牌字符串、expires_at过期时间、project_id、user_id等字段。成功标志命令成功执行并返回令牌信息没有报错。测试 2列出用户验证是否有权限查询用户列表。openstack user list预期输出至少能看到admin用户。成功标志列出用户列表没有Forbidden或Unauthorized错误。测试 3创建新项目租户验证项目管理功能。openstack project create --domain default --description “Demo Project” demo预期输出返回新创建项目的详细信息包括其 ID 和名称。成功标志命令成功执行项目被创建。测试 4创建新用户并分配角色这是一个完整的用户-项目-角色权限链测试。# 创建用户 ‘myuser’密码设为 ‘MYUSER_PASS’ openstack user create --domain default --password MYUSER_PASS myuser # 为用户 ‘myuser’ 在项目 ‘demo’ 上分配 ‘_member_’ 角色 openstack role add --project demo --user myuser _member_预期输出两条命令都应成功执行无错误。成功标志用户创建成功角色分配成功。可以通过openstack user list和openstack role assignment list --user myuser --project demo来验证。测试 5使用新用户获取令牌验证新用户的认证是否生效。# 临时切换到新用户环境先取消之前的管理员变量 unset OS_USERNAME OS_PASSWORD OS_PROJECT_NAME export OS_USERNAMEmyuser export OS_PASSWORDMYUSER_PASS export OS_PROJECT_NAMEdemo # 再次获取令牌 openstack token issue预期输出成功获取到属于myuser和demo项目的令牌。成功标志获取令牌成功且返回信息中的user_id和project_id对应新用户和新项目。如果以上测试全部通过那么恭喜你你的 Keystone 认证服务已经成功安装并运行8. 常见问题与排查方法在部署过程中你可能会遇到一些问题。以下是常见问题的排查思路。问题现象可能原因排查方式解决方案openstack token issue返回401 Unauthorized1. 管理员密码错误。2. 环境变量OS_AUTH_URL指向错误。3. Apache 服务未运行或端口未监听。4. 数据库连接失败导致用户验证不通过。1. 检查admin-openrc文件中的密码。2. 运行curl -v http://controller:5000/v3看是否返回 Keystone 版本信息。3. 检查sudo systemctl status apache2和sudo netstat -tlnp。4. 查看 Keystone 日志/var/log/apache2/keystone-error.log。1. 修正密码。2. 修正 URL 中的主机名或 IP。3. 重启 Apachesudo systemctl restart apache2。4. 检查/etc/keystone/keystone.conf中的数据库连接字符串。keystone-manage db_sync失败1. 数据库用户keystone权限不足或密码错误。2. MariaDB 服务未启动。3. Python 数据库驱动pymysql未安装。1. 尝试用mysql -u keystone -p手动登录。2. 检查sudo systemctl status mariadb。3. 确认已安装python3-pymysql。1. 重新在 MariaDB 中授予权限GRANT ALL PRIVILEGES ...。2. 启动 MariaDBsudo systemctl start mariadb。3. 安装驱动sudo apt install python3-pymysql。Apache 启动失败或端口冲突1. 5000 或 35357 端口已被其他程序占用。2.keystone.conf语法错误。3. WSGI 脚本路径错误。1. sudo netstat -tlnpgrep :5000。br2.sudo apache2ctl configtest检查配置。br3. 检查/usr/bin/keystone-wsgi-public 文件是否存在。命令执行慢或超时1. 主机名解析问题controller无法解析。2. 防火墙阻止了本地回环或端口访问。1.ping controller和cat /etc/hosts。2. 检查sudo ufw status如果启用。1. 在/etc/hosts中确保127.0.0.1 controller或127.0.1.1 controller存在。2. 临时关闭防火墙或添加规则sudo ufw allow 5000。创建用户或项目时提示权限不足当前环境变量不是管理员身份。运行 envgrep OS_ 查看当前环境变量。日志中出现Internal Server Error通常是应用层错误如数据库操作异常、Fernet 密钥问题。查看详细的错误日志sudo tail -f /var/log/apache2/keystone-error.log。根据日志具体错误信息解决。常见方法是重新初始化数据库 (db_sync) 和 Fernet 密钥。最重要的排查工具是日志。遇到任何问题首先查看Apache 错误日志/var/log/apache2/keystone-error.logKeystone 自身日志/var/log/keystone/keystone.log如果配置了9. 最佳实践与使用建议完成基础安装后以下建议能帮助你更稳定、更安全地使用这个实验环境。脚本化部署将上述所有命令整理成一个 Shell 脚本。这样下次重建环境时可以一键执行避免手动操作出错。配置文件版本管理将修改后的/etc/keystone/keystone.conf等配置文件备份到代码仓库如 Git。方便对比和回滚。环境变量管理为不同的用户admin, demo创建不同的-openrc文件。永远不要将包含密码的-openrc文件提交到版本库。服务状态监控可以编写简单的监控脚本定期检查 Keystone 服务的端口和进程状态。#!/bin/bash if ! curl -s http://localhost:5000/v3 | grep -q “version”; then echo “Keystone API might be down!” systemctl restart apache2 fi为后续服务做准备Keystone 运行成功后你就可以继续安装其他 OpenStack 服务了如 Glance, Nova, Neutron。每个服务都需要在 Keystone 中注册创建服务用户、服务和端点这个过程会频繁使用到我们刚刚设置的admin凭证。理解令牌OpenStack 命令行客户端获取的令牌默认有效期为 1 小时。过期后需要重新认证再次source admin-openrc并执行命令会自动获取新令牌。实验环境清理如果想从头再来可以按以下顺序清理删除数据库sudo mysql -u root -p -e “DROP DATABASE keystone;”删除数据库用户sudo mysql -u root -p -e “DROP USER ‘keystone’’localhost’; DROP USER ‘keystone’’%’;”卸载软件包sudo apt purge -y keystone apache2 libapache2-mod-wsgi-py3 python3-openstackclient mariadb-server rabbitmq-server删除配置文件和数据目录。10. 总结与下一步通过以上步骤我们成功在 Ubuntu 22.04 上完成了 OpenStack Keystone 认证服务的单节点部署。整个过程的核心可以概括为安装依赖DB, MQ - 安装配置 Keystone - 初始化数据库和密钥 - 通过 Apache 托管服务 - 使用 CLI 验证功能。这个实验环境最直接的价值是你拥有了一个完全受控的 OpenStack 认证中心。你可以在此之上继续搭建完整的 OpenStack按照官方文档或教程依次安装 Glance镜像服务、Nova计算服务、Neutron网络服务等构建一个迷你云平台。深入理解 API使用curl命令直接调用 Keystone 的 RESTful API替代openstack客户端更底层地学习其交互机制。进行开发测试如果你在开发需要集成 OpenStack 身份认证的应用这个本地 Keystone 就是完美的沙箱。最容易踩的坑通常集中在数据库连接、环境变量配置和Apache服务配置这三个环节。务必确保每一步的命令都执行成功并通过日志和简单的curl测试及时验证。建议将本文中的命令、配置和排查方法保存下来。在后续安装其他 OpenStack 服务时你会发现流程非常相似创建数据库、创建服务用户、注册服务与端点。掌握了 Keystone你就拿到了打开 OpenStack 世界的第一把钥匙。
返回列表