流量分发

创建时间:2024-09-24 最近修改时间:2024-09-24

#1. 流量分发

流量分发支持将网络流量分配到不同的网络设备或服务器上进行处理或响应。通过流量分发技术,可以提高网络的吞吐量、平衡网络负载、增加网络可靠性、优化网络性能以及提高网络安全性。

#1.1 特性介绍

  • 面向业务的流量过滤:用户可设置源端地址、端口号、目的端地址、端口号、协议五元组作为过滤条件,并支持直接输入VPC、子网、云服务器、容器POD、自定义资源组等替代IP地址,精准过滤虚拟网络中的流量,最大利用网络带宽和分析工具效率。
  • 源端Payload截断:用户可设置对网包的L4 Payload长度进行截断,最大利用网络带宽和分析工具效率。
  • 多层流量标签:分发流量利用隧道封装发送,通过在隧道头中携带特殊的流量标签,用于对不同VPC、容器服务、流量采集位置(客户端/服务端)等流量属性进行标记,以帮助后端分析工具解决VPC之间IP段冲突、容器服务后端POD的IP地址频繁变动等问题,并实现对客户端、服务端采集流量进行端到端对比分析。采集器支持在原始包之前添加VXLAN或ERSPAN隧道及内层VLAN标签,后端汇聚分流设备或TAP交换机仅需要做一次性的隧道解封装配置,无需根据不同的隧道标签解封装报文的VLAN标签,极大简化分流设备/TAP交换机的配置复杂度和特性依赖。
  • 流量全局去重:对于同一个网包,采集器会在源端云服务器及目的端云服务器处多次采集到。当发往同一个分发点时,如果不做去重,后端分析工具将收到重复的网包,同时也会占用至少双倍的带宽。DeepFlow引入分布式去重功能解决重复采集的问题,具体原理可查看场景介绍。为了最大限度减少对带宽的占用,对发往同一个分发点、设置相同隧道标签的同一个网包,按所有匹配策略的最大Payloady截取长度进行截取。例如两条分发策略A=Payload截断30、B=Payload截断20,对于同时匹配这两条策略的网包将会被截取30字节Payload后进行发送。
  • 流量多路分发:当一个网包匹配的多条分发策略对应不同分发点或不同隧道标签时,流量将会复制多份分别发送。例如两条策略A=分发点 C1、B=分发点 C2,对于同时匹配这两条策略的网包,在分发时复制两份,一份分发给C1,一份分发给C2。
  • 资源变更感知:当云服务器迁移、云服务器IP变更、容器POD弹性伸缩时,分发策略自动感知,无需用户重新设置,迁移期间的流量持续分发。

#1.2 原理说明

#1.2.1 采集点为单个云服务器

当用户选择单个云服务器或者单个IP地址时,具体的流量采集点为云服务器(IP地址可映射到具体的云服务器)在宿主机上的虚拟接口。如下图所示,在VM-A的虚拟接口上采集到的接收和发送方向流量,经过过滤规则之后都将会被分发到指定的分发点。

: 对于使用了安全组的 OpenStack 环境,虚拟接口上发送方向的流量是经过安全组之间的,接收方向的流量是经过安全组之后的。

01-vm

01-vm

#1.2.2 采集点为IP段或子网

当用户选择一个IP段或子网时,具体的流量采集点为这些IP地址映射到的所有云服务器在宿主机的Tap接口。如下图所示,当采集点与外部的通信时,对采集点上接收和发送的流量进行分发,这与采集点为单云服务器场景相同。当采集点内部通信时,为达到全局去重效果,只会将流量发送端的虚拟接口上做单向采集分发。例如下图中VM-B与VM-C之间的通信,只会在VM-B和VM-C上采集分发各自发送方向上的流量。

02-cidr

02-cidr

#1.3 操作手册

#1.3.1 分发策略

分发策略以表格形式展示,支持对分发策略进行新建、修改、删除等操作。

03-分发策略

03-分发策略

  • ① 新建:支持新建分发策略。使用详情,请参阅【新建策略】章节
  • ② 名称:点击名称,进入二级页面查看当前分发策略分发的流量速率包量速率
  • ③ 开启/禁用:选择开启或禁用当前分发策略,开启后进行数据过滤抓取
  • ④ 编辑:对点击的分发策略进行修改
  • ⑤ 删除:删除该分发策略

#1.3.1.1 新建策略

03-新建策略

03-新建策略

  • 新建策略表格填写,部分可参阅【PCAP下载 - 新建策略】章节
    • 注:过滤规则中,两端都为容器资源/容器服务时,区分访问方向,采集点对应的容器服务为客户端,对端对应的容器服务为服务端
  • 基础信息:填写分发策略名称,选择采集点及采集器
  • 过滤规则:对采集点、对端采集点进行选择过滤
    • 流量方向:根据流量方向,选择要分发的数据
      • 双方向:分发采集点与对端之间的流量
      • 采集点 -> 对端:仅分发采集点发送至对端的流量,对端发送至采集点的流量不分发
  • 分发动作:对获取到的流量进行处理
    • 流量处理:可选择对数据进行分发或丢弃
    • 分发点:选择添加要进行操作的分发点,分发点的添加,请参阅【分发点】章节
    • 流量标签:对应为 Vxlan 的 VNI、GRE 的 KEY 和 Erspan 的 Session ID,后端工具可通过隧道标签来区分业务层面的流量

#1.3.2 分发点

分发点是接收分发流量的隧道端点,可以是交换机上接收隧道的接口IP,也可以是具备解析隧道协议的分析工具所在的宿主机/云服务器的接口IP。

04-分发点

04-分发点

  • ① 新建分发点:支持新建分发点,使用详情,请参阅【新建分发点】章节
  • ② 关联分发策略数量:点击后可跳转到分发策略页面中查看使用该分发点的分发策略
  • ③ 编辑:对点击的分发点进行修改
  • ④ 删除:删除该分发点
  • ⑤ 名称:点击名称,进入二级页面查看当前分发点分发的的流量速率及`包量速率``

#1.3.3 新建分发点

05-新建分发点

05-新建分发点

  • 名称:填写分发点名称
  • 分发协议:选择分发协议,支持 XVLAN、ERSPAN、TCP-NPB 协议,详细的封装格式见【二次开发-解析分发流量】
  • 分发端点:填写分发点的 IP 地址

#1.4 统计指标量

DeepFlow 对外提供一系列指标来统计分发策略匹配的流量(注:不是分发的流量)数据情况。数据库表名:flow_metrics.traffic_policy。

Tag 字段描述如下:

Name DisplayName Description
time 时间
vtap 采集器 已废弃,请使用 agent。
agent 采集器
policy 策略名称
npb_tunnel 分发点

generate from csv file: traffic_policy.ch

Metrics 字段描述如下:

Field DisplayName Unit Description
byte 字节 字节
byte_tx 发送字节 字节
byte_rx 接收字节 字节
packet 包数
packet_tx 发送包数
packet_rx 接收包数
l3_byte 网络层载荷 字节
l3_byte_tx 发送网络层载荷 字节
l3_byte_rx 接收网络层载荷 字节
l4_byte 传输层载荷 字节
l4_byte_tx 发送传输层载荷 字节
l4_byte_rx 接收传输层载荷 字节
row 行数

generate from csv file: traffic_policy.ch

#1.5 配置说明

  • 系统-采集器-配置-包分发功能开关-全局去重:默认开启,可选择关闭,采集器分发流量中支持在隧道头部和内层VLAN中记录流量采集的位置(详见二次开发章节),因此用户可以选择关闭全局去重,使得流量分析工具可以获取源、目的位置获取的两份流量,这样有助于精确定位网络性能问题发生的位置
  • 系统-采集器-配置-包分发配置参数-内层附加头:默认无,可选择为 802.1Q 开启内存 VLAN 封装

#1.6 应用场景

#1.6.1 分发云服务器vm1的全部流量

  • 采集点过滤规则:云服务器=vm1
  • 对端过滤规则:不配置
  • 匹配如下流量:
    • vm1上分发出方向的src_ip = vm1
    • vm1上分发入方向的dst_ip = vm1

#1.6.2 发云服务器VM1的tcp协议的80端口的流量

  • 采集点过滤规则:云服务器=vm1,协议=tcp,端口=80
  • 对端过滤规则:不配置
  • 匹配如下流量:
    • vm1上分发出方向的src_ip = vm1 and protocol = tcp and src_port = 80
    • vm1上分发入方向的dst_ip = vm1 and protocol = tcp and dst_port = 80

#1.6.3 分发云服务器vm1与云服务器vm2之间的流量

  • 采集点过滤规则:云服务器=vm1
  • 对端过滤规则:云服务器=vm2
  • 匹配如下流量:
    • vm1上分发出方向的src_ip = vm1 and dst_ip = vm2
    • vm1上分发入方向的dst_ip = vm1 and src_ip = vm2

#1.6.4 分发云服务器vm1与云服务器vm2的tcp协议的80端口通信的流量

  • 采集点过滤规则:云服务器=vm1
  • 对端过滤规则:云服务器=vm2,协议=tcp,端口=80
  • 匹配如下流量:
    • vm1上分发出方向的src_ip = vm1 and protocol = tcp and dst_ip = vm2 and dst_port = 80
    • vm1上分发入方向的dst_ip = vm1 and protocol = tcp and src_ip = vm2 and src_port = 80

#1.6.5 分发IP段192.168.10.24-192.168.10.26的80端口流量

设定192.168.10.24-192.168.10.30对应的云服务器为vm1,vm2,vm3。

  • 采集点过滤规则:IP=192.168.10.24-192.168.10.26,端口:80
  • 对端过滤规则:不配置
  • 匹配如下流量:
    • 分发vm1与vm2、vm3产生的流量规则如下:
      • vm1分发出方向的src_ip = vm1 and src_port = 80 and dst_ip = vm2/vm3
    • 分发vm1与vm2、vm3以外的流量规则如下:
      • vm1分发出方向的src_ip = vm1 and src_port = 80
      • vm1分发入方向的dst_ip = vm1 and dst_port = 80

#1.6.6 分发子网192.168.10.0/10的流量

设定vm1为子网192.168.10.0/10中的一个云服务器。

  • 采集点过滤规则:CIDR=192.168.10.0/10
  • 对端过滤规则:不配置
  • 匹配如下流量:
    • 分发vm1与子网内的云服务器规则如下:
      • vm1分发出方向的src_ip = vm1 and dst_ip = 子网内云服务器的IP
    • 分发vm1与子网内云服务器以外的流量规则如下:
      • vm1分发出方向的src_ip = vm1
      • vm1分发入方向的dst_ip = vm1

#1.6.7 分发子网192.168.10.0/10与10.0.0.0/16子网的udp流量

设定vm1为子网192.168.10.0/10中的一个云服务器。

  • 采集点过滤规则:CIDR=192.168.10.0/10
  • 对端过滤规则:CIDR=10.0.0.0/16,协议=udp
  • 匹配如下流量:
    • vm1出方向的src_ip = vm1 and dst_ip = 10.0.0.0/16子网的IP and protocol = udp
    • vm1入方向的dst_ip = vm1 and src_ip = 10.0.0.0/16子网的IP and protocol = udp

#1.6.8 分发vpc1的全部流量

设定vm1为vpc1中的一个云服务器。

  • 采集点过滤规则:VPC=vpc1,CIDR=0.0.0.0/0
  • 对端过滤规则:不配置
  • 匹配如下流量:
    • 分发vm1与vpc1内的云服务器规则如下:
      • vm1分发出方向的src_ip = vm1 and dst_ip = vpc1内的云服务器IP
    • 分发vm1与vpc1以外的流量规则如下:
      • vm1分发出方向的src_ip = vm1
      • vm1分发入方向的dst_ip = vm1