docker 网络

本章学习内容:1、docker网络体系结构的基本原理,比如容器网络模型(CNM)以及Libnetwork。2、实际操作搭建网络。

Docker网络简介

Docker 容器内部运行的应用间需要交互依赖大量不同的网络,幸运的是,容器与容器之间、容器与外部网络 与VLAN(Virtual Local Area Network 虚拟局域网)之间的连接都有解决方案。

Docker网络架构源自一种容器网络模型(CNM)方案,此方案开源并支持插式连接。

  • Libnetwork是Docker对CNM的一种实现模式,提供DOcker核心网络架构全部功能。
  • 不同驱动可以通过插拔式接入Libnetwork,提供定制化的网络拓扑。

为了实现开箱即用的效果,Docker封装了本地驱动、覆盖了大部分常用网络需求。其中包括单机桥接网络、多机覆盖网络,并且支持介入现有VLAN。

Libnetwork提供了本地服务发现(类似NACOS)、容器负载均衡方案。

Docker详解

基础理论

顶层设计中,Docker网络架构由3部分构成:CNM、Libnetwork、驱动。
Libnetwork是CNM的具体实现、实现了CNM中列举的核心组件。
驱动通过特定网络拓扑方式拓展模型的能力。

CNM

Docker网络架构设计规范是CNM,CNM规定了Docker网络的基础组成要素。
CNM定义了3个基本要素:1、沙盒(Sandbox);2、终端(Endpoint);3、网络(Network)。

  • 沙盒:是一个独立的网络栈。包括以太网接口、端口、路由表、DNS配置。
  • 终端:虚拟网络接口。与普通网络接口一样,负责创建连接。在CNM中终端负责将沙盒连接到网络
  • 网络:是802.1d网桥的软件实现。因此,网络就是需要交互的终端的集合,且终端之间相互独立。
    组件连接如图:
    在这里插入图片描述
    网络组件关联、容器间通信原理:
    在这里插入图片描述
    容器A只有一个接口终端(虚拟网络接口,将沙盒连接到网络)连接到网络A、容器B、有两个接口终端分别接入网络A、网络B。因为两个容器都接入了网络A,故容器A、B可进行通信。但是如果没有三层路由器(根据IP进行转发数据)支持,容器B的两个终端之间不能进行通信。

终端类似常见的网络适配器,一个终端只能接入到某一个网络、如果容器需要接入到多个网络、则需要多个终端。

Libnetwork

CNM是设计规范文档、Libnetwork是标准的实现。Libnetwork是开源的、他跨平台被DOcker使用。

早期网络代码都存在与docker daemon中,为了符合OCI开放容器计划要求、以及小而专的代码哲学、后面将docker daemon中的模块进行拆分、Libnertwork这个外部类库就座位了docker daemon中的一个功能模块进行替代。

Libnetwork实现了CNM中定义的全部3各组件。另外还实现了本地服务发现、基于INgress的容器负载均衡(k8s中又出现)、网络控制层和管理层功能。

驱动

Libnetwork实现了控制层和管理层功能、驱动就负责实现数据层。
比如: 网络联通性和隔离性是由驱动来处理的。驱动层时机创建网络对象。关系如下图所示:
在这里插入图片描述
Docker封装了若干驱动、被称为原生驱动或者本地驱动。linux上包括Bridge、Overlay、Macvlan。第三方也可以编写Docker网络驱动、被称为远程驱动,例如Calico、Contiv等。

每个驱动都负责其上所有的网络资源的创建管理----谁生谁养,比如,一个叫“prod-fe-cuda”的覆盖网络由Overlay驱动所有、并管理。则Overlay驱动会在创建、管理和删除“prod-fe-cuda”网络资源时被调用。

Libnetwork支持同时激活多个网络驱动,所以Docker支持庞大的异构体系。

单机桥接网络

最简单的docker网络。

  • 单机:只能在单个docker主机上运行、并只能与所在Docker内的容器进行网络通信。
  • 桥接意味着是802.1.d桥接的一种实现(二层交换机,也就是基于mac地址)。
    Linux Docker 创建单机桥接网络采用内置桥接驱动。

Linux Docker主机之上 默认的“bridge”网络被映射到内核中为“docker0”的Linux网桥,通过命令查看
在这里插入图片描述
Docker默认“bridge”网络和Linux内核中的“docker0”网桥之间关系如下图:
在这里插入图片描述
在顶部补充了接入“bridge”网络的容器。“bridge”网络在主机内核中映射名为“docker0”的Linux网桥。网桥可以通过主机以以太网接口的端口映射进行反相关联。(不要想bridge和docker0有什么物理上的联系,他们就是映射的关系。)
在这里插入图片描述
后面桥接实战部分就不进行讲解了。总结一下:

  • 如果使用单机桥接网络,两个容器使用的桥接网络是同一个,那么两容器之前可相互通信,如果桥接的是不同的网络,如下图所示在这里插入图片描述
    c1和c2之间不能通信。

多机覆盖网络

特点:

  • 适用于多机环境,允许单个网络包含多个主机,不同主机间通过链路层实现通信。
  • 该方式是理想容器间通信的方式,支持完全容器化的应用,并具有伸缩性。
  • 创建覆盖网络很简单,docker create network create --d overlay

加入现有网络,让容器化应用连接上局域网内未容器化应用

docker内置驱动Macvlan实现这一点,原理是为容器提供IP和MAC,实现效果如下图:
在这里插入图片描述
具体内容需要扎实的计算机网络基础,理解起来很难,所以先放一放。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值