专业的编程技术博客社区

网站首页 > 博客文章 正文

Docker网络架构是什么?包含哪些哪些核心组件与驱动?

baijin 2024-11-16 17:05:26 博客文章 2 ℃ 0 评论

在前文中我们有提到Docker镜像技术,应用的分发、部署与管理变得非常便捷。那么,Docker的网络功能又如何满足各种场景的需求?今天我们就来了解Docker的网络架构。Docker网络架构在1.7版本中的代表是libnetwork,也就是Docker的网络库使得网络代码被抽离出来。在1.9版本中出现了docker network,支持子命令和跨主机网络,这允许用户可以根据他们应用的拓扑结构创建虚拟网络并将容器接入其所对应的网络,接下来,网络模式的驱动逐渐被抽象变成了统一接口。

容器网络模型CNM(Container Network Model)可的出现,制定了一套标准化的开发步骤以及各种类型的网络驱动。容器网络模型CNM定义了构建容器虚拟化网络的模型,同时还提供了可以用于开发多种网络驱动的标准化接口和组件。libnetwork和Docker daemon及各个网络驱动的关系可以如下图所示:

Docker网络架构图清晰的展示了,Docker daemon的网络的创建和管理等功能是通过调用libnetwork来实现的。libnetwork中则使用了容器网络模型CNM来完成网络功能的提供。容器网络模型CNM中主要有沙盒(sandbox)、端点(endpoint)和网络(network)这3种组件。其中包含的5种驱动分别提供许多类型的网络服务。接下来分别对容器网络模型CNM中的3个核心组件和libnetwork中的5种内置驱动进行介绍。

容器网络模型CNM中的3个核心组件:

  • 沙盒(sandbox)∶一个沙盒包含了一个容器网络栈的信息。沙盒对里边的接口等进行设置并管理。沙盒的实现可以是Linux network namespace、FreeBSDJail或者类似的机制。一个沙盒可以有多个端点和多个网络。
  • 端点(endpoint)∶一个端点可以同时加入一个沙盒和一个网络。端点的实现可以是veth pair、OpenvSwitch内部端口或者相似的设备。
  • 网络(network)∶一个网络是一组可以直接互相联通的端点。可以包含多个端点,网络的实现可以是Linux bridge、VLAN等。

libnetwork中所包含的5种内置驱动类型:

  • bridge驱动,是Docker的默认设置,使用bridge驱动,libnetwork将创建出来的Docker容器连接到Docker网桥上。
  • host驱动,host驱动适用于对于容器集群规模不大的场景。
  • overlay驱动,此驱动采用IETF标准的VXLAN方式,并且是VXLAN中被普遍认为最适合大规模的云计算虚拟化环境的SDN controller模式。在使用的过程中,需要一个额外的配置存储服务,例如Consul、etcd或ZooKeeper。还需要在启动Docker daemon的的时候额外添加参数来指定所使用的配置存储服务地址。
  • remote驱动,这个驱动实际上并未做真正的网络服务实现,而是调用了用户自行实现的网络驱动插件,使libnetwork实现了驱动的可插件化,更好地满足了用户的多种需求。用户只要根据libnetwork提供的协议标准,实现其所要求的各个接口并向Docker daemon进行注册。
  • null驱动,Docker容器只又network namespace自带的loopback网卡,再无其他信息,需要用户为Docker容器添加网卡、配置IP等。这种模式如不进行特定的配置将无法正常使用的,但是优点也非常明显,它给了用户最大的自由度来自定义容器的网络环境。

Docker将网络解耦为独立的组件libnetwork,抽象出一个通用的容器网络模型(CNM),支持了跨主机通信。容器网络模型CNM的3个核心组件、libnetwork中的5种内置驱动支持用户可以自主管理容器网络环境。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表