我真的很想了解关于端点、区域、租户、服务、用户和角色之间关系的 keystone 的底层。我试图找到相关文件,但遗憾的是,失败了。
任何人都可以提供任何指示或解释吗?
Keystone 是 OpenStack 的身份管理服务。
本质上,它的作用是向用户授予代币,无论他们是人、服务还是任何东西。
如果您在 OpenStack 的任何地方进行 API 查询,如果您被允许进行该 API 查询,keystone 的 API 就是它被发现的方式。
让我们从地上爬起来。
用户。今天 Keystone 的用户通常是人。目前还没有足够细粒度的 ACL 支持来真正将 OpenStack 中的许多用户称为传统意义上的“服务”帐户。但是作为 OpenStack 基础架构本身的一部分,有一个服务帐户用作与 Keystone API 的回程连接。我们将避免深入研究该异常用户。
当用户向 Keystone 进行身份验证时(您打开 OS_AUTH_URL 与 keystone 对话..通常是 keystone api 框的端口 5000),用户说“我是用户 X,我有密码 Y,我属于租户 Z” .
X 可以是用户名或用户 ID(用户的唯一 uuid) Y 是密码,但您也可以使用令牌进行身份验证。Z 是租户名称或租户 ID(租户的唯一 uuid)。在过去的 Keystone API 中,您不需要指定租户名称,但如果您不这样做,您的令牌将不会很有用,因为令牌不会与您的租户相关联,然后您将被拒绝任何 ACL租户。
所以......用户是一个相当明显的事情。密码是相当明显的事情。但什么是租户?
那么租户也称为项目。事实上,已经多次尝试将名称命名为租户或项目,但由于无法只使用一个术语,它们的含义相同。就 API 而言,项目是租户。因此,如果您登录到 Horizon,您将看到您的项目的下拉菜单。每个项目对应一个租户 ID。您的令牌也与特定的租户 ID 相关联。因此,如果您打算在用户所连接的多个租户上工作,您可能需要为一个用户提供多个令牌。
现在,假设您将用户添加到 admin 的租户 ID。该用户是否获得管理员权限?答案是不。这就是角色发挥作用的地方。虽然管理员租户中的用户可能有权访问管理员虚拟机和启动虚拟机的配额,但用户无法执行诸如查询用户列表的 keystone 之类的操作。但是,如果您向该用户添加管理员角色,他们将被赋予在 keystone API 和其他 API 中充当管理员的 ACL 权限。因此,将租户视为一种资源组,将角色视为 ACL 集。
区域更像是在 openstack 基础设施环境中对物理资源进行地理分组的方式。假设您有两个分段的数据中心。您可能会在您的 openstack 环境的区域 A 中放置一个,而在区域 B 中放置另一个。就其实用性而言,区域正在迅速发展,尤其是在最近的 openstack 版本中引入了单元和域。除非您打算构建大型云,否则您可能不需要精通这些知识。
keystone 提供了最后一个有用的东西。目录。keystone 目录有点像 openstack API 的电话簿。每当您使用命令行客户端时,例如当您可能调用 nova list 列出您的实例时,nova 首先对 keystone 进行身份验证并为您获取使用 API 的令牌,但它也会立即向 keystone 目录询问 API 端点列表。对于 keystone、cinder、nova、glance、swift 等。nova 只会使用 nova-api 端点,但根据您的查询,您可能会使用 keystone 管理 API 端点...。我们会回到那个. 但从本质上讲,该目录是 API 在世界范围内的规范信息来源。这样,您只需要告诉客户端 keystone 的公共 API 端点在哪里,它就可以从目录中找出其余部分。
现在,我参考了公共 API 和 keystone 的管理 API。
是的,keystone 有两个 API……有点。它在端口 5000 上运行一个 API,另一个在 32000 范围内运行。5000 是公共端口。在这里您可以执行诸如查找目录之类的操作,并请求一个令牌,以便您可以与其他 API 对话。它非常简单,而且有些硬。管理 API 将用于更改用户密码或向用户添加新角色等操作。
很直接?
这是我在 openstack keystone 中理解租户、用户、角色、权限的方式。你可能也会觉得它很有趣。
我会试着用外行的语言来表达。
服务——Openstack 需要大量的服务来运行云基础设施(计算、存储和网络)。为了使它们同时顺利地进行细粒度控制,Openstack 使用了服务的概念。服务使最终用户能够操纵这 3 个核心资源之一。例如:对于存储,使用 cinder 和 swift 服务。这些服务还可以配置为在后端使用 Ceph 或 gluster。
端点——你“进入”openstack 服务以做一些有用或破坏性的事情的点。服务可能正在运行,但要“进入”,需要一个端点,它看起来像http://my-fancy-IP:hard-to-remember-port-number/v3.0。那么,在 Openstack 系统中没有为特定的 openstack 服务创建端点吗?无法访问该服务。
地区 - 与地理或位置无关。一个用于划分/分组完整的 openstack 部署的术语,如果你碰巧有很多。划分可能基于物理服务器的位置。
用户 - 最终用户或您。
项目/租户 - 用于分离资源(计算、存储网络)的容器
域 - 项目、组和用户组。为用户提供资源分离,可以容纳多个项目。具有域管理员角色的用户可以创建/删除/更新该特定域中的任何项目、用户、组等。
角色 - 您对 openstack 服务执行任何操作的权利。想想角色,想想用户。
Token - 这是 keystone 给你的一个 ID(一个长字符串)。您可以使用此令牌根据分配给您的角色访问任何 openstack 服务。
例如,您可以请求 nova 并说,嘿 nova 我从 keystone 获得了 token1。我想删除“永远不要删除我”服务器。Nova 拿着 token1 说,嘿,keystone,这个用户有 token1,想删除服务器“永远不要删除我”。Keystone,查看 token1,根据分配给用户的角色,会说, ok nova 允许/不允许用户删除 'don't-ever-delete-me-ever' 服务器。