作为API代理服务器的Citrix ADM
作为API代理服务器的Citrix ADM
除了由于自身的管理和分析功能而能够接收硝基REST API请求外,Citrix应用程序交付管理(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 | 硝基API请求的超时值。设置超时值(以秒为单位)。当您设置代理超时时,adm会在请求超时之前等待指定的持续时间。 |
_MPS_API_PROXY_MANAGED_INSTANCE_USERNAME | 访问托管adc实例的用户名。 |
_MPS_API_PROXY_MANAGED_INSTANCE_PASSWORD | 访问托管adc实例的密码。 |
_MPS_API_PROXY_MANAGED_INSTANCE_SESSID | 用于访问托管实例的会话id。 |
注意
在设置(设置)>管理(管理)> .单击“确定”系统配置(系统配置)>基本设置(基本设置)中,如果选择了实例登录的提示凭据(提示实例登录凭据),请务必配置托管实例的用户名和密码。或者,您也可以指定实例会话id。
如果存在这些HTTP标头中的任何一个,即可帮助Citrix ADM确定API请求是必须转发至托管实例的请求。标头值帮助Citrix ADM确定必须将请求转发到的托管实例。
下图中说明了此流程:
如上图所示,这些HTTP标头之一出现在请求中时,Citrix ADM按如下所示处理该请求:
在不修改请求的情况下,Citrix ADM将请求转发到实例API代理引擎。
实例API代理引擎将API请求转发至验证程序,并将API请求的详细信息记录在审核日志中。
验证程序确保请求没有违反配置的安全策略,rbac策略,租赁边界等。它还执行额外的检查,例如,确定托管实例是否可用的检查。
如果API请求有效且可以转发至托管实例,Citrix ADM将确定实例会话管理器维护的一个会话,然后将请求发送到托管实例。
注意:
请务必禁用实例登录的提示凭据(提示实例登录凭据)选项。为此,请执行以下操作:
- 导航到设置(设置)>管理(管理)。
- 在系统配置(系统配置)中,选择系统,时区,允许的url和消息的一天(系统,时区,允许的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客户端必须:
- 登录思杰ADM
- 获取会话id
- 在后续的API请求中包含会话id。
登录API请求的形式如下:
POST /nitro/v1/config/login Content-Type: application/json {"login": {"username":"nsroot", "password":"nsroot"}}
Citrix ADM响应登录请求,显示包括会话ID的响应信息。以下示例响应正文显示了会话id:
{"errorcode": 0, "message": "Done", "operation": "add", "resourceType": "login": "***********", "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"}]}
示例 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
其中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"}}
示例 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"}}
示例 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
示例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