可以根据需要将 NSX Advanced Load Balancer 部署在 Unified Access Gateway (UAG)、连接服务器和 App Volumes Manager 等的前面。下文介绍配置 NSX Advanced Load Balancer 以通过 VMware Horizon 部署中的 UAG 服务器对流量进行负载均衡的建议方法。

在用于对 UAG 服务器进行负载均衡的新部署方法中,NSX Advanced Load Balancer 执行 307 重定向而不是 UAG 服务器,以及 XML 解析和端口转换。此方法的优点是:

  • 足够强大,能够处理持久性问题

  • 在用户位于 NAT 后面的环境中运行良好

  • 易于配置

  • 更好的可见性和日志



注:

示例拓扑说明了 DMZ 网络中的 UAG 部署。但是,NSX Advanced Load Balancer 支持在 DMZ 和非 DMZ 网络中部署。

注:

目前此功能处于技术预览阶段。

请求流



  1. 客户端在 L7 TLS 端口 443 上向 Horizon FQDN 发起请求。

  2. NSX Advanced Load Balancer 使用 LB 算法从池的服务器列表中选取 UAG 服务器。然后,它使用 307 重定向进行响应,并将位置设置为 UAG VIP FQDN,并包含用于选定 UAG 服务器的自定义 L7 端口。

注:

已将 5001 到 5005 范围内的服务端口添加为 Horizon 内部端口。这些端口称为自定义端口。所有后续请求都将来自具有此主机名+L7 端口的客户端,并发送到映射的 UAG 服务器。下图中显示了一个示例:



在虚拟服务上指定了从 5001 到 5005 的端口。

假设有两个后端 UAG 服务器:UAG 1 和 UAG 2。当初始请求出现在端口 443 上的 L7 虚拟服务时,NSX Advanced Load Balancer 会根据配置的负载均衡算法选择其中一个服务器 - UAG 1 或 UAG 2。如果 NSX Advanced Load Balancer 从池中选择 UAG 1 服务器,则会使用 307 重定向进行响应,并将位置标头设置为 VIP FQDN 和 5001 端口(适用于 UAG 服务器 1)。

同样,对于 UAG 服务器 2,端口 5002 将通过 NSX Advanced Load Balancer 进行设置。要获取到 UAG 服务器的自定义端口映射,请使用 show pool <pool-name> vs service server map kv,如下所示:

admin:10-50-55-87]: > show pool UAG-MVP-pool vs service server map kv 
          
 +-------------------+---------------------------------------------------------+ 
    
 | Field             | Value                                                   | 
    
 +-------------------+---------------------------------------------------------+ 
    
 | uuid              | se-00505695c1f1                                         | 
    
 | keyval_entries[1] |                                                         | 
    
 |   key             | 10.98.17.153,47873,2                                    | 
    
 |   val             | fe_l7_port:5003,fe_blast_port:20003,fe_pcoip_port:30007 | 
    
 |   local_eol       | 1000                                                    | 
    
 |   version         | 0                                                       | 
    
 |   ishub           | False                                                   | 
    
 | keyval_entries[2] |                                                         | 
    
 |   key             | 10.130.172.191,47873,2                                  | 
    
 |   val             | fe_l7_port:5002,fe_blast_port:20002,fe_pcoip_port:30006 | 
    
 |   local_eol       | 1000                                                    | 
    
 |   version         | 0                                                       | 
    
 |   ishub           | False                                                   | 
    
 | keyval_entries[3] |                                                         | 
    
 |   key             | 10.130.172.192,47873,2                                  | 
    
 |   val             | fe_l7_port:5001,fe_blast_port:20001,fe_pcoip_port:30005 | 
    
 |   local_eol       | 1000                                                    | 
    
 |   version         | 0                                                       | 
    
 |   ishub           | False                                                   | 
    
 +-------------------+---------------------------------------------------------+ 
 

使用 show pool <pool-name> vs service server map 表:

 [admin:10-50-55-87]: > show pool UAG-MVP-pool vs service server map table 
    
 +--------------------------------+--------------------+ 
    
 | Field                          | Value              | 
    
 +--------------------------------+--------------------+ 
    
 | uuid                           | se-00505695c1f1    | 
    
 | vs_service_server_map_entry[1] |                    | 
    
 |   app_service_port             | 5001               | 
    
 |   app_service_type             | HORIZON_INTERNAL   | 
    
 |   ip_port_str                  | 10.130.172.192:443 | 
    
 | vs_service_server_map_entry[2] |                    | 
    
 |   app_service_port             | 5002               | 
    
 |   app_service_type             | HORIZON_INTERNAL   | 
    
 |   ip_port_str                  | 10.130.172.191:443 | 
    
 | vs_service_server_map_entry[3] |                    | 
    
 |   app_service_port             | 5003               | 
    
 |   app_service_type             | HORIZON_INTERNAL   | 
    
 |   ip_port_str                  | 10.98.17.153:443   | 
    
 | vs_service_server_map_entry[4] |                    | 
    
 |   app_service_port             | 20001              | 
    
 |   app_service_type             | HORIZON_BLAST      | 
    
 |   ip_port_str                  | 10.130.172.192:443 | 
    
 | vs_service_server_map_entry[5] |                    | 
    
 |   app_service_port             | 20002              | 
    
 |   app_service_type             | HORIZON_BLAST      | 
    
 |   ip_port_str                  | 10.130.172.191:443 | 
    
 | vs_service_server_map_entry[6] |                    | 
    
 |   app_service_port             | 20003              | 
    
 |   app_service_type             | HORIZON_BLAST      | 
    
 |   ip_port_str                  | 10.98.17.153:443   | 
    
 | vs_service_server_map_entry[7] |                    | 
    
 |   app_service_port             | 30005              | 
    
 |   app_service_type             | HORIZON_PCOIP      | 
    
 |   ip_port_str                  | 10.130.172.192:443 | 
    
 | vs_service_server_map_entry[8] |                    | 
    
 |   app_service_port             | 30006              | 
    
 |   app_service_type             | HORIZON_PCOIP      | 
    
 |   ip_port_str                  | 10.130.172.191:443 | 
    
 | vs_service_server_map_entry[9] |                    | 
    
 |   app_service_port             | 30007              | 
    
 |   app_service_type             | HORIZON_PCOIP      | 
    
 |   ip_port_str                  | 10.98.17.153:443   | 
    
 +--------------------------------+--------------------+
 
  1. 如果您有更多 UAG 服务器,请在 NSX Advanced Load Balancer 虚拟服务上添加更多端口,如 5003、5004 等。

    总之,L7 VIP 必须具有足够的服务端口,每个端口专用于池中的 UAG 服务器。建议一开始打开足够的端口,以容纳将来 UAG 服务器池的扩展。

    借助上述 NSX Advanced Load Balancer 执行 307 重定向的功能,只需在 Horizon Server 上进行最少的配置更改,即可将任何新的 UAG 服务器添加到服务器池中。到特定 L7 服务端口(基本端口除外)的入站客户端请求将内容切换到池中的特定 UAG 服务器。

  2. 客户端在重定向的 FQDN https://demo.horizon.com:5001/ 上发送请求。

  3. NSX Advanced Load Balancer 将请求发送到其中一个 UAG 服务器。在此示例中,请求将发送到 UAG 1。

  4. UAG 使用 XML 数据响应 NSX Advanced Load Balancer。在客户端使用选定的 UAG 服务器完成身份验证后,将使用包含 IP/FQDN 的 UAG 响应进行辅助协议通信。

  5. NSX Advanced Load Balancer 将解析此响应,将 IP/FQDN 和端口 XML 标记替换为 NSX Advanced Load Balancer FQDN 和 L4 服务端口。例如,对于 UAG 1,UAG IP/FQDN 和端口 XML 标记将替换为 NSX Advanced Load Balancer VIP FQDN 和 20001/30005 端口(分别针对 Blast/PCoIP)。同样,对于 UAG 2,NSX Advanced Load Balancer 会将 FQDN 和端口更改为 NSX Advanced Load Balancer VIP FQDN 和 20002/30006 端口(分别针对 Blast/PCoIP)。

  6. 具有自定义端口的 L4 请求将发送到 NSX Advanced Load Balancer 虚拟服务 FQDN。

  7. 通过使用自定义端口,NSX Advanced Load Balancer 知道必须将请求发送到哪个 UAG 服务器。

  8. NSX Advanced Load Balancer 将请求发送到相应的 UAG 服务器。根据此示例,请求将发送到 UAG 1。

  9. UAG 响应 NSX Advanced Load Balancer

  10. NSX Advanced Load Balancer 将响应发送到能够成功呈现应用程序/桌面的客户端。

配置负载均衡

配置 UAG 负载均衡的步骤如下所示:

  1. 用于对 UAG 服务器进行负载均衡的 NSX Advanced Load Balancer

  2. 创建池

  3. 安装 L7 VIP 所需的 SSL 证书

  4. 为 UAG 创建虚拟服务

为 UAG 创建自定义运行状况监控器

  1. 要创建自定义运行状况监控器,请导航到模板 > 配置文件 > 运行状况监控器

  2. 单击创建

  3. 选择为 Horizon 创建的 VMware Cloud。

  4. 新建运行状况监控器屏幕中输入以下详细信息:

    字段

    发送间隔

    30

    接收超时

    10

    客户端请求的数据

    GET /favicon.ico HTTP/1.0

    响应代码

    2xx

“新建运行状况监控器”屏幕如下所示:







保存配置。

创建池

要创建池,请执行以下操作:

  1. 导航到应用程序 >

  2. 选择云窗口中选择云。

  3. 单击下一步

  4. 单击创建池

  5. 创建池屏幕中更新详细信息,如下所示:





  6. SSL 选项卡中,选择相应的 SSL 配置文件,如下所示:



  7. 服务器选项卡中,添加之前创建的 UAG 服务器的服务器 IP 地址。



  8. 单击保存

安装 L7 VIP 所需的 SSL 证书

如果要在虚拟服务上终止 SSL 连接,则必须将 SSL 证书分配给虚拟服务。建议安装由有效证书颁发机构签名的证书,而不要使用自签名证书。在 NSX Advanced Load Balancer 中安装证书,并确保导入并链接 CA 证书。有关更多信息,请参阅VMware NSX Advanced Load Balancer 配置指南》中的“SSL 证书”主题。

注:

对于此设置,已安装一个名为 Horizon_Certificate 的证书。

将 SAN 证书添加到 UAG。有关添加 SAN 证书的更多详细信息,请参阅为 Unified Access Gateway 设备配置 TLS/SSL 证书

为 UAG 创建虚拟服务

要创建新的虚拟服务,请执行以下操作:

  1. 导航到应用程序 > 虚拟服务

  2. 单击创建虚拟服务 > 高级设置

  3. 绑定虚拟服务 VIP。

  4. 使用 System-HTTP-Horizon-UAG 作为应用程序配置文件。

  5. 按照如下所示配置虚拟服务:



  6. 服务端口部分中,单击切换到高级,然后配置服务端口。





    注:

    确保在虚拟服务上打开了足够的端口,以容纳您添加到 UAG 池的任何新 UAG 服务器。

    在此示例中,为主流量和辅助流量打开了六个端口:

    • 端口 443 - 用于 XML API 流量

    • 端口 5001 到 5005 - 为 L7 主 XML 流量打开的 Horizon 内部端口,用于处理重定向流量

    • 端口 30001 到 30005 - Blast

    • 端口 20001 到 20005 - PcoIP

    NSX Advanced Load Balancer 虚拟服务需要这些非标准端口。不必为 UAG 服务器打开这些端口。需要在置于负载均衡器前的防火墙上打开这些端口。

  7. 绑定池和创建的 SSL 证书。

  8. 单击下一步

  9. 单击下一步并保存配置。

在 NAT 用例中为 PCoIP 配置公共 IP

对于使用 UAG 虚拟服务的 Horizon 部署,客户端默认使用 UAG 虚拟服务 IP 建立 PCoIP 连接。在 NAT 环境中,如果外部客户端连接到转换为虚拟服务专用 IP 的公共 IP,则此行为是不可取的。要更改此行为,请配置虚拟服务上的内容重写规则,以将 PCoIP 替换为外部客户端将使用的公共 IP。在以下示例中,假设公共 IP 为 11.11.11.11:

[admin:1234]: > configure virtualservice HORIZON-MVP-UAG-VS
[admin:1234]: virtualservice> content_rewrite
[admin:1234]: virtualservice:content_rewrite> rsp_rewrite_rules index 1
[admin:1234]: virtualservice:content_rewrite:rsp_rewrite_rules> pairs index 1
[admin:1234]: virtualservice:content_rewrite:rsp_rewrite_rules:pairs> replacement_string val "${1}11.11.11.11${2}"
[admin:1234]: virtualservice:content_rewrite:rsp_rewrite_rules:pairs:replacement_string> save
[admin:1234]: virtualservice:content_rewrite:rsp_rewrite_rules:pairs> save
[admin:1234]: virtualservice:content_rewrite:rsp_rewrite_rules> save
[admin:1234]: virtualservice:content_rewrite> save
[admin:1234]: virtualservice> save

UAG 服务器上的配置更改

  1. 创建池后,获取每个 UAG 服务器的 Blast 和 PCoIP 的自定义端口( > 服务器页面)。



  2. 将自定义端口添加到 UAG 的 Blast 和 PCoIP 的相应外部 URL

    1. Blast URL 必须采用 https://uag.site.com:xxxx/?UDPPort=xxxx 格式,Blast UDP 才能正常工作。有关更多信息,请参阅 UAG

    2. 修改每个 UAG 的 Blast 和 PCoIP 外部 URL 字段,以使用在 NSX Advanced Load Balancer 端口映射中添加的自定义端口(在 UI 中,“编辑池”> 新建池编辑池页面下的服务器选项卡)。修改 Blast 外部 URL 以包含 UDP 的自定义端口。例如,https://uag-vs.site1.com:<BLAST-CUSTOM-PORT>/?UDPPort=<BLAST-CUSTOM-PORT>。有关更多信息,请参阅 Blast TCP 和 UDP 外部 URL 配置选项



  3. 如果在 UAG 上配置了 SAML 身份验证,请在 IDP 的 SSO URL 列表中添加每个站点的 UAG VS FQDN:port 组合(此处的 port 是指为主协议配置的自定义端口。如果 IDP 提供通配符端口,请使用此端口)。例如,[uag-vs.site1.com:5001, uag-vs.site1.com:5002, uag-vs.site2.com:5001, uag-vs.site2.com:5002]。

  4. 在 UAG 虚拟服务证书的 SAN 列表中添加每个站点的 UAG 虚拟服务 FQDN,以避免出现无效证书错误。

  5. 如果出现以下情况,UAG 服务器的 UAG 虚拟服务 VIP 上用于主/辅助连接的自定义端口可能会发生更改:

    1. UAG 服务器被删除然后重新添加到 UAG 虚拟服务池。

    2. 所有 SE 同时关闭。此时没有任何 SE 具有端口映射,并且必须重新构建端口映射。在这种情况下,使用 NSX Advanced Load Balancer 端口映射中显示的新端口重新执行 UAG 外部 URL 更改。

  6. 端口范围确定可以添加的服务器数量。例如,如果将 2000-2010 添加为端口范围,则只能添加 10 个服务器。如果需要更多,请更改端口范围。

  7. 要使自定义端口更改在 UAG 外部 URL 上生效,请确保在更改后禁用 Blast 和 PCoIP 协议。保存更改并重新启用协议。

有关为 UAG 流量启用 WAF 的详细信息,请参阅为 VMware Horizon 配置 NSX Advanced Load Balancer

已知问题

  • 要使自定义端口更改在 UAG 外部 URL 上生效,请在更改后禁用 Blast 和 PCoIP 协议,保存更改,然后重新启用这些协议。对于 UAG 端口缓存问题,请在 UAG 管理控制台中切换协议。

  • Chrome 等浏览器可能阻止了某些端口。例如,端口 6000 由 X11 使用,如果将此端口用于主/辅助自定义端口,Chrome 将以受限端口正在使用中为由阻止连接。

  • 在某些情况下,访问 VMware Horizon Client 时,将在 Horizon Client 服务器列表页面中创建服务器图标,如下所示。



  • 使用自定义端口重定向后,HTML 客户端注销将停滞。

  • 如果在虚拟服务中配置了 System-HTTP-Horizon-UAG 或任何将“应用服务类型”设置为 Horizon 的应用程序配置文件,则相应的虚拟服务现在将附加 Horizon 用例特定内容的重写规则:

     [admin:10-50-55-170]: > show virtualservice <UAG-L7-VS-Name>
     +------------------------------------+---------------------------------------------------------------------------+
     | Field                              | Value                                                                     |
     +------------------------------------+---------------------------------------------------------------------------+
     | uuid                               | virtualservice-23db86e6-d508-4120-aae4-f8da518a5dbe                       |
     | name                               | HORIZON-MVP-UAG-VS                                                        |
     | enabled                            | True                                                                      |
     |---------------------------Truncated Output---------------------------------------------------------------------|
     | content_rewrite                    |                                                                           |
     |   rewritable_content_ref           | System-Rewritable-Content-Types                                           |
     |   rsp_rewrite_rules[1]             |                                                                           |
     |     name                           | System-Standard-Horizon                                                   |
     |     enable                         | True                                                                      |
     |     index                          | 1                                                                         |
     |     pairs[1]                       |                                                                           |
     |       search_string                |                                                                           |
     |         type                       | SEARCH_REGEX                                                              |
     |         val                        | (<address>)[\s]*(?:[0-9]{1,3}\.){3}[0-9]{1,3}[\s]*(<address>) |
     |       replacement_string           |                                                                           |
     |         type                       | COMBINATION_STRING                                                        |
     |         val                        | ${1}${vs_ip}${2}                                                          |
     |---------------------------Truncated Output---------------------------------------------------------------------|  
     | allow_invalid_client_cert          | False                                                                     |
     | vh_type                            | VS_TYPE_VH_SNI                                                            |
     +------------------------------------+---------------------------------------------------------------------------+
     
    • 即使应用程序配置文件更改为非 Horizon 服务类型,这些规则仍将保留在虚拟服务上。在这种情况下,要移除内容重写规则,请在控制器 CLI 上运行以下命令(从应用程序配置文件中移除应用服务类型后):

     [admin:1234]: > configure virtualservice <UAG-L7-VS-Name>
     [admin:1234]: > no content_rewrite
     [admin:1234]: > save

    可以在应用程序配置文件的“高级”设置中看到应用服务类型,如下所示: