OpenStack 每日学习课程

日期: 2026-03-27(第 1 天) 今日主题: Keystone — OpenStack 的身份认证与授权中心


一、核心概念:Keystone 是什么?

🏨 类比:酒店前台

想象你入住一家大型酒店。前台(Keystone)负责:

  • 验证你的身份(你是谁?)
  • 给你一张房卡(Token)
  • 房卡决定你能进哪些房间(权限)

在 OpenStack 里,每个服务(Nova、Neutron、Cinder…)都是酒店里的不同设施。你必须先通过前台拿到房卡,才能使用这些设施。

Keystone 的三大核心职责:

  1. 身份认证(Authentication) — 确认"你是谁"(用户名/密码、Token、LDAP 等)
  2. 授权(Authorization) — 确认"你能做什么"(基于角色 RBAC)
  3. 服务目录(Service Catalog) — 告诉你"各服务的地址在哪里"(类似电话黄页)

二、工作原理:关键组件与协作流程

核心概念速览

概念 说明
User(用户) 操作 OpenStack 的人或程序
Project(项目) 资源隔离的逻辑单元,类似"部门"
Role(角色) 权限集合,如 adminmember
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

思考题:

  1. Token 有效期只有 1 小时,如果用户正在执行一个长任务,Token 过期了会怎样?OpenStack 如何处理这个问题?
  2. Keystone 本身挂掉了,已经在运行的虚拟机会受影响吗?为什么?
  3. admin 角色和 member 角色的核心区别是什么?在生产环境中应该如何分配?

五、今日总结

维度 要点
是什么 OpenStack 统一身份认证与授权服务,所有组件的"门卫"
核心产出 Token(临时凭证)+ Service Catalog(服务地址簿)
关键概念 User / Project / Role / Domain / Token / Endpoint
认证流程 用户登录 → 获取 Token → 携带 Token 访问各服务
生产要点 最小权限原则、Token 有效期管理、可对接 LDAP/AD
下一步 明天学习 Nova(计算服务),了解虚拟机是如何被创建的

💡 记住这句话: 在 OpenStack 的世界里,没有 Keystone 的 Token,你哪儿也去不了。

results matching ""

    No results matching ""