蚂蚁金服Docker网络技术实践

简介: 在2016云栖大会杭州峰会容器技术专场上,蚂蚁金服高级技术专家辺客分享了在docker网络技术领域的探索和实践。他从对于三种docker网络的分析入手,带领大家了解了docker网络插件的开发,最后分享了蚂蚁金服网络插件开发的实践经验,深入浅出地分享了docker网络插件的各种架构。

以下内容根据演讲PPT以及现场分享整理而成。


主要内容提纲
一、docker网络分析
二、docker网络插件开发
三、蚂蚁金服的网络插件实践


一、docker网络分析
主要介绍三种docker网络,Bridge网络、docker原生的Overlay网络以及Weave网络,在这里主要分享一下这些网络的架构或者说是结构。


docker Bridge网络
Bridge网络可能是大家最熟悉的网络,如下图所示,HostA和HostB是两个宿主机,docker运行起来就将在宿主机上创建docker0的网桥作为容器的开关。

bf8e91215ae1f05b6750dce9a40c1a64f647961f

在网桥建立完成之后,同一个宿主机上的不同容器之间就可以通过网桥的转发功能进行通信,但是位于不同宿主机器上的容器无法直接进行通信,他们可以通过iptables SNAT/DNAT和容器外网络进行通信。Bridge网络结构比较简单,但是缺点是不同宿主机之间的容器其实并不在一个共同的网络中,不同宿主机之间的容器无法进行直接的通信。


docker Overlay网络
对于应用而言,如果要部署在docker中,基本上都需要面对跨主机互联的问题,docker提供了原生的Overlay网络,对docker具有良好的支持性。

5be4fbd9c3d77ec96580b89eb8f62f244e196747

这里简单提一下VXLAN协议,下图中的Inner Enthernet Frame是由容器发出的报文,在经过报文一层层封装以后,最后以UDP的方式发送出去。

4ace1447d40248ceb3b41531f62a02b9df2430d6

在Overlay网络中,每个容器会有两张网卡,其中一张网卡用于与外部网络进行通信,向外部网络传输的数据会经由eth1网卡,并通过docker_gwbridge发送出去。如果是不同宿主机之间的容器想要通信的话,数据将会通过eth0发送出去。每个overlay网络有独立namespace和br0网桥,在节点组件集群进行通讯时,采用的使用gossip协议来管理节点成员关系、并且通过广播L3Miss处理二层ARP的交互。而不同网桥上的VXLAN设备的作用就是帮助不同宿主机的容器通过VXLAN隧道直接通信。


docker Weave网络
Weave网络的易用性比较高,所以更容易上手,而且目前而言,Weave网络的产品系也是比较完善的。Weave网络有两种实现方式,一种是用户动态的封装实现,另外一种是内核态的封装实现,这里主要介绍内核态的封装实现。

在下图中Weave Router中有这样的一个插件,这个插件主要实现了两个功能,一个是帮助与其他的宿主机建立gossip协议的链接,从而建立集群的拓扑关系。另外一点就是帮助跨宿主机的容器通过datapath和VXLAN隧道进行通信。

e9899eefb2ef1d3518f9d99e9978aaca0a6e478e

小结
这三种网路有一些共同点,首先需求是共同的,都要满足容器的跨主机通信的需求,同时ARP的广播会增加网络负担,阿里云自己的产品上这一点就被解决了,这三种网络使用的Gossip协议的运维复杂度,而且无法适应多种docker网络环境,难以满足高性能的网络业务。


二、docker网络插件架构和开发
在介绍阿里云的插件构建之前,先给简单大家介绍docker网络插件架构和开发通用的CNM模型。如下图所示,这里有三个docker容器,这里主要有三个概念Sandbox、Endpoint和Network。Sandbox可以理解为docker内部运行的namespace,也就是隔离的网络配置环境;Endpoint其实是虚拟的网卡,它隶属于某一个network的通讯端口,多个Endpoint也可以在一个Sandbox中共存;而NetWork就是所有接在节点里面的Endpoint,也就是一个唯一的、可识别的endpoint组。在同一个Network中的endpoint可以相互通讯,而且你可以创建一个Frontend和Backendnetwork,然后这两个network是完全隔离的。

b2976df9df8e460e6ad28d7fc172aaa5e77e29de

在理解这三个概念之后,我们看一下这些概念是如何在流程中串联起来的。docker在启动起来时会起到Controller这样的角色,当创建Network的时候,就会调用newController函数,之后再调用newSandbox创建namespace,之后还会调用newEndpoint,使得插件自己处理如何去创建Endpoint,最后将调用join的方法,建立Sandbox和Endpoint的关系,这时候就相当于容器中有了网卡。

b889a876695e2f14062ac411925898f2f038a8cb

目前docker已经提供了开发“利器”,也就是docker官方提供的开发框架。大家在开发时只需要导入几个包,当容器运行起来,整个插件的服务也就开始运行了,后面需要实现的就是几个接口了。也就是相当于大家不用从零开始造轮子了。

524e0d2bf42aa622959e312b99e9f7690516dcbc

docker和plugin是如何通信有三种方式:.sock/.spec/.json。一般大家使用的都是sock的方式。目前蚂蚁金服使用的都是容器的方式,这样的方式既可以很方便地对它进行升级,也可以很方便地进行管理。


三、蚂蚁金服网络插件
VLAN Driver
VLAN Driver其实是最接近于现有物理网络的驱动插件。在这样的方案中,宿主机的管控流量和容器的流量被隔离在两个不同的VLAN中,采用了Ovs bridge,并且将容器接入到这个Ovs bridge中。为了避免ARP广播风暴并且缓解交换机PPS的巨大压力,采用了ARP带回的策略和大二层的策略,也避免了容器MAC地址表象对于交换机的影响。目前在大部分的企业都选择了VLAN的方式,因为它最适配现有物理网络,对业务影响最小。

d0ece23fae501a8d7e871f0abb7c0e4794a5166d

SRIOV Driver
SRIOV Driver本质上也是VLAN网络,但是目前没有采用Ovs。因为有一些像DB这样的业务对于网络的延迟有更高的要求,才产生了SRIOV Driver。具体的做法就是将VF虚化出来,直接塞到容器里面去,沿用现实场景中的Bonding模式,使用双活的Bonding模式使得PF和VF两边都可以结合起来。

02b00e1cacfced1d862cd17062b30519e5157202

VPC Driver
业务上云会有两种选择,一个是经典的云环境,另外就是VPC的环境。如果大家使用的是VPC环境,就可以采用我们的这种VPC Driver。其主要实现方式就是阿里云提供了自定义路由的方式,可以自定义VRouter上的路由,也就是自定义数据到达VRouter之后下一跳的路径,如果是利用专线就可以实现和用户中心的Docker互联。VPC Driver非常适用于在阿里云的VPC上使用docker。

cb9c0f1507ed2381786bcd47b5fab6d6f8fb8caa

VXLAN Driver
VXLAN Driver适用于在阿里云经典云环境上面进行构建应用的场景。这个方案是比较完善的,它将SLB,以及对内和对外的因素都考虑进去了。VXLAN Driver具有独立的IPAM,支持Subnet,进行了MACNAT和ARP带回,所以在容器里面看到的所有容器的MAC地址都是一样的。比较适用于在阿里云经典VM中运行多docker。

975ac8ceb31e07fb64df0f6dae3c8dc242f343c2

Smart Nic Driver
之前提到的方式都是在Linux内核中完成的,所以消耗的是Linux主机的能力,在千兆网络环境下大家可能觉得不是问题,但是在万兆网络中,就会感觉到无法发挥出万兆网络真正的能力。由于没有SRIOV网络隔离,容器之间网络的影响还是比较大的,另外在各种业务整合的时候,需要做流量管控的时候又将是性能消耗点。

1cc3c81f86a1b64c6d70d819809068de31faa12c

高性能网络其实要做的就是类似一张智能网卡,用网卡对于协议报文进行加解封装,然后将协议报文直接送到容器里面,宿主机性能没有任何消耗,而且这样对于智能网卡功能的扩展也非常容易,也不会影响宿主机。实现了无论网卡如何,保证容器底层的网络最优。



相关文章
|
5天前
|
运维 监控 Docker
构建高效微服务架构:从理论到实践构建高效自动化运维体系:Ansible与Docker的完美融合
【5月更文挑战第31天】 在当今软件开发的世界中,微服务架构已经成为了实现可伸缩、灵活且容错的系统的关键策略。本文将深入探讨如何从零开始构建一个高效的微服务系统,涵盖从概念理解、设计原则到具体实施步骤。我们将重点讨论微服务设计的最佳实践、常用的技术栈选择、以及如何克服常见的挑战,包括服务划分、数据一致性、服务发现和网络通信等。通过实际案例分析,本文旨在为开发者提供一套实用的指南,帮助他们构建出既健壮又易于维护的微服务系统。
|
5天前
|
存储 安全 网络安全
云计算环境下的网络安全策略与实践
【5月更文挑战第31天】 在数字化浪潮不断推进的当下,云计算以其高效、灵活和成本效益的特点成为企业数字化转型的重要推动力。然而,随着云服务的广泛应用,数据安全与隐私保护问题亦日益凸显,成为制约云服务发展的关键因素之一。本文旨在探讨云计算环境中网络安全的挑战与对策,通过分析当前云服务中存在的安全风险,提出有效的安全管理和技术措施,以增强企业在享受云计算便利的同时,保障信息安全的能力。
14 2
|
5天前
|
云安全 存储 人工智能
云端防御战线:云计算环境下的网络安全策略与实践
【5月更文挑战第31天】在数字化浪潮推动下,云计算已成为现代企业架构不可或缺的一部分。然而,随着数据和应用不断迁移至云端,传统的网络边界逐渐模糊,给安全带来了前所未有的挑战。本文探讨了云计算环境中面临的主要安全威胁,分析了当前最佳实践和新兴技术如何共同构建坚固的防御体系,以保护云服务中的数据完整性、机密性和可用性。
|
5天前
|
云安全 监控 安全
云端防御战线:云计算环境下的网络安全策略与实践
【5月更文挑战第31天】 在数字化时代,云计算以其灵活性、可扩展性和成本效益成为企业IT结构的核心。然而,随着云服务应用的普及,数据安全和隐私保护成为了亟待解决的挑战。本文深入探讨了云计算环境下的网络安全问题,分析了当前主流的安全威胁,并提出了一套综合的防御策略。通过采用先进的加密技术、身份认证机制、入侵检测系统以及合规性审计,构建了一个多层次、全方位的云安全防护体系。同时,文中还讨论了实施这些安全措施时可能遇到的挑战和解决方案,为读者提供了实用的指导和建议。
|
4天前
|
Linux 应用服务中间件 nginx
docker 网络简介
docker 网络简介
|
5天前
|
监控 安全 网络安全
构筑防御堡垒:云计算环境中的网络安全策略与实践
【5月更文挑战第30天】在数字化时代,云计算以其弹性、可伸缩性和成本效益成为企业信息技术基础设施的关键组成部分。然而,随着其广泛应用,云环境面临的安全威胁也日益增多,从数据泄露到恶意攻击,威胁着企业和用户的信息资产安全。本文深入探讨了云计算服务模型中的网络安全挑战,并提出了一系列创新性的安全措施和最佳实践,以增强云服务的安全性。我们将从云服务的分类出发,分析不同服务模型下的安全风险,并结合最新的技术进展,如加密技术、身份认证和访问控制策略,讨论如何构建一个既灵活又强大的网络安全防护体系。
|
5天前
|
人工智能 自然语言处理 安全
构建未来:AI驱动的自适应网络安全防御系统提升软件测试效率:自动化与持续集成的实践之路
【5月更文挑战第30天】 在数字化时代,网络安全已成为维护信息完整性、保障用户隐私和企业持续运营的关键。传统的安全防御手段,如防火墙和入侵检测系统,面对日益复杂的网络攻击已显得力不从心。本文提出了一种基于人工智能(AI)技术的自适应网络安全防御系统,该系统能够实时分析网络流量,自动识别潜在威胁,并动态调整防御策略以应对未知攻击。通过深度学习算法和自然语言处理技术的结合,系统不仅能够提高检测速度和准确性,还能自主学习和适应新型攻击模式,从而显著提升网络安全防御的效率和智能化水平。 【5月更文挑战第30天】 在快速迭代的软件开发周期中,传统的手动测试方法已不再适应现代高效交付的要求。本文探讨了如
|
5天前
|
存储 安全 API
网络安全与信息安全:防御前线的关键技术深入理解RESTful API设计原则与实践
【5月更文挑战第30天】在数字化时代,网络安全和信息安全已成为维系信息社会运行的核心支柱。本文深入探讨了网络安全漏洞的概念、加密技术的进展以及提升安全意识的重要性。通过对这些领域的分析,旨在为读者提供一个关于如何保护个人和组织资产免遭网络威胁的综合性视角。 【5月更文挑战第30天】 在现代Web服务开发领域,表述性状态传递(REST)已成为构建后端API的一种流行且成熟的架构风格。本文将探讨RESTful API的核心设计原则,并通过实例分析如何将这些原则应用于实际开发中。我们将重点讨论资源的概念化、HTTP方法的正确使用、状态码的准确传达以及API的可扩展性和版本控制问题。通过本文,读者将
|
5天前
|
运维 Kubernetes 持续交付
构建高效自动化运维体系:基于Docker和Kubernetes的实践
【5月更文挑战第30天】 在当今的快速迭代和持续部署的软件发布环境中,自动化运维的重要性愈发凸显。本文旨在探讨如何利用容器化技术与微服务架构,特别是Docker和Kubernetes,来构建一个高效、可伸缩且自愈的自动化运维体系。通过详细分析容器化的优势及Kubernetes的集群管理机制,文章将提供一个清晰的指南,帮助读者理解并实现现代软件部署的最佳实践。
|
6天前
|
云安全 监控 安全
云端防御:云计算环境下的网络安全策略与实践
【5月更文挑战第30天】随着企业数字化转型的加速,云计算服务已成为支撑现代业务架构的关键。然而,数据和服务的集中化也带来了前所未有的安全挑战。本文将深入探讨在云计算环境中维护网络安全的策略和技术实践,涵盖从基础设施到应用层的安全考量。我们将分析云安全的最新趋势,包括加密技术、身份认证、访问控制以及入侵检测系统,并探讨如何在保障云服务效率的同时确保信息安全。