Docker网络浅析

Docker网络模式linux

Docker网络架构源自一种叫做容器网络模型(CNM)的方案,该方案是开源的而且支持插接式链接。Libnetwork是Docker对CNM的一种实现,提供了Docker核心网络架构的所有功能。不一样的驱动能够经过插拔的方式接入Libnetwork来提供定制化的网络拓扑。docker

为了实现开箱即用的效果,Docker封装了一系列本地网络驱动(bridge驱动,overlay驱动,macvlan驱动),覆盖了大部分常见的网络需求,其中包括单机桥接网络(Single-Host Bridge Network)、多机覆盖网络(Multi-Host Overlay),而且支持接入现有VLAN。网络

bridge驱动

基本原理

基于Linux内核中久经考验达15年之久的Linux Bridge技术架构

分类

项目 默认bridge网络 用户自定义bridge网络
连通性 相互之间须要经过-p或者--publish选项指明开放的端口,即便是两个容器链接在相同的默认bridge网络之上 不须要-p与--publish选项,相互之间的端口所有开放
域名解析 相互之间使用名称通讯时须要指定--link选项,这种方式已过期而且不容易调试 无需特别指定选项,可直接经过名称与别名通讯
热插拔 须要中止容器的执行并从新建立容器才能离开或者加入默认bridge网络 支持随时加入与离开某个用户自定义bridge网络
热插拔 系统中只能存在一个默认网络,牵一发而动全身 可定义多个用户自定义网络,每一个可单独配置
热插拔 不支持经过--link选项的方式共享环境变量,更高级的共享环境变量的方式:data volume、docker-compose、docker-configs 支持经过--link选项的方式共享环境变量

使用场景

适用于测试开发或者小规模应用环境的使用ide

特色

1,须要经过端口映射的方式,创建主机到docker端口的映射来提供跨主机间容器的服务通讯
2,成熟稳定且高性能性能

macvlan驱动

基本原理

macvlan虚拟网卡技术,是linux内核再3.9版本以后提供的新特性,容许再同一个物理网卡配置多个mac地址,Macvlan容许你在主机的一个网络接口上配置多个虚拟的网络接口,这些网络interface 有本身独立的MAC地址,也能够配置上IP地址进行通讯。Macvlan 下的虚拟机或者容器网络和主机在同一个网段中,共享同一个广播域。测试

分类

VEPA(Virtual Ethernet Port Aggregator)

VEPA

全部从 Macvlan 接口发出的流量,无论目的地所有都发送给父接口,即便流量的目的地是共享同一个父接口的其它 Macvlan 接口。若是想在物理交换机层面对虚拟机或容器之间的访问流量进行优化设定,VEPA 模式将是一种比较好的选择。优化

Bridge

Bridge
Bridge模式为macvlan的默认使用模式。拥有相同父接口的两块 Macvlan 虚拟网卡是能够直接通信的,不须要把流量经过父网卡发送到外部网络,广播帧将会被泛洪到链接在”网桥”上的全部其余子接口和物理接口。这比较适用于让共享同一个父接口的 Macvlan 网卡进行直接通信的场景。设计

Private

Private
此种模式至关于VEPA模式的加强模式,其彻底阻止共享同一父接口的 Macvlan 虚拟网卡之间的通信。调试

passthru

passthru
此种模式会直接把父接口和相应的MacVLAN接口捆绑在一块儿,这种模式每一个父接口只能和一个 Macvlan 虚拟网卡接口进行捆绑,而且 Macvlan 虚拟网卡接口继承父接口的MAC地址。此种模式的优势是虚拟机和容器能够更改 MAC 地址和其它一些接口参数。

使用场景

macvlan可以将容器网络链接到外部系统以及物理网络,适用于应用中已容器化的部分须要与那些运行在物理网络和VLAN上的未容器化部分进行通讯的场景

特色

1,Linux 主机链接的交换机可能会限制同一个物理端口上的 MAC 地址数量。虽然你可让网络管理员更改这些策略,但有时这种方法是没法实行的(好比你要去给客户作一个快速的 PoC 演示)。
2,许多 NIC 也会对该物理网卡上的 MAC地址数量有限制。超过这个限制就会影响到系统的性能。
3,IEEE 802.11 不喜欢同一个客户端上有多个 MAC 地址,这意味着你的 Macvlan 子接口在无线网卡或 AP 中都没法通讯。能够经过复杂的办法来突破这种限制,但还有一种更简单的办法,那就是使用 Ipvlan,感兴趣能够本身查阅相关资料。
4,须要主机网卡开启混杂模式,须要内核支持

overlay驱动

基本原理

Docker使用VXLAN隧道技术建立了虚拟二层覆盖网络。在VXLAN的设计中,容许用户基于已经存在的三层网络结构建立虚拟的二层网络,VXLAN的美妙之处在于它是一种封装技术,能使现存的路由器和网络架构看起来就像普通的IP/UDP包同样,而且处理起来毫无问题。

模型图

模型图

VTEP(VXLAN Tunnel Endpoints):vxlan 网络的边缘设备,用来进行 vxlan 报文的处理(封包和解包)。vtep 能够是网络设备(好比交换机),也能够是一台机器(好比虚拟化集群中的宿主机)
VNI(VXLAN Network Identifier):VNI 是每一个 vxlan 的标识,是个 24 位整数,一共有 2^24 = 16,777,216(一千多万),通常每一个 VNI 对应一个租户,也就是说使用 vxlan 搭建的公有云能够理论上能够支撑千万级别的租户
Tunnel:隧道是一个逻辑上的概念,在 vxlan 模型中并无具体的物理实体想对应。隧道能够看作是一种虚拟通道,vxlan 通讯双方(图中的虚拟机)认为本身是在直接通讯,并不知道底层网络的存在。从总体来讲,每一个 vxlan 网络像是为通讯的虚拟机搭建了一个单独的通讯通道,也就是隧道

vxlan 的工做模型,它建立在原来的 IP 网络(三层)上,只要是三层可达(可以经过 IP 互相通讯)的网络就能部署 vxlan。在每一个端点上都有一个 vtep 负责 vxlan 协议报文的封包和解包,也就是在虚拟报文上封装 vtep 通讯的报文头部。物理网络上能够建立多个 vxlan 网络,这些 vxlan 网络能够认为是一个隧道,不一样节点的虚拟机可以经过隧道直连。每一个 vxlan 网络由惟一的 VNI 标识,不一样的 vxlan 能够不相互影响。

使用场景

不改变现有网络基础设施的前提下,overlay的二层网络彻底基于现有主机的三层网络之上实现通讯,简易实现大规模的容器应用跨主机通讯

特色

1,VXLAN可以突破VLAN的4000数量限制支持高达16M的不一样overlay数量,并在必要时可将广播流量转化为组播流量,避免广播数据泛滥。
2,主流的容器跨节点数据传输和路由方案

参考文档

https://cizixs.com/2017/09/25/vxlan-protocol-introduction/
https://blog.z0ukun.com/?p=739

相关文章
相关标签/搜索