OpenStack 每日学习课程
日期: 2026-03-27(第 1 天) 今日主题: Keystone — OpenStack 的身份认证与授权中心
一、核心概念:Keystone 是什么?
🏨 类比:酒店前台
想象你入住一家大型酒店。前台(Keystone)负责:
- 验证你的身份(你是谁?)
- 给你一张房卡(Token)
- 房卡决定你能进哪些房间(权限)
在 OpenStack 里,每个服务(Nova、Neutron、Cinder…)都是酒店里的不同设施。你必须先通过前台拿到房卡,才能使用这些设施。
Keystone 的三大核心职责:
- 身份认证(Authentication) — 确认"你是谁"(用户名/密码、Token、LDAP 等)
- 授权(Authorization) — 确认"你能做什么"(基于角色 RBAC)
- 服务目录(Service Catalog) — 告诉你"各服务的地址在哪里"(类似电话黄页)
二、工作原理:关键组件与协作流程
核心概念速览
| 概念 | 说明 |
|---|---|
| User(用户) | 操作 OpenStack 的人或程序 |
| Project(项目) | 资源隔离的逻辑单元,类似"部门" |
| Role(角色) | 权限集合,如 admin、member |
| Token | 认证成功后颁发的临时凭证(有效期默认 1 小时) |
| Domain | 更高层的隔离单元,管理多个 Project 和 User |
| Endpoint | 各服务的 API 地址(public/internal/admin) |
典型认证流程
用户 → [POST /v3/auth/tokens] → Keystone
↓ 验证用户名+密码
↓ 生成 Token(X-Auth-Token)
↓ 返回 Token + Service Catalog
用户 → [携带 Token] → Nova/Neutron/Cinder
↓ 服务向 Keystone 验证 Token 有效性
↓ 确认权限后执行操作
三、实际应用场景
场景 1:多租户云平台
某公司搭建私有云,研发部和运维部各自独立。通过 Keystone 创建两个 Project,分别分配资源配额,互不干扰。研发工程师只能看到自己部门的虚拟机,无法访问运维部的资源。
场景 2:CI/CD 自动化部署
Jenkins 流水线需要自动创建测试虚拟机。通过 Keystone 为 Jenkins 创建一个专用服务账号,赋予最小权限(仅允许创建/删除特定 Project 内的 VM),避免权限过大带来的安全风险。
场景 3:企业 LDAP 集成
企业已有 Active Directory,不想维护两套账号体系。Keystone 支持对接 LDAP/AD,员工用公司账号直接登录 OpenStack Dashboard,实现单点登录(SSO)。
四、动手练习 & 思考题
练习(有环境的同学):
# 获取 Token
openstack token issue
# 查看服务目录
openstack catalog list
# 创建新项目和用户
openstack project create --domain default dev-team
openstack user create --domain default --password secret123 dev-user
openstack role add --project dev-team --user dev-user member
思考题:
- Token 有效期只有 1 小时,如果用户正在执行一个长任务,Token 过期了会怎样?OpenStack 如何处理这个问题?
- Keystone 本身挂掉了,已经在运行的虚拟机会受影响吗?为什么?
admin角色和member角色的核心区别是什么?在生产环境中应该如何分配?
五、今日总结
| 维度 | 要点 |
|---|---|
| 是什么 | OpenStack 统一身份认证与授权服务,所有组件的"门卫" |
| 核心产出 | Token(临时凭证)+ Service Catalog(服务地址簿) |
| 关键概念 | User / Project / Role / Domain / Token / Endpoint |
| 认证流程 | 用户登录 → 获取 Token → 携带 Token 访问各服务 |
| 生产要点 | 最小权限原则、Token 有效期管理、可对接 LDAP/AD |
| 下一步 | 明天学习 Nova(计算服务),了解虚拟机是如何被创建的 |
💡 记住这句话: 在 OpenStack 的世界里,没有 Keystone 的 Token,你哪儿也去不了。