docker网络--多机通信--3--overlay笔记

一.介绍

终于写到overlay了,我觉得overlay在实际工作中,用到的概率很大,不管是使用docker swarm进行集群还是使用k8s进行集群,都会使用到overlay。本篇文章,主要是对docker官网关于overlay的几篇官方文档,进行理解和做实验。
docker中的overlay网络,主要有3个方面的应用,
第1个是docker系统自带的overlay网络是ingress,这个会重新开一篇文章说
第2个是用户自定义的overlay网络,应用docker swarm service
第3个是用户自定义的overlay网络,应用standalone containers
接下来就会去做第2,3的实验。
ps:研究docker的overlay网络,最好要懂docker swarm,这篇文章讲docker swarm非常不错,点这里查看

二.原理

overlay是一种叠加网络,简单理解就是把一个逻辑网络建立在一个实体网络之上,让我们的虚拟机或者容器,在同一个二层网络之中,这样虚拟机或者容器,就可以在二层网络自由通信。
overlay是一种叠加网络,实现的方式有很多种,有硬件的,也有软件的,比如vxlan,NVGRE,STT等。我们重点研究一下vxlan,因为我们docker的overlay网络,底层实现就是vxlan。
关于overlay技术的总体介绍,以及原理,可以查看,这篇文章,overlay网络技术之VxLAN详解
关于vxlan的报文协议讲解,可以查看,这篇文章,vxlan的报文协议
关于vxlan的详细原理讲解,可以查看,这篇文章,vxlan的原理详细讲解
上面3篇文章,主要都讲的虚拟机方面的overlay相关知识点,感觉本质上来讲,虚拟机和容器是同一类东西,overlay的网络也是运用一样的技术原理。
关于docker overlay的工作原理讲解,可以查看,这篇文章,Docker Overlay 工作原理,关于docker overlay的工作原理讲解,我会在第一个实验详细,说明的更详细。

三.实验----user-defined overlay for docker swarm service

1.说明

Container eth0:eth0它是Overlay网络分配的唯一的IP地址,它是veth pair虚拟设备对,作用是实现点对点的通信,通过桥接到br0这个网桥中,可以实现不同 NameSwitch之间容器进行通信。
这个overlay网络是ingress网络,这个overlay网络主要用来做负载均衡的。
Container eth1:eth1它是Overlay网络分配的唯一的IP地址,它是veth pair虚拟设备对,作用是实现点对点的通信,通过桥接到br0这个网桥中,可以实现不同 NameSwitch之间容器进行通信。
这个overlay网络是我们自定义的overlay网络,这个overlay网络主要用做集群内部通信的。

VETP:对VXLAN数据包的封装与街封装。

Container eth2:eth2是容器主机的默认网络,主要提供容器访问外网所提供的服务,走的默认docker网络架构,只不过他创建了docker_gwbridge这个网桥。

docker_gwbridge:docker_gwbridge是容器所创建的网桥它替代了docker0的服务,可以使得容器能够访问外部网络或者其他的集群节点

enp0s3:真机网卡与外界网卡连接得真机网卡,它用来转发,容器VXLAN与NAT两种网卡类型的数据包到指定的对端节点。
PS:
1.创建任何一个service,service下的容器,容器自动获得3块网卡,2个overlay网卡,1个docker_gwbridge网卡。一块overlay网卡,是ingress用来做复杂均衡用的,一块是用集群内部通信用的,还可有一块网卡用作访问外部网络用的。
2.关于数据如何传递的,在第一个实验会详细说明

2.整体拓扑图

在这里插入图片描述

3.预置条件

   a.使用virtualbox创建3个虚拟机(xwl-1,xwl-2,xwl-3),3个虚拟机的网络,这3个虚拟机处于同一个网络,并且能够上internet
   b.这3个虚拟机的系统,均为ubuntu server 20.04。其他linux系统,肯定也是的行的。
   c.在这3个虚拟机上,分别安装好docker
   ps:用真实的物理机也行,但是感觉没有太必要。或者使用其他工具如vmware,hype-v,wls等,创建虚拟机也行。

4.操作步骤

1.检查3台机器的网络状态
虚拟机1在这里插入图片描述

虚拟机2在这里插入图片描述

虚拟机3在这里插入图片描述
2.在虚拟机1上,创建docker swarm
在这里插入图片描述

3.在虚拟机2,3上,加入docker swarm
子节点加入docker swarm后,会自动创建,ingress和docker_gwbridge这两个网络
在虚拟机2
在这里插入图片描述
在虚拟机3
在这里插入图片描述
4.在主节点上虚拟机1上,验证集群加入情况
在虚拟机1上,列出节点的情况(一个非常小的docker集群算是搭建成功了)
在这里插入图片描述
5.在主机点虚拟机1上,创建一个自定义的overlay网络名字叫nginx-net(创建的时候,我们可以指定子网,ip啥的,这里,就直接全部默认)
在这里插入图片描述
6.在master节点(虚拟机1),创建docker swarm service
docker service create --name my-nginx --publish target=80,published=80 --replicas=5 --network nginx-net nginx
在虚拟机1(第一次比较慢,会去下载nginx镜像)

在这里插入图片描述
在虚拟机1,查看容器
在这里插入图片描述

在虚拟机2,查看容器
在这里插入图片描述

在虚拟机3,查看容器在这里插入图片描述
7.进入相关容器,下载相关软件
在主机点(虚拟机1)上,
在这里插入图片描述

在子节点(虚拟机2)上,
在这里插入图片描述
8.查看容器的网卡
在虚拟机1上的容器1d947ec6dd77在这里插入图片描述
在虚拟机2上的容器ad7040f6340b
在这里插入图片描述
9.查看ingress overlay, nginx-net overlay以及docker_gwbridge这三个网络,会发现,容器的ip都在相应的网络详情中查找的到
在master节点,虚拟机1上
ingress网络
在这里插入图片描述
nginx-net网络
在这里插入图片描述
docker_gwbridge网络
在这里插入图片描述

在node节点,虚拟机2上
ingress网络
在这里插入图片描述

nginx-net网络
在这里插入图片描述

docker_gwbridge网络
在这里插入图片描述

5.验证数据访问验证

a.overlay内的容器间访问

1.同一个overlay下的容器,可以直接访问
docker自带的ingress的网络和docker自定义的nginx overlay网络,容器间通信
master节点(xwl-1)容器1d947ec6dd77与node节点(xwl-2)容器ad7040f6340b通信
在这里插入图片描述
node节点(xwl-2)容器1d947ec6dd77与node节点(xwl-2)容器ad7040f6340b通信
在这里插入图片描述
2.同一个overlay下,docker自带的overlay网络的容器,不能直接访问容器的服务,用户自定义的overlay网络里的容器,可以直接访问容器的服务
master节点(xwl-1)容器1d947ec6dd77与node节点(xwl-2)容器ad7040f6340b通信
在这里插入图片描述
node节点(xwl-2)容器1d947ec6dd77与node节点(xwl-2)容器ad7040f6340b通信
在这里插入图片描述

b.overlay内的容器访问外部

overlay内的容器访问外部,使用的docker_gwbridge这个网卡,overlay本身的ip是无法访问外部的
在虚拟机1
在这里插入图片描述
在虚拟机2
在这里插入图片描述

c.外部访问overlay内的容器

外部访问集群服务的时候,数据先到达节点,然后会进入到节点的ingress,然后再通过ipvs进行负载均衡到后面的容器上去(这个在ingress网络中详细说明原理)
在这里插入图片描述

d.集群内,不同overlay下的容器访问

不同的overlay是不能跨vxlan访问的(除非做了路由)
本来我想通过在容器中关闭网卡的方式,来验证不同overlay是不能跨vxlan进行通信的,但是在容器中,暂时无法禁用网卡。所以这个实验就没做了。但结论应该就是跨vxlan是无法访问的

四.实验----user-defined overlay for standalone containers

1.说明

overlay网络用在docker swarm集群中,所以用户定义的overlay网络,需要在一个docker swarm集群中,才可可以创建。如果在没有加入集群的的节点上创建,会报错,如下图
在这里插入图片描述
只能在master节点上创建overlay,如果在node节点上创建overlay会报错
在这里插入图片描述

在docker swarm中,没有加入集群的容器,可以连接到自定义的overlay中,下面就做这个实验

2.整体拓扑图

在这里插入图片描述

3.预置条件

预置条件和上一个实验相同

4.操作步骤

1.清除上一个实验的步骤
虚拟机1
在这里插入图片描述
虚拟机2
在这里插入图片描述

虚拟机3
在这里插入图片描述

2.在虚拟机1上,创建docker swarm
在这里插入图片描述

3.在虚拟机2,3上,加入docker swarm
子节点加入docker swarm后,会自动创建,ingress和docker_gwbridge这两个网络
在虚拟机2
在这里插入图片描述
在虚拟机3
在这里插入图片描述
4.在主节点上虚拟机1上,验证集群加入情况
在虚拟机1上,列出节点的情况(一个非常小的do分别cker集群算是搭建成功了)
在这里插入图片描述
5.在主机点虚拟机1上,创建一个自定义的overlay网络名字叫test-net(创建的时候,我们可以指定子网,ip啥的,这里,就直接全部默认)
在这里插入图片描述
6.在虚拟机1和虚拟机2上,分别创建busybox的容器
在虚拟机1上
在这里插入图片描述
在虚拟机2上,原本机器上是没有test-net这个overlay网络,但是, 我们运行容器的时候,它可以自动去关联master节点上的自定义的overlay网络
在这里插入图片描述

5.数据访问验证

a.overlay内的容器间访问

可以互相访问
在虚拟机1
在这里插入图片描述

在虚拟机2
在这里插入图片描述

b.overlay内的容器访问外部

通过docker_gwbridge访问外部网络
在这里插入图片描述

c.外部访问overlay内的容器

外部访问集群内部,只能通过ingress,才能访问集群内部的容器,由于单独的容器,不属于任何服务,就没有在容器上挂在ingress的网络的网卡

d.集群内,不同overlay下的容器访问

不同的overlay是不能跨vxlan访问的(除非做了路由)
本来我想通过在容器中关闭网卡的方式,来验证不同overlay是不能跨vxlan进行通信的,但是在容器中,暂时无法禁用网卡。所以这个实验就没做了。但结论应该就是跨vxlan是无法访问的。

五.遗留问题

暂时无

六.参考链接

1.docker官网,关于docker overlay的配置,以及相关注意事项
https://docs.docker.com/network/overlay/
https://docs.docker.com/network/network-tutorial-overlay/
2.docker官网,关于docker swarm网络的总体介绍
https://docs.docker.com/engine/swarm/networking/
3.docker swarm这篇文章非常不错,就是有点长,但是非常值得看
https://www.cnblogs.com/zhujingzhi/p/9792432.html
4.overlay技术的总体介绍,以及原理
http://www.360doc.com/content/19/0424/15/37015604_831158928.shtml
5.VXlan 报文讲解
https://blog.csdn.net/sjin_1314/article/details/80303098
6.vxlan的技术原理详细讲解,主要讲解通信原理
https://blog.csdn.net/u013743253/article/details/80504551
7.docker overlay工作原理
https://www.cnblogs.com/xiangsikai/p/9898174.html

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Docker是一种基于容器的虚拟化技术,它提供了一种轻量级的容器化解决方案,可以将应用程序及其依赖项打包到一个可移植的容器中,以便在任何地方运行。在Docker中,容器之间的通信是通过网络实现的,在本文中,我们将详细介绍Docker中的网络通信Docker中的网络类型 Docker提供了四种不同类型的网络,分别是: 1. 桥接网络(Bridge Network):桥接网络Docker的默认网络,它允许容器之间相互通信,并且可以与主机通信。在桥接网络中,每个容器都有一个独立的IP地址,并且可以通过容器名称或IP地址进行访问。 2. 主机网络(Host Network):主机网络将容器直接连接到主机网络上,容器与主机共享同一个网络接口和IP地址,因此可以与主机网络上的其他设备进行通信。 3. 网络绑定(None Network):网络绑定不为容器配置任何网络,这意味着容器无法通过网络与外界进行通信。通常,这种网络类型用于测试和调试容器应用程序。 4. Overlay网络Overlay Network):Overlay网络用于跨主机容器之间的通信。它允许在多个主机上运行分布式应用程序,并提供了自动发现和负载均衡的功能。 Docker网络配置 在Docker中,可以使用docker network命令来管理网络。可以使用以下命令创建一个新的桥接网络: ``` docker network create my-network ``` 可以通过以下命令将容器添加到网络中: ``` docker run --name my-container --network my-network my-image ``` 在此命令中,--network选项指定要将容器添加到的网络名称。 可以使用以下命令列出所有可用的网络: ``` docker network ls ``` 可以使用以下命令查看特定网络的详细信息: ``` docker network inspect my-network ``` 在Docker中,还可以使用--link选项将一个容器链接到另一个容器。这将创建一个虚拟网络接口,允许容器之间进行通信。以下命令将容器my-container链接到容器my-other-container: ``` docker run --name my-container --link my-other-container my-image ``` 在此命令中,--link选项指定要链接的容器名称。 总结 在Docker中,容器之间的通信是通过网络实现的。Docker提供了四种不同类型的网络,包括桥接网络、主机网络网络绑定和Overlay网络。可以使用docker network命令来管理网络,可以使用--link选项将一个容器链接到另一个容器。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

狂奔的蜗牛x

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值