跳转到: 导航, 搜索

Neutron/LBaaS/API

< Neutron‎ | LBaaS

OpenStack LBaaS API 1.0

概述

预期读者

预期读者

本指南面向使用 LBaaS API v1.0 创建应用程序的软件开发人员。要使用此信息,您应该对 OpenStack LBaaS 服务、OpenStack Quantum 服务以及两者之间的集成有一个大致的了解。

您还应该熟悉

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

文档变更历史

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

修订日期
2012 年 10 月 25 日

资源

结合本指南使用以下资源

资源
待定

第 1 章:概述

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

LBaaS 服务提供的功能包括

 <tbd>

高级任务流程

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

  • 租户创建一个池,最初为空
  • 租户在池中创建一个或多个成员
  • 租户创建一个或多个健康检查
  • 租户将健康检查与池关联
  • 租户使用池创建一个 vip

概念

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

VIP

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

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

池成员

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

健康监控

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

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

会话持久性

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

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

连接限制

为了控制 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 开发者指南。

默认授权设置仅允许管理用户代表其他租户创建资源。

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

基于操作的策略

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

基于资源的策略

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

请求/响应类型

LBaaS API v1.0 支持 JSON 数据序列化格式。这意味着对于包含正文的请求,Content-Type 标头必须设置为 MIME 类型值“application/json”。此外,客户端必须通过指定 Accept 标头和 MIME 类型值“application/json”或将“.json”扩展名添加到资源名称来接受 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 的网络


#!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 具有限制返回的属性集的一种机制。例如,返回 id。

您可以使用 fields 查询参数来控制从 LBaaS API v1.0 返回的属性。

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


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

同步与异步插件行为

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

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

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

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

批量创建操作

LBaaS API v1.0 使您能够在同一个 API 请求中创建相同类型的多个对象。批量创建操作使用与单个创建操作完全相同的 API 语法,除了您在请求正文中指定一个对象列表而不是单个对象。

批量操作始终以原子方式执行,这意味着请求正文中所有对象都创建成功,或者都不创建。如果特定的插件不支持原子操作,则 LBaaS API v1.0 会模拟原子行为,以便用户可以期望相同的行为,而与在后台运行的特定插件无关。

如果 LBaaS 服务未部署对批量操作的支持,并且当客户端尝试批量创建操作时,将返回 400 Bad Request 错误。

有关如何将批量请求提交到 LBaaS API v1.0 的信息,请参阅“批量创建成员”部分。

配额

[待定]

通知

[待定]

扩展

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 错误请求
404 未找到
409 冲突
413 超出限制
422 不可变
500 内部服务器错误
503 服务不可用

提交请求到 LBaaS API v1.0 的用户也可能收到以下错误

401 Unauthorized - 如果提供的凭据无效。

403 Forbidden - 如果用户无法访问特定资源或执行请求的操作。

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


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

{
   "errorcode": 409,
   "errormessage": "pool is already used by an existing VIP"
}


第 3 章。API 操作

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

VIP

使用 LBaaS API v1.0 管理网络资源

动词 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/

正常响应代码: 202

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

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

此操作不需要请求主体。

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

  • id
  • tenant_id
  • name
  • description
  • network_id
  • address
  • port
  • lbmethod
  • 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
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",
           "network_id": "96a4386a-f8c3-42ed-afce-d7954eee77b3",
           "address" : "10.30.176.47",
           "protocol": "HTTP",
           "port": 80,
           "lb_method": "ROUND_ROBIN",
           "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",
           "network_id": "9cedb85d-0759-4898-8a4b-fa5a5ea10086",
           "address" : "10.30.176.48",
           "protocol": "TCP",
           "port": 3306,
           "lb_method": "LEAST_CONNECTIONS",
           "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

正常响应代码: 202

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

此操作返回与您的租户帐户关联的 vip 对象。

此操作不需要请求主体。

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

  • id
  • tenant_id
  • name
  • description
  • network_id
  • address
  • port
  • lb_method
  • 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
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",
           "network_id": "9cedb85d-0759-4898-8a4b-fa5a5ea10086",
           "address" : "10.30.176.47",
           "protocol": "TCP",
           "port": 3306,
           "lb_method": "LEAST_CONNECTIONS",
           "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:只有当用户具有管理员角色时,他才能指定与其不同的 tenant_id。
  • network_id:要在其上分配 vip 地址的网络。租户只能在其授权的网络上创建 vip(例如,她自己的网络或共享/提供者网络)。
  • protocol:vip 地址的协议。
  • port:用于监听与 vip 地址关联的客户端流量的端口。
  • pool_id:包含负载均衡的真实服务器的池的 ID。

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

  • lb_method:默认方法是 ROUND_ROBIN
  • admin_state_up:vip 的默认配置状态为 UP,因此此属性的默认值为 true。

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

用户可以通过简单地在请求中提供其他元素或属性来在创建时配置 vip 的所有已记录功能。本文档概述了负载均衡服务支持的所有功能。

具有管理员角色的用户可以通过指定与其自身不同的 tenant_id 属性为其他租户创建 vip。

示例 4.6。创建 vip(必需属性)请求:JSON

示例。使用共享地址创建 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

{
  "vips":[
         {
           "tenant_id": "310df60f-2a10-4ee5-9554-98393092194c",
           "name": "web_vip",
           "network_id": "96a4386a-f8c3-42ed-afce-d7954eee77b3",
           "protocol": "HTTP",
           "port": 80,
           "pool_id" : "cfc6589d-f949-4c66-99d2-c2da56ef3764"
         }
      ]
}

JSON 响应


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

{
  "vips":[
         {
           "id": "02b1fef7-16f5-4917-bf19-c40a9af805ed",
           "tenant_id": "310df60f-2a10-4ee5-9554-98393092194c",
           "name": "web_vip",
           "network_id": "96a4386a-f8c3-42ed-afce-d7954eee77b3",
           "address" : "10.30.176.47",
           "protocol": "HTTPS",
           "port": 443,
           "lb_method": "ROUND_ROBIN",
           "pool_id" : "cfc6589d-f949-4c66-99d2-c2da56ef3764",
           "admin_state_up": true,
           "status": "PENDING_CREATE"
         }
      ]
}

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

一旦将地址分配给用户,用户可以使用相同的地址但使用不同的端口创建其他 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

{
  "vips":[
         {
           "name": "ssl_vip",
           "network_id": "96a4386a-f8c3-42ed-afce-d7954eee77b3",
           "address" : "10.30.176.47",
           "protocol": "HTTPS",
           "port": 443,
           "pool_id" : "91c20e53-96cd-4476-8efc-627f398773bb"
         }
      ]
}

JSON 响应


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

{
  "vips":[
         {
           "id": "02b1fef7-16f5-4917-bf19-c40a9af805ed",
           "tenant_id": "310df60f-2a10-4ee5-9554-98393092194c",
           "name": "ssl_vip",
           "network_id": "96a4386a-f8c3-42ed-afce-d7954eee77b3",
           "address" : "10.30.176.47",
           "protocol": "HTTPS",
           "port": 443,
           "lb_method": "ROUND_ROBIN",
           "pool_id" : "91c20e53-96cd-4476-8efc-627f398773bb",
           "admin_state_up": true,
           "status": "PENDING_CREATE"
         }
      ]
}

更新 VIP

动词 URI 描述
PUT /1.0/vips/vip_id

正常响应代码: 202

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

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

此操作允许调用者更改以下属性之一或多个

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

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


#!wiki caution
Note

The load balancer's ID, status, network_id, address, port and protocol are immutable attributes and cannot be modified once a vip is created. Supplying an unsupported attribute will result in a 400 (badRequest) fault.

示例。更新 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",
           "lb_method": "LEAST_CONNECTIONS",
           "session_persistence": { "type": "HTTP_COOKIE" }
         }
}

JSON 响应


#!highlight javascript numbers=disable
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",
           "network_id": "96a4386a-f8c3-42ed-afce-d7954eee77b3",
           "address" : "10.30.176.47",
           "protocol": "HTTPS",
           "port": 443,
           "lb_method": "LEAST_CONNECTIONS",
           "pool_id" : "cfc6589d-f949-4c66-99d2-c2da56ef3764",
           "session_persistence": { "type": "HTTP_COOKIE" },
           "admin_state_up": true,
           "status": "PENDING_UPDATE"
         }
}

表 4.1。vip 状态

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

删除 VIP

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

正常响应代码: 202

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

删除 vip 函数删除指定的 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
202 Accepted

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

每个 vip 对象可以与一个池关联。一个池不能被多个 vip 使用。

列出所有池

动词 URI 描述
GET /v1.0/pools

列出租户的所有池。

正常响应代码: 200

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

此操作不需要请求主体。

示例 4.13。列出池请求: JSON 请求


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

示例。列出池响应:JSON


#!highlight javascript numbers=disable
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",
                "network_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",
                "network_id" : "e2a7a228-8fd1-4aa8-8d0c-4023a68e1c92",
                "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",
                "network_id" : "ddc3ab81-1dac-4be3-a340-c7b7b5d89beb",
                "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

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

此操作不需要请求主体。

示例 4.15。检索池的配置

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
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",
         "network_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

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

添加池时,会为其分配一个唯一的标识符,可用于查询、更改或删除它。可选地,您还可以在创建时通过指定 vip_id 属性将池分配给 vip。

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

示例 4.15。创建池

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

{
  "pools" : [
         {
            "name": "web_pool",
            "vip_id": "db902c0c-d5ff-4753-b465-668ad9656918",
            "protocol": "HTTP",
            "network_id" : "e2a7a228-8fd1-4aa8-8d0c-4023a68e1c92",
            "members" : [
                          "c57f581b-c834-408f-93fa-30543cf30618",
                          "f2e37304-e3c1-4f96-9201-dd57a16adb75"
                        ]
        }
   ]
}

JSON 响应


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

{
  "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",
            "network_id" : "e2a7a228-8fd1-4aa8-8d0c-4023a68e1c92",
            "members" : [
                          "c57f581b-c834-408f-93fa-30543cf30618",
                          "f2e37304-e3c1-4f96-9201-dd57a16adb75"
                        ],
            "admin_state_up" : true,
            "status" : "PENDING_CREATE"
          }
        ]
}

更新池

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

正常响应代码: 202

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

此操作不返回响应主体。

示例 4.21。更新池名称

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
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",
            "network_id" : "e2a7a228-8fd1-4aa8-8d0c-4023a68e1c92",
            "members" : [
                          "c57f581b-c834-408f-93fa-30543cf30618",
                          "f2e37304-e3c1-4f96-9201-dd57a16adb75"
                        ],
            "admin_state_up" : true,
            "status" : "PENDING_UPDATE"
          }
}

删除池

动词 URI
DELETE /pools/pool_id

正常响应代码: 200, 202

错误响应代码:loadbalancerFault (400, 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 remove the pool.

示例 4.21。删除池

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
202 Accepted


#!wiki caution
Note

A pool that is pending to be deleted cannot be updated.

池成员

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

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

列出所有成员

动词 URI
GET /v1.0/members

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

正常响应代码: 200

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

此操作不需要请求主体。

示例:列出所有成员

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
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",
                "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",
                "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"
                "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",
                "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",
                "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",
                "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",
                "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",
                "port": 3306,
                "weight" : 1,
                "admin_state_up" : true,
                "status" : "INACTIVE"
              }
            ]
}

列出特定池的所有成员

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

列出特定池的所有成员。

正常响应代码: 200

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

此操作不需要请求主体。

示例:列出所有成员

JSON 请求


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

JSON 响应


#!highlight javascript numbers=disable
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",
                "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",
                "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"
                "port": 8080,
                "weight" : 1,
                "admin_state_up" : false,
                "status" : "INACTIVE"
              }
            ]
}

检索特定的成员

动词 URI 描述
GET /members/member_id

此操作检索节点的配置。

正常响应代码: 200

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

此操作不需要请求主体。

示例。检索成员的配置

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
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",
                "port": 8080,
                "weight" : 1,
                "admin_state_up" : true,
                "status" : "ACTIVE"
              }
}

批量创建成员

动词 URI 描述
POST /v1.0/members 将成员添加到池。

正常响应代码: 202

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

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


#!wiki caution
Note:

When a member is added to a load balancer, it is enabled by default (admin_state_up = true).

示例 4.17。添加成员

在此示例中,我们将第一个 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

{
  "members" : [
              {
                "address": "192.168.224.31",
                "port": 8080,
                "pool_id": "cfc6589d-f949-4c66-99d2-c2da56ef3764"
              },
              {
                "address": "192.168.224.32",
                "port" : 8081,
                "weight" : 2,
                "pool_id": "cfc6589d-f949-4c66-99d2-c2da56ef3764"
              },
              {
                "address": "192.168.137.61",
                "port": 8443,
                "pool_id": "91c20e53-96cd-4476-8efc-627f398773bb"
              }
            ]
}

JSON 响应


#!highlight javascript numbers=disable
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",
                "port": 8080,
                "weight" : 1,
                "admin_state_up" : true,
                "status" : "PENDING_CREATE"
              },
              {
                "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",
                "port" : 8081,
                "weight" : 2,
                "admin_state_up" : true,
                "status" : "PENDING_CREATE"
              },
              {
                "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",
                "port": 8443,
                "weight" : 1,
                "admin_state_up" : true,
                "status" : "PENDING_CREATE"
              }
            ]
}

更新成员

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

正常响应代码: 202

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

此操作不返回响应主体。


#!wiki caution
Note

The member's address and 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 nodes. The maximum number of nodes per pool is returned when querying the limits of the LBaaS service.

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

示例 4.21。禁用成员

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
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",
                "port": 8080,
                "weight" : 1,
                "admin_state_up" : false,
                "status" : "PENDING_UPDATE"
             }
}

移除一个 Member

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

正常响应代码: 200, 202

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

此操作不需要请求主体。

此操作不返回响应主体。

示例 4.21。从其池中删除成员

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
202 Accepted

健康监控

动词 URI
GET /v1.0/healthmonitors/
GET /v1.0/healthmonitors/healthmonitor_id
PUT /v1.0/healthmonitors/healthmonitor_id 更新健康检查的设置。
DELETE /v1.0/healthmonitors/healthmonitor_id 移除健康监控。

正常响应代码: 200, 202

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

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

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

表 4.4. 健康监控类型

姓名
PING
TCP
HTTP
HTTPS

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

创建 PING 健康监控

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

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

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

示例 4.27。监视 PING


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

{
    "healthmonitor" :
      {
         "type" : "PING",
         "delay" : 20,
         "timeout": 10,
         "attemptsBeforeDeactivation": 3
      }
}

JSON 响应


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

{
    "healthmonitor" :
      {
         "id" : "f784c3a7-c4e8-44da-bf12-5ff417d27555",
         "type" : "PING",
         "delay" : 20,
         "timeout": 10,
         "attemptsBeforeDeactivation": 3,
         "admin_state_up": true,
         "status": "PENDING_CREATE"
      }
}

创建 TCP 健康监控

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

可以指定以下可配置属性以进行 TCP 监视

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

示例。监视 TCP


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

{
    "healthmonitor" :
      {
         "type" : "TCP",
         "delay" : 20,
         "timeout": 10,
         "attemptsBeforeDeactivation": 3
      }
}

JSON 响应


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

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

      }
}

创建 HTTP 或 HTTPS 健康监控

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

  • path:监视器用于测试成员健康的 HTTP 请求中使用的 HTTP 路径。这必须以 /(正斜杠)开头。监视器期望从节点收到 HTTP 状态码为 200 的响应。

示例。监视 TCP


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

{
    "healthmonitor" :
      {
         "type" : "HTTP",
         "delay" : 20,
         "timeout": 10,
         "attemptsBeforeDeactivation": 3,
         "path" : "/check",
         "error_codes" : "200-299"
      }
}

JSON 响应


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

{
    "healthmonitor" :
      {
         "id" : "f3eeab00-8367-4524-b662-55e64d4cacb5",
         "type" : "HTTP",
         "delay" : 20,
         "timeout": 10,
         "attemptsBeforeDeactivation": 3,
         "path" : "/check",
         "error_codes" : "200-299",
         "admin_state_up": true,
         "status": "PENDING_CREATE"
      }
}

将健康检查关联和取消关联到池

创建健康检查后,可以将其与一个或多个池关联。

动词 URI
GET /v1.0/pools/pool_id/healthmonitors
POST /v1.0/pools/pool_id/healthmonitors
DELETE /v1.0/pool_id/pool_id/healthmonitors/healthmonitor_id 将健康检查从池取消关联。

正常响应代码: 200, 202

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

列出与池关联的所有健康检查

示例。列出池的健康检查


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

JSON 响应


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

{
    "healthmonitors" : [
                         "f784c3a7-c4e8-44da-bf12-5ff417d27555",
                         "e5069610-744b-42a7-8bd8-ceac1a229cd4"
                       ]
}
将健康监控与池关联

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

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

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


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

{
    "healthmonitors" : [
                         "f3eeab00-8367-4524-b662-55e64d4cacb5"
                       ]
}

JSON 响应


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

{
    "healthmonitors" : [
                         "f784c3a7-c4e8-44da-bf12-5ff417d27555",
                         "e5069610-744b-42a7-8bd8-ceac1a229cd4",
                         "f3eeab00-8367-4524-b662-55e64d4cacb5"
                       ]
}

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

将健康监控与池分离

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

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

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


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

JSON 响应


#!highlight xml numbers=disable
202 Accepted

统计信息

列出池的流量统计信息

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

正常响应代码:200

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

此操作不需要请求主体。

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

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

示例 4.25. 获取池的统计信息


#!highlight json 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 xml numbers=disable
200 OK
Content-Type: application/json
Content-Length: 114

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

协议

列出支持的负载均衡协议

动词 URI
GET /v1.0/protocols

正常响应代码: 200

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

此操作不需要请求主体。

所有 VIP 和成员必须配置此列表中的协议值。VIP 的协议和池的协议必须相互兼容,在本 API 规范版本中,这意味着它们必须相同。

此规范的所有 LBaaS 实现必须至少支持以下协议

  • TCP
  • HTTP
  • HTTPS

当协议为 HTTPS 时,在 VIP 上接收到的流量将进行 SSL 加密,并按原样转发到池成员。负载均衡器不会解密流量。由于请求不透明,当 VIP 的协议为 HTTPS 时,无法配置 HTTP_COOKIE 会话持久性。

示例:列出支持的协议


#!highlight javascript numbers=disable
{
 "protocols": [
               {
                 "name": "TCP",
               },
               {
                 "name": "HTTP",
               },
               {
                 "name": "HTTPS",
               }
              ]
}

LB 方法

所有 LB 方法都使用一种算法来定义如何选择一个成员来处理到达 VIP 的新请求或连接。新创建的 VIP 的默认算法是 ROUND_ROBIN,可以在创建时或在 VIP 初始配置后更改。

算法名称在负载均衡 API 的主要版本中应保持不变,尽管可以在此 API 的给定主要版本中创建具有唯一算法名称的新算法。

表 4.6. 负载均衡算法

姓名
LEAST_CONNECTIONS
ROUND_ROBIN

列出支持的负载均衡方法

动词 URI
GET /v1.0/lb_methods

正常响应代码: 200

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

此操作不需要请求主体。

示例 4.48. 列出负载均衡算法响应:XML


#!highlight javascript numbers=disable
200 OK
Content-type: application/json
Content-length: 362

{
   "lb_methods": [
                  {
                    "name": "ROUND_ROBIN"
                  },
                  {
                    "name": "LEAST_CONNECTIONS"
                  }
                 ]
}