docker容器网络

1. 概述

Docker 的几种网络方案: none、host、bridge和joined,它们解决了单个 Docker Host内容器通信的问题。

image

跨主机网络方案包括:

(1)docker原生的overlay和macvlan

(2)第三方方案:常用的包括flannel、weave 和 calico。

docker 网络是一个非常活跃的技术领域,不断有新的方案开发出来,如此众多的方案是如何与 docker集成在一起的? 答案: libnetwork以及CNM。

1.1 libnetwork & CNM

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

  1. Sandbox
    Sandbox是容器的网络栈,包含容器的interface、路由表和DNS设置。Linux Network Namespace是Sandbox的标准实现。Sandbox可以包含来自不同Network的Endpoint。

  2. Endpoint
    Endpoint 的作用是将Sandbox接入Network。Endpoint 的典型实现是 veth pair。一个 Endpoint 只能属于一个网络,也只能属于一个Sandbox。

  3. Network
    Network 包含一组 Endpoint,同一Network的Endpoint 可以直接通信。Network 的实现可以是 Linux Bridge、VLAN 等。

image

如图所示两个容器,一个容器一个Sandbox,每个Sandbox都有一个Endpoint 连接到Network1,第二个 Sandbox还有一个 Endpoint 将其接入 Network2libnetworkCNM 定义了 docker 容器的网络模型,按照该模型开发出的 driver 就能与docker daemon 协同工作,实现容器网络。docker 原生的driver包括 nonebridgeoverlaymacvlan,第三方 driver包括flannel、weave、calico 等。

image

(1) 两个Network: 默认网络bridge和自定义网络my_net2。实现方式是 Linux Bridge: docker0 和 br-024ff4851920.
(2) 三个Endpoint,由veth pair 实现,一端(vethxxx)挂在 Linux Bridge 上,另一端(eth0)挂在容器内。
(3) 三个 Sandbox,由Network Namespace 实现,每个容器有自己的 Sanbox。

posted on 2024-03-13 09:57  ccblblog  阅读(5)  评论(0编辑  收藏  举报

导航