连接服务器的负载均衡需求

Horizon 的连接服务器支持多节点部署,但并不提供单一的入口,管理员可以在 DNS 上为多台 CS 配置同一个外部域名,这样用户在进行域名解析时就可以获得不同 CS 的真实地址,从而让不同的用户连到不同的 CS 节点。但 DNS 并不能监测后端 CS 是否正常工作,CS 节点故障时可能会导致部分 Client 无法正常使用桌面。因此使用负载均衡器是一个更优的选择。

Horizon 下的网络连接

在 Horizon 环境中共有两大类流量:

  • 用户认证流量(HTTPS):用户登陆时的身份认证均使用此协议传输。认证功能由 CS 提供,在 Horizon 下 CS 本身默认提供 TLS 加密功能(还记得第一篇中给 CS 准备证书吗?),如果要给 CS 配置负载均衡,则要做端到端的 TLS 加解密;
  • 虚拟桌面流量:用户访问 VDI/虚拟应用时的流量,以及多媒体重定向、USB 重定向等功能的流量。共包含 RDP、PCoIP、Blast、MMR/CDR、USB 重定向等 5 种协议,每协议在不同的配置下可能使用不同的端口。其中 RDP、PCoIP、Blast 用于传输桌面的流量,一般使用 Blast 协议。MMR/CDR 分别表示多媒体重定向和客户端驱动器重定向。

当在纯内网中使用 Horizon 时,可以只部署 CS。如果不开启 CS 的安全网关功能,则 Horizon Client 直接和 VDI VM 通信传输桌面流量;如果开启了 CS 的安全网关功能,则认证流量和桌面流量均需要通过 CS 进行传输。

在不同桌面协议下,使用的端口可能不一样,同时辅助协议的端口也可能不一样。比如设置虚拟桌面使用 Blast 协议时,Blast 使用 22443 端口,MMR/CDR 也会复用 22443;但是使用 PCoIP 协议时,PCoIP 使用 4172 端口,MMR/CDR 则使用 9427 端口,不和桌面流量复用端口。

开启 CS 的安全网关功能后,客户端到连接服务器的端口又和直连 VDI 的端口不一样。比如关闭 CS 安全网关使用 Blast 时,Horizon Client 到 VDI 使用 22443 传输 Blast 及 MMR/CDR,使用 32111 传输 USB 重定向流量;而开启 CS 安全网关使用 Blast 时,Horizon Client 到 CS 使用 8443 传输 Blast 及 MMR/CDR,复用 443 传输 USB 重定向流量,CS 到 VDI 使用 22443 和 32111。

网络连接这块内容比较复杂,但对于排错和配置负载均衡器至关重要。为了更加直观地表示不同配置下流量路径,我绘制了下面两张图

Horizon 8 测试环境部署(3):为连接服务器配置负载均衡_Horizon

Horizon 8 测试环境部署(3):为连接服务器配置负载均衡_负载均衡_02

在 Horizon 下,仅能对 CS 的认证流量进行负载均衡,安全网关的流量不能进行负载。如果开启了 CS 安全网关功能,则认证流量和桌面流量必须经同一台 CS 处理

为 CS 配置负载均衡后,流量路径如下两张图所示:

Horizon 8 测试环境部署(3):为连接服务器配置负载均衡_虚拟桌面_03

Horizon 8 测试环境部署(3):为连接服务器配置负载均衡_Horizon_04

基础的概念就讲这么多,我们来看看使用 NSX ALB(又称 Avi)如何为 CS 配置负载均衡功能。

为 Horizon 连接服务器配置负载均衡

本文涉及的环境信息如下表:

Horizon 8 测试环境部署(3):为连接服务器配置负载均衡_VDI_05

注意:表中所有域名均已提前在 AD/DNS 中配置好正反向解析。

1. 为 CS 创建 SSL 配置文件

在“模板>安全性>SSL/TLS配置文件”中,创建新的应用程序配置文件:

Horizon 8 测试环境部署(3):为连接服务器配置负载均衡_Horizon_06
勾选TLS 1.1和TLS 1.2,取消勾选“启用SSL会话重用”:

Horizon 8 测试环境部署(3):为连接服务器配置负载均衡_VMware_07 

2. 为 CS 创建运行状况监控器

在“模板>配置文件>运行状况监控器”中,创建新的运行状况监控器:Horizon 8 测试环境部署(3):为连接服务器配置负载均衡_Horizon_08

类型为 HTTPS,发送时间为 30s,接收超时 10s,检查端口为 443,请求标头为“GET / HTTP/1.0” :

Horizon 8 测试环境部署(3):为连接服务器配置负载均衡_Horizon_09Horizon 8 测试环境部署(3):为连接服务器配置负载均衡_负载均衡_10 
响应代码为2xx,在 SSL属性中勾选之前创建的 SSL 配置文件:

Horizon 8 测试环境部署(3):为连接服务器配置负载均衡_负载均衡_11

(可选)通过 PKI 配置文件来开启 CS 的证书验证

额外地,也可以创建 PKI 配置文件来对连接服务器的证书进行验证

1.    新建一个 PKI 配置文件,在里面关联用于验证连接服务器证书的 CA 根证书:

Horizon 8 测试环境部署(3):为连接服务器配置负载均衡_虚拟桌面_12 
2.    将此 PKI 配置文件关联给运行状况监控器:

Horizon 8 测试环境部署(3):为连接服务器配置负载均衡_VMware_13

3. 为 CS 创建池

在“应用程序>池”中,创建新的池:

Horizon 8 测试环境部署(3):为连接服务器配置负载均衡_负载均衡_14

默认服务器端口为 443,持久性选择“System-Persistence-Http-Cookie”,运行状况监控器选择上个章节创建的“Horizon-CS-HTTPS”:
 
Horizon 8 测试环境部署(3):为连接服务器配置负载均衡_VMware_15

SSL 配置文件选择之前创建的“Horizon-CS-SSL-profile”:

Horizon 8 测试环境部署(3):为连接服务器配置负载均衡_虚拟桌面_16

服务器池成员填写两台 CS 的 IP 地址:

Horizon 8 测试环境部署(3):为连接服务器配置负载均衡_负载均衡_17

(可选)通过 PKI 配置文件来开启 CS 的证书验证

在池的层面也可以开启 CS 证书验证功能,只需要在“服务器 SSL 证书验证 PKI 配置文件”中关联即可。

Horizon 8 测试环境部署(3):为连接服务器配置负载均衡_VDI_18
 

4. 为 CS 创建新的应用程序配置文件

在“模板>应用程序”中,创建新的 HTTP 应用程序配置文件:

Horizon 8 测试环境部署(3):为连接服务器配置负载均衡_Horizon_19

禁用“连接多路复用”以及“X-Forwarded-for”:

Horizon 8 测试环境部署(3):为连接服务器配置负载均衡_虚拟桌面_20

在安全性中勾选“在所有位置使用SSL”:

Horizon 8 测试环境部署(3):为连接服务器配置负载均衡_VMware_21
 

5. 为 CS 创建服务器证书

在“模板>安全性>SSL/TLS证书”中创建新的应用程序证书:

Horizon 8 测试环境部署(3):为连接服务器配置负载均衡_VMware_22 
类型选择导入:

Horizon 8 测试环境部署(3):为连接服务器配置负载均衡_VMware_23
 
分别导入证书和私钥,然后保存即可:

Horizon 8 测试环境部署(3):为连接服务器配置负载均衡_负载均衡_24

注:第一篇文章中我们使用 KeyManager 为 CS 生成了证书,此处可以将上次生成的证书导出为 pem 格式供 NSX ALB 使用。

Horizon 8 测试环境部署(3):为连接服务器配置负载均衡_Horizon_25


6. 为 CS 创建虚拟服务

在“应用程序>虚拟服务”中使用高级设置创建新的服务:

Horizon 8 测试环境部署(3):为连接服务器配置负载均衡_Horizon_26

指定 VIP,使用之前创建的应用程序配置文件“Horizon-CS-Application-Profile”:

Horizon 8 测试环境部署(3):为连接服务器配置负载均衡_Horizon_27

勾选 80 和 443 端口,其中 443 为 SSL,使用之前创建的 CS 池、SSL配置文件以及服务器证书:

Horizon 8 测试环境部署(3):为连接服务器配置负载均衡_Horizon_28
 

(可选)创建 HTTP 安全策略阻止用户访问 admin 页面

在虚拟服务的“策略”页面中,创建 HTTP 安全策略,匹配访问路径为 “/admin” 开头时,关闭连接:

Horizon 8 测试环境部署(3):为连接服务器配置负载均衡_负载均衡_29
 
配置完成后当用户尝试访问 Horizon 管理界面时,会提示页面无法访问:

Horizon 8 测试环境部署(3):为连接服务器配置负载均衡_Horizon_30 注意:配置此设置后,管理员只能直接访问 CS 的域名来进行管理。


7. 在 CS 中信任负载均衡的域名

当为 CS 配置负载均衡后,通过网页访问虚拟桌面时会报如下错误:

Horizon 8 测试环境部署(3):为连接服务器配置负载均衡_负载均衡_31

这是因为默认 Horizon 只允许通过 CS 的域名来进行 Web 访问,当使用了负载均衡后需要修改 CS 的配置文件。

在 CS 的安装路径找到此目录“VMware\VMware View\Server\sslgateway\conf”,创建名为 locked.properties 的文件:

Horizon 8 测试环境部署(3):为连接服务器配置负载均衡_虚拟桌面_32
 
内容如下:
balancedHost=cs.halfcoffee.com

Horizon 8 测试环境部署(3):为连接服务器配置负载均衡_VMware_33
然后重启 Connection Server 服务: 

Horizon 8 测试环境部署(3):为连接服务器配置负载均衡_VMware_34 
为所有 CS 执行上述同样的操作。


8. 内网用户访问测试

通过浏览器访问 CS LB 的域名,可以正常访问页面:

Horizon 8 测试环境部署(3):为连接服务器配置负载均衡_VMware_35
 
虚拟桌面也可以正常访问:

Horizon 8 测试环境部署(3):为连接服务器配置负载均衡_负载均衡_36


8. 高可用性测试

关闭 CS1 节点,负载均衡器可以检测到故障(因运行状况检查策略设置的比较保守,因此 UI 并不会立即展示故障):

Horizon 8 测试环境部署(3):为连接服务器配置负载均衡_虚拟桌面_37

用户访问桌面正常,所有的连接会从 CS2 走:

Horizon 8 测试环境部署(3):为连接服务器配置负载均衡_VMware_38

Horizon 8 测试环境部署(3):为连接服务器配置负载均衡_虚拟桌面_39


附件:连接服务器的安全网关功能

CS 安装完成后,默认的安全网关功能配置如下。注意所有外部 URL 只能填写对应连接服务器的“FQDN:端口”或者“IP:端口”。

在此配置下,只有使用 PCoIP 时不会经过 CS 代理,其他流量全部都会被 CS 代理。

Horizon 8 测试环境部署(3):为连接服务器配置负载均衡_负载均衡_40


本文完

关注微信公众号“NSX很可爱的”,后台回复“Horizon即可获取本文以及相关介质的下载链接。

参考文档

允许 HTML Access 通过网关:

https://docs.vmware.com/cn/VMware-Horizon/2106/horizon-installation/GUID-FE26A9DE-E344-42EC-A1EE-E1389299B793.html


通过 NSX ALB 为 Horizon 连接服务器配置负载均衡:

https://avinetworks.com/docs/20.1/configure-avi-vantage-for-vmware-horizon/#connection