1. Linux网络基础

Linux内核具有非常成熟和高性能的TCP / IP堆栈实现。Docker网络使用linux内核的网络堆栈作为低级原语来创建高级网络驱动程序。简而言之,Docker网络就是 Linux网络。

1.1 Linux bridge

Linux的桥是Linux内核模拟的二层网桥。功能是根据MAC地址学习并转发流量。
Linux bridge已在许多Docker网络驱动程序中广泛使用。Docker bridge网络驱动 是Linux bridge的更高级别的实现。

1.2 Linux network namespace

Linux 网络名称空间是内核中的隔离网络堆栈,具有自己的接口,路由和防火墙规则。被用于容器和Linux的安全性方面,用于隔离容器。

linux network namespace可确保同一主机上的两个容器无法相互通信,甚至不能与主机本身进行通信,除非配置为通过Docker网络进行通信。

通常,CNM网络驱动程序为每个容器实现单独的名称空间。但是,容器可以共享相同的网络名称空间,甚至可以是主机的网络名称空间的一部分。

主机网络名称空间包含主机接口和主机路由表。

1.3 veth(虚拟以太网设备)

Linux VETH(虚拟以太网设备)是充当两个网络命名空间之间的连接线。veth是全双工链接,在每个名称空间中都有一个接口。一个接口中的流量被引向另一接口。

创建Docker网络时,Docker网络驱动程序利用veth在名称空间之间提供显式连接。

1.4 iptables

iptables是 Linux 本机数据包过滤系统,自2.4版以来已成为Linux内核的一部分。它是功能丰富的L3 / L4防火墙,可为包标记,伪装和丢弃提供规则链。

在Docker网络驱动程序中,iptables广泛地用于分割网络流量,提供主机端口映射以及标记流量以进行负载平衡决策。

2. docker网络模式

网络驱动 描述
host模式 通过host驱动程序,容器可以使用主机的网络堆栈。没有名称空间分隔,并且容器上的主机可以直接使用主机上的所有接口。
bridge模式 bridge驱动程序使用Linux bridge。默认情况下,网桥上的容器可以相互通信。也可以通过bridge驱动程序配置对容器的外部访问。
overlay模式 overlay驱动程序创建一个支持多主机网络开箱即用的overlay网络。它结合使用了本地Linux brodge和VXLAN,以覆盖物理网络基础结构上的容器到容器通信。
MACVLAN模式 该macvlan驱动程序使用Linux MACVLAN桥接模式在容器接口和父主机接口(或子接口)之间建立连接。它可用于向可在物理网络上路由的容器提供IP地址。另外,VLAN可以中继到macvlan驱动程序以强制执行第2层容器分段。
none模式 none驱动程序提供了一个容器,拥有自己的网络堆栈和网络命名空间。如果没有其他配置,容器将与主机网络堆栈完全隔离。

2.1 Host 模式

Host 模式并没有为容器创建一个隔离的网络环境。而之所以称之为host模式,是因为该模式下的 Docker 容器会和 host 宿主机共享同一个网络 namespace,故 Docker Container可以和宿主机一样,使用宿主机的eth0,实现和外界的通信。换言之,Docker Container的 IP 地址即为宿主机 eth0 的 IP 地址。其特点包括:

这种模式下的容器没有隔离的 network namespace
容器的 IP 地址同 Docker host 的 IP 地址
需要注意容器中服务的端口号不能与 Docker host 上已经使用的端口号相冲突
host 模式能够和其它模式共存
docker网络

2.2 Bridge模式

Docker 容器默认使用 bridge 模式的网络。其特点如下:

  • 使用一个 linux bridge,默认为 docker0
  • 使用 veth 对,一头在容器的网络 namespace 中,一头在 docker0 上
  • 该模式下Docker Container不具有一个公有IP,因为宿主机的IP地址与veth pair的 IP地址不在同一个网段内
  • Docker采用 NAT 方式,将容器内部的服务监听的端口与宿主机的某一个端口port 进行“绑定”,使得宿主机以外的世界可以主动将网络报文发送至容器内部
  • 外界访问容器内的服务时,需要访问宿主机的 IP 以及宿主机的端口 port
  • NAT 模式由于是在三层网络上的实现手段,故肯定会影响网络的传输效率。
  • 容器拥有独立、隔离的网络栈;让容器和宿主机以外的世界通过NAT建立通信

docker网络

docker网络
docker网络

2.3 overlay模式

VXLAN 是一个新兴的SDN 标准,它定义了一种新的 overlay 网络,它主要的创造者是 VMware, Cisco 和 Arista。它被设计来消除虚拟化网络世界中的 VLAN 数目的限制。

VXLAN定义为MAC-in-UDP封装,它将容器第2层帧放在底层IP / UDP标头中。

它可以由专有硬件来实现,也可以使用纯软件实现。目前比较成熟的软件实现的 VTEP 包括:

  • 3.9 版本及以后的带 vxlan 内核模块的 Linux
  • Open vSwitch
  • VMware vSphere

而Docker使用linux内核的vxlan模块创建overlay网络。Docker overlay的datapath完全在内核空间中,这导致更少的上下文切换,更少的CPU开销以及应用程序和物理NIC之间的低延迟。

docker网络

2.4 macvlan模式

macvlan 这种技术能将 一块物理网卡虚拟成多块虚拟网卡。

macvlan 是 Linux kernel 支持的新特性,支持的版本有 v3.9-3.19 和 4.0+,比较稳定的版本推荐 4.0+。它一般是以内核模块的形式存在。

macvlan 这种技术听起来有点像 VLAN,但它们的实现机制是完全不一样的。macvlan 子接口和原来的主接口是完全独立的,可以单独配置 MAC 地址和 IP 地址,而 VLAN 子接口和主接口共用相同的 MAC 地址。VLAN 用来划分广播域,而 macvlan 共享同一个广播域。

通过不同的子接口,macvlan 也能做到流量的隔离。macvlan 会根据收到包的目的 MAC 地址判断这个包需要交给哪个虚拟网卡,虚拟网卡再把包交给上层的协议栈处理

MACVLAN用例可能包括:

  • 低延迟应用
  • 网络设计要求容器与外部主机网络位于同一子网中,并且使用IP作为外部主机网络

docker网络

参考:
https://success.docker.com/article/networking#linuxnetworkfundamentals

https://www.cnblogs.com/sammyliu/p/5894191.html

相关文章:

  • 2022-01-04
猜你喜欢
  • 2021-09-01
  • 2022-01-05
  • 2021-05-21
相关资源
相似解决方案