一、云网络技术
1.1、专有网络VPC服务
专有/私有网络VPC(Virtual Private Cloud)是逻辑隔离的云上虚拟网络空间,通过网络隧道技术实现云端多租户/多网络隔离,为云服务器或云数据库等实例提如下网络相关的服务。VPC的逻辑架构如下图所示:

|--------|------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 专有网络VPC提供了三个功能【网络功能】【网络连接】【网络安全性】: |||
| 序号 | VPC的功能 | 说明 |
| 1 | 网络功能 | 创建VPC其实是从三个私有的网段【192.168.0.0】【172.16.0.0】【10.0.0.0】中去选择合适的一个网段;然后根据这三个网段去创建子网,创建实例时会自动分配网卡和相关IP地址。 |
| 2 | 网络连接 | 同一个VPC内网是互联互通的,不同的VPC默认是隔离的,若要实现与VPC外部通信时可以设置路由表与对应的连接方案(如:通过公网IP、NET网关、负载均衡去连接互联网;通过专线或VPN去连接企业本地的IDC)通过VPC这种互联技术,可以实现跨账号、跨VPC的互联(如:我们经常使用的阿里云的云企业网、腾讯云的对等连接等)。 |
| 3 | 网络的安全性 | 即VPC提供了【网络安全组】【网络访问控制列表】来保证网络的安全,通过四元组(源IP、目标IP、协议、端口、入站出站、允许拒绝)的配置来限制云网络的访问环境。【安全组】可以保证实例的安全;【网络访问控制列表】可以保证子网的安全。 |
[VPC的三个功能]
|--------|----------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 有了这个VPC技术之后可以实现各种网络的应用,常见的网络技术有【路由表技术】【内部专线技术】【专线网关】【VPN网关】【NET网关】【负载均衡】【弹性IP】 |||
| 序号 | 使用VPC技术的应用 | 说明 |
| 1 | 路由表技术 | 对应传统网络的【核心交换机】或【路由器】可以实现不同子网之间的内网互通,多路由表支持是为了满足传统网络(如:PDR、VRF等)路由隔离的需求,同时又可以规划出公私网的出口路由,这样可以避免公网的恶意主动攻击。 |
| 2 | 内部专线技术 | 如我们组建多个机房数据中心,通常需要多条专线将其互联起来,采购复杂的BGP路由协议,完善链路故障切换等操作;公有云提供对等连接,可以快速的将VPC建立起内网连接(支持网络之间、网络内、也支持不同账号之间的对等连接)可以让我们在短短几分钟之内实现内部专线的建立,而且我们只需要看到逻辑层是一条对等的链路,底层为公有云的一个冗余链路,我们不需要关注复杂的路由协议,以及选路的一个策略,这样可以让网络运维变得更加简单和高效。 |
| 3 | 专线网关 | 用于传统IDC、办公网对接的专线设备,用户可以自己去购买链路服务提供商的专线实现混合云互联,满足大量数据传输,低延迟的要求;也可以购买云链路服务商的专线通道,通常满足常规宽带的混合云互联网厂商接入,实现多点的POP点接入,以实现双链路、双POP点高可用接入等。 |
| 4 | VPN网关 | 主要应用于与传统的IDC、办公网的Internet的VPN互联,可以快速完成混合云的组网,既节省了专线施工周期,也也节省了成本。 |
| 5 | NET网关 | 主要应用于VPC的内部服务器访问公网,隐藏自身IP,避免公网遭受恶意的黑客攻击,NET网关可以是云厂商提供的硬件设备,也可以是自己通过VM搭建的软件NET设备,但是就可靠性与吞吐量来说硬件设备是更胜一筹的。 |
| 6 | 负载均衡 | 通常在传统的IDC中我们使用F5、A10、Nginx等硬件或软件来提供对外公网服务,同时保证了内部服务器可以稳定的对外提供服务;传统的负载均衡器在通常情况下是需要二次开发,实现业务的自主优化,匹配负载均衡策略等;而公有云提供的LB是基于每个业务自身的LB,既支持四层负载均衡,也支持七层负载均衡,每个LB由业务自行优化和配置,这种方式降低了运维的成本以及复杂度。 |
| 7 | 弹性IP | 数据中心流入方向以负载均衡为主,流出方向以防火墙、NET实现,如果在机房内部多个业务共用一段出口IP,会导致与第三方互联互通的时候出现无法区分源IP,从而带来安全隐患。而弹性IP则可以为每个虚拟机提供固定的公网IP,让服务器出口不集中在某一个NET设备上,那么这样地址、宽带、安全都是可以实现自主的配置和通信(即:弹性IP对我们使用网络来说可以更加的灵活和高效)。 |
[使用VPC技术的七种网络应用]
1.2、专有网络VPC系统架构
VPC的实现采用了SDN、 NFV,以及Overlay隧道技术,通过三个重要组件功能实现自动化的网络配置管理与调度转发功能。 VPC系统架构如下图所示:

1.3、云物理网络架构
传统网络架构分为三层【接入层】【汇聚层】【核心层】。云网络采用更加扁平高效、易于收敛与扩展的二层架构------叶脊(spine-leaf)分布式网络架构。
在云网络中, Spine SW为核心交换机; Leaf SW为接入层TOR交换机,与传统网络二层接入层SW不同的是Leaf SW具备处理三层处理功能。 Spine SW、 Leaf SW之间采用eBGP协议通信,构成一个Fabric网络。每台服务器两条链路上行到Leaf SW(两两堆叠),然后再多链路上行到Spine SW,由此保障高带宽、高可靠和无阻塞的网络。
1.4、负载均衡
负载均衡是对多台云服务器进行流量分发的负载均衡服务。负载均衡可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。实现架构如下图所示:

二、云网络的关键技术与容器云网络技术
2.1、云网络关键技术
云网络中使用了三种关键网络技术【SDN】【NFV】 以及【网络隧道】技术。 通过这些机制可以实现灵活高效的集中式网络控制与管理,通过普通硬件代替昂贵的专用硬件降低网络设备的成本,同时将网络边界从物理交换机延伸到部署服务器上虚拟化交换机,更好地满足云计算环境的网络要求。
|--------|-------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 序号 | 云网络关键技术 | 说明 |
| 1 | 软件定义网络SDN | SDN主要由网络用户和设备商发起的,相关标准组织有:ONF、ODL;SDN核心的控制面与转发而分离,通过集中式的控制器、自动化配置、管控、解决了传统网络中,因管控与转发绑定带来的各种管理与运维挑战。 SDN架构的上层应用通过北向接口,调用控制面板SDN控制器,以使用相关的网络服务或配置策略;然后通过控制器南向接口,向转发面的物理或虚拟网络设备下发配置,最后网络设备基于下发的配置执行转发或处理动作,并向上去返回状态与操作结果。 |
| 2 | 网络功能虚拟化NFV | NFV主要是由电信运营商发起的,标准的组织是:ETSI,最初的目的是为了降低网络采购与运营的成本。 NFV比较适合计算密度型的网络服务(如:负载均衡、防火墙、VPN、LAN优化、深度包检测、DPI等);在云环境中使用NFV实现各种虚拟网关、负载均衡等功能,也可以通过SDN控制器进行集中控制与配置下发。 |
| 3 | Overlay网络隧道技术 | 网络虚拟化有两个层面: 《1》在云环境中提供各种虚拟网络的功能(如:VPC、虚拟网卡、虚拟交换机、虚拟路由表等); 《2》通过隧道技术在底层物理网络上实现多个虚拟网络的传输;常用的隧道协议有:VXLAN、GRE等,通过隧道ID实现VPC的逻辑隔离;阿里云就是采用VXLAN技术直接封装内部的二层报文,外层加UDP报头中24位的VIN字段记录VPC的ID,支持16兆的VPC;微软是采用NVGRE来封装二层报文;腾讯云是采用GRE来封装三层报文(其实是去掉了内层的MAC封装三层报文,32位的KEY字段来记录VPC ID)。 Overlay的网络隧道技术有两种实现方式: 《1》网络设备商倾向于在硬件交换机种完成隧道的封装; 《2》云服务商主要采用服务器上使用VSW完成隧道的封装,避免对硬件设备的依赖性。 |
[云网络关键技术]
2.2、容器云网络技术
2.2.1、Flannel网络
Flannel是CoreOS团队针对Kubernetes设计的一个网络规划服务,简单来说,它的功能是让集群中的不同节点主机创建的Docker容器都具有全集群唯一的虚拟IP地址。在默认的Docker配置中,每个节点上的Docker服务会分别负责所在节点容器的IP分配。这样导致的一个问题是,不同节点上容器可能获得相同的内外IP地址。并使这些容器之间能够之间通过IP地址相互找到,也就是相互ping通。

2.2.2、Flannel网络的特点
|--------|---------------------------------------------------------------|
| 序号 | 说明 |
| 1 | 使集群中的不同Node主机创建的Docker容器都具有全集群唯一的虚拟IP地址。 |
| 2 | 建立一个覆盖网络(overlay network),通过这个覆盖网络,将数据包原封不动的传递到目标容器。 |
| 3 | 创建一个新的虚拟网卡flannel0接收docker网桥的数据,通过维护路由表,对接收到的数据进行封包和转发(vxlan) |
| 4 | etcd保证了所有node上flanned所看到的配置是一致的。 |
[Flannel网络的特点]
2.2.3、Flannel网络的架构
Flannel实质上是一种"覆盖网络(overlay network)",也就是将TCP数据包装在另一种网络包里面进行路由转发和通信,目前已经支持udp、 vxlan、 host-gw、 aws-vpc、 gce和路由等数据转发方式,默认的节点间数据通信方式是UDP转发。要理解Flannel的原理,必须掌握Flannel的架构, 下图是Flannel架构图:

2.2.4、Calico网络原理
**Calico 是一种容器之间互通的网络方案。**在虚拟化平台中,比如 OpenStack、Docker 等都需要实现工作节点之间的互连,但同时也需要对容器做隔离控制,就像在互联网中的服务仅开放80端口、公有云的多租户一样,提供隔离和管控机制。
而在多数的虚拟化平台实现中,通常都使用二层隔离技术来实现容器的网络,这些二层的技术有一些弊端,比如需要依赖 VLAN、网桥和隧道等技术,其中 网桥带来了复杂性,VLAN 隔离和隧道会消耗更多的资源,并对物理环境有要求,随着网络规模的增大,整体会变得更加复杂。通过尝试把主机当作互联网中的路由器,同样使用 BGP 同步路由,并使用 iptables 来做安全访问策略,最终设计出了 Calico 方案。
2.2.5、Calico网络优势
由于Calico是一种纯三层的实现,因此可以避免与二层方案相关的数据包封装的操作,中间没有任何的NAT,没有任何的overlay,所以它的转发效率可能是所有方案中最高的,因为它的包直接走原生TCP/IP的协议栈,它的隔离也因为这个栈而变得好做。
|--------|----------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 序号 | Calico网络优势 | 说明 |
| 1 | 更优的资源利用 | 二层网络的通讯是需要依赖广播消息机制,广播消息的开销与主机数量是呈指数增长的;二层网络还会使用VLAN隔离技术,天生有4096字节的限制,即使可以使用VXLAN去解决,但是VXLAN又带来了隧道开销的问题。 Calico使用的三层路由方法,这种方法完全抑制了二层的广播,因此减少了资源的开销;Calico不使用VLAN或VXLAN的技术,可以保证资源的利用率更高。 |
| 2 | 可扩展性 | Calico使用与Internet类似的方法,Internet是比任何数据中心都大的网络,因此Calico同样的具有可扩展性,可以支持更大、更多的网络。 |
| 3 | 简单且更容易调试 | 因为没有隧道,这意味着工作节点之间的路径会更短,配置会更少,那么我们在主机上就可以更容易地进行调试等操作。 |
| 4 | 更少的依赖 | Calico仅依赖三层路由可达,因此依赖非常少。 |
| 5 | 可适配性 | Calico具有很少的依赖性,这使得它可以适配所有的虚拟机、容器、以及白盒或者混合环境下的使用场景。 |
[Calico的网络优势]
2.2.6、Calico网络模型
Calico网络的大概思路【即不走Overlay网络,不引入另外的网络性能损耗,而是将转发全部用三层网络的路由转发来实现】。Calico的网络模型图如下:

|--------|------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 序号 | Calico网络模型组件 | 说明 |
| 1 | Felix | 是路由配置组件,它运行在每一个主机的Agent进程,主要负责网络接口管理和监听,还有路由app管理,ACL规则管理和同步、状态上报等;这个路由配置组件会监听Etcd中心的存储,从Etcd中获取事件(如:用户在A机器上加了一个IP或创建了一个容器等操作,用户创建Pod后,这个路由配置组件负责将网卡、IP、MAC等信息都设置好,在内核的路由表里面写上一条【即:注明这个IP到这张网卡】;同样,若用户设置了隔离策略,路由配置组件会将隔离策略配置到ACL中,然后实现隔离)。 |
| 2 | Etcd | 它是一个键值对的存储,主要负责网络元数据的一致性,可以确保Calico的网络状态是准确的状态;当然在K8S中也会使用Etcd。 |
| 3 | BIRD | (BIRD Internet Routing Daemon)是核心组件,Calico中的BIRD特指BIRD Client和BIRD Route Reflector,负责主动读取Felix在本机上设置的路由信息,并通过BGP广播协议在数据中心中进行分发路由是BGP Client。 Calico会为每个主机都部署BGP Client,BIRD是一个独立可持续发展的项目,实现了众多动态路由协议(如:BGP、OSPF、RIP等)在Calico的角色是监听主机上由路由配置组件Felix注入的路由信息,然后通过BGP协议、广播告诉每个主机节点,从而实现网络的互通。 BIRD是一个标准路由程序,会从内核里面获取哪些IP的路由发生了变化,然后通过标准的BGP路由协议扩散到整个其他的宿主机上,让外界都知道这个IP在这里。 BGP Route是使用在大型的网络当中;在大型网络中若仅使用BGP Client形成全网互联的方案,就会导致规模受限,因为所有节点之间是两两互联,就需要2的n次方个连接;为了解决这个规模问题,可以采用BGP Route方案,使所有的BGP Client基于特定的R节点互联,并做路由的同步,从而可以极大减少连接数目。 |
[Calico网络模型包含的组件及其含义说明]
三、云网络发展方向
3.1、DPDK 架构
早期虚拟网络通过半虚拟化与vSW模块进行数据包处理,需要涉及内核操作,存在大量锁、队列和中断机制等,占用系统CPU进行调度与处理,导致系统开销较大,网络性能有限。所以, Intel等公司联合推出了数据平面开发工具集DPDK(Data Plane Development Kit),通过环境抽象层EAL(Environment Abstraction Layer) , UIO(Userspace IO)、和PMD(Poll Mode Driver)等机制大幅提高数据处理性能和吞吐量。
PIVD(Port-base VLAN ID)这个轮询机制是从网卡接受到数据包后,通过DMA方式传输到应用分配的内存中,应用程序通过不断的轮询,感知到数据包后会直接进行处理,由此就避免了传统NIC收到数据包后通过中断CPU同时需要从内存拷贝数据包到用户态进行处理,所带来的系统开销和延时。目前DPDK已经开始应用于各种云网络环境中。
3.2、Smart NIC/SR-IOV
网络负载处理从最初采用vSW在内核态处理,到采用DPDK跳过内核态直接在用户态处理,大幅提升了网络性能与吞吐量。但是随着网络带宽的不断发展和突破,现在即将进入100G、200G、400G的网络时代,DPDK的性能与扩展性方面同样面临着挑战,这个时候就需要采用智能网卡Smart NIC技术来解决,智能网卡采用了硬件辅助虚拟化技术(如Intel VT-d),将以往通过软件实现,需要CPU调度处理的网络负载,卸载到采用高性能、可编程的FPGA芯片的硬件网卡上处理;通过远程内存访问技术RDMA直接访问内存,无需CPU的介入。云网络环境中通过PCI网卡直通智能网卡,直接将智能网卡分配给VM使用,同时采用ISTAR、IOV将物理网卡端口PF映射为多个虚拟共用端口,提供给多个虚拟机共享使用。这种网卡对数据包的处理带来了巨大的突破;未来部分的存储虚拟化,计算机虚拟化的功能它也会卸载到智能网卡中,这个将推动SDN、NFV包括网卡虚拟化以及白盒设备的飞速发展,促进网络架构的变革。