Docker网络原理

Docker网络原理

底层原理

  • Docker中网络的隔离底层用到了linux network namespace技术
  • network namespace主要提供了关于网络资源的隔离,包括网络设备、IPv4和IPv6协议栈、IP路由表、防火墙、/proc/net目录、/sys/class/net目录、套接字( socket)等。
  • 不同network namespace可以通过创建veth pair来进行通信。
  • veth全称是veth :(Virtual Ethernet)虚拟以太网
  • veth pair(一对虚拟网络设备):成对出现,类似管道,数据可以从一端传入另一端
    请添加图片描述

Docker网络架构

  • Docker 网络架构的设计规范是 CNM (Container Network Model)
  • Libnetwork 是 CNM 的具体实现,并且被 Docker 采用,Libnetwork 通过 Go 语言编写,并实现了 CNM 中列举的核心组件。
  • CNM 中主要 3 个组件:沙盒(Sandbox)、端点(Endpoint)和网络(Network)。
    • 沙盒:一个沙盒包含了一个容器网络栈的信息。沙盒可以对容器的接口、路由和DNS设置等进行管理。沙盒的实现可以是Linux network namespace ,FreeBSD Jail或者类似的机制。一个沙盒可以有多个端点和多个网络。
    • 端点:一个端点可以加入一个沙盒和一个网络。端点的实现可以是veth pair , Open vSwitch内部端口或者相似的设备。一个端点只可以属于一个网络并且只属于一个沙盒。
    • 网络:一个网络是一组可以直接互相联通的端点。网络的实现可以是Linux bridge、VLAN等。一个网络可以包含多个端点。

请添加图片描述

Docker本地网络

  • bridge:使用–net=bridge指定,也可省略,是Docker的默认设置,当Docker进程启动时,会在主机上创建一个名为docker0的虚拟网桥,此主机上启动的Docker容器会连接到这个虚拟网桥上。从docker0子网中分配一个IP给容器使用,并设置docker0的IP地址为容器的默认网关。在主机上创建一对虚拟网卡veth pair设备,Docker将veth pair设备的一端放在新创建的容器中,并命名为eth0(容器的网卡),另一端放在主机中,以vethxxx这样类似的名字命名,并将这个网络设备加入到docker0网桥中。
  • host:使用–net =host指定,不会创建独立的network namespace。Docker容器中的进程处于宿主机的网络环境中,相当于Docker容器和宿主机共用同一个network namespace,使用宿主机的网卡、IP和端口等信息。
  • none:使用–net=none指定,Docker容器拥有自己的network namespace,但是并不为Docker容器进行任何网络配置。也就是说,这个Docker容器除了network namespace自带的loopback网卡外,没有其他任何网卡、IP、路由等信息,需要用户为Docker容器添加网卡、配置IP等。这种模式如果不进行特定的配置是无法正常使用的,它给了用户最大的自由度来自定义容器的网络环境。

Docker自定义网络

Bridge:类似于默认网络中的bridge,但是默认网桥上的容器只能通过IP地址相互访问,在用户定义的桥接网络上,可以自动DNS解析容器名称到IP地址。Docker嵌入式的DNS服务器。使用–ip参数可以指定容器ip地址,但必须是在自定义网桥上,默认的bridge模式不支持。默认的bridge模式,每次Docker容器重启时,会按照顺序获取对应的IP地址,这个就导致重启下,Docker的IP地址就变了

Docker容器通信

Container:使用-net=container:指定容器名,这个模式指定新创建的容器和已经存在的一个容器共享一个 network namespace,而不是和宿主机共享。新创建的容器不会创建自己的网卡,配置自己的 IP,而是和一个指定的容器共享 IP、端口范围等。
Link:–link 容器名。原理是添加了一条DNS的记录,追加名称解析关系到/etc/hosts文件中,使得两个容器之间可以通过容器名来互联。但是的link是有方向性的,历史遗留

跨主机容器网络

Overlay:是目前最主流的容器跨节点数据传输和路由方案,使用 VXLAN 隧道技术。VXLAN是一种将二层数据帧封装在UDP报文中的技术。VXLAN将原始二层帧,加上VXLAN报头,封装在UDP协议中,以此穿越三层网络。VXLAN 隧道两端都是 VXLAN 隧道终端(VXLAN Tunnel Endpoint, VTEP)。VTEP 完成了封装和解压的步骤
请添加图片描述

Macvlan:性能优异,因为无须端口映射或者额外桥接,可以直接通过主机接口(或者子接口)访问容器接口。但是,Macvlan 的缺点是需要将主机网卡(NIC)设置为混杂模式,这在大部分公有云平台上是不允许的。
macvlan 本身是 linux kernel 模块,其功能是允许在同一个物理网卡上配置多个 MAC 地址,即多个 interface,每个 interface 可以配置自己的 IP。macvlan 本质上是一种网卡虚拟化技术。
macvlan技术就是在物理网卡下,添加另一张虚拟网卡,其实就是在物理网卡下添加了一个条件分支。我们可以认为报文从物理网卡进入之后,会做一个switch判断,如果该报文mac属于macvlan,则直接发往macvlan后面的网络,否则就发往原host的网络。

请添加图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Docker网络原理Docker容器之间以及容器和主机之间进行通信的基础。Docker使用了一种称为"docker0"的虚拟网络桥接器来实现容器网络连接。 当你在主机上启动Docker容器时,Docker会为每个容器创建一个虚拟网卡,并将这些虚拟网卡连接到"docker0"桥接器上。"docker0"桥接器是一个虚拟以太网桥,它充当了主机与容器之间的交换机。 每个容器都有一个唯一的IP地址,由Docker引擎自动分配。这个IP地址是在Docker守护进程启动时从私有IP地址段中动态分配的。容器通过这个IP地址与其他容器或主机进行通信。 此外,Docker还提供了多种网络驱动程序来扩展网络功能,例如: 1. 桥接网络驱动程序(Bridge):这是Docker默认的网络驱动程序。它使用"docker0"桥接器,将容器连接到主机上的网络。 2. 主机网络驱动程序(Host):使用主机网络驱动程序时,容器将直接使用主机的网络栈,与主机共享IP地址。 3. Overlay网络驱动程序(Overlay):Overlay网络允许在跨多个Docker主机上创建多个容器,并通过虚拟网络进行通信。 4. MACVLAN网络驱动程序(MACVLAN):MACVLAN网络允许每个容器使用主机上的物理网络接口的MAC地址,使容器看起来像是直接连接到物理网络上。 这些网络驱动程序可以根据需要进行配置和使用,以满足特定的网络需求。总之,Docker网络原理通过虚拟网络桥接器和网络驱动程序的组合,实现了容器之间和容器与主机之间的网络通信。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值