Citrix ADC

在一次性 NITRO API 调用中为服务组配置所需的一组服务组成员

添加了支持,以便在一次 NITRO API 调用中为服务组配置所需的服务组成员集。添加了新的 API(所需状态 API)来支持此配置。使用期望状态 API,您可以:

  • 在“servicegroup_servicegroupmemberlist_binding”资源上的单个 PUT 请求中提供服务组成员的列表。
  • 在该PUT请求中提供它们的权重和状态(可选)。
  • 有效地将设备配置与应用程序服务器周围的部署更改同步。

Citrix ADC 设备将请求的所需成员集与配置的成员集进行比较。然后,它会自动绑定新成员并解除请求中不存在的成员的绑定。

注意:

  • 只有 API. 类型的服务组才支持此功能
  • 您只能使用 Desired State API 绑定基于 IP 地址的服务,不允许使用基于域名的服务。
  • 以前,只能在 NITRO 呼叫中绑定一个服务组成员。

重要

Citrix ADC 群集部署中支持 ServiceGroup 成员资格的所需状态 API。

使用案例:在大规模部署(例如 Kubernetes)中将部署更改同步到 Citrix ADC 设备

在大规模和高度动态的部署(例如 Kubernetes)中,面临的挑战是如何使设备配置与部署的变化速度保持同步,从而准确地为应用程序流量提供服务。在此类部署中,控制器(入口或 E-W 控制器)负责更新 ADC 配置。每当部署发生更改时,都会通过 “端点事件” 将有效的终端集 kube-api server 发送给控制器。Controller 使用读取三角修改方法,其中执行以下操作:

  • 从 ADC 设备获取服务的当前配置的端点集(服务组的服务组成员集)。
  • 将已配置的端点集与接收事件中的设置进行比较。
  • 绑定新终端节点(服务组成员)或取消绑定已删除的终端节点。

由于更改率和服务大小在此环境中很高,因此此配置方法效率不高,可能会延迟配置更新。

所需状态 API 通过在单个 API 中接受服务组的预期成员集来解决问题,并有效地更新配置。

使用 CLI 创建 API 类型的服务组

在命令提示窗口中,键入:

add serviceGroup <serviceGroupName>@ <serviceType> [-autoScale <autoScale>]

示例:

add serviceGroup svg1 HTTP -autoScale API

您可以通过 add serviceGroup 或 set serviceGroup 命令来配置 autoDisablegracefulautoDisabledelayautoScale参数。

add serviceGroup <serviceGroupName>@ <serviceType> [-autoScale <autoScale>] [-autoDisablegraceful ( YES | NO)] [-autoDisabledelay <secs>]

add serviceGroup <serviceGroupName>@ <serviceType> [-autoScale (API |CLOUD | DISABLED| DNS |POLICY)]

set serviceGroup <serviceGroupName [-autoDisablegraceful ( YES | NO)] [-autoDisabledelay <secs>]

set serviceGroup <serviceGroupName [-autoScale (API |CLOUD | DISABLED| DNS |POLICY)]

示例:

add serviceGroup svg1 HTTP autoDisablegraceful YES -autoDisabledelay 100

add serviceGroup svg1 HTTP -autoScale API

set serviceGroup svg1 -autoDisablegraceful  YES -autoDisabledelay 100

set serviceGroup svg1 -autoScale API

参数

自动禁用优雅

表示服务正常关闭。如果启用此选项,设备将等待与该服务的所有未完成连接关闭,然后再删除该服务。对于系统上已有持久会话的客户端,会继续向该服务发送新的连接或请求。仅当没有未完成的连接时,才会删除服务成员。默认值:NO

自动禁用延迟

指示正常关机所允许的时间(以秒为单位)。在此期间,系统上已有持久会话的客户端会继续向该服务发送新的连接或请求。系统上没有持久性会话的新客户端的连接或请求不会发送到服务。相反,它们是在其他可用服务之间进行负载平衡的。延迟时间到期后,服务成员将被删除。

AutoScale API

AutoScale API 参数允许使用所需状态 API 将成员集绑定到目标服务组。如果提供的所有条件都匹配,则可以将服务组从非自动缩放类型设置为所需状态 API 的 AutoScale 类型。

所需状态 API 将检查服务组成员的 IP 地址是否与任何现有服务器关联。如果 IP 地址与现有服务器匹配,则 API 会重用现有服务器的 IP 地址和名称。如果 IP 地址与任何现有服务器都不匹配,则 API 会创建一个服务器,并将 IP 地址本身指定为服务器名称。

示例:

考虑一台 IP 地址为 2.2.2.2 且名称为 myserver 的服务器,该服务器存在于 Citrix ADC 设备中。使用所需的状态 API,您可以绑定一组 IP 地址范围为 2.2.2.1 到 2.2.2.3 的服务组成员。

由于 IP 地址 2.2.2 与现有服务器关联,因此 API 会重用该 IP 地址和名称(2.2.2.2 和 myserver)。由于没有具有 IP 地址为 2.2.2.1、2.2.2.3 的现有服务器,因此 API 会使用这些 IP 地址创建服务器。API 会将 IP 地址本身指定为服务器的名称。

如果所需状态命令中提供的 IP 地址与其他 Citrix ADC 实体(例如 CS 虚拟服务器)冲突,则会发生冲突。将显示一条错误消息,其中包含失败的原因。错误消息中将显示失败成员列表中第一个服务组成员的 IP 地址。

示例:

假设一台IP地址为2.2.2.8的服务器用作负载均衡服务器。使用所需的状态 API,您可以尝试绑定一组 IP 地址范围为 2.2.2.2 - 2.2.2.11 的服务组成员。

由于 2.2.2.8 已用于 LB 服务,因此会发生冲突。将显示以下错误消息,其中包含失败的原因和失败的成员绑定:

{ "errorcode": 304, "message": "Address already in use", "severity": "ERROR", "servicegroup_servicegroupmemberlist_binding": { "servicegroupname": "sg1", "failedmembers": [ { "ip": "2.2.2.8", "port": 80 }, { "ip": "2.2.2.9", "port": 80 } ] } }
<!--NeedCopy-->

错误代码 304 显示失败成员列表中的第一个服务组成员,即 2.2.2.8。

如果现有成员绑定满足以下任一条件,则该 set serviceGroup Autoscale 命令可能会失败:

  • 如果绑定到服务组的服务器是名称服务器或基于域的服务器。
  • 如果环回服务器名称不是 127.0.0.1 或 0000:0000:0000:0000:0000:0000:0000:0001。
  • 如果你在 set ServiceGroup 命令中选择了不同类型的 AutoScale(云、API、DNS 和策略),然后添加 ServiceGroup 命令。

重要:

  • AutodisableGracle 和 AutoDisableDelay 参数仅适用于 AutoScale 类型“API”和“CLOUD”的服务组。
  • 如果未配置 AutoDisableGrace 或 AutoDisableDelay 参数,则会立即删除服务成员。

优雅地解除服务组成员的绑定

如果任何服务组成员不在 desired state 列表中,则会根据 autoDisablegracefulautoDisabledelay 参数配置优雅地解除绑定这些成员。

  • 如果设置了其中一个参数,则服务组成员将正常解除绑定。
  • 如果未设置这些参数,则服务组成员将立即解除绑定。

注意:

  • 仅当运行 show service group 命令时,才会显示标识为正常取消绑定的服务组成员。
  • 无法对标识为正常解除绑定的服务组成员执行任何操作(例如设置、取消设置)。

下图显示了 show service group 命令的示例。

示例显示服务组命令

使用 GUI 创建 API 类型的服务组

  1. 导航到 流量管理 > 负载平衡 > 服务组,然后单击 添加

  2. 自动缩放模式下,选择 API

使用 GUI 为 API 类型服务组配置正常关机或延时时间

  1. 导航到 流量管理 > 负载平衡 > 服务组

    服务组的基本设置

  2. 自动缩放模式下,选择 API

  3. 在“自动禁用优雅”中,选择“”。

  4. 自动禁用延迟中,输入正常关机的等待时间。

注意: 只有在自动缩放模式下选择 APICLOUD 时,才会启用自动禁用正常显示延迟自动显示延迟字段。

在一次性 NITRO API 调用中为服务组配置所需的一组服务组成员