跳转到: 导航, 搜索

Neutron/LBaaS/API 1.0

< Neutron‎ | LBaaS(重定向自 Quantum/LBaaS/API 1.0)

OpenStack LBaaS API 1.0 (草案)

概述

预期读者

预期读者

本指南面向使用 LBaaS API v1.0 创建应用程序的软件开发人员。要使用此信息,您应该对 OpenStack LBaaS 服务、OpenStack Quantum 服务以及两者的集成有一个大致的了解。您还应该知道如何从 OpenStack KeyStone 服务获取身份验证令牌。

您还应该熟悉

  • RESTful Web 服务
  • HTTP/1.1
  • JSON 序列化格式

文档变更历史

本版本的开发者指南取代并废止所有先前版本。下表描述了最新的更改

修订日期
2012 年 10 月 25 日
2012年11月5日
2012年11月19日
2012年12月6日
2012年12月10日
2012年12月21日
2012年12月24日
2013年3月11日

资源

结合本指南使用以下资源

资源
待定

第 1 章:概述

LBaaS 项目提供负载均衡服务,使 OpenStack 租户能够将流量负载均衡到其虚拟机。

LBaaS 服务提供的功能包括

  • 将来自一个网络的客户端流量负载均衡到位于相同或不同网络上的应用程序服务(例如虚拟机)。
  • 支持多种协议的负载均衡
  • 支持会话持久性
  • 监控应用程序服务的健康状况
  • 保护应用程序服务免受拒绝服务 (DoS) 攻击
  • 收集传入客户端流量的流量统计信息。

高级任务流程

使用 LBaaS API 配置负载均衡的高级任务流程如下

  • 租户创建一个池,最初为空
  • 租户在池中创建一个或多个成员
  • 租户创建一个或多个健康监控
  • 租户将健康监控与池关联
  • 租户最终使用池创建一个 VIP

概念

要有效地使用 OpenStack LBaaS API,您应该了解几个关键概念

VIP

VIP 是主要的负载均衡配置对象,用于指定客户端流量接收到的虚拟 IP 地址和端口,以及其他详细信息,例如要使用的负载均衡方法、协议等。此实体在 LB 产品中有时被称为“虚拟服务器”、“vserver”或“监听器”。


#!wiki caution
Note

In the tradional load balancing vernacular, the term 'VIP' is used to denote the IP address to which clients connect. As it is defined in this document, this IP address is only one attribute of the VIP object.

负载均衡池是设备的一个逻辑集合,例如 Web 服务器,您将它们组合在一起以接收和处理流量。负载均衡功能根据配置的负载均衡方法选择池中的一个成员来处理在 VIP 地址上接收的新请求或连接。对于一个 VIP 只有一个池。

池成员

池成员代表在后端服务器上运行的应用程序。

健康监控

健康监控用于确定 VIP 池的后端成员是否可用以处理请求。一个池可以关联多个健康监控。 OpenStack LBaaS 服务支持不同类型的健康监控

  • PING:用于使用 ICMP 探测成员。
  • TCP:用于使用 TCP 连接到成员。
  • HTTP:用于向成员发送 HTTP 请求。
  • HTTPS:用于向成员发送安全的 HTTP 请求。

当池关联了多个监控时,池中的每个成员都会被所有这些监控监控。如果任何监控将成员声明为不健康,则成员状态将更改为 INACTIVE,并且成员将不会参与其池的负载均衡。换句话说,所有监控都必须声明成员是健康的,才能保持 ACTIVE。

会话持久性

会话持久性是负载均衡服务的一项功能。它尝试强制同一会话中的连接或请求由相同的成员处理,只要它处于活动状态。 OpenStack LBaaS 服务支持三种类型的持久性

  • SOURCE_IP:使用此持久性模式,来自相同源 IP 地址的所有连接都将由池中的相同成员处理。
  • HTTP_COOKIE:使用此持久性模式,负载均衡功能将在客户端的第一个请求上创建一个 cookie。包含相同 cookie 值的后续请求将由池中的相同成员处理。
  • APP_COOKIE:使用此持久性模式,负载均衡功能将依赖于后端应用程序建立的 cookie。携带相同 cookie 值的任何请求都将由池中的相同成员处理。

连接限制

为了控制 VIP 地址上的传入流量以及池中每个成员的流量,您可以设置 VIP 或池上的连接限制,超过该限制负载均衡功能将拒绝客户端请求或连接。这可用于阻止 DoS 攻击并允许池中的每个成员在其限制范围内继续工作。

对于 HTTP 和 HTTPS 协议,由于多个 HTTP 请求可以在同一 TCP 连接上复用,因此连接限制值解释为允许的最大请求数。

第 2 章:通用 API 信息

本章中的部分介绍了适用于所有 OpenStack API 的操作和指南,并且不特定于负载均衡 API。

身份验证和授权

LBaaS API v1.0 使用 Keystone Identity Service 作为默认身份验证服务。启用 Keystone 时,向 LBaaS 服务提交请求的用户必须在 X-Auth-Token 请求标头中提供身份验证令牌。您可以通过向 Keystone 端点进行身份验证来获取令牌。有关 Keystone 的更多信息,请参阅 OpenStack Identity 开发者指南。

具有非管理员角色的用户只能对他们拥有的资源执行 CRUD(创建、检索、更新和删除)操作。具有管理员角色的用户(如 KeyStone 服务中配置)可以通过在创建或更新资源时指定资源表示形式中的“tenant_id”属性,以及在检索或删除时指定“tenant_id”查询字符串来操作其他租户的资源。

LBaaS 使用从 Keystone 接收到的信息来授权用户请求。LBaaS 处理以下类型的授权策略

基于操作的策略

指定特定操作的访问标准,可能对特定属性进行细粒度控制。

基于资源的策略

访问特定资源。权限可能会或可能不会被授予,具体取决于为资源配置的权限。

请求/响应类型

LBaaS API v1.0 支持 JSON 数据序列化格式。这意味着对于包含正文的请求,Content-Type 标头必须设置为 MIME 类型值“application/json”。此外,客户端应通过指定 Accept 标头并使用 MIME 类型值“application/json”或在 URL 路径中添加“.json”扩展名来接受 JSON 序列化的响应。如果客户端未指定 Accept 标头或在 URL 路径中附加“.json”扩展名,则默认响应格式为“application/json”。

示例


#!highlight javascript numbers=disable
GET /v1.0/vips.json

或者


#!highlight javascript numbers=disable
GET /v1.0/vips
Accept: application/json

过滤和列选择

LBaaS API v1.0 支持基于资源所有顶级属性进行过滤。过滤器适用于所有列表请求。

例如,以下请求返回所有名为 foobar 的 VIP


#!highlight javascript numbers=disable
GET /v1.0/vips?name=foobar

当您指定多个过滤器时,LBaaS API v1.0 仅返回满足所有过滤标准的对象。该操作在过滤器之间应用 AND 条件。


#!wiki caution
Note

LBaaS does not offer an OR mechanism for filters.

或者,您可以为每个过滤器发出不同的请求,并在客户端构建来自接收到的响应的响应集。

默认情况下,LBaaS 服务在任何 show 或 list 调用中返回所有属性。LBaaS API v1.0 具有限制返回属性集的一种机制。您可以使用 fields 查询参数来控制从 LBaaS API v1.0 返回的属性。

例如,以下请求仅返回每个 vip 的 id、name、subnet_id、address 和 protocol_port


#!highlight javascript numbers=disable
GET /v1.0/vips.json?fields=id&fields=name&fields=subnet_id&fields=address&fields=protocol_port


同步与异步插件行为

LBaaS API v1.0 呈现一个逻辑负载均衡配置,包括 vips、池和成员。由 LBaaS 插件与底层基础设施通信,以确保负载均衡与逻辑模型一致。插件可以异步执行这些操作。

当 API 客户端通过发出 HTTP POST、PUT 或 DELETE 请求修改逻辑模型时,API 调用可能在插件修改底层虚拟和物理负载均衡功能之前返回。但是,API 客户端保证所有后续 API 调用都正确反映了更改后的逻辑模型。

例如,如果客户端对 members 资源发出 HTTP POST 请求以将新成员添加到池中,则无法保证在 HTTP 调用返回时成员可以接收流量。但是,保证后续 HTTP GET 请求以查看池中的成员返回的列表将包含添加的成员。

您可以使用 VIP、池、池成员或健康监控的 status 属性来确定 LBaaS 插件是否已成功完成资源的配置。

表 4.1. 状态值

姓名
ACTIVE
待创建
待更新
待删除
非活动
错误

当 LBaaS 服务返回对象的 status 设置为“ERROR”时,返回的对象可能还包含一个额外的属性,称为“error_details”,它提供有关错误的文本说明、其原因以及用户可能解决该情况的方法。

更新操作

资源的更新操作使用 HTTP PUT 方法,并采用“patch”语义(而不是“replace”语义),这意味着在 PUT 请求中提交的属性将在资源上更改,而未在更新操作中提交的属性将保留其在资源中的先前值。

此外,请注意并非资源的每个属性都可以更新。这在每个资源的“update”操作中都有描述。

配额

[待定]

通知

[待定]

扩展

LBaaS API v1.0 是可扩展的。

LBaaS API v1.0 扩展的目的是

  • 在不需要版本更改的情况下,在 API 中引入新功能。
  • 引入特定于供应商的利基功能。
  • 作为未来 API 版本中可能包含的实验功能的试验场。

要以编程方式确定哪些扩展可用,请对 /v1.0/extensions URI 发出 GET 请求。

要通过唯一的别名单独查询扩展,请对 /v1.0/extensions/alias_name URI 发出 GET 请求。使用此方法可以轻松确定扩展是否可用。如果扩展不可用,则返回 404 Not Found 响应。

您可以扩展现有的核心 API 资源,添加新的操作或额外的属性。此外,您可以将新资源作为扩展添加。扩展通常具有标签,以防止与其他定义相同名称的属性或资源的扩展以及核心资源和属性发生冲突。由于并非所有插件都支持扩展,因此扩展的可用性因部署和使用的特定插件而异。因此,在使用其额外功能之前,请确保您的扩展在部署的 LBaaS 服务上可用。

错误

LBaaS API v1.0 在处理请求时发生故障时,将返回错误响应。LBaaS 仅使用标准的 HTTP 错误代码。4xx 错误表示客户端发送的特定请求存在问题。

错误 描述
400 错误请求
401 未授权
403 禁止
404 未找到
409 冲突
413 超出限制
422 不可变
500 内部服务器错误
503 服务不可用

响应主体将包含有关错误原因的更丰富的信息。错误响应遵循以下示例说明的格式


#!highlight javascript numbers=disable
HTTP/1.1 409 Conflict
Content-type: application/json
Content-lentgh:78

{
   "errorcode": 409,
   "errormessage": "pool 'cfc6589d-f949-4c66-99d2-c2da56ef3764' is already used by VIP 'db902c0c-d5ff-4753-b465-668ad9656918' "
}


第 3 章。API 操作

本章解释了特定的 API 操作。有关适用于所有 API 操作的想法,请参阅“通用 API 信息”章节。

VIP

使用以下 API 管理 vip 资源

动词 URI
GET /v1.0/vips/
GET /v1.0/vips/vip_id
POST /v1.0/vips
PUT /v1.0/vips/vip_id
DELETE /v1.0/vips/vip_id

列出所有 VIP

动词 URI
GET /v1.0/vips/

正常响应代码: 200

错误响应代码:401(未授权),500(内部服务器错误),503(服务不可用)

此操作返回与您的租户帐户关联的所有 VIP 的列表。如果您具有管理员角色,则此请求将返回所有租户的所有 VIP。

此操作不需要请求主体。

此操作返回响应主体。它返回一个(可能为空)列表,列表中的每个元素都是一个 VIP,其中包含以下属性

  • id
  • tenant_id
  • name
  • description
  • subnet_id
  • address
  • port_id
  • protocol_port
  • protocol
  • pool_id
  • session_persistence
  • connection_limit
  • admin_state_up
  • status

示例。列出所有 VIP

JSON 请求


#!highlight javascript numbers=disable
GET /v1.0/vips
Host: lbaas-service.cloudX.com:8651
Accept: application/json
X-Auth-Token:887665443383838


JSON 响应

#!highlight javascript numbers=disable
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 384

{
  "vips":[
         {
           "id": "db902c0c-d5ff-4753-b465-668ad9656918",
           "tenant_id": "310df60f-2a10-4ee5-9554-98393092194c",
           "name": "web_vip",
           "description": "lb config for the web tier",
           "subnet_id": "96a4386a-f8c3-42ed-afce-d7954eee77b3",
           "address" : "10.30.176.47",
           "port_id" : "cd1f7a47-4fa6-449c-9ee7-632838aedfea",
           "protocol": "HTTP",
           "protocol_port": 80,
           "pool_id" : "cfc6589d-f949-4c66-99d2-c2da56ef3764",
           "admin_state_up": true,
           "status": "ACTIVE"
         },
         {
           "id": "36e08a3e-a78f-4b40-a229-1e7e23eee1ab",
           "tenant_id": "310df60f-2a10-4ee5-9554-98393092194c",
           "name": "db_vip",
           "subnet_id": "9cedb85d-0759-4898-8a4b-fa5a5ea10086",
           "address" : "10.30.176.48",
           "port_id" : "cd1f7a47-4fa6-449c-9ee7-632838aedfea",
           "protocol": "TCP",
           "protocol_port": 3306,
           "pool_id" : "41efe233-7591-43c5-9cf7-923964759f9e",
           "session_persistence" : {"type" : "SOURCE_IP"},
           "connection_limit" : 2000,
           "admin_state_up": true,
           "status": "INACTIVE"
         }
      ]
}

检索特定的 VIP

动词 URI
GET /v1.0/vips/vip_id

正常响应代码: 200

错误响应代码:401(未授权),403(禁止),404(未找到),409(冲突),413(超出限制),500(内部服务器错误),503(服务不可用)

此操作返回由 vip_id 标识的 VIP 对象。如果用户不是管理员,并且 VIP 对象不属于她的租户帐户,她将收到 403(禁止)错误。

此操作不需要请求主体。

此操作返回响应正文。成功时,返回的元素是一个 VIP,其中可能包含以下属性

  • id
  • tenant_id
  • name
  • description
  • subnet_id
  • address
  • port_id
  • protocol_port
  • protocol
  • pool_id
  • session_persistence
  • connection_limit
  • admin_state_up
  • status

示例。检索 VIP 详细信息

JSON 请求


#!highlight javascript numbers=disable
GET /v1.0/vips/36e08a3e-a78f-4b40-a229-1e7e23eee1ab
Host: lbaas-service.cloudX.com:8651
Accept: application/json
X-Auth-Token:887665443383838

JSON 响应


#!highlight javascript numbers=disable
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 156

{
     "vip": {
           "id": "36e08a3e-a78f-4b40-a229-1e7e23eee1ab",
           "tenant_id": "310df60f-2a10-4ee5-9554-98393092194c",
           "name": "db_vip",
           "description": "lb config for the MYSQL db tier",
           "subnet_id": "9cedb85d-0759-4898-8a4b-fa5a5ea10086",
           "address" : "10.30.176.47",
           "port_id" : "cd1f7a47-4fa6-449c-9ee7-632838aedfea",
           "protocol": "TCP",
           "protocol_port": 3306,
           "pool_id" : "41efe233-7591-43c5-9cf7-923964759f9e",
           "session_persistence" : {"type" : "SOURCE_IP"},
           "connection_limit" : 2000,
           "admin_state_up": true,
           "status": "INACTIVE"
         }
}

创建 VIP

动词 URI
POST /v1.0/vips

正常响应代码: 202

错误响应代码:401(未授权),404(未找到),409(冲突),413(超出限制),500(内部服务器错误),503(服务不可用)

此操作根据请求对象中定义的配置配置新的 VIP。在验证请求并开始配置过程后,将返回一个响应对象。该对象将包含一个唯一标识符和配置 VIP 的状态。

响应中 VIP 的状态可以取以下值之一:ACTIVE、PENDING_CREATE 或 ERROR。

如果返回的状态设置为“PENDING_CREATE”,则使用 VIP 的标识符,调用者可以通过对 vips/vip_id 执行 GET 操作来检查配置操作的进度。当返回的 vip 的状态更改为“ACTIVE”时,VIP 已成功配置并现在可以用于流量处理。

此操作的调用者必须指定 VIP 的至少以下属性

  • name
  • tenant_id:仅当调用者具有管理员角色并希望为另一个租户创建 VIP 时才需要。
  • subnet_id:分配 vip 地址的网络。租户只能在其授权的网络上创建 vip(例如,她自己的网络或共享/提供者网络)。
  • protocol:vip 地址的协议。
  • protocol_port:用于侦听与 vip 地址关联的客户端流量的端口。
  • pool_id:包含负载均衡的真实服务器的池的 ID。

如果请求中未指定某些属性,将收到默认值

  • service_type:用于创建 VIP 的服务类型将是 LBaaS 服务中配置的默认服务类型。
  • admin_state_up:此属性的默认值为 true。

另请注意,pool_id 应该引用尚未与另一个 vip 关联的池。如果池已被另一个 vip 使用,则此创建操作将失败并出现 409 Conflict 错误。

如果由于数据不足或无效而无法满足请求,将返回 HTTP 400(错误请求)错误响应,其中响应主体包含有关故障性质的信息。验证过程中的故障无法恢复,需要调用者更正故障原因并再次发布请求。

用户可以通过简单地在请求中提供其他元素或属性来配置 VIP 的所有记录功能。

具有管理员角色的用户可以通过指定与他们自己不同的 tenant_id 属性来代表其他租户创建 VIP。

示例。创建一个 VIP

JSON 请求

#!highlight javascript numbers=disable
POST /v1.0/vips
Host: lbaas-service.cloudX.com:8651
Content-Type: application/json
Accept: application/json
X-Auth-Token:887665443383838
Content-Length: 463

{
  "vip": {
           "tenant_id": "310df60f-2a10-4ee5-9554-98393092194c",
           "name": "web_vip",
           "subnet_id": "96a4386a-f8c3-42ed-afce-d7954eee77b3",
           "protocol": "HTTPS",
           "protocol_port": 443,
           "pool_id" : "cfc6589d-f949-4c66-99d2-c2da56ef3764",
           "session_persistence" : {"type":"APP_COOKIE", "cookie_name":"jsessionid"}
         }
}


JSON 响应

#!highlight javascript numbers=disable
HTTP/1.1 202 Accepted
Content-Type: application/json
Content-Length: 213

{
  "vip": {
           "id": "02b1fef7-16f5-4917-bf19-c40a9af805ed",
           "tenant_id": "310df60f-2a10-4ee5-9554-98393092194c",
           "name": "web_vip",
           "subnet_id": "96a4386a-f8c3-42ed-afce-d7954eee77b3",
           "address" : "10.30.176.47",
           "port_id" : "cd1f7a47-4fa6-449c-9ee7-632838aedfea",
           "protocol": "HTTPS",
           "protocol_port": 443,
           "pool_id" : "cfc6589d-f949-4c66-99d2-c2da56ef3764",
           "session_persistence" : {"type":"APP_COOKIE", "cookie_name":"jsessionid"},
           "admin_state_up": true,
           "status": "PENDING_CREATE"
         }
}


如果用户拥有将创建 VIP 的网络,则用户可以提供 address 字段。如果正文中未指定地址,则 LBaaS 服务将从 VIP 的网络分配一个地址。

一旦将地址分配给用户,用户就可以使用相同的地址但使用不同的协议端口创建其他 VIP 对象。

示例。创建一个与另一个 VIP 共享地址的 VIP

JSON 请求

#!highlight javascript numbers=disable
POST /v1.0/vips
Host: lbaas-service.cloudX.com:8651
Content-Type: application/json
Accept: application/json
X-Auth-Token:887665443383838
Content-Length: 234

{
  "vip": {
           "name": "ssl_vip",
           "subnet_id": "96a4386a-f8c3-42ed-afce-d7954eee77b3",
           "address" : "10.30.176.47",
           "protocol": "HTTPS",
           "protocol_port": 443,
           "pool_id" : "91c20e53-96cd-4476-8efc-627f398773bb"
         }
}


JSON 响应


#!highlight javascript numbers=disable
HTTP/1.1 202 Accepted
Content-Type: application/json
Content-Length: 282

{
  "vip": {
           "id": "02b1fef7-16f5-4917-bf19-c40a9af805ed",
           "tenant_id": "310df60f-2a10-4ee5-9554-98393092194c",
           "name": "ssl_vip",
           "subnet_id": "96a4386a-f8c3-42ed-afce-d7954eee77b3",
           "address" : "10.30.176.47",
           "port_id" : "cd1f7a47-4fa6-449c-9ee7-632838aedfea",
           "protocol": "HTTPS",
           "protocol_port": 443,
           "pool_id" : "91c20e53-96cd-4476-8efc-627f398773bb",
           "session_persistence" : {"type":"APP_COOKIE", "cookie_name":"jsessionid"},
           "admin_state_up": true,
           "status": "PENDING_CREATE"
         }
}


更新 VIP

动词 URI
PUT /1.0/vips/vip_id

正常响应代码: 202

错误响应代码:serviceFault (500),serviceUnavailable (503),unauthorized (401),badRequest (400),overLimit (413)

此操作更新指定 VIP 的属性。成功验证请求后,服务将返回 202(已接受)响应代码。调用者应检查 VIP 状态是否已更改为 ACTIVE,以确认已应用更新。如果 VIP 状态为“PENDING_UPDATE”,则调用者可以轮询 VIP 对象(使用 GET 操作)以等待应用更改。

更新操作允许调用者更改 VIP 的以下一个或多个属性

  • name
  • description
  • pool_id
  • session_persistence
  • connection_limit
  • admin_state_up

此操作返回更新的 VIP 对象。响应中 VIP 的状态可以取以下值之一:ACTIVE、PENDING_UPDATE 或 ERROR。


#!wiki caution
Note

The VIP's ID, status, subnet_id, address, protocol_port and protocol are immutable attributes and cannot be modified once a VIP is created. Supplying an unsupported attribute will result in a 422 (Immutable) fault.


#!wiki caution
Note

A VIP that is pending deletion or has an ERROR status cannot be updated.


示例。更新 VIP

JSON 请求

#!highlight javascript numbers=disable
PUT /v1.0/vips/02b1fef7-16f5-4917-bf19-c40a9af805ed
Host: lbaas-service.cloudX.com:8651
Content-Type: application/json
Accept: application/json
X-Auth-Token:887665443383838
Content-Length: 75

{
  "vip": {
           "name": "ssl_vip_1",
           "description": "this VIP is used for secure web connections",
           "session_persistence": { "type": "HTTP_COOKIE" }
         }
}


JSON 响应

#!highlight javascript numbers=disable
HTTP/1.1 202 Accepted
Content-Type: application/json
Content-Length: 282

{
  "vip": {
           "id": "02b1fef7-16f5-4917-bf19-c40a9af805ed",
           "tenant_id": "310df60f-2a10-4ee5-9554-98393092194c",
           "name": "ssl_vip_1",
           "subnet_id": "96a4386a-f8c3-42ed-afce-d7954eee77b3",
           "address" : "10.30.176.47",
           "port_id" : "cd1f7a47-4fa6-449c-9ee7-632838aedfea",
           "protocol": "HTTPS",
           "protocol_port": 443,
           "pool_id" : "cfc6589d-f949-4c66-99d2-c2da56ef3764",
           "session_persistence": { "type": "HTTP_COOKIE" },
           "admin_state_up": true,
           "status": "PENDING_UPDATE"
         }
}


删除 VIP

动词 URI
DELETE /v1.0/vips/vip_id 从帐户中删除 VIP。

正常响应代码: 204

错误响应代码:serviceFault (500),serviceUnavailable (503),unauthorized (401),badRequest (400),overLimit (413)

此操作删除指定的 VIP 及其关联的配置,从租户帐户中删除。所有配置数据都会立即被清除,并且无法恢复。

此操作不需要请求主体。

此操作不返回响应主体。

示例。删除 VIP

JSON 请求

#!highlight javascript numbers=disable
DELETE /v1.0/vips/02b1fef7-16f5-4917-bf19-c40a9af805ed
Host: lbaas-service.cloudX.com:8651
Accept: application/json
X-Auth-Token:887665443383838


JSON 响应

#!highlight javascript numbers=disable
HTTP/1.1 204 No Content


池是负载均衡流量的成员集合的容器。池结构是一种在属于同一池的成员之间共享多个配置属性的方式。例如,协议和健康监控是在池上配置的,并且池的所有成员都将使用这些健康监控进行监控。


#!wiki caution
Note

Each VIP object can be associated with one pool. Also a pool cannot be used by more than one VIP object. It needs to be first removed from one VIP in order to be added to another.


列出所有池

动词 URI
GET /v1.0/pools

列出租户的所有池。

正常响应代码: 200

错误响应代码:serviceFault (500),serviceUnavailable (503),unauthorized (401),badRequest (400),overLimit (413)

此操作不需要请求主体。

此操作返回响应正文。成功时,返回的元素是一个(可能为空)列表,列表中的每个元素都是一个 Pool 对象,其中可能包含以下属性

  • id
  • tenant_id
  • vip_id
  • name
  • description
  • subnet_id
  • protocol
  • lb_method
  • members
  • health_monitors
  • admin_state_up
  • status

示例。列出池请求

JSON 请求

#!highlight javascript numbers=disable
GET /v1.0/pools.json
Host: lbaas-service.cloudX.com:8651
X-Auth-Token:887665443383838

示例。列出池响应:JSON


#!highlight javascript numbers=disable
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 628

{
  "pools" : [
              {
                "id":"cfc6589d-f949-4c66-99d2-c2da56ef3764",
                "tenant_id": "310df60f-2a10-4ee5-9554-98393092194c",
                "vip_id": "db902c0c-d5ff-4753-b465-668ad9656918",
                "name": "web_pool",
                "protocol": "HTTP",
                "lb_method": "ROUND_ROBIN",
                "subnet_id" : "e2a7a228-8fd1-4aa8-8d0c-4023a68e1c92",
                "members" : [
                              "c57f581b-c834-408f-93fa-30543cf30618",
                              "f2e37304-e3c1-4f96-9201-dd57a16adb75",
                              "cd701b32-7f55-4e8b-94a0-756cd85a684d"
                            ],
                "health_monitors" : [
                                     "954171e2-8816-4d59-a9d5-c85310b4508d"
                                    ],
                "admin_state_up" : true,
                "status" : "ACTIVE"
              },
              {
                "id":"91c20e53-96cd-4476-8efc-627f398773bb",
                "tenant_id": "310df60f-2a10-4ee5-9554-98393092194c",
                "vip_id": "02b1fef7-16f5-4917-bf19-c40a9af805ed",
                "protocol": "HTTPS",
                "subnet_id" : "e2a7a228-8fd1-4aa8-8d0c-4023a68e1c92",
                "lb_method" : "LEAST_CONNECTIONS",
                "members" : [
                              "fcbf4e80-2fc7-4c7a-8a2e-8ea929620df9",
                              "6ea4761c-f571-4ec8-a6ae-6a4baf7e49d",
                              "26c49527-999c-4ef5-9484-5c065414d3db"
                            ],
                "health_monitors" : [
                                     "3b4ee887-fff5-4e45-ac55-c34ee599061a"
                                   ],
                "admin_state_up" : true,
                "status" : "ACTIVE"
              },
              {
                "id":"41efe233-7591-43c5-9cf7-923964759f9e",
                "tenant_id": "310df60f-2a10-4ee5-9554-98393092194c",
                "vip_id": "36e08a3e-a78f-4b40-a229-1e7e23eee1ab",
                "protocol": "TCP",
                "subnet_id" : "ddc3ab81-1dac-4be3-a340-c7b7b5d89beb",
                "lb_method": "ROUND_ROBIN",
                "members" : [
                              "a24a6159-fc0f-4f42-ab10-5fe8763fef6e",
                              "8c65956d-8f3c-41a4-abc3-5311eb3b4ba9"
                            ],
                "health_monitors" : [
                                     "65479d91-36f4-4651-89c2-2daee22a3c78",
                                     "441d3298-bf31-4c3b-8433-7e93a7a3db16"
                                   ],
                "admin_state_up" : true,
                "status" : "ACTIVE"
              }
            ]
}

检索特定的池

动词 URI
GET /v1.0/pools/pool_id

此操作检索池的配置。

正常响应代码: 200

错误响应代码:serviceFault (500),serviceUnavailable (503),unauthorized (401),badRequest (400),overLimit (413)

此操作不需要请求主体。

此操作返回响应正文。成功时,返回的 Pool 对象可能包含以下属性

  • id
  • tenant_id
  • vip_id
  • name
  • description
  • subnet_id
  • protocol
  • lb_method
  • members
  • health_monitors
  • admin_state_up
  • status

请注意,仅在响应中返回具有值的属性。例如,如果池未与 vip 关联,则响应有效负载中不会返回 vip_id 属性。

示例。检索池的配置

JSON 请求


#!highlight javascript numbers=disable
GET /v1.0/pools/cfc6589d-f949-4c66-99d2-c2da56ef3764
Host: lbaas-service.cloudX.com:8651
Accept: application/json
X-Auth-Token:887665443383838

示例。列出池响应:JSON


#!highlight javascript numbers=disable
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 628

{
  "pool" : {
         "id":"cfc6589d-f949-4c66-99d2-c2da56ef3764",
         "tenant_id": "310df60f-2a10-4ee5-9554-98393092194c",
         "vip_id": "db902c0c-d5ff-4753-b465-668ad9656918",
         "name": "web_pool",
         "protocol": "HTTP",
         "lb_method": "ROUND_ROBIN",
         "subnet_id" : "e2a7a228-8fd1-4aa8-8d0c-4023a68e1c92",
         "members" : [
                      "c57f581b-c834-408f-93fa-30543cf30618",
                      "f2e37304-e3c1-4f96-9201-dd57a16adb75",
                      "cd701b32-7f55-4e8b-94a0-756cd85a684d"
                     ],
         "health_monitors" : [
                               "f784c3a7-c4e8-44da-bf12-5ff417d27555"
                             ],
         "admin_state_up" : true,
         "status" : "ACTIVE"
  }
}

创建池

动词 URI
POST /v1.0/pools

正常响应代码: 202

错误响应代码:serviceFault (500),serviceUnavailable (503),unauthorized (401),badRequest (400),overLimit (413)

添加池时,会为其分配一个唯一标识符,可用于查询、更改或删除它。

如果用户具有管理员角色,则可以通过在请求有效负载中指定 tenant_id 属性来为其他租户创建池。

此操作的调用者必须指定池的至少以下属性

  • tenant_id:仅当调用者具有管理员角色并希望为另一个租户创建池时才需要。
  • name:池的名称
  • subnet_id:池的成员将位于该网络上。只有位于此网络上的成员才能添加到池中。
  • lb_method:用于在池的成员之间分配负载的算法。此规范支持“ROUND_ROBIN”和“LEAST_CONNECTIONS”作为此属性的有效值。
  • protocol:池成员使用的协议

池的 status 可以在响应中取以下值之一:ACTIVE、PENDING_CREATE 或 ERROR。

示例。创建一个池

JSON 请求

#!highlight javascript numbers=disable
POST /v1.0/pools
Host: lbaas-service.cloudX.com:8651
Accept: application/json
Content-Type: application/json
X-Auth-Token:887665443383838
Content-Length: 194

{
  "pool" : {
            "name": "web_pool",
            "protocol": "HTTP",
            "lb_method" : "ROUND_ROBIN",
            "subnet_id" : "e2a7a228-8fd1-4aa8-8d0c-4023a68e1c92",
           }
}


JSON 响应


#!highlight javascript numbers=disable
HTTP/1.1 202 Accepted
Content-Type: application/json
Content-Length: 275

{
  "pool" : {
            "id":"cfc6589d-f949-4c66-99d2-c2da56ef3764",
            "tenant_id": "310df60f-2a10-4ee5-9554-98393092194c",
            "name": "web_pool",
            "protocol": "HTTP",
            "subnet_id" : "e2a7a228-8fd1-4aa8-8d0c-4023a68e1c92",
            "lb_method": "ROUND_ROBIN",
            "admin_state_up" : true,
            "status" : "PENDING_CREATE"
          }
}


更新池

动词 URI
PUT /v1.0/pools/pool_id

正常响应代码: 202

错误响应代码:serviceFault (500),serviceUnavailable (503),unauthorized (401),badRequest (400),overLimit (413)

此操作的调用者可以更新池的以下属性

  • name
  • description
  • lb_method
  • admin_state_up

池的 status 可以在响应中取以下值之一:ACTIVE、PENDING_UPDATE 或 ERROR。


#!wiki caution
Note

A Pool that is pending to be deleted (status="PENDING_DELETE") or has a "ERROR" status cannot be updated.


示例。更新池的名称

JSON 请求


#!highlight javascript numbers=disable
PUT /v1.0/pools/cfc6589d-f949-4c66-99d2-c2da56ef3764
Host: lbaas-service.cloudX.com:8651
Accept: application/json
Content-Type: application/json
X-Auth-Token:887665443383838
Content-Length: 194

{
  "pool" : {
            "name": "web_pool_1"
           }
}


JSON 响应

#!highlight javascript numbers=disable
HTTP/1.1 202 Accepted
Content-Type: application/json
Content-Length: 269

{
  "pool" : {
            "id":"cfc6589d-f949-4c66-99d2-c2da56ef3764",
            "tenant_id": "310df60f-2a10-4ee5-9554-98393092194c",
            "vip_id": "db902c0c-d5ff-4753-b465-668ad9656918",
            "name": "web_pool_1",
            "protocol": "HTTP",
            "subnet_id" : "e2a7a228-8fd1-4aa8-8d0c-4023a68e1c92",
            "lb_method": "ROUND_ROBIN",
            "members" : [
                          "c57f581b-c834-408f-93fa-30543cf30618",
                          "f2e37304-e3c1-4f96-9201-dd57a16adb75"
                        ],
            "admin_state_up" : true,
            "status" : "PENDING_UPDATE"
          }
}


删除池

动词 URI
DELETE /pools/pool_id

正常响应代码: 204

错误响应代码:serviceFault (500),serviceUnavailable (503),unauthorized (401),badRequest (400),overLimit (413)

此操作不需要请求主体。

此操作不返回响应主体。


#!wiki caution
Note

Attempting to remove a pool that is used in a VIP will result in a badRequest (400) error. First remove the pool from the VIP, then you can destroy the pool and its members.


示例。删除池

JSON 请求

#!highlight javascript numbers=disable
DELETE /v1.0/pools/cfc6589d-f949-4c66-99d2-c2da56ef3764
Host: lbaas-service.cloudX.com:8651
Accept: application/json
X-Auth-Token:887665443383838


JSON 响应

#!highlight javascript numbers=disable
HTTP/1.1 204 No Content


池成员

池的成员负责服务通过 vip 的虚拟 IP 接收到的请求。负载均衡方法用于在池成员之间分配请求或连接。

成员的权重决定了它与池中其他成员相比所服务的请求或连接的比例。例如,如果成员 A 的权重为 2,而成员 B 的权重为 1,则成员 A 将服务于成员 B 的两倍请求。如果未指定权重属性,则成员的权重隐式设置为“1”。

列出所有成员

动词 URI
GET /v1.0/members

列出所有池的所有成员的租户。

正常响应代码: 200

错误响应代码:serviceFault (500),serviceUnavailable (503),unauthorized (401),badRequest (400),overLimit (413)

此操作不需要请求主体。

此操作返回响应正文。成功时,返回的响应是一个(可能为空)列表,列表中的每个元素都是一个 Member 对象,其中可能包含以下属性

  • id
  • tenant_id
  • pool_id
  • address
  • protocol_port
  • weight
  • admin_state_up
  • status

示例。列出所有成员

JSON 请求

#!highlight javascript numbers=disable
GET /v1.0/members
Host: lbaas-service.cloudX.com:8651
Accept: application/json
X-Auth-Token:887665443383838


JSON 响应

#!highlight javascript numbers=disable
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 917

{
  "members" : [
              {
                "id":"c57f581b-c834-408f-93fa-30543cf30618",
                "tenant_id": "310df60f-2a10-4ee5-9554-98393092194c",
                "pool_id": "cfc6589d-f949-4c66-99d2-c2da56ef3764",
                "address": "192.168.224.31",
                "protocol_port": 8080,
                "weight" : 1,
                "admin_state_up" : true,
                "status" : "ACTIVE"
              },
              {
                "id":"f2e37304-e3c1-4f96-9201-dd57a16adb75",
                "tenant_id": "310df60f-2a10-4ee5-9554-98393092194c",
                "pool_id": "cfc6589d-f949-4c66-99d2-c2da56ef3764",
                "address": "192.168.224.32",
                "protocol_port" : 8081,
                "weight": 2,
                "admin_state_up" : true,
                "status" : "ACTIVE"
              },
              {
                "id":"cd701b32-7f55-4e8b-94a0-756cd85a684d",
                "tenant_id": "310df60f-2a10-4ee5-9554-98393092194c",
                "pool_id": "cfc6589d-f949-4c66-99d2-c2da56ef3764",
                "address": "192.168.224.35"
                "protocol_port": 8080,
                "weight" : 1,
                "admin_state_up" : false,
                "status" : "INACTIVE"
              },
              {
                "id":"fcbf4e80-2fc7-4c7a-8a2e-8ea929620df9",
                "tenant_id": "310df60f-2a10-4ee5-9554-98393092194c",
                "pool_id": "91c20e53-96cd-4476-8efc-627f398773bb",
                "address": "192.168.137.61",
                "protocol_port": 8443,
                "weight" : 1,
                "admin_state_up" : true,
                "status" : "ACTIVE"
              },
              {
                "id":"6ea4761c-f571-4ec8-a6ae-6a4baf7e49d",
                "tenant_id": "310df60f-2a10-4ee5-9554-98393092194c",
                "pool_id": "91c20e53-96cd-4476-8efc-627f398773bb",
                "address": "192.168.137.62",
                "protocol_port": 8443,
                "weight" : 1,
                "admin_state_up" : true,
                "status" : "ACTIVE"
              },
              {
                "id":"26c49527-999c-4ef5-9484-5c065414d3db",
                "tenant_id": "310df60f-2a10-4ee5-9554-98393092194c",
                "pool_id": "91c20e53-96cd-4476-8efc-627f398773bb",
                "address": "192.168.137.63",
                "protocol_port": 8443,
                "weight" : 1,
                "admin_state_up" : true,
                "status" : "ACTIVE"
              },
              {
                "id":"a24a6159-fc0f-4f42-ab10-5fe8763fef6e",
                "tenant_id": "310df60f-2a10-4ee5-9554-98393092194c",
                "pool_id": "41efe233-7591-43c5-9cf7-923964759f9e",
                "address": "192.168.200.114",
                "protocol_port": 3306,
                "weight" : 1,
                "admin_state_up" : true,
                "status" : "ACTIVE"
              },
              {
                "id":"8c65956d-8f3c-41a4-abc3-5311eb3b4ba9",
                "tenant_id": "310df60f-2a10-4ee5-9554-98393092194c",
                "pool_id": "41efe233-7591-43c5-9cf7-923964759f9e",
                "address": "192.168.200.132",
                "protocol_port": 3306,
                "weight" : 1,
                "admin_state_up" : true,
                "status" : "INACTIVE"
              }
            ]
}


检索特定的成员

动词 URI
GET /members/member_id

此操作检索成员的配置。

正常响应代码: 200

错误响应代码:serviceFault (500),serviceUnavailable (503),unauthorized (401),badRequest (400),overLimit (413)

此操作不需要请求主体。

此操作返回响应正文。成功时,返回的响应是一个 Member 对象,其中可能包含以下属性

  • id
  • tenant_id
  • pool_id
  • address
  • protocol_port
  • weight
  • admin_state_up
  • status

示例。检索池成员的配置

JSON 请求


#!highlight javascript numbers=disable
GET /v1.0/members/c57f581b-c834-408f-93fa-30543cf30618
Host: lbaas-service.cloudX.com:8651
Accept: application/json
X-Auth-Token:887665443383838

JSON 响应


#!highlight javascript numbers=disable
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 917

{
  "member" :  {
                "id":"c57f581b-c834-408f-93fa-30543cf30618",
                "tenant_id": "310df60f-2a10-4ee5-9554-98393092194c",
                "pool_id": "cfc6589d-f949-4c66-99d2-c2da56ef3764",
                "address": "192.168.224.31",
                "protocol_port": 8080,
                "weight" : 1,
                "admin_state_up" : true,
                "status" : "ACTIVE"
              }
}


创建池成员

动词 URI
POST /v1.0/members

正常响应代码: 202

错误响应代码:serviceFault (500),serviceUnavailable (503),unauthorized (401),badRequest (400),overLimit (413)

创建成员时,会为其分配一个唯一标识符,可用于变异操作,例如更改成员的 admin_state 或权重,或从池中删除成员。

此操作的调用者必须指定池的至少以下属性

  • tenant_id:仅当调用者具有管理员角色并希望为另一个租户创建池时才需要。
  • address:池网络上池成员的 IP 地址。
  • protocol_port:池成员侦听请求或连接的端口。
  • pool_id: 成员所属的池。

响应中成员的状态可以是以下值之一:ACTIVE(活动)、PENDING_CREATE(创建中)或 ERROR(错误)。


#!wiki caution
Note:

When a member is added to a pool, it is enabled by default (admin_state_up = true) unless admin_state_up was set to false.


示例。创建一个成员

在此示例中,我们将第一个 2 个成员添加到一个池,并将第三个成员添加到第二个池。

JSON 请求

#!highlight javascript numbers=disable
POST /v1.0/members
Host: lbaas-service.cloudX.com:8651
Accept: application/json
Content-Type: application/json
X-Auth-Token:887665443383838
Content-Length: 826
{
      "member" : {
                   "address": "192.168.224.31",
                   "protocol_port": 8080,
                   "pool_id": "cfc6589d-f949-4c66-99d2-c2da56ef3764"
                 }
}


JSON 响应


#!highlight javascript numbers=disable
HTTP/1.1 202 Accepted
Content-Type: application/json
Content-Length: 917

{
  "member" : {
                "id":"c57f581b-c834-408f-93fa-30543cf30618",
                "tenant_id": "310df60f-2a10-4ee5-9554-98393092194c",
                "pool_id": "cfc6589d-f949-4c66-99d2-c2da56ef3764",
                "address": "192.168.224.31",
                "protocol_port": 8080,
                "weight" : 1,
                "admin_state_up" : true,
                "status" : "PENDING_CREATE"

              }
}


更新成员

动词 URI
PUT /v1.0/members/member_id

正常响应代码: 202

错误响应代码:serviceFault (500),serviceUnavailable (503),unauthorized (401),badRequest (400),overLimit (413)

调用此操作的用户可以更新成员的以下属性

  • pool_id
  • weight
  • admin_state_up

响应中成员的状态可以是以下值之一:ACTIVE(活动)、PENDING_UPDATE(更新中)或 ERROR(错误)。


#!wiki caution
Note

The member's address and protocol_port are immutable attributes and cannot be modified with a PUT request. Supplying an unsupported attribute will result in a 400 (badRequest) fault. A pool supports a
maximum number of members. The maximum number of members per pool is returned when querying the limits of the LBaaS service.


#!wiki caution
Note

A pool member that is pending deletion or has an ERROR status cannot be updated.


池中的每个成员都处于启用或禁用状态,这决定了它在池中的作用,使用 admin_state_up 属性。当成员的 admin_state_up=true 时,该成员允许接受新的连接或请求。其状态最终将变为 ACTIVE 以反映此配置。当成员的 admin_state_up=false 时,无论会话持久性配置如何,该成员都不允许接受任何新的连接或请求。与该成员的现有连接将被优雅地释放或强制终止。配置成功应用后,成员的状态将更改为 INACTIVE(非活动)。

示例。禁用一个池成员

JSON 请求

#!highlight javascript numbers=disable
PUT /v1.0/members/c57f581b-c834-408f-93fa-30543cf30618
Host: lbaas-service.cloudX.com:8651
Accept: application/json
Content-Type: application/json
X-Auth-Token:887665443383838
Content-Length: 826

{
  "member" :  {
                "admin_state_up": false
              }
}

JSON 响应


#!highlight javascript numbers=disable
HTTP/1.1 202 ACCEPTED
Content-Type: application/json
Content-Length: 917

{
  "member" : {
                "id":"c57f581b-c834-408f-93fa-30543cf30618",
                "tenant_id": "310df60f-2a10-4ee5-9554-98393092194c",
                "pool_id": "cfc6589d-f949-4c66-99d2-c2da56ef3764",
                "address": "192.168.224.31",
                "protocol_port": 8080,
                "weight" : 1,
                "admin_state_up" : false,
                "status" : "PENDING_UPDATE"
             }
}

移除一个 Member

动词 URI
DELETE /v1.0/members/member_id 从池中移除一个成员。

正常响应代码: 204

错误响应代码:serviceFault (500),serviceUnavailable (503),unauthorized (401),badRequest (400),overLimit (413)

此操作不需要请求主体。

此操作不返回响应主体。

示例。从其池中移除一个成员

JSON 请求


#!highlight javascript numbers=disable
DELETE /v1.0/members/c57f581b-c834-408f-93fa-30543cf30618
Host: lbaas-service.cloudX.com:8651
Accept: application/json
X-Auth-Token:887665443383838

JSON 响应


#!highlight javascript numbers=disable
HTTP/1.1 204 No Content

健康监控

动词 URI
GET /v1.0/health_monitors/
GET /v1.0/health_monitors/health_monitor_id
PUT /v1.0/health_monitors/health_monitor_id
DELETE /v1.0/health_monitors/health_monitor_id 移除健康监控。

正常响应代码: 200, 202, 204

错误响应代码:serviceFault (500),serviceUnavailable (503),unauthorized (401),badRequest (400),overLimit (413)

主动健康监控提供 3 种类型的健康监控。调用方可以在负载均衡器上配置一个健康监控。

健康监控具有一个 type 属性,用于指示它是 3 种类型中的哪一种。此规范中提供的 3 种类型如下所述。

表 4.4. 健康监控类型

姓名
PING
TCP
HTTP
HTTPS

在创建健康监控时需要指定的属性取决于健康监控类型。

创建健康监控

动词 URI
POST /v1.0/health_monitors 创建一个健康监控器。

正常响应代码: 202

错误响应代码:serviceFault (500),serviceUnavailable (503),unauthorized (401),badRequest (400),overLimit (413)

创建 PING 健康监控

监控 ping 成员,以确保成员处于活动状态。

PING 监控器是最基本的健康检查类型。必须指定以下可配置属性

  • delay:成员的常规 ping 之间的最小时间(秒)。
  • timeout:监控等待 ping 响应之前的最大秒数,超时后将停止等待。该值必须小于 delay 值。
  • max_retries: 在将成员状态更改为 INACTIVE 之前允许的 ping 失败次数。必须是 1 到 10 之间的数字。

响应中健康监控器的状态可以是以下值之一:ACTIVE(活动)、PENDING_CREATE(创建中)或 ERROR(错误)。

示例。监控 PING

JSON 请求

#!highlight javascript numbers=disable
POST /v1.0/health_monitors
Host: lbaas-service.cloudX.com:8651
Accept: application/json
Content-Type: application/json
X-Auth-Token:887665443383838
Content-Length: 91

{
    "health_monitor" :
      {
         "type" : "PING",
         "delay" : 20,
         "timeout": 10,
         "max_retries": 3
      }
}


JSON 响应

#!highlight javascript numbers=disable
HTTP/1.1 202 Accepted
Content-Type: application/json
Content-Length: 114

{
    "health_monitor" :
      {
         "id" : "f784c3a7-c4e8-44da-bf12-5ff417d27555",
         "type" : "PING",
         "delay" : 20,
         "timeout": 10,
         "max_retries": 3,
         "admin_state_up": true,
         "status": "PENDING_CREATE"
      }
}
创建 TCP 健康监控

TCP 监控尝试建立与成员的 TCP 连接,以确保成员处于健康状态。

对于 TCP 监控器,必须指定以下可配置属性

  • delay:成员的常规连接之间的最小时间(秒)。
  • timeout:监控等待建立连接之前的最大秒数,超时后将停止等待。该值必须小于 delay 值。
  • max_retries: 在将成员状态更改为 INACTIVE 之前允许的连接失败次数。必须是 1 到 10 之间的数字。

响应中健康监控器的状态可以是以下值之一:ACTIVE(活动)、PENDING_CREATE(创建中)或 ERROR(错误)。

示例。创建一个 TCP 监控器

JSON 请求

#!highlight javascript numbers=disable
POST /v1.0/health_monitors
Host: lbaas-service.cloudX.com:8651
Accept: application/json
Content-Type: application/json
X-Auth-Token:887665443383838
Content-Length: 91

{
    "health_monitor" :
      {
         "type" : "TCP",
         "delay" : 20,
         "timeout": 10,
         "max_retries": 3
      }
}


JSON 响应


#!highlight javascript numbers=disable
HTTP/1.1 202 Accepted
Content-Type: application/json
Content-Length: 114

{
    "health_monitor" :
      {
         "id" : "e5069610-744b-42a7-8bd8-ceac1a229cd4",
         "type" : "TCP",
         "delay" : 20,
         "timeout": 10,
         "max_retries": 3,
         "admin_state_up": true,
         "status": "PENDING_CREATE"

      }
}
创建 HTTP 或 HTTPS 健康监控

HTTP 和 HTTPS 监控器比 TCP 监控器更智能。它能够处理 HTTP 或 HTTPS 响应来确定成员的状态。它支持与 TCP 监控器相同的基本属性,并包含用于评估监控探测的 HTTP 响应的附加属性 path

  • http_method: 监控器请求中使用的 HTTP 方法。如果未指定此属性,则默认值为“GET”。
  • url_path: 监控器用于测试成员健康的 HTTP 请求中使用的 HTTP 路径。这必须是一个以 /(正斜杠)开头的字符串。如果未指定,则默认值为“/”。
  • expected_codes: 这些是成员返回以声明其健康状态的 HTTP 状态代码列表。此
  attribute can contain one value, or a list of values separated by comma, or a range of values (e.g. "200-299"). If this attribute
  is not specified, it defaults to "200".

响应中健康监控器的状态可以是以下值之一:ACTIVE(活动)、PENDING_CREATE(创建中)或 ERROR(错误)。

示例。创建一个 HTTP 监控器

JSON 请求

#!highlight javascript numbers=disable
POST /v1.0/health_monitors
Host: lbaas-service.cloudX.com:8651
Accept: application/json
Content-Type: application/json
X-Auth-Token:887665443383838
Content-Length: 91

{
    "health_monitor" :
      {
         "type" : "HTTP",
         "delay" : 20,
         "timeout": 10,
         "max_retries": 3,
         "http_method" : "HEAD", 
         "path" : "/check",
         "expected_codes" : "200-299"
      }
}


JSON 响应

#!highlight javascript numbers=disable
HTTP/1.1 202 Accepted
Content-Type: application/json
Content-Length: 114

{
    "health_monitor" :
      {
         "id" : "f3eeab00-8367-4524-b662-55e64d4cacb5",
         "type" : "HTTP",
         "delay" : 20,
         "timeout": 10,
         "max_retries": 3,
         "http_method" : "GET",
         "url_path" : "/",
         "expected_codes" : "200,202",
         "admin_state_up": true,
         "status": "PENDING_CREATE"
      }
}


更新健康监控

动词 URI
PUT /v1.0/health_monitors/health_monitor_id 更新一个健康监控器。

健康监控器的所有属性都可以更新,除了 type 属性,它是不可变的。

响应中健康监控器的状态可以是以下值之一:ACTIVE(活动)、PENDING_UPDATE(更新中)或 ERROR(错误)。


#!wiki caution
Note

A Health Monitor that is pending deletion or has an ERROR status cannot be updated.


以下示例说明了如何更新健康监控器。

示例。更新一个 TCP 监控器

JSON 请求

#!highlight javascript numbers=disable
PUT /v1.0/health_monitors/e5069610-744b-42a7-8bd8-ceac1a229cd4
Host: lbaas-service.cloudX.com:8651
Accept: application/json
Content-Type: application/json
X-Auth-Token:887665443383838
Content-Length: 41

{
    "health_monitor" :
      {
         "delay" : 30,
         "max_retries": 2
      }
}


JSON 响应


#!highlight javascript numbers=disable
HTTP/1.1 202 Accepted
Content-Type: application/json
Content-Length: 114

{
    "health_monitor" :
      {
         "id" : "e5069610-744b-42a7-8bd8-ceac1a229cd4",
         "type" : "TCP",
         "delay" : 30,
         "timeout": 10,
         "max_retries": 2,
         "admin_state_up": true,
         "status": "PENDING_UPDATE"
      }
}


删除一个健康监控器

删除健康监控器时,它将自动与所有使用它的池分离。

示例。删除一个 TCP 监控器

JSON 请求

#!highlight javascript numbers=disable
DELETE /v1.0/health_monitors/e5069610-744b-42a7-8bd8-ceac1a229cd4
Host: lbaas-service.cloudX.com:8651
Accept: application/json
X-Auth-Token:887665443383838


JSON 响应


#!highlight javascript numbers=disable
HTTP/1.1 204 No Content


列出所有健康监控

此操作返回响应体。成功时,返回的响应是一个(可能为空)列表,列表中的每个元素都是一个健康监控器对象,可以包含以下属性

  • id
  • type
  • delay
  • timeout
  • max_retries
  • admin_state_up
  • status

此外,如果健康监控器的类型是 HTTP 或 HTTPS,则还存在以下属性

  • http_method
  • url_path
  • expected_codes

示例。列出此租户可访问的所有健康监控器

JSON 请求

#!highlight javascript numbers=disable
GET /v1.0/health_monitors
Host: lbaas-service.cloudX.com:8651
Accept: application/json
X-Auth-Token:887665443383838


JSON 响应

#!highlight javascript numbers=disable
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 114

{
   "health_monitors" : [
                       {
                         "id" : "e5069610-744b-42a7-8bd8-ceac1a229cd4",
                         "type" : "TCP",
                         "delay" : 30,
                         "timeout": 10,
                         "max_retries": 2,
                         "admin_state_up": true,
                         "status": "ACTIVE"
                        },
                        {
                          "id" : "f3eeab00-8367-4524-b662-55e64d4cacb5",
                          "type" : "HTTP",
                          "delay" : 20,
                          "timeout": 10,
                          "max_retries": 3,
                          "http_method" : "GET",
                          "url_path" : "/check",
                          "expected_codes" : "200,202",
                          "admin_state_up": true,
                          "status": "PENDING_CREATE"
                         }
                 ]
}


将健康监控与池关联

您可以将健康监控器与现有池关联。关联后,健康监控器将开始监控池的成员,如果成员被认为不健康,将停用这些成员。如果任何健康监控器发现成员不健康,则可以停用成员(将状态设置为 INACTIVE)。

响应将返回与池关联的所有健康监控的当前列表。

示例:将健康监控添加到池的监控器

JSON 请求

#!highlight javascript numbers=disable
POST /v1.0/pools/cfc6589d-f949-4c66-99d2-c2da56ef3764/health_monitors
Host: lbaas-service.cloudX.com:8651
Accept: application/json
X-Auth-Token:887665443383838

{
    "id" : "f3eeab00-8367-4524-b662-55e64d4cacb5"
}


JSON 响应

#!highlight javascript numbers=disable
HTTP/1.1 202 Accepted
Content-Type: application/json
Content-Length: 114

{
    "id" : "f784c3a7-c4e8-44da-bf12-5ff417d27555",
}

请注意,在处理关联时,池状态将更改为 PENDING_UPDATE。池状态为 ACTIVE 表示更改已成功进行。

将健康监控与池分离

您可以将健康监控与池分离。分离成功后,健康监控将不再检查池成员的健康状况。

请注意,在处理分离时,池状态将更改为 PENDING_UPDATE。池状态为 ACTIVE 表示更改已成功进行。

示例:将健康监控从池分离

JSON 请求

#!highlight javascript numbers=disable
DELETE /v1.0/pools/cfc6589d-f949-4c66-99d2-c2da56ef3764/health_monitors/f3eeab00-8367-4524-b662-55e64d4cacb5
Host: lbaas-service.cloudX.com:8651
Accept: application/json
X-Auth-Token:887665443383838


JSON 响应

#!highlight javascript numbers=disable
HTTP/1.1 204 No Content

统计信息

检索池的流量统计信息

姓名 URI
GET /v1.0/pools/pool_id/stats

正常响应代码 200

错误响应代码:serviceFault (500),serviceUnavailable (503),unauthorized (401),badRequest (400),overLimit (413)

此操作检索池所有成员的汇总流量统计信息。返回的统计信息不一定是实时的,并且可能在后台定期收集,并在本次调用期间将缓存的数据返回给用户。

此操作不需要请求主体。

池状态报告提供一组状态计数器。此列表将至少包含以下计数器

  • bytes_in:池成员从客户端接收到的总字节数。
  • bytes_out:池成员发送给客户端的总字节数。
  • active_connections:池成员当前正在服务的活动连接数。
  • total_connections:池成员处理的总连接数。

示例。检索池的统计信息

JSON 请求

#!highlight javascript numbers=disable
GET /v1.0/pools/cfc6589d-f949-4c66-99d2-c2da56ef3764/stats
Host: lbaas-service.cloudX.com:8651
Accept: application/json
X-Auth-Token:887665443383838


JSON 响应

#!highlight javascript numbers=disable
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 114

{
    "stats" : {
                         "bytes_in" : 36839202,
                         "bytes_out" : 673193022,
                         "active_connections" : 39,
                         "total_connections" : 682
              }
}