码头工人跨主机网络,覆盖

  

一、码头工人跨主机通信

  

码头工人跨主机网络方案包括:

  

码头工人原生的叠加和macvlan。
第三方方案:常用的包括法兰绒,编织和棉布。
码头工人通过libnetwork以及CNM将上述各种方案与码头工人集成在一起。

  

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

  

<强> 1.1沙箱
沙箱是容器的网络栈,包含容器的接口,路由表和DNS设置。Linux网络名称空间是沙箱的标准实现.Sandbox可以包含来自不同网络的端点。也就是说沙箱将一个容器与另一个容器通过名称空间进行隔离,一个容器包含一个沙箱中,每一个沙箱可以有多个端点隶属于不同的网络。

  

<强> 1.2端点
端点的作用是将沙箱接入Network.Endpoint的典型实现是veth对。一个端点只能属于一个网络,也只能属于一个沙箱。

  

<强>
1.3网络网络包含一组端点,同一网络的端点可以直接通信.Network的实现可以是Linux桥,VLAN等。
奥胪饭と丝缰骰?覆盖“
码头工人网络架构
图片截至CLOUDMAN博客。

  

libnetwork下包含上述原生的司机以及其他第三方司机。
没有,桥网络前面已经介绍.bridge就是网桥,虚拟交换机,通过veth连接其与沙箱。

  

二,码头工人叠加网络

  

<强> 2.1启动键-值数据库领事
Docerk叠加网络需要一个键-值数据库用于保存网络状态信息,包括网络端点,IP等.Consul, Etcd和管理员都是码头工人支持的key-vlaue软件。

  

高是一种键-值数据库,可以用它存储系统的状态信息等,当然这里我们并不需要写代码,只需要安装领事,之后码头工人会自动进行状态存储等。最简单的安装高数据库的方法是直接使用码头工人运行高容器。

  
  

码头工人运行- d - p 8500:8500 - h领事——名领事progrium/领事- server引导

  

启动后可以通过主机ip的8500端口查看高服务。

     

为了让领事发现各个码头工人主机节点,需要在各个节点上进行配置。修改各个节点码头工人守护进程的配置文件/etc/systemd/系统/码头工人。服务。在ExecStart最后添加

  
  

——cluster-store=领事://& lt; consul_ip>: 8500——cluster-advertise=ens3:2376
其中& lt; consul_ip>表示运行高容器的节点IP.ens3为当前节点的ip地址对应的网卡,也可以直接填写ip地址。

     

以上是单机版领事的安装方法,建议采用集群模式,集群模式安装方式见https://www.consul.io/intro/getting-started/join.html。

  

<强> 2.2创建叠加网络
创建叠加网络与之前创建桥梁网络基本相同,唯一不同的是将- d参数设置为叠加。如下:

  
  

码头工人网络创建- d覆盖ov_net2

  

码头工人网络创建- d覆盖ov_net3——子网172.19.0.0/24网关172.19.0.1

     

只需要在一个节点中进行上述创建过程,其他节点自动会识别到该网络,原因正是在于领事的服务发现功能。

  

之后创建容器的时候只需要指定——网络参数为ov_net2即可。

  
  

码头工人——网络运行ov_net2 busybox

     

这样即使在不同的主机上使用同一叠加网络创建的容器,相互之间也能够直接访问。

  

<强> 2.3叠加网络原理
再创建完一个叠加网络之后,通过码头工人网络ls可以看到网络中不仅多了一个我们创建的ov_net2(类型为叠加,为全球范围),还能看到一个名为docker_gwbridge(类型为桥,范围为本地)。这其实就是叠加网络的工作原理所在。

  

通过brctl显示可以看的出,每创建一个网络类型为覆盖的容器,则docker_gwbridge下都会挂载一个vethxxx,这说明确实叠加容器是通过此网桥进行对外连接的。

  

简单的说叠加网络数据还是从桥网络docker_gwbridge出去的,但是由于领事的作用(记录了叠加网络的端点,沙箱,网络等信息),使得码头工人知道了此网络是覆盖类型的,这样此叠加网络下的不同主机之间就能够相互访问,但其实出口还是在docker_gwbridge网桥。

  

没有,桥网络前面已经介绍.bridge就是网桥,虚拟交换机,通过veth连接其与沙箱。

  

三,让外网能否访问容器的端口映射方法:

  
  

码头工人跨主机网络,覆盖