前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >容器网络硬核技术内幕 (4) 命运共同体

容器网络硬核技术内幕 (4) 命运共同体

作者头像
用户8289326
发布2022-07-27 21:45:17
2170
发布2022-07-27 21:45:17
举报

上一节我们讲到,同一宿主机内部的容器可以通过docker0作为网桥互通,而宿主机之间的容器,可以通过VXLAN的方式互通

我们准备了这样一个实验环境:

如图,在Host上运行了3个虚拟机,均通过Bridge方式连接到172.16.1.0/24的网络。

在Docker中创建一个Overlay网络,首先要创建swarm的管理节点:

#docker swarm init

命令返回的一串貌似乱码的字符串,是swarm的token,其他节点加入swarm组需要这个token作为凭据。

在其他节点输入这个:

# docker swarm join //token

返回。

我们可以在Node0上创建overlay网络了:

# docker network create --driver=overlay --attachable ov_net

--driver=overlay表示使用overlay方式创建容器网络,--attachable代表可连接。

注意白色框中的字串,以后还会出现。

我们在Node0上运行一个busybox镜像,并查看其IP地址:

# docker run -it --name busybox1 --networkov_net busybox

可以看到,busybox1获取到了10.0.0.4/24的地址。

我们再去node1上看看:

我们虽然没有在node1上手动创建ov_net网络,但是由于swarm的存在,在Node1上将容器连接到ov_net网络时,swarm会在Node1上自动拉起这个网络,如下图所示:

可以看出,容器busybox2获取到了10.0.0.5/24的地址。

试一下从busybox1上对busybox2发起ping:

我们看到,两个busybox能够跨越主机互通了,它们成为了命运共同体!

“海内存知己 ,天涯若比邻。”

但,我们这样实现的容器互通,离诗人描绘的理想意境还有很大差距。

这是为什么呢?

我们注意到,虽然两个ubuntu宿主机都在同一个子网内,但宿主机上的容器互通的时延却高达50ms,且有较大抖动。

这是因为,两个docker之间跨越主机通信的方式为VXLAN Overlay,如下图所示:

Overlay使用通用的VXLAN技术,每个host上的docker0作为VTEP(二层VXLAN网桥),实现二层通过VXLAN互联。

在前面的专题中提到,docker0实际上是在利用宿主机的CPU实现以太网桥接和NAT,显然,VXLAN封装也是通过软件方式进行的。

我们在宿主机的网卡上进行tcpdump,也可以看出,docker0进行了VXLAN封装和解封装:

通过docker0进行VXLAN封装和解封装,我们解决了容器不便对外互访的问题,但docker提供的Overlay封装为软件实现,流量大时会大大增加CPU消耗。

这个问题该如何解决呢?

请看下回分解。

本文参与?腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-04-10,如有侵权请联系?cloudcommunity@tencent.com 删除

本文分享自 帅云霓的技术小屋 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器镜像服务
容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com