OpenStack-Keystone_认证组件
Keystone-简介
1、官网地址
https://docs.openstack.org/keystone/rocky/install/keystone-install-rdo.html
2、图文简介
OpenStack Keystone 是 OpenStack 的核心组件之一,负责身份认证(Authentication)、授权(Authorization)和服务目录(Service Catalog)管理。它是 OpenStack 的“身份服务”,为其他 OpenStack 组件提供统一的身份验证和访问控制功能。
3、Keystone-核心功能
1、身份认证(Authentication):
验证用户身份,确保用户是合法的。
支持多种认证方式,如用户名/密码、Token、LDAP、OAuth 等。
2、授权(Authorization):
管理用户的权限,确保用户只能访问其被授权的资源。
基于角色(Role)的访问控制(RBAC)。
3、服务目录(Service Catalog):
提供 OpenStack 中所有服务的端点(Endpoint)信息。
用户可以通过服务目录查找和访问 OpenStack 的各种服务(如 Nova、Glance、Cinder 等)。
4、用户管理:
管理用户(User)、项目(Project)、域(Domain)和组(Group)。
支持多租户(Multi-Tenancy)架构。
5、Token 管理:
生成和管理 Token,用于用户会话的验证和授权。
4、Keystone-核心概念
1、User(用户):
使用 OpenStack 服务的个体或系统。
每个用户有一个唯一的用户名和密码。
2、Project(项目):
资源的逻辑分组,用于隔离不同用户或团队的资源。
在早期版本中称为 Tenant(租户)。
3、Domain(域):
用于隔离用户、组和项目的更高层次的逻辑容器。
支持多域架构,适用于大规模部署。
4、Role(角色):
定义用户的权限。
用户通过角色获得对资源的访问权限。
5、Token(令牌):
用于验证用户身份的字符串。
Token 可以是持久的(Persistent)或临时的(Ephemeral)。
6、Service(服务):
OpenStack 中的功能模块,如 Nova(计算)、Glance(镜像)、Cinder(块存储)等。
7、Endpoint(端点):
服务的访问地址,通常是一个 URL。
包括 Public URL、Internal URL 和 Admin URL。
8、Catalog(目录):
包含所有服务的端点信息,用户可以通过目录查找服务。
5、Keystone-架构下组件:
1、Identity(身份):
管理用户、组、项目和域的信息。
支持多种后端存储,如 SQL 数据库、LDAP 等。
2、Resource(资源):
管理项目、域和分组的资源。
3、Assignment(分配):
管理用户、组和角色之间的关联。
4、Token(令牌):
生成和验证 Token。
支持多种 Token 格式,如 UUID、PKI、Fernet 等。
5、Catalog(目录):
管理服务的端点信息。
6、Policy(策略):
定义访问控制规则,基于 JSON 格式的策略文件。
6、Keystone-工作流程
1、用户认证:
用户提供凭证(如用户名/密码)进行认证。
Keystone 验证凭证并生成 Token。
2、服务访问:
用户使用 Token 访问 OpenStack 服务。
服务向 Keystone 验证 Token 的有效性。
3、权限检查:
Keystone 检查用户是否具有访问资源的权限。
如果权限验证通过,用户可以使用服务。
7、Keystone-配置与部署流程
1、安装 Keystone:
使用包管理工具(如 apt 或 yum)安装 Keystone。
例如:apt install keystone。
2、配置数据库:
Keystone 需要一个数据库(如 MySQL 或 PostgreSQL)来存储数据。
配置数据库连接信息。
3、配置认证后端:
选择认证后端(如 SQL、LDAP)。
配置认证参数。
4、启动服务:
启动 Keystone 服务并设置为开机自启。
例如:systemctl start keystone。
5、创建初始用户和角色:
使用 openstack 命令行工具创建管理员用户和角色。
8、Keystone-常用命令
8-1、创建用户
openstack user create --domain default --password-prompt username
8-2、创建项目
openstack project create --domain default project_name
8-3、创建角色
openstack role create role_name
8-4、分配角色
openstack role add --project project_name --user username role_name
8-5、列出服务
openstack service list
8-6、列出端点
openstack endpoint list
9、Keystone-应用场景
多租户管理:为不同用户或团队分配独立的资源。
权限控制:通过角色管理用户的访问权限。
服务发现:通过服务目录查找和访问 OpenStack 服务。
集成外部认证:支持 LDAP、OAuth 等外部认证系统。
Keystone-组件部署
1、数据库配置
1-1、数据库配置
mysql -u root -p
CREATE DATABASE keystone;
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone' @'localhost' IDENTIFIED BY 'keystone' ;
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone' @'%' IDENTIFIED BY 'keystone' ;
flush privileges;
1-2、数据库用户创建完成后,进行结果校验
2、Keystone-软件安装
2-1、安装命令
yum install -y openstack-keystone httpd mod_wsgi
2-2、安装出现依赖报错
rpm -Uvh --oldpackage qpid-proton-c-0.22.0-1.el7.x86_64.rpm
rpm 进行低版本软件包安装
--nodeps --force 跳过依赖检测
2-3、安装完成后进行检验
3、keystone-软件配置
3-1、配置keystone 文件
cp /etc/keystone/keystone.conf{,.bak}
3-2、编辑配置文件
vim /etc/keystone/keystone.conf
[DEFAULT]
transport_url = rabbit://openstack:openstack@192.168.8.14:5672
[database]
connection = mysql+pymysql://keystone:keystone@192.168.8.14/keystone
[token]
provider = fernet
grep -n '^[a-z]' /etc/keystone/keystone.conf
3-3、消息队列配置
3-4、数据库服务配置
3-5、token 令牌配置
3-6、修改完成后进行验证
grep -ni '^[a-Z]' /etc/keystone/keystone.conf
-i: 忽略大小写得不同,所以大小写视为相同
-n: 顺便输出行号
Keystone-初始化信息操作
1、同步数据库信息
2、到数据库中教研一下数据库表是否存在 keystone 登录数据库,user keystone 库,show tables
3、退出数据库,然后初始化认证信息
4、认证完成后,查看对应的认证信息是否生效
5、为admin 用户进行权限的添加
keystone-manage bootstrap --bootstrap-password admin\
--bootstrap-admin-url http://192.168.200.14:5000/v3/ \
--bootstrap-internal-url http://192.168.200.14:5000/v3/ \
--bootstrap-public-url http://192.168.200.14:5000/v3/ \
--bootstrap-region-id RegionOne
Keystone-HTTP服务配置
1、进入http 服务的配置文件中,备份对应的配置文件,编写配置信息
2、配置对应的 ServerName 信息
3、创建一个软连接
4、 启动httpd 服务,查看对应的状态是否已经启动成功
5、设置为 开机自启动
6、检查一下 启动的端口
Keystone-权限配置
1、配置用户信息
export OS_USERNAME=admin
export OS_PASSWORD=admin
export OS_PROJECT_NAME=admin
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_DOMAIN_NAME=Default
export OS_AUTH_URL=http://192.168.200.14:5000/v3
export OS_IDENTITY_APT_VERSION=3
2、查看对应的用户信息
注意:这里如果提示 openstack 命令没有找到,需要安装一下 openstackclient 客户端
yum install -y python2-openstackclient
3、执行openstack 查询的时候提示找不到 35357 端口,在 /etc/httpd/conf.d/wsgi-keystone.conf 中添加35357 端口监听。(R版官网提示没有这个端口了,但是 openstack 操作的时候 会报错,先加上吧)
Listen 35357
<VirtualHost *:35357>
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
<IfVersion >= 2.4>
ErrorLogFormat "%{cu}t %M"
</IfVersion>
ErrorLog /var/log/httpd/keystone-error.log
CustomLog /var/log/httpd/keystone-access.log combined
<Directory /usr/bin>
<IfVersion >= 2.4>
Require all granted
</IfVersion>
<IfVersion < 2.4>
Order allow,deny
Allow from all
</IfVersion>
</Directory>
</VirtualHost>
4、创建一个service 项目
5、创建一个demo 项目
6、openstack project 帮助文档查看
7、openstack 项目创建完成后,进行对应项目列表的查询
8、为 domain 项目创建一个 普通用户
9、验证用户是否创建成功
10、创建user角色
11、讲角色和用户 添加到对应的项目 demo 中
12、效果测试
12-1、取消环境变量
12-2、使用admin 用户验证,获取 35357端口 管理员用户的token
12-3、使用demo 用户验证,获取 5000端口 普通用户的token
Keystone-工作使用
1、创建admin 用户的变量脚本
admin-openstack.sh
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
export OS_AUTH_URL=http://192.168.200.14:35357/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
demo-openstack.sh
export OS_USERNAME=demo
export OS_PASSWORD=demo
export OS_PROJECT_NAME=demo
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_DOMAIN_NAME=Default
export OS_AUTH_URL=http://192.168.200.14:5000/v3
export OS_IDENTITY_API_VERSION=3
测试效果
source admin-openstack.sh
openstack token issue
source demo-openstack.sh
openstack token issue
2、日志文件检查
cd /var/log/keystone
grep 'ERROR' keystone.log
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)