开发,托管和测试服务代理程序
IBM Cloud® 平台与服务代理交互,以创建和管理服务实例和服务绑定。 您可以结合使用我们的公共 IBM Cloud 服务代理示例、开放式服务代理参考应用程序和开放式服务代理 API 文档来构建您的代理。
将服务加载到 IBM Cloud时,必须构建一个或多个服务代理程序以管理服务的生命周期及其测量集成。 有关更多信息,请参阅 测量集成。
什么是服务中介?
服务代理程序用于管理服务的生命周期。 平台与服务代理进行交互,以创建,访问和管理他们提供的服务。 Open Service Broker API 定义了这些交互,允许软件提供商向任何人提供服务,而无论软件提供商选择何种技术或基础架构。 服务代理程序充当中间件组件,用于处理自动供应产品的服务实例,并帮助跟踪服务实例的使用情况。
如果要跨多个供应商开发和提供软件即服务,平台即服务或基础架构即服务,那么代理很有用。 它可以通过引入服务代理来为客户自动执行供应和绑定,从而增加业务价值。 此外,通过处理这些交叉问题的中间件组件,可以更轻松地进行客户管理和使用情况跟踪。 但是,如果您具有可以部署在任何虚拟机或平台上的定制软件,那么服务代理程序不适用。
当用户从 IBM Cloud 目录中选择服务及其定价套餐并创建实例时,会将服务的数据 (包括定价套餐和度量值) 发送到服务代理程序。 代理与后端系统集成,该后端系统管理所选定价计划的服务实例和度量的供应。 如果客户删除产品的实例,那么会向服务代理程序发送请求,并管理该实例的取消供应。
代理体系结构为开发团队和运营团队提供了显着优势:
- 开发人员可以将他们的应用程序和容器连接到他们所需的支持服务。 无论支持服务如何,操作都是相同的。
- 操作员不再需要手动创建和委派对服务的访问权。 而是配置服务和服务套餐的市场。 从那里,开发商可以自助服务,降低很多企业今天面临的行政成本。
根据 Open Service Broker API 规范构建的每个服务代理都具有相同的直观生命周期命令集。 这些命令为服务代理程序提供了有用的优点:
- 访存服务代理程序提供的支持服务的目录
- 目录描述了可以通过服务代理程序创建的所有服务,每个服务都由套餐组成。 套餐通常表示服务的给定变体的成本和收益。 许多服务使用与产品大小相关的套餐,例如,小型,中型和大型。
- 供应新服务实例
- 服务实例是服务和套餐的已创建实例,如服务代理程序的目录中所述。
- 从这些服务实例连接和断开应用程序和容器的连接
- 创建服务实例时,您希望应用程序或容器开始与该实例进行通信。 从服务代理程序的角度来看,这称为服务绑定。
- 取消供应服务实例
- 此操作将删除初始创建服务实例时创建的所有资源。
准备工作
- 在 IBM Cloud Partner Center 中注册服务。
- 定义服务的产品详细信息。
- 查看 供应方案 以了解资源创建的工作方式。
- 阅读并熟悉 Open Broker API 规范,并使用自述文件作为了解更多信息的指南。IBM Cloud 使用 Open Service Broker API (OSB)
version 2.12
规范。
构建代理程序
使用以下文档和示例应用程序配置和部署符合所需规格的代理:
- 使用 IBM Cloud开放式服务代理 API 设置所需的规范,包括所需的端点。
查看以下示例应用程序:
- 使用基于 NodeJS 的示例 开放式服务代理参考应用程序作为创建代理的指南。
包含必需的端点
所有服务代理程序都必须设置某些必需的端点。 可绑定服务以及禁用和重新启用服务实例需要其他端点逻辑。
所有服务代理程序的必需端点逻辑
服务代理程序必须提供 REST API 使用的一组标准元数据值,并且 IBM Cloud 代理程序必须包含用于以下 REST API 端点或路径的逻辑:
- 目录 (GET)
- 返回代理程序中包含的目录元数据。
- 资源实例 (PUT)
- 创建服务实例。
- 资源实例 (DELETE)
- 删除服务实例。
- 资源实例 (PATCH)
- 更新服务实例。
关于目录 (GET) 的注释:此端点定义代理程序与 IBM Cloud 平台(用于代理程序支持的服务和套餐)之间的合同。 该端点返回存储在代理中的目录元数据。 这些值定义了您的服务与 IBM Cloud 平台之间的最低合同。 所有不需要的附加目录元数据都存储在 IBM Cloud 目录中。 必须在 IBM Cloud 控制台中更新对目录显示值 (例如链接和图标) 的任何更新,并且这些更新不能包含在代理程序中。 代理程序中存储的任何元数据都不会显示在 IBM Cloud 控制台或 IBM Cloud CLI 中。 控制台和 CLI 会返回在 Partner Center Sell 中设置并存储在 IBM Cloud 目录中的内容。 下一节显示了目录 (GET) 返回的最小必要值:
{
"services": [{
"id": "0bc9d744-6f8c-4821-9648-2278bf6925bb",
"name": "ibmcloud-link",
"description": "An IBM provided service that enables aliasing to service instances in the IBM Cloud.",
"bindable": true,
"plan_updateable": false,
"plans": [
{
"id": "da40662d-2f72-4a19-8c79-8c77cf285e1",
"name": "ibmcloud-alias",
"free": true,
"description": "The IBM Cloud alias plan used for linking."
}
]
}]
}
可绑定服务的必需端点逻辑
如果您的服务可以绑定到 IBM Cloud 中的应用程序,它必须向您的服务消费者返回 API 端点和凭据。 可绑定服务必须使用 Open Service Broker 规范中的可绑定操作,并实现以下端点或路径:
- 绑定和凭证 (PUT)
- 将服务实例绑定到应用程序。
- 绑定和凭证 (DEL)
- 取消服务实例与应用程序的绑定。
必需的 IBM Cloud 扩展端点
OSB 规范不支持已禁用的实例状态。 禁用状态包括缺少付款或导致帐户暂挂 (但尚未取消) 且不同于已删除实例状态的其他情境。 为了使 IBM Cloud 支持可能迂到禁用状态的客户,IBM Cloud 定义了允许禁用和重新启用服务实例的扩展 API 端点。 需要以下终端扩展:
- 启用和禁用实例 (GET)
- 状态 - 返回服务实例的状态。
- 启用和禁用实例 (PUT)
- 启用或禁用服务实例。
在禁用端点启动时禁用对服务实例的访问,以及在启用端点启动时重新启用对服务实例的访问,是服务提供者的责任。
IBM Cloud 平台提供的代理程序信息
服务代理程序会从 IBM Cloud 平台接收以下信息:
X-Broker-API-Originating-Identity
用户身份标头通过 API 起源身份标头提供。 此请求头包含用户的 IBM Cloud IAM 身份。 IAM 身份是 base64 编码的。IBM Cloud 支持单个认证域: IBMid
。 IBMid
域使用 IBMid 唯一标识 (IUI) 来标识 IBM Cloud 中的用户身份。 此 IUI 是服务提供者的不透明字符串。
示例:
X-Broker-API-Originating-Identity: ibmcloud eyJpYW1faWQiOiJJQk1pZC01MEdOUjcxN1lFIn0=
Decoded:
{"iam_id":"IBMid-50GNR717YE"}
API 版本头
API 版本头 是 2.12。 例如:X-Broker-Api-Version: 2.12
。
资源实例 (PUT) body.context 和资源实例 (PATCH) body.context
PUT /v2/service_instances/:resource_instance_id
和 PATCH /v2/service_instances/:resource_instance_id
会在 body.context 中接收以下值:{ "platform": "ibmcloud", "account_id": "tracys-account-id", "crn": "resource-instance-crn" }
。
其他代理程序建议
有关使用异步操作取代同步操作的建议
OSB API 支持同步和异步操作方式。 如果您的操作需要少于 10 秒,那么必须使用同步响应。 否则,必须使用异步操作方式。 异步方式需要 last_operation
端点。 有关更多信息,请参阅 获取服务实例的正在进行的供应的状态。
管理不同位置代理程序的建议
用户必须了解其云服务的位置,才能确定等待时间、可用性和数据存储位置。
在 IBM Cloud 上创建服务实例时,用户需要提供的参数之一是他们希望创建服务实例的位置。 有些服务可支持在多个地点创建。 例如,数据库服务可以支持在所有 IBM Cloud 区域中创建,也可以支持子集。
如果基于第三方 API 的服务在另一个云中实施,并在 IBM Cloud 中公开,那么该位置会指示该服务在其他云中的位置。
上线到 IBM Cloud 时,必须至少实施一个 OSB 代理程序。 但您可根据部署策略和要为服务提供支持的位置,实施多个代理程序。 在 Partner Center Sell 中,您可以建立定价套餐与代理之间的映射。 典型的选择是定义一个代理为所有地点提供服务,或者为每个地点定义一个代理;这取决于服务提供商的选择。
要获取可用位置的列表,请查看 IBM 全局目录位置。 如果您的服务需要定义更多位置,请咨询 IBM Cloud 入职团队。
托管代理
代理程序必须作为可响应 REST API 调用的应用程序的一部分进行托管,并且托管位置必须符合 IBM Cloud 安全准则。 您可以将代理托管在 IBM Cloud 中,也可以将其托管在外部,如果它可以从 IBM Cloud 本身公开访问的话。
要在 IBM 以外托管您的代理,您必须确保它符合以下安全准则:
- 必须遵循传输层安全(TLS)协议版本 1.2。 有关更多信息,请参阅 TLS 协议概述。
- 必须在可通过公用因特网访问的有效 HTTPS 端点上进行托管
测试服务的代理程序
必须通过对您启用的不同端点运行 curl 命令来验证代理。 您需要服务代理的托管位置以及与应用程序相关的 URL 和凭据。 要测试您的代理,可以使用以下方法:
- 用于对 OSB 端点进行卷曲的样本自述文件指南: https://github.com/IBM/sample-resource-service-brokers/blob/master/README.md。
在测试服务代理期间,资源控制器会使用已配置的身份验证方案向代理发出请求。 确保您的代理实施了其中一种受支持的身份验证方法,以帮助确保正确的验证和授权。 更多信息,请参阅“代理服务器的身份验证方案”。
示例 curl 请求
使用以下示例来测试代理程序 curl 响应:
curl -X PUT https://<sample-service-broker>/v2/service_instances/<encoded-resource-crn> \
-u '<your broker user>:<your broker password>' \
-H 'content-type: application/json' \
-d '{ "context": {"platform": "ibmcloud", \
"account_id": "34ff5928-c3c7-4d46-bbf6-1a5628c325d1", \
"resource_group_crn": "crn:v1:bluemix:public:resource-controller::a/003e9bc3993aec710d30a5a719e57a80::resource-group:b4570a825f7f4d57aa54e8e1d9507926", \
"crn": "<resource-crn>", \
"target_crn": "<target_crn>"}, \
"service_id": "a07f025c-90db-4652-afd1-cf4adfac93c8", \
"plan_id": "fe442cec-2eef-41fe-9f92-58d6c094584f"}'