容器网络(六)跨主机网络概述【43】

8、容器网络

(一)跨主机网络概述

​ 前面已经学习了 Docker 的几种网络方案:none、host、bridge 和 joined 容器,它们解决了单个 Docker Host 内容器通讯的问题。本章的重点则是讨论跨主机容器间通讯的方案。docker

跨主机网络方案包括:网络

  1. docker 原生的 overlay 和 macvlan。
  2. 第三方方案:经常使用的包括 flannel、weave 和 calico。

docker 网络是一个很是活跃的技术领域,不断有新的方案开发出来,那么要问个很是重要的问题了:如此众多的方案是如何与 docker 集成在一块儿的?学习

答案是:libnetwork 以及 CNM。spa

(1)libnetwork & CNM

libnetwork 是 docker 容器网络库,最核心的内容是其定义的 Container Network Model (CNM),这个模型对容器网络进行了抽象,由如下三类组件组成:blog

①Sandbox

​ Sandbox 是容器的网络栈,包含容器的 interface、路由表和 DNS 设置。 Linux Network Namespace 是 Sandbox 的标准实现。Sandbox 能够包含来自不一样 Network 的 Endpoint。路由

②Endpoint

​ Endpoint 的做用是将 Sandbox 接入 Network。Endpoint 的典型实现是 veth pair,后面咱们会举例。一个 Endpoint 只能属于一个网络,也只能属于一个 Sandbox。开发

③network

​ Network 包含一组 Endpoint,同一 Network 的 Endpoint 能够直接通讯。Network 的实现能够是 Linux Bridge、VLAN 等。容器

下面是 CNM 的示例:network

如图所示两个容器,一个容器一个 Sandbox,每一个 Sandbox 都有一个 Endpoint 链接到 Network 1,第二个 Sandbox 还有一个 Endpoint 将其接入 Network 2.im

libnetwork CNM 定义了 docker 容器的网络模型,按照该模型开发出的 driver 就能与 docker daemon 协同工做,实现容器网络。docker 原生的 driver 包括 none、bridge、overlay 和 macvlan,第三方 driver 包括 flannel、weave、calico 等。

下面咱们以 docker bridge driver 为例讨论 libnetwork CNM 是如何被实现的

这是前面咱们讨论过的一个容器环境:

  1. 两个 Network:默认网络 “bridge” 和自定义网络 “my_net2”。实现方式是 Linux Bridge:“docker0” 和 “br-21840c1713。
  2. 三个 Enpoint,由 veth pair 实现,一端(vethxxx)挂在 Linux Bridge 上,另外一端(eth0)挂在容器内。
  3. 三个 Sandbox,由 Network Namespace 实现,每一个容器有本身的 Sanbox。
相关文章
相关标签/搜索