基于Docker网络基础和实现原理


本章节主要介绍了Docker网络的情况,从Docker整个生态栈入手,分析了基于单机和集群两种不同场景的Docker网络,着重分析了在单机模式下Docker网络的情况(host/bridge/none/container)。

Docker网络基础

Docker网络方案基于OpenStack平台网络解决方案,在不断的摸索中,形成了自己的一套网络模型。

Docker网络在整个Docker技术栈中的位置如图:
在这里插入图片描述
在容器网络项目探索中,随着容器的发展,容器网络的发展也出现了分歧。主要分为两派,一个是Docker原生的CNM(ContainerNetwork Model),另一个是兼容性更好的CNI(Container Network Interface)。CNI就是后来为Kubernetes等容器平台广泛推崇使用的接口技术,后面的章节会详细讲述。这里,我们简要介绍CNM。

原先Docker的网络相关的代码是直接在Docker中的,网络功能也比较简单,对网络的诟病也是比较多。随着Docker越来越向平台化发展,将功能组件逐渐从Docker中解耦,Docker从1.7把网络相关的代码从Docker的代码中剥离出来新建了一个Libnetwork项目,引入了CNM的网络模型。
在这里插入图片描述

CNM模型

CNM模型下的Docker网络模型如上所示。它由Sandbox,Endpoint,Network三种组件组成。注意,该模型只是规定了三种组件各自的作用,他们都有各自的具体实现方式。
Sandbox:Sandbox 包含了一个 Container 的网络相关的配置,如网卡 Interface,路由表等。Sandbox 在 Linux 上的典型实现是 Network namespace。在 Linux 系统上的 Docker 环境中,Container,Network namespace,Sandbox 这三者是绑定在一起的。一个Sandbox 可以包含多个 Endpoint,这些 Endpoint 可以来自多个 Network。
Endpoint: Sandbox 加入 Network 的方式是通过 Endpoint 完成的。Endpoint 的典型实现方式是 Vethpair,每个 Endpoint 都是由某个 Network 创建。创建后,它就归属于该Network。同时,Endpoint 还可以加入一个 Sandbox。加入后,相当于该 Sandbox 也加入了此 Network。
Network : Network 的一种典型实现是 Linux bridge。一个 Network 可以创建多个Endpoint。将这些Endpoint 加入到 Sandbox,即实现了多个 Sandbox 的互通。
总结起来:如果要想两个 Container 之间可以直接通信,那么最简单的办法就是由一个Network 创建两个 Endpoint,分别加入这两个 Container 对应的 Sandbox。
注意: 不同 Network 之间默认的隔离性是 docker 通过设置 Iptables 完成的,通过改变Iptables 的设置,可以使得两个 Network 互通。

Docker 的4 类网络模式

标准的 Docker 网络支持以下 4 类网络模式:

host 模式:使用–net=host 指定

container 模式:使用–net=container:Name_or_ID 指定

none模式:使用–net=none指定

bridge模式:使用–net=bridge指定,设为默认值

桥接模式

桥接模式是最常见的Docker容器网络类型。在桥接模式下,Docker会为每个容器分配IP地址及创建虚拟以太网网卡对(Veth)所有的容器都被连接到Docker在主机绑定的桥接设备上。被连接到同一个桥接设备的所有容器,都可以实现互联互通。如果容器要对外界提供服务,则用户需要将容器内的服务端口与宿主机的某一端口绑定。这样所有访问宿主机目标端口的请求都将通过Docker代理转发到容器的服务端,最终到达应用。

host模式

除了桥接模式,Docker也支持主机(host)模式,让容器直接使用宿主机的网络设备。宿主机模式使得容器占用宿主机的端口资源,而且要求容器具有更高的权限,因此只有特殊需求的容器,才会使用这种模式,如OpenShift集群中的Router组件。Router主机需要监听计算节点上的端口,以接受外部的请求,因此Router组件的Pod的容器网络为主机模式。

总结

本章节主要介绍了Docker网络的情况,从Docker整个生态栈入手,分析了基于单机和集群两种不同场景的Docker网络,着重分析了在单机模式下Docker网络的情况(host/bridge/none/container)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值