创建和管理服务与服务用户¶
服务目录¶
OpenStack 服务可以在注册到 keystone 的服务目录中时被发现。服务目录可以作为静态文件模板或动态数据库表进行管理。
基于文件的服务目录 (templated.Catalog)¶
模板化目录是一个从只读 template_file 初始化并在内存中的后端。仅当您知道您的服务目录不会随时间发生太大变化时,才选择此选项。
注意
尝试针对此驱动程序更改您的服务目录将导致 HTTP 501 Not Implemented 错误。这是预期行为。如果您想使用这些命令,则必须改用基于 SQL 的服务目录驱动程序。
keystone.conf 示例
[catalog]
driver = templated
template_file = /opt/stack/keystone/etc/default_catalog.templates
template_file 的值预计是您的服务目录配置的绝对路径。keystone 中包含一个示例 template_file,但是您应该创建自己的文件以反映您的部署。
基于 SQL 的服务目录 (sql.Catalog)¶
完全支持持久化配置的动态数据库支持的驱动程序。
keystone.conf 示例
[catalog]
driver = sql
注意
对于基于 sql 的目录,不需要定义 template_file。
要使用此驱动程序构建您的服务目录,请参阅内置帮助
$ openstack --help
$ openstack service create --help
$ openstack endpoint create --help
创建服务¶
列出可用的服务
$ openstack service list +----------------------------------+----------+------------+ | ID | Name | Type | +----------------------------------+----------+------------+ | 9816f1faaa7c4842b90fb4821cd09223 | cinder | volume | | 1250f64f31e34dcd9a93d35a075ddbe1 | cinderv2 | volumev2 | | da8cf9f8546b4a428c43d5e032fe4afc | ec2 | ec2 | | 5f105eeb55924b7290c8675ad7e294ae | glance | image | | dcaa566e912e4c0e900dc86804e3dde0 | keystone | identity | | 4a715cfbc3664e9ebf388534ff2be76a | nova | compute | | 1aed4a6cf7274297ba4026cf5d5e96c5 | novav21 | computev21 | | bed063c790634c979778551f66c8ede9 | neutron | network | | 6feb2e0b98874d88bee221974770e372 | s3 | s3 | +----------------------------------+----------+------------+
要创建服务,请运行此命令
$ openstack service create --name SERVICE_NAME --description SERVICE_DESCRIPTION SERVICE_TYPE
- 参数是
service_name:新服务的唯一名称。service_type:服务类型,例如identity、compute、network、image、object-store或任何其他服务标识符字符串。service_description:服务的描述。
例如,要创建类型为
object-store的swift服务,请运行此命令$ openstack service create --name swift --description "object store service" object-store +-------------+----------------------------------+ | Field | Value | +-------------+----------------------------------+ | description | object store service | | enabled | True | | id | 84c23f4b942c44c38b9c42c5e517cd9a | | name | swift | | type | object-store | +-------------+----------------------------------+
要获取服务的详细信息,请运行此命令
$ openstack service show SERVICE_TYPE|SERVICE_NAME|SERVICE_ID
例如
$ openstack service show object-store +-------------+----------------------------------+ | Field | Value | +-------------+----------------------------------+ | description | object store service | | enabled | True | | id | 84c23f4b942c44c38b9c42c5e517cd9a | | name | swift | | type | object-store | +-------------+----------------------------------+
创建端点¶
创建服务后,将其注册到端点
$ openstack endpoint create nova public http://example.com/compute/v2.1 +--------------+----------------------------------+ | Field | Value | +--------------+----------------------------------+ | enabled | True | | id | c219aa779e90403eb4a78cf0aa7d38b1 | | interface | public | | region | None | | region_id | None | | service_id | 0f5da035b8e94629bf35e7ec1703a8eb | | service_name | nova | | service_type | compute | | url | http://example.com/compute/v2.1 | +--------------+----------------------------------+
删除服务¶
要删除指定的服务,请指定其 ID。
$ openstack service delete SERVICE_TYPE|SERVICE_NAME|SERVICE_ID
例如
$ openstack service delete object-store
服务用户¶
为了能够通过身份服务对用户进行身份验证,您必须为每个 OpenStack 服务创建一个服务用户。例如,为计算、块存储和网络服务创建服务用户。
要使用服务用户配置 OpenStack 服务,请为所有服务创建一个项目,并为每个服务创建用户。将管理角色分配给每个服务用户和项目对。此角色使用户能够验证令牌并对其他用户请求进行身份验证和授权。
创建服务用户¶
为服务用户创建一个项目。通常,此项目命名为
service,但您可以选择任何名称$ openstack project create service --domain default +-------------+----------------------------------+ | Field | Value | +-------------+----------------------------------+ | description | None | | domain_id | e601210181f54843b51b3edff41d4980 | | enabled | True | | id | 3e9f3f5399624b2db548d7f871bd5322 | | is_domain | False | | name | service | | parent_id | e601210181f54843b51b3edff41d4980 | +-------------+----------------------------------+
为您的部署创建相关服务的服务用户。例如
$ openstack user create nova --password Sekr3tPass +---------------------+----------------------------------+ | Field | Value | +---------------------+----------------------------------+ | domain_id | default | | enabled | True | | id | 95ec3e1d5dd747f5a512d261731d29c7 | | name | nova | | options | {} | | password_expires_at | None | +---------------------+----------------------------------+
将管理角色分配给用户-项目对。
$ openstack role add --project service --user nova admin +-------+----------------------------------+ | Field | Value | +-------+----------------------------------+ | id | 233109e756c1465292f31e7662b429b1 | | name | admin | +-------+----------------------------------+
配置服务令牌¶
OpenStack 中的许多操作需要在用户代表的情况下在多个服务之间进行通信。例如,将用户的图像存储在对象存储服务中的图像服务。如果图像非常大,由于用户的令牌已过期,操作可能会失败。
在上述场景中,图像服务将附加用户的令牌和它自己的令牌(称为服务令牌),如下所示。
+----------------+
| User |
+-------+--------+
| Access Image Data Request
| X-AUTH-TOKEN: <end user token>
|
+-------v---------+
| Glance |
+-------+---------+
| Access Image Data Request
| X-AUTH-TOKEN: <original end user token>
| X-SERVICE-TOKEN: <glance service user token>
|
+-------v---------+
| Swift |
+-----------------+
当服务从另一个服务接收到调用时,它会验证令牌是否对服务用户具有适当的角色。这在每个单独的服务配置中配置,在 [keystone_authtoken] 部分下。
如果服务令牌有效,即使用户的令牌已过期,操作也允许。
service_token_roles 选项是服务令牌必须包含的角色的列表才能是有效的服务令牌。在前面的步骤中,我们已将 admin 角色分配给服务用户,因此将选项设置为该角色并将 service_token_roles_required 设置为 true。
[keystone_authtoken]
service_token_roles = admin
service_token_roles_required = true
有关服务令牌的更多信息,请参阅 keystonemiddleware 发行说明。