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

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。

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

640.webp
6402webp.webp

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

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

11640.webp
111640.webp

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

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

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

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

1. 为 CS 创建 SSL 配置文件

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


勾选TLS 1.1和TLS 1.2,取消勾选“启用SSL会话重用”:

1111111111111111111640.webp

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

在“模板>配置文件>运行状况监控器”中,创建新的运行状况监控器:

00000000000000640.webp


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


响应代码为2xx,在 SSL属性中勾选之前创建的 SSL 配置文件:

000000000000000000000000640.webp

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

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

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

aaa640.webp
2. 将此 PKI 配置文件关联给运行状况监控器:

aaaa640.webp

3. 为 CS 创建池

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

默认服务器端口为 443,持久性选择“System-Persistence-Http-Cookie”,运行状况监控器选择上个章节创建的“Horizon-CS-HTTPS”:
bbbb640.webp

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


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

2640.webp

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

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

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

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

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

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

5. 为 CS 创建服务器证书

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

0013640.webp
类型选择导入:
000640.webp
分别导入证书和私钥,然后保存即可:
0000640.webp

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

00000640.webp

6. 为 CS 创建虚拟服务

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

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

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

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

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

2640.webp

配置完成后当用户尝试访问 Horizon 管理界面时,会提示页面无法访问:

22640.webp

注意:配置此设置后,管理员只能直接访问 CS 的域名来进行管理。


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

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

0640.webp


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

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

内容如下:
balancedHost=cs.halfcoffee.com

000640.webp


然后重启 Connection Server 服务:

0000640.webp
为所有 CS 执行上述同样的操作。

8. 内网用户访问测试

通过浏览器访问 CS LB 的域名,可以正常访问页面:
1640.webp
虚拟桌面也可以正常访问:

11640.webp

9. 高可用性测试

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

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

11111640.webp
111111640.webp

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

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

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