网络虚拟设备与网关型负载均衡集成指南

网关型负载均衡 GWLB(Gateway Load Balancer)适用于需要部署、扩展和管理第三方网络虚拟设备(如防火墙、入侵检测、流量镜像、深度报文检测等)的场景。由于网关型负载均衡 GWLB在OSI参考模型第三层以透明模式运行,所以在该负载均衡后部署网络虚拟设备时,需要做一些适配工作。本文为您介绍GWLB的工作原理,以及网络虚拟设备的集成方法。

什么是网关型负载均衡

网关型负载均衡 GWLB是一种工作在OSI参考模型第三层(即网络层)的负载均衡,可帮助企业应用轻松部署、扩展和管理各类第三方网络虚拟设备,例如:防火墙、入侵检测、流量镜像、深度报文检测等。GWLB提供以下能力:

  • 支持多台第三方网络虚拟设备的部署。

  • 可提高第三方网络虚拟设备部署的可靠性。

  • 可实现第三方网络虚拟设备的跨可用区服务能力。

  • 结合私网连接(PrivateLink),可实现第三方网络虚拟设备的跨VPC、跨账号服务能力。

  • 为第三方网络虚拟设备厂商的SaaS服务提供基础。

网关型负载均衡的工作原理

工作流程

如下图所示,GWLB通常与另一个VPC的网关负载均衡器终端节点 GWLBe(Gateway Load Balancer Endpoint)共同工作,其中,GWLBe是一种特殊类型的VPC终端节点。一个GWLB支持连接多个GWLBe。

image

GWLB工作流程如下:

序号

工作流程说明

客户端访问服务端的流量被路由至GWLBe。

GWLBe通过PrivateLink将流量转发至关联的GWLB。

GWLB将原始报文通过Geneve隧道封装,然后根据流量调度算法将流量转发至健康的后端网络虚拟设备。网络虚拟设备会根据Geneve隧道携带的64位GWLBe ID等信息来识别流量的不同来源。

网络虚拟设备做完相应处理之后,再次使用Geneve隧道将报文转发到GWLB。

GWLB会通过PrivateLink将流量转发至相应的GWLBe。

GWLBe会根据目的地址查找路由,将流量转发至服务端相应的目的服务器。

流量调度方式

GWLB支持基于五元组(源IP、目的IP、传输协议、源端口、目的端口)、三元组(源IP、目的IP、传输协议)和二元组(源IP、目的IP)的一致性哈希算法来调度流量,GWLB会将同一特征的流量路由到相同后端服务器。

通常情况下:

  • 对于TCP/UDP流量,可以选择基于五元组哈希算法。

  • 对于非TCP/UDP流量,可以选择基于三元组的哈希算法。

健康检查机制

GWLB根据您所定义的时间间隔定期运行健康检查。GWLB通过向后端网络虚拟设备发送TCP、HTTP或HTTPS数据包,并根据后端网络虚拟设备是否响应来判定后端网络虚拟设备是否健康:

  • TCP:GWLB与后端网络虚拟设备正常建立TCP连接,则认为后端网络虚拟设备是健康的。

  • HTTP或HTTPS:GWLB向后端网络虚拟设备发起HTTP或HTTPS请求,后端网络虚拟设备响应HTTP状态码为2xx或3xx,则认为后端网络虚拟设备是健康的;否则,认为后端网络虚拟设备是不健康的。GWLB不会对传入的证书进行主机名验证,因此,任何未过期的证书(包括自签名证书)都可以生效。

说明
  • 健康检查时所发送的数据包不通过Geneve封装。

  • 网络虚拟设备必须在GWLB的健康检查响应超时时间内响应才有效,否则判定为健康检查失败。

  • 网络虚拟设备可以通过控制平面响应健康检查,也可以通过数据平面将健康检查数据包转发至目的服务器来响应。

网络虚拟设备集成

集成方式

GWLB和后端网络虚拟设备使用Geneve协议进行通信。GWLB通过对每个数据包封装Geneve TLV(Type-Length-Value)向网络虚拟设备发送额外的信息(如GWLBe ID、Flow Cookie)。网络虚拟设备收到的Geneve报文可能包含一个或者多个Geneve TLV(Type-Length-Value)。

其中:

  • GWLBe ID:分配给GWLBe的64位ID。网络虚拟设备可以使用此ID将数据包与其配置关联;此外,此ID可用于确定流量的来源。

  • Flow Cookie:GWLB在流表中创建流条目时,为流生成的32位随机数。每个流都有唯一的cookie。网络虚拟设备必须原样将此cookie传回,即仅当GWLB从网络虚拟设备所接收数据包中的cookie与分配给该流的cookie匹配时,才会进一步转发数据包。如果cookie不匹配或没有cookie,则丢弃数据包。

网络虚拟设备通常的响应流程如下:

  1. 将原始数据包封装在Geneve报头中。

  2. 交换外层IPv4报头中的源IP地址(网络虚拟设备IP地址)和目标IP地址(GWLB IP地址)。

  3. 保留原始端口,不交换外层IPv4报头中的源端口和目标端口。

  4. 更新外层IPv4报头中的IP校验和。

  5. Geneve报头中所有字段原样返回,不进行修改。

  6. Geneve Option中的所有TLV字段(GWLBe ID、Flow Cookie),原样返回,不进行修改。

Geneve报文格式

Geneve数据包格式如下,有关Geneve的说明,请参见Geneve协议(RFC 8926)。

Outer IPv4 Header:
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Version|  IHL  |Type of Service|          Total Length         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|         Identification        |Flags|      Fragment Offset    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  Time to Live |Protocol=17 UDP|         Header Checksum       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                     Outer Source IPv4 Address                 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                   Outer Destination IPv4 Address              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|       Source Port = xxxx      |    Dest Port = 6081 Geneve    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|          UDP length           |         UDP Checksum          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Outer Geneve Header:
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|V=0|Opt Len = 8|O|C|    Rsvd.  | EtherType = 0x0800 or 0x86DD  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|    Virtual Network Identifier (VNI) = 0       |    Reserved   |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Outer Geneve Options: Alibaba Cloud Gateway Load Balancer TLVs
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|    Option Class = 0x0139 (Ali)|    Type = 1   |R|R|R| Len = 2 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
|                      64-bit GWLBe ID                          | 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|    Option Class = 0x0139 (Ali)|    Type = 3   |R|R|R| Len = 1 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                     32-bit Flow Cookie                        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Customer payload follows…
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               | 
|   Customer payload identified by EtherType in Geneve header   |
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+