docker 网络概念

November 25, 2018

容器的网络模型

Docker的网络架构是构建在一组称为容器网络模型(CNM)的接口之上的。这个CNM的原理是为了提供多种不同的基础系统架构的应用程可用性。 最初的容器网络设计只关注如何在单个主机上运行容器并使他们可以从网络访问;在host模式下,容器在主机的Network Namespace中运行并使用主机IP地址,暴露容器端口在主机外面,容器会使用主机的端口。 这个bridge模式对host模式进行了改进,在Bridge模式下,容器通过IPAMIP地址管理模块来提供IP,从它自己的网络空间中获取自己的网络IP,此时容器有自己的网络命名空间,不会出现端口冲突,但是容器如果要暴露服务在主机外部,仍然需要使用主机IP。该技术是使用的NAT网络地址转换实现的,在主机IP:主机端口和容器IP:容器端口之间进行映射,这些转换规则是使用iptables实现的,这种实现限制了解决方案的规模和性能。此方案并没有解决多主机的容器网络通信问题。

cnm

CNM 结构

上图是CNM中的几个高级结构,他们都是和'OS无关的。

  • Sandbox:沙箱包含网络容器的配置,这包括管理容器的接口,路由表和DNS配置,沙箱是通过Linux的命名空间实现的。一个容器就是一个沙箱盒子。
  • Endpoint:一个Endpoint连接一个沙箱和一个网络。
  • Network:CNM没有根据OSI模型指定网络,

CNM 驱动接口

这个CNM模型提供了两个插件和开放接口提供给用户使用,可以使用他们它们来对网络的功能进行控制。

网络驱动的类型

  • 网络驱动程序:Docker网络驱动程序是网络功能的实现,它们是可拔插的,因此可以使用不同的驱动程序提供给不通的应用使用,在集群中可以使用多个网络驱动器,但是单个Docker网络只能通过单个网络驱动程序实现,有两种类型的CNM网络驱动程序。
    • 内置网络驱动程序:Docker引擎内置了几种网络驱动程序,比如,网络驱动,overlay 驱动。
    • 插件网络驱动程序:是由社区或者其他供应商提供的,用于与现有软件和硬件的提成,用户还可以自己实现。
  • IPAM 驱动:Docker有内置的IP地址管理器,如果未指定,则使用默认的子网和网络,用户也可指定子网和网关。

Docker内置网络驱动程序

Docker内置网络驱动程序是引擎的一部分,不需要任何其他模块,通过使用docker network命令来创建和使用网络模块。

  • Bridge:Bridge驱动程序在宿主机上创建Linux网桥,网桥上的容器默认可以通信,也可以配置对容器的外部访问。
  • Overlay:overlay驱动程序在宿主机上创建一个覆盖网络,支持开箱即用的多主机网络,通过使用linux网桥和VXLAN让宿主机上物理网络来实现容器到容器的多主机通信。
  • MACVLAN:macvlan驱动程序使用macvlan桥接模式在容器和宿主机之间建立连接。
  • Host:使用host驱动程序,容器将使用宿主机的网络栈,主机上的所有接口都可以由容器使用。
  • None:none驱动程序为容器提供自己的网络堆栈和命名空间,但不配置接口,如果没有其他配置,容器将于宿主机网络完全隔离。

默认情况下一个Docker主机上有none,bridge,host三种网络驱动程序,这些网络程序不能被删除,当使用Swarm时,会添加两个网络,一个是叫docker_gwbridgebridge网络,还有一个是叫ingressoverlay的网络程序,这两个网络是自动创建在整个集群中的。

Linux 网络原理

名词解释

网络命名空间。

网络地址转换,这是一种网络虚拟化的技术,是为了解决IP不够用的问题。

IP地址管理,对应于CNM模型中的IPAM模块,提供IP管理和生成。

参考文档


LRF 记录学习、生活的点滴