VRD 使用案例 — 将 Citrix ADC 动态路由与 Kubernetes 结合使用
Acme Inc. Kubernetes 应用程序的路由健康注入和 BGP 集成
Acme Inc. 是 Citrix 的一家老客户,大量采用 Citrix ADC。Citrix ADC 是关键 Kubernetes 应用程序的主要负载平衡和业务连续性解决方案。Acme Inc. 目前有三个主要的数据中心。
Acme Inc. 希望为关键 Kubernetes 应用程序提供冗余和高可用性,以便它们能够在三个数据中心的所有部署机架之间提供更高的容错能力。
该解决方案在 Citrix ADC 上使用路由运行状况注入,为通过现有 BGP + ECMP 路由结构访问的 Kubernetes 服务提供冗余。
除了路由健康注入之外,许多 Kubernetes 应用程序还需要后端服务器来接收真实的客户端 IP。使用 Citrix ADC 的传统负载平衡会从 ADC 子网 IP 地址获取发往后端服务器的数据包。对于需要真实客户端 IP 地址作为源地址的应用程序,Citrix ADC 提供了多种方法。这些方法包括 USIP(使用源 IP 模式)和 DSR(直接服务器返回)。
Acme Inc. IT 部门为 Kubernetes 应用程序提供测试 VIP 的 Citrix ADC VPX 实例。该测试环境用于使用客户端 IP 构建路由健康注入解决方案,并在将其推出到生产环境之前对其进行全面测试。
部署要求
Acme Inc. 和 Citrix 确定了几种不同的要求:
- 每个数据中心都有 Citrix ADC VPX 单元,可连接到动态路由网络 (3)
- 在 Acme Inc. 动态路由中,最多三台虚拟服务器的 IP 地址配置为 /32 路由
环境:
Kubernetes 测试 VIP
- 每个数据中心中要用作路由运行状况注入下一跳的 SNIP 地址每个 Citrix ADC 单元上的 VIP 必须具有自己的 SNIP 地址并启用了动态路由。这是通告路由运行状况注入 VIP 的网关。
识别 Kubernetes 信息,包括:
- 后端 Kubernetes Pod 和测试 VIP
- 必需的端口和负载平衡参数
- SSL 证书(如果适用)
客户端 IP 配置
- 后端服务器必须接收真实的客户端 IP 地址
- 客户端 IP 选项部分讨论了多种可用选项
路径健康注射 (RHI)
带有路由运行状况注入的 Citrix ADC 动态路由
Citrix ADC 中动态路由和路由运行状况注入的主要目的是将 VIP 的状态或运行状况传达给上游路由器。VIP 的状态取决于与其关联的虚拟服务器以及绑定到该 VIP 的服务。通过路由运行状况注入 VIP 的通告与与虚拟 IP 地址关联的虚拟服务器的状态相关联。
虚拟 IP 地址必须启用通告。这是通过在虚拟 IP 地址上将 -hostroute
选项设置为 enabled
来实现的。默认情况下,-hostroute
选项设置为 disabled
。当您使用 add ns ip
命令添加 IP 地址或使用 set ns ip
命令修改现有 IP 地址时,可以启用 -hostroute
选项。
路径运行状况注入监视
启用 hostRoute
此选项后,NetScaler 内核将根据与虚拟 IP 地址关联的虚拟服务器的状态将主机路由注入 ZebOS NSM(网络服务模块)。 - vserverroute health injectionLevel
交换机控制虚拟服务器的状态与发送到网络服务模块 (NSM) 的虚拟 IP 主机路由之间的关系。
可用于虚拟服务器路由运行状况注入级别的三个选项:
-
ALL_VSERVERS
— 仅当与虚拟 IP 关联的所有虚拟服务器均为 UP 时,才会向 NSM 注入主机路由。 -
ONE_VSERVER
— 仅当与虚拟 IP 关联的任何一个虚拟服务器处于“开启”状态时,主机路由才会注入 NSM。 -
NONE
— 无论与虚拟 IP 关联的虚拟服务器的状态如何,都会向 NSM 注入主机路由。
注意:
默认情况下,–vserverRHILevel 设置为 ONE_VSERVER。
下图描述了与 Citrix ADC 上的负载平衡虚拟服务器关联的虚拟 IP 地址的基本路由运行状况注入功能:
具有多个数据中心的路由运行状况注入选项
下面描述了路由运行状况注入配置,该配置是根据每个应用程序的特定要求选择的。可用选项如下:
Active — 主动,BGP 为每个客户端(任播或 ECMP)确定最高效的路由
路由运行状况注入激活 — 激活:任播或 ECMP
路由运行状况注入活动/活动状态为任播或 ECMP。这是一种真正的主动-主动替代方案。在这种情况下,路由运行状况注入 VIP 的 /32 路由会在所有数据中心通告,而不会向 BGP 显示成本或本地优先级。向网络呈现三条路由,其中特定于每个数据中心的 Citrix ADC 的 SNIP 地址充当访问每个 VIP 的网关。Acme Inc. 动态路由环境以相等成本将客户端请求定向到数据中心,以进行流量分配。如果三个数据中心之一的服务出现故障,绑定到负载均衡服务的监视器会关闭虚拟服务器。这反过来会删除出现故障的数据中心的路由通告。所有客户端连接继续与其余的数据中心一起工作。
路由运行状况注入主动-主动配置的重要注意事项:
- 对于基于 TCP 和 UDP 的服务,建议使用 ECMP 进行路由运行状况注入,并且需要由 Acme Inc. 网络团队配置 BGP。使用 ECMP 的路由运行状况注入对上游路由器可以支持的路由数量有限制 (64)。
- Anycast 路由运行状况注入支持基于 UDP 的服务,不建议用于基于 TCP 的服务。
下图描述了活动-主动任意播/ECMP 方案:
Citrix ADC 和客户端 IP 选项
Acme Inc. 对其大量 Kubernetes 应用程序要求的重要要求之一是,对于由 Citrix ADC 进行负载平衡的服务,后端服务器必须接收真正的客户端 IP 地址。Citrix ADC 上的典型负载平衡源自 NetScaler 拥有的 SNIP(子网 IP)地址发往后端服务器的所有流量。对于某些应用程序,需要真正的客户端 IP。大多数使用路由运行状况注入的应用程序还要求将真正的客户端 IP 发送到后端服务器。
Citrix ADC 具有名为“使用源 IP”(USIP) 的功能,可以全局绑定,也可以单独绑定到需要客户端 IP 到后端服务器的每个服务。问题在于,一旦客户端收到具有不同源 IP 的数据包,就会出现非对称路由,并且数据包将被丢弃。正因为如此,必须评估其他注意事项,并且需要在后端服务器上进行额外的配置才能使 USIP 正常工作。
在 Citrix ADC 上实施使用源 IP 模式时,一个重要的考虑因素是,必须在 Citrix ADC 模式下关闭浪涌保护模式。有关带浪涌保护的 USIP 模式的更多信息,请参阅 此处的 Citrix 文章。
Citrix ADC 提供了多种方法来实现这一目标,以下部分将介绍这些方法。可用的选项有:
- 使用 Citrix ADC SNIP 作为默认网关的 USIP 模式
- 直接服务器返回第 3 层
- IP 隧道
- 在 TOS 标头上插入客户端 IP
- 直接服务器返回第 2 层
- 针对 TCP 报头的客户端 IP 插入
使用 Citrix ADC SNIP 作为默认网关的 USIP 模式
在与 Acme Inc. IT 的多次会晤中,确定此方法是大多数需要客户端 IP 的负载平衡服务的首选。此方法涉及更改每个正在进行负载平衡的后端服务器的默认网关,并将其设置为托管负载平衡 VIP 的 Citrix ADC 单元的 SNIP 地址。此选项支持所有 Citrix ADC 功能,而不是直接服务器返回选项,在直接服务器返回选项中,Citrix ADC 仅管理传入的客户端请求。此选项还要求在 ADC 单元上使用最多的带宽。 此方法具有以下基本要求:
- Citrix ADC 必须有一个 SNIP 地址与所有正在进行负载平衡的后端服务器位于同一 L2 子网中。
- SNIP 地址被配置为所有后端服务器的默认网关。不同的 L2 子网中的后端服务器可以使用多个 SNIP 地址。
- 必须在指向后端服务器的服务上启用 USIP 模式。
注意:
也可以在 Citrix ADC 设备上全局启用 USIP,但是 USIP 仅适用于启用 USIP 模式后创建的服务。
Citrix 建议向后端服务器添加更多网络接口,并为非客户端流量配置静态路由。
- 需要带宽的备份例程和其他进程不必遍历 Citrix ADC 单元。
直接服务器返回:第 3 层选项
Citrix ADC 直接返回服务器是另一个配置选项,用于在负载平衡配置中获取后端服务器上的客户端 IP 地址。可以在第 3 层模式下配置直接服务器返回,因此允许在其他 L3 VLAN 上使用后端服务器,而不是 USIP,后者要求从 ADC 到后端服务器的 L2 连接。由于响应流量未通过 Citrix ADC 单元,因此直接服务器返回配置不支持某些 Citrix ADC 功能。此选项要求在 Citrix ADC 单元上具有最低的吞吐量。
直接服务器返回需要后端服务器更复杂的配置,因为后端服务器必须能够提取客户端 IP 并重写 TCP 标头才能直接响应客户端。Citrix 目前支持两种不同的方法来配置第 3 层 DSR:
- 带 IP 隧道的 DSR 模式 (IP over IP)
- 带 TOS(服务类型 TCP 报头字段)的 DSR 模式第 3 层
DSR 具有以下基本要求:
- Citrix ADC 必须在服务上使用 USIP 进行配置。
- 后端服务器有一个使用 Citrix ADC VIP 地址配置的环回地址。
- 必须为每种方法专门配置后端服务器:
- IP 隧道:后端服务器必须解封来自 ADC 的数据包,并提取客户端 IP,以便直接响应客户端。
- TOS(服务类型):后端服务器必须能够读取TCP数据包的TOS标头,并使用此信息直接回复客户端。
- 这两种方法都可能需要在后端服务器上进行自定义配置并使用第三方应用程序。
第 3 层 DSR 可能需要在防火墙和安全设备上配置例外。
有关第 3 层直接返回服务器的更多信息,请点击此处:
使用 TOS 时配置 DSR 模式 - 使用 TOS 的 DSR
- 带 IP 隧道的 DSR
公开“负载均衡器”类型的服务
在 AWS、GCP 或 Azure 等公有云上的 Kubernetes 部署中,本机支持负载均衡器类型的服务。在云部署中,当您创建 LoadBalancer 类型的服务时,会为该服务分配云托管负载均衡器。然后使用负载均衡器公开该服务。
对于 Kubernetes 的本地、裸机或公有云部署,您可以在集群外部使用 Citrix ADC 对传入流量进行负载均衡。Citrix Ingress Controller 提供灵活的 IP 地址管理,支持 Citrix ADC 的多租户功能。Citrix Ingress Controller 允许您使用单个 ADC 对多个服务进行负载平衡,还可以组合各种入口功能。使用带有 Citrix Ingress Controller 的 Citrix ADC,您可以最大限度地利用公有云的负载均衡器资源,并显著降低运营开支。
当 Citrix ADC 位于 Kubernetes 集群(第 1 层)之外时,Citrix Ingress Controller 支持 LoadBalancer 类型的服务。创建、更新或删除负载均衡器类型的服务时,Citrix Ingress Controller 会为 Citrix ADC 配置负载平衡虚拟服务器。
负载平衡虚拟服务器配置了通过以下方式之一获得的 IP 地址(虚拟 IP 地址或 VIP 地址):
- 使用 Citrix 提供的 IPAM 控制器为服务自动分配虚拟 IP 地址。该解决方案的设计方式使您可以轻松地将该解决方案与 Infoblox 等外部 DNS 提供商集成。有关更多信息,请参阅与外部 DNS 的互操作性。
-
使用服务定义中的 spec.loadBalancerIP 字段指定 IP 地址。Citrix Ingress Controller 使用 spec.loadBalancerIP 字段中提供的 IP 地址作为与服务对应的负载平衡虚拟服务器的 IP 地址。
apiVersion: v1 kind: Service metadata: name: hello-world-service spec: type: LoadBalancer loadBalancerIP: "" ports: - port: 80 targetPort: 8080 selector: run: load-balancer-example <!--NeedCopy-->
有关更详细的参考,请参阅 公开负载均衡器类型的服务。
IPAM 必备条件
作为使用 Kubernetes 的 Citrix ADC 动态路由的必备条件,必须配置 IP 地址管理 (IPAM)。IPAM 用于在 ADM 管理的部署中自动分配和释放 IP 地址。有关更详细的参考,请参阅 配置 IP 地址管理。