(OpenStacks 身份服务)
OpenStack Identity (Keystone) 提供了一个中央目录,其中包含映射到他们可以访问的 OpenStack 服务的用户。它充当跨云操作系统的通用身份验证系统,并可与LDAP等现有后端目录服务集成。它支持多种形式的身份验证,包括标准用户名和密码凭据、基于令牌的系统和 AWS 样式(即Amazon Web Services)登录。此外,该目录还在单个注册表中提供了部署在 OpenStack 云中的所有服务的可查询列表。用户和第三方工具可以通过编程方式确定他们可以访问哪些资源。https://en.wikipedia.org/wiki/OpenStack#Identity_Service_.28Keystone.29
在 OpenStack 中,在我们开始利用可用的服务和应用程序的庞大生态系统(即:(Nova、Swift、Neutron、Glance 等))之前,我们必须首先授权我们的用户。在使用 OpenStack Identity(keystone)时,我们需要了解一些非常重要的术语。我想花点时间来解决今天在 keystone 中设置端点时最大的困惑之一。首先,让我们从定义端点开始。keystone中的端点只是一个 URL,可用于访问 OpenStack 内的服务。端点就像您(用户)使用 OpenStack服务的联系点。adminurl (我们将在下文中展示这些)适用于管理员用户,internalurl是其他服务用来相互通信的。publicurl是其他所有访问服务端点的人使用的。让我们了解以下术语:服务是任何 OpenStack 服务,例如 Nova、Swift 甚至 keystone 本身。角色是用户拥有的授权级别。令牌是一个字母数字字符串,它允许我们根据服务的访问级别或(参见上述角色)访问服务。用户就是将要访问服务的人。这传统上也可以用作服务本身使用的(服务帐户)。最后,租户实际上只是一组用户。(第 1 部分)1)首先,我们需要实际创建两个租户,我们将简单地命名为admin(这将是管理员租户,记住租户只是用户组),另一个租户将被称为 service(这是服务组,即:我们服务的租户.. 在我们的示例中,我们使用 nova服务)。
$ keystone tenant-create --name=admin --description="管理租户"$ keystone tenant-create --name=service --description="服务租户"
2)现在我们需要创建名为admin 的管理用户,密码为linuxacademy123
# keystone 用户创建 --name=admin --pass= linuxacademy123 --email= admin@linuxacedmy123
3) 现在我们需要为 OpenStack 中的管理任务创建一个名为admin 的新角色。 此admin策略的默认策略允许访问大多数服务。
# keystone role-create --name=admin
4) 我们必须为用户添加角色。 用户始终使用租户登录,并且角色分配给这些租户内的用户。 在这里,我们将在使用管理员租户登录时为管理员用户添加管理员角色。
# keystone 用户角色添加 --user=admin --tenant=admin --role=admin
(第 2 部分)在下面的示例中,我们将创建一个 Nova用户,然后将其链接到名为服务的租户,然后将其链接到管理员角色。然后,我们将创建实际的计算 (nova)服务。最后,我们将使用新创建的 nova服务的返回 ID 值创建端点。5) 创建一个名为nova 的用户。 我们将密码定义为linuxacademy123。
$ keystone user-create --name nova --pass linuxacademy123 +----------+----------------------------------+| 属性 | 值 |+----------+----------------------------------+| email | || enabled | True || id | f1a06c73141a441da5df57c46c3b69c5 || 名称 | nova || 用户名 | nova |+----------+----------------------------------+
6) 现在我们将把这个新用户nova链接到我们在第 1 部分中创建的服务租户以及我们也命名为 admin 的角色。
$ keystone 用户角色添加--用户 nova--租户服务--角色管理员
7)现在是时候创建我们的实际服务了,它将被称为nova,其服务类型是NOVA计算服务。
$ keystone service-create --name nova --type compute --description "OpenStack Compute"+-------------+----------------------------------+| 属性 | 值 |+-------------+-----------------------------------+| 描述 | OpenStack Compute || 已启用 | True || id | 5844875f25c54e52a0d5c7f6076bff86 || 名称 | nova || 类型 | 计算 |+-------------+-----------------------------------+
8) 现在,我们已到达设置的实际部分,其中我们为 nova 计算服务创建实际端点。但首先,我认为有必要提一下我看到的一个常见错误,即用户在创建这些端点时遵循 OpenStacks 文档时经常犯的错误。大多数文档都使用以下示例:
$ keystone end-create --service-id $(keystone service-list | awk '/ compute / {print $2}') --publicurl https://控制器:8774/v2/%(tenant_id)s --internalurl https://控制器:8774/v2/%(tenant_id)s --adminurl https://控制器:8774/v2/%(tenant_id)s --region regionOne+-------------+-----------------------------------------+| 属性 | 值 |+-------------+-----------------------------------------+| adminurl | https://controller:8774/v2/%(tenant_id)s || id | c397438bd82c41198ec1a9d85cb7cc74 || internalurl | https://controller:8774/v2/%(tenant_id)s || publicurl | https://controller:8774/v2/%(tenant_id)s || 区域 | regionOne || 服务 ID | 6c7854f52ce84db795557ebc0373f6b9 |+-------------+-----------------------------------------+
让我们逐行检查。在第一行中,我们使用endpoint-create命令开始创建端点。在第二行中,我们使用--service-id返回nova服务的服务id,我们将使用该服务创建此实际URL身份验证端点。但是,几乎所有较新版本的OpenStack文档都使用以下搜索字符串,我们在第二行也可以看到:$(keystone service-list | awk '/ compute / {print $2}')简而言之,上面的字符串在$()中打开了一个后台子shell。在()中,我们使用一种称为awk的shell脚本语言运行实际的搜索字符串。因此,它首先调用keystone命令keystone service-list,该命令以行和列的形式列出所有可用的服务,其中包含名称、实际服务id、说明等。然后我们使用搜索字符串/ compute /将其输出|,因为我们想使用该行来提取nova compute的服务id。 {print $2} 从该行中提取第二列 (2),该列恰好是服务计算服务的 id。第一行将是 | 字符。例如,如果我们执行以下命令:keystone service-list然后我们会看到:+----------------------------------+------------+----------------+-------------------------------+| id | name | type | description |+----------------------------------+------------+----------------+-------------------------------+| 9b1737a7632241cd8b38ba6f141bbffe | ceilometer | metering | Telemetry || 5844875f25c54e52a0d5c7f6076bff86 | nova | compute | OpenStack Compute |请注意,nova compute 行上的第一个返回是|第二次返回的服务 ID 再次使用 {print $2} 是服务 ID 本身:5844875f25c54e52a0d5c7f6076bff86虽然这是快速完成按顺序设置所有服务并遵循设置指南的好方法,但如果您以不同的顺序设置服务,有时会导致问题。因此,我建议在使用keystone end-create设置端点时,手动使用服务 ID,而不是通过执行以下操作来搜索它:
$ keystone 端点-创建 --service-id=5844875f25c54e52a0d5c7f6076bff86 --publicurl=https://控制器:8774/v2/%(tenant_id)s --internalurl=https://控制器:8774/v2/%(tenant_id)s --adminurl=https://控制器:8774/v2/%(tenant_id)s --region=regionOne
最后,我想提一下 --region 标志,它指定了您的区域名称。另一个导致端点无法正常工作的原因是,当您未能使用此标志时,它有时会为您创建一个不存在的区域名称,或者该区域名称的大小写可能看起来也不同。例如,regionOne、RegionOne 和 regionone 都是不同的区域,因为名称的大小写很重要。我希望这篇文章能帮助你们中遇到我经常遇到的这个问题的人。OpenStack 新手?查看 LinuxAcademy.com OpenStack 课程https://linuxacademy.com/openstack,并经常回来查看未来的更多课程!
请先 登录后发表评论 ~