Citrix Application Delivery Management

作为 API 代理服务器的 Citrix ADM

除了由于自身的管理和分析功能而能够接收 NITRO REST API 请求外,Citrix Application Delivery Management (Citrix ADM) 还可以充当其托管实例的 REST API 代理服务器。REST API 客户端可以将 API 请求发送到 Citrix ADM,而不是将 API 请求直接发送到托管实例。Citrix ADM 可以区分它其须响应的 API 请求与其必须原样转发至托管实例的 API 请求。

作为 API 代理服务器,Citrix ADM 具有以下优势:

  • 验证 API 请求。Citrix ADM 按照配置的安全策略和基于角色的访问控制 (RBAC) 策略来验证所有 API 请求。Citrix ADM 还可以识别租户,确保 API 活动不会跨越租户边界。

  • 集中审核。Citrix ADM 维护与其托管实例有关的所有 API 活动的审核日志。

  • 会话管理。Citrix ADM 使得 API 客户端免于必须维护与托管实例的会话。

Citrix ADM 如何作为 API 代理服务器运行

希望 Citrix ADM 将请求转发至托管实例时,请配置 API 客户端以在 API 请求中包含以下 HTTP 标头中的任何一个:

标头值 说明
_MPS_API_PROXY_MANAGED_INSTANCE_NAME 托管实例的名称。
_MPS_API_PROXY_MANAGED_INSTANCE_IP 托管实例的 IP 地址。
_MPS_API_PROXY_MANAGED_INSTANCE_ID 托管实例的 ID。
_MPS_API_PROXY_TIMEOUT NITRO API 请求的超时值。设置超时值(以秒为单位)。当您设置代理超时时,ADM 会在请求超时之前等待指定的持续时间。
_MPS_API_PROXY_MANAGED_INSTANCE_USERNAME 访问托管 ADC 实例的用户名。
_MPS_API_PROXY_MANAGED_INSTANCE_PASSWORD 访问托管 ADC 实例的密码。
_MPS_API_PROXY_MANAGED_INSTANCE_SESSID 用于访问托管实例的会话 ID。

注意

Settings(设置)> Administration(管理)> System Configurations(系统配置)> Basic Settings(基本设置)中,如果选择了 Prompt Credentials for Instance Login(提示实例登录凭据),请务必配置托管实例的用户名和密码。或者,您也可以指定实例会话 ID。

如果存在这些 HTTP 标头中的任何一个,即可帮助 Citrix ADM 确定 API 请求是必须转发至托管实例的请求。标头值帮助 Citrix ADM 确定必须将请求转发到的托管实例。

下图中说明了此流程:

Device-API

如上图所示,这些 HTTP 标头之一出现在请求中时,Citrix ADM 按如下所示处理该请求:

  1. 在不修改请求的情况下,Citrix ADM 将请求转发到实例 API 代理引擎。

  2. 实例 API 代理引擎将 API 请求转发至验证程序,并将 API 请求的详细信息记录在审核日志中。

  3. 验证程序确保请求没有违反配置的安全策略、RBAC 策略、租赁边界等。它还执行额外的检查,例如,确定托管实例是否可用的检查。

如果 API 请求有效且可以转发至托管实例,Citrix ADM 将确定实例会话管理器维护的一个会话,然后将请求发送到托管实例。

注意:

请务必禁用 Prompt Credentials for Instance Login(提示实例登录凭据)选项。为此,请执行以下操作:

  1. 导航到 Settings(设置)> Administration(管理)
  2. System Configurations(系统配置)中,选择 System, Time zone, Allowed URLs and Message of the day(系统、时区、允许的 URL 和当天的消息)。

如何将 Citrix ADM 用作 API 代理服务器

以下示例显示了一个 API 客户端向 IP 地址为 192.0.2.5 的 Citrix ADM 服务器发送的 REST API 请求。Citrix ADM 需要将请求原样转发到 IP 地址为 192.0.2.10 的托管实例。所有示例都使用 _MPS_API_PROXY_MANAGED_INSTANCE_IP 标头。

在向 Citrix ADM 发送 API 请求之前,API 客户端必须:

  • 登录 Citrix ADM
  • 获取会话 ID
  • 在后续的 API 请求中包含会话 ID。

登录 API 请求的形式如下:

    POST /nitro/v1/config/login
    Content-Type: application/json

    {
        "login": {
            "username":"nsroot",
            "password":"nsroot"
         }
    }
<!--NeedCopy-->

Citrix ADM 响应登录请求,显示包括会话 ID 的响应信息。以下示例响应正文显示了会话 ID:

{

  "errorcode": 0,

  "message": "Done",

  "operation": "add",

  "resourceType": "login",

  "username": "***********",

  "tenant_name": "Owner",

  "resourceName": "nsroot",

  "login": [

    {

      "tenant_name": "Owner",

      "permission": "superuser",

      "session_timeout": "36000",

      "challenge_token": "",

      "username": "",

      "login_type": "",

      "challenge": "",

      "client_ip": "",

      "client_port": "-1",

      "cert_verified": "false",

      "sessionid": "##D2BF9C5F40E5B2E884A9C45C89F0ADE24DA8A8169BE6358D39F5D471B73D",

      "token": "b2f3f935e93db6a"
    }

  ]

}
<!--NeedCopy-->

示例 1:检索负载平衡虚拟服务器统计信息

客户端必须向 Citrix ADM 发送以下形式的 API 请求:

    GET /nitro/v1/stat/lbvserver
    Content-type: application/json
    _MPS_API_PROXY_MANAGED_INSTANCE_IP: 192.0.2.10
    SESSID: ##D2BF9C5F40E5B2E884A9C45C89F0ADE24DA8A8169BE6358D39F5D471B73D
<!--NeedCopy-->

其中 cookie 标头的值是从登录 API 调用返回的会话 ID。并且 _MPS_API_PROXY_MANAGED_INSTANCE_IP 的值是 ADC 的 IP 地址。

示例 2:创建负载平衡虚拟服务器

客户端必须向 Citrix ADM 发送以下形式的 API 请求:


    POST /nitro/v1/config/lbvserver/sample_lbvserver
    Content-type: application/json
    Accept-type: application/json
    _MPS_API_PROXY_MANAGED_INSTANCE_IP: 192.0.2.10
    SESSID: ##D2BF9C5F40E5B2E884A9C45C89F0ADE24DA8A8169BE6358D39F5D471B73D

    {
         "lbvserver":{
             "name":"sample_lbvserver",
             "servicetype":"HTTP",
             "ipv46":"10.102.1.11",
             "port":"80"
         }
    }
<!--NeedCopy-->

示例 3:修改负载平衡虚拟服务器

客户端必须向 Citrix ADM 发送以下形式的 API 请求:

    PUT /nitro/v1/config/lbvserver
    Content-type: application/json
    Accept-type: application/json
    _MPS_API_PROXY_MANAGED_INSTANCE_IP: 192.0.2.10
    SESSID: ##D2BF9C5F40E5B2E884A9C45C89F0ADE24DA8A8169BE6358D39F5D471B73D

    {
       "lbvserver":{
            "name":"sample_lbvserver",
            "appflowlog":"DISABLED"
       }
    }
<!--NeedCopy-->

示例 4:删除负载平衡虚拟服务器

客户端必须向 Citrix ADM 发送以下形式的 API 请求:

    DELETE /nitro/v1/config/lbvserver/sample_lbvserver
    Accept-type: application/json
    _MPS_API_PROXY_MANAGED_INSTANCE_IP: 192.0.2.10
    SESSID: ##D2BF9C5F40E5B2E884A9C45C89F0ADE24DA8A8169BE6358D39F5D471B73D

<!--NeedCopy-->

示例 5:在 ADC 上下载 CLI 运行配置

客户端必须向 Citrix ADM 发送以下形式的 API 请求:

    GET /nitro/v1/config/nsrunningconfig
    Accept-type: application/json
    _MPS_API_PROXY_MANAGED_INSTANCE_IP: 192.0.2.10
    SESSID: ##D2BF9C5F40E5B2E884A9C45C89F0ADE24DA8A8169BE6358D39F5D471B73D

<!--NeedCopy-->
作为 API 代理服务器的 Citrix ADM