在日常维护思科 ACI 的场景中,如果发现 EP 的流量有问题,包括但不限于中断,断断续续,高延迟/慢,可以考虑使用 SPAN 来做流量镜像,从 Wireshark 入手分析报文内容。
不过别急,在 SPAN 之前,强烈建议看一下 APIC Dashboard - Faults,有没有新增的 Faults;如果是 APIC 5.2 version 和之后版本,在 Dashboard - History - Event Records, Fault Records 当中可以看到更多的信息,说不定会有线索。毕竟运维的目的是发现问题解决问题,从 APIC Faults 入手是最简单直观的方式。
在没有明确线索的情况下,SPAN 可以作为一个备选。
SPAN 是怎么工作的
从一张图入手,主要涉及到四个设备:流量源和目的 server,转发设备 leaf,SPAN 接收设备 Sniffer
SPAN 是从硬件来完成的流量镜像 (copy) 操作,不影响业务报文的转发,基本不影响设备的 CPU
The SPAN(Port Mirroring) process is nondisruptive to any connected devices and is facilitated in the hardware, which prevents any unnecessary CPU load.
SPAN 和 ERSPAN
用于接收 SPAN 流量的服务器 (Sniffer),可以接入任意一台 ACI leaf。从接入位置来说,可以区分两种 SPAN 部署方式:
- Local SPAN,SPAN 的 source 接口,和目的接口在同一台 leaf;
- ERSPAN, SPAN source, destination 不在同一台 leaf,配置过程中需要指定 Sniffer 的 IP
ACI 可以在哪个位置 SPAN
从 SPAN source 的位置来看,ACI 的 SPAN 分为三种方式:
- Access SPAN,针对 leaf 的 Access(南向/South) 接口/port-channel/vpc, 对端是 server 或者 access switch
- Fabric SPAN,针对 leaf 的 Fabric(北向/North) 接口,对端是 Spine
- Tenant SPAN,针对 EPG(从业务层面区分)所关联的 Access 接口, 对端是 server 或者 access switch,匹配指定 EPG 才会被抓包,效果是 ERSPAN
SPAN 支持过滤条件/Filter,尽量做到精确匹配,在流量规模很大的情况下可能有用。
SPAN 的一些限制:
- 经过 ACI leaf 转发的 报文只能被 SPAN 一次,即使配置两个不同 Access SPAN session,将 SPAN session 1 的目的接口,当作 SPAN session 2 的 source 接口
- 对同一个 leaf 配置两个不同 SPAN session,假设 SPAN session 1 抓包 packet Rx, SPAN session 2 抓包 packet Tx,实际效果是只有 Rx 被抓到
- 假设 int e1/1 加入了 port-channel/vpc,那么只能配置 port-channel/vpc 作为 SPAN source,参考文档
- 当 source 是 VPC,那么 destination 只能是 IP(ERSPAN),不能是 interface(local SPAN),参考文档
- ERSPAN destination IPs must be learned in the fabric as an endpoint. // ERSPAN 指定的 destination IP 必须是 ACI 能学习到的 EP
- SPAN/ERSPAN 场景,FEX 接口 只能作为 source
- 当 FEX 接口作为 SPAN source,仅支持 Rx,不支持 Tx
On generation 2 switches, Tx SPAN does not work whether traffic is Layer 2 or Layer 3 switched.
举个栗子,Tenant SPAN 抓包
- EP-1 22.0.10.1, EP-2 22.0.56.1 分别在 EPG-1, EPG-2
- 配置 EPG-1, EPG-2 作为 Tenant SPAN 的 source
- 业务流量和 SPAN 的示意图
- 通过测试,在 Sniffer 可以看到两份相同的报文,第一份来自 source EP-1 in EPG-1,第二份来自 destination EP-2 in EPG-2。对于 TCP 流量,假如 SPAN 的 source,destination 都在同一台 leaf,Wireshark 有可能会将这两份报文标记成 Suspect Retranmission
- 之前提到过 Tenant SPAN 是针对 Access 接口,也就是 packet 从 leaf 101 Rx,从 leaf 102 Tx,才会被抓到。如果说 packet 最终没有从 leaf 102 发送出去,那么 Tenant SPAN 就只能抓到一份来自 source leaf 101 Access 接口的流量了
- 抓包截图,可以关注一下原始/内层数据包的 Identification 相同