暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

全栈云-流量隔离和控制方案研究

本文简介全栈云的网络模型和流量隔离需求,并从流控原理、流控实现方案到落地方案进行研究。



全栈云SDN网络(软件定义网络)

为什么采用SDN?

传统网络方案复杂且难以自动化,无法满足大型数据中心虚拟主机网络管理的更高要求。


  1. 传统二层的VLAN方式只支持4096个,无法满足网络的隔离需求。


  2. 传统网络只能监控数据包的流入和流出,在针对业务层面的质量保证和监控措施很难实施,无法保证端到端的业务体验。


  3. 底层VLAN、网关、防火墙等物理资源的部署仍然通过手工配置,限制了计算资源的部署与自由迁移。


全栈云SDN方案

全栈云提供两种SDN:VPC网络和VBC网络。


1. 虚拟专有网络(VPC)

VPC是一个二层隔离,内部三层互通的虚拟网络网络,功能上由Vxnet、DVR(分布式虚拟路由器)和KVR(核心虚拟路由器)组成。Vxnet通过DVR完成二层隔离和三层互通,KVR实现VPC高级功能。SDN自定义的逻辑隔离网络空间,由用户自定义的,云上的服务资源可部署VPC内,如云主机、负载均衡、云数据库等。


VPC基于隧道技术来实现,支持自定义网段划分、IP地址和路由策略等,通过安全组和网络ACL(访问控制)等实现多层安全防护,VPC也可以通过VPN或专线与数据中心联通。


2. 虚拟基础网络(VBC)

云上所有用户共享公共网络资源池,用户之间未做逻辑隔离,IP地址由系统统一分配,相同的内网IP无法分配给不同用户。IP地址全行统一规划、网络可达,资源之间的缺乏有效的相互隔离,需要补充隔离,全栈云采用微隔离主机防火墙的方案进行隔离。


VBC是所有租户共享的网络,一般是/24位网段,一个基础网络最多252台虚拟机。基础网络主要由DVR组成,实现二层和三层的互通。


当前全栈云基础网络架构下,默认提供单网卡。网卡的带宽由管理流量、业务流量、存储流量、NAS流量等共享。



流量隔离方案

多网卡情况下,业务流量和管理流量使用不同的网卡,每个网卡在创建的时候会限定速率。突增的管理流量不会影响业务带宽的使用,此种方式可保证业务流量带宽不会被非业务流量挤占。全栈云正在建设多网卡的基础网络架构,从云底座丰富支持和控制能力。


目前使用单网卡情况下,业务流量和其它流量未分离,使用的都是同一块网卡,管理流量或者NAS流量可能会挤占业务流量带宽。而在业务系统中,业务流量优先级最高,需要通过限制非业务流量的带宽,保证在任何时候非业务流量的带宽上线是受控的。



单网卡下流量控制方案

流量控制是什么?

流量控制是一套用于网络包控制的队列系统和算法机制的总称。 


它包含如下功能:

SHAPING: 网络流量的塑性,不单只降低可用带宽。也可以用于防止流量激增(用于发送数据)。


SCHEDULING:调度网络传输,提升网络应用的交互性(用于发送数据)。


POLICING:相对于SHAPING用于发送数据,而POLICING用于控制接收数据。


DROPPING:丢弃超出带宽限制的网络包(用于发送和接收数据)。


CLASSIFYING: 对不同的网络包进行分类,发往不同的发送队列。


MARKING: 修改网络包内容


Linux kernel流量控制实现

在linux中用于使用kernel原生Traffic Control(TC)功能进行网络流量控制,TC规则有两个重要属性,分别type(类型)和queues(队列)。


TC概念中,队列分为无类队列,有类队列。


无类队列只有一条队列,只有一种队列规则(qdisc);在无类队列中,最简单的是pfifo_fast队列,采取先入先出的算法,只能延迟数据包发送或丢弃数据包,不能对数据包进行调度,即改变数据包发送顺序。


而有类队列分为很多类(class),数据包到达时,根据不同的数据包类型,源目的ip,端口等等属性,被筛选器(filter)划分进不同的类中,不同的类可能有不同的队列规则,不同的类也可以继续划分,嵌套下去。


type就相当于不同的队列,具有不同的队列规则;queues就相当于有类队列的不同类。


HTB(hieratchical token bucket)类型使用了”tc”的htb队列,分层次的令牌桶队列,属于有类队列。HTB是Hierarchy Token Bucket的缩写。通过在实践基础上的改进,它实现了一个丰富的连接共享类别体系。使用HTB可以很容易地保证每个类别的带宽,虽然它也允许特定的类可以突破带宽上限,占用别的类的带宽。HTB可以通过TBF(Token Bucket Filter)实现带宽限制,也能够划分类别的优先级。


TBF(token bucket filter)类型,采取上面提到的令牌桶的算法,而htb就是在tbf的基础上修改为了有类队列,其核心算法还是令牌桶算法。


HFSC(hieratchical fair service curve)类型,对应了”tc”中的hsfc队列,分层次的公平服务曲线队列,它同时除了针对带宽,还针对延迟对数据包进行调度。


通用的流量控制与Linux TC的实现对应关系如下:



流量控制能解决哪些问题

  1. Limit total bandwidth to a known rate; TBF, HTB with child class(es).

    限制带宽

  2. Limit the bandwidth of a particular user, service or client; HTB classes and classifying with a filter. traffic.

    限制指定用户或服务的带宽


  3. Maximize TCP throughput on an asymmetric link; prioritize transmission of ACK packets, wondershaper.


  4. Reserve bandwidth for a particular application or user; HTB with children classes and classifying.

    为特定服务保留带宽


  5. Prefer latency sensitive traffic; PRIO inside an HTB class.

    选择延迟敏感的通信


  6. Managed oversubscribed bandwidth; HTB with borrowing.

    管理超限使用带宽


  7. Allow equitable distribution of unreserved bandwidth; HTB with borrowing.

  8. Ensure that a particular type of traffic is dropped; policer attached to a filter with a drop action.

    丢弃特定类型的网络包



如何进行流量控制

1.  为网卡单独设置qdiscs

tc qdisc add dev eth0 root fq_codel

tc qdisc del dev eth0 root


2. 更改系统默认qdiscs

net.core.default_qdisc = pfifo_fast


3. 查看当前qdisc配置

tc qdisc show dev eth0

tc -s qdisc show dev eth0


4. 使用 classful  hfsc实现对特定ip或网段的流量限速

实现脚本编写示例:tc1.sh

tc qdisc add dev eth0 root handle 1:0 hfsc default 1  (添加hfsc ,默认的class 为1)


//添加2个class, 对应不同的速率限制, classid分别为1,2,3,4 ,速率上限分别为1mbit,2mbit


tc class add dev eth0 parent 1:0 classid 1:1 hfsc sc rate 1mbit ul rate 1mbit


tc class add dev eth0 parent 1:0 classid 1:2 hfsc sc rate 2mbit ul rate 2mbit


//添加一个 filter对发往目的ip地址进行网络速率限制


tc filter add dev eth0 protocol all parent 1: u32 match ip dst 192.168.1.73 flowid 1:1


//添加一个filter对发往目的ip网段进行网络速率限制


tc filter add dev eth0 protocol all parent 1: u32 match ip dst 192.169.11.0/24 flowid 1:2


5. 使用htb实现对特定ip或网段的流量限速

实现脚本编写示例:tc2.sh(与tc1.sh类似 )


tc qdisc add dev eth0 root handle 1:0 htb default 1


tc class add dev eth0 parent 1:0 classid 1:1 htb rate 1mbit ceil  1mbit


tc class add dev eth0 parent 1:0 classid 1:2 htb rate 2mbit ceil 2mbit


tc filter add dev eth0 protocol all parent 1: u32 match ip dst 192.168.1.73 flowid 1:1


tc filter add dev eth0 protocol all parent 1: u32 match ip dst 192.169.11.0/24 flowid 1:2



验证

节点A:192.168.11.16

节点B:192.168.1.73

节点C:192.169.11.5


1. 在节点A上执行tc1.sh



2. 在节点B启动iperf server,在节点A启动iperf  client对节点B进行压测,可以看出速度限制在1Mbits/sec以下:

iperf3 -c 192.168.1.73 -i 1 -t 20 -P 8



3. 在节点C启动iperf server,在节点A启动iperf  client对节点C进行压测,可以看出速度限制在2Mbits/sec以下:

iperf3 -c 192.169.11.5 -i 1 -t 20 -P 8




单网卡下全栈云的流控方案集成

通过上面的方式,只要确定了管理流量中各类型管理流量、业务流量、存储流量、NAS流量的网络地址段划分,按照网段实现基于hfsc流控机制或基于htb流控机制的脚本,把脚本加入基础镜像流水线,在创建业务节点的时候对非业务流量进行自动配置,业务流量不设流量限制,实现全栈云自动集成。


作者 | 邹秋波

视觉 | 王朋玉

统筹 | 郑    洁

文章转载自中国光大银行科技创新实验室,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论