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

容器网络硬核技术内幕 (3) 批判的武器和武器的批判

作者头像
用户8289326
发布2022-07-27 21:44:43
3740
发布2022-07-27 21:44:43
举报
文章被收录于专栏:帅云霓的技术小屋

在上一节中,我们提到,马克思指出,批判的武器不能代替武器的批判!

因此,今天我们拿出了GNU/Linux下最强的数据包分析武器——tcpdump,对容器网络进行分析。

我们在宿主机上运行tcpdump:

tianjifang@ubuntu:~$ sudo tcpdump -i docker0

tcpdump加-i参数,可以监听指定的interface(网卡),这里指定docker0,避免监听到的数据包过多。

然后,我们再发起一个ping:

宿主机上果然抓到了相关的数据包:

可以看出,实际上宿主机对172.17.0.0/16与172.16.1.0/24两个网段实施了网络地址转换(NAT)。

我们可以发现,docker0在宿主机内部,是一个虚拟交换机,而对出宿主机的流量,是一个NAT网关。

这种工作方式让我们想到了什么?

对了,是家用路由器。

再准确一点说,是用PC机安装双网卡模拟的家用路由器。

它完全由软件模拟交换机和路由器的行为,对于网段内部的数据包进行二层转发,对于通往外部的数据包则进行NAT。

因此,正如你家与隔壁老王家的主机,无法跨越路由器直接通信那样,使用容器默认的通信方式,容器是无法跨宿主机通信的。

怎么样可以实现容器的跨宿主机通信呢?

通过docker network ls命令,可以查看容器的三个网络——

如图,none指容器没有网络,host指docker复用主机网络设置。

none方式既然与任何网络都不能通信,一般用于什么场景呢?答案是用于需要和外部隔离的应用,如随机密码的生成等。

host会使得容器与宿主机共用同一个IP地址,用于对外发布应用的场景。需要注意,由于host方式下容器与宿主机共用IP及端口资源,容器与宿主机试图监听同一个端口时会发生冲突,导致二者之一应用启动失败。

bridge方式是默认的方式,也就是实验一中使用的NAT方式。显然,NAT是无法实现两个宿主机下docker直接互访的。那么,如果有两个宿主机Docker需要互访,我们应该怎么做呢?

让我们回忆VMWare中的Bridge(桥接)方式,它可以虚拟出一个网桥(交换机),让多个虚拟机与宿主机通过一个二层交换机连接,这样,多个VM可以在同一网段工作,也可以很容易地与外部互访。

Docker如何支持这种方式呢?

让我们回想一下Neutron中的这种互通方式:

如图,NTN网络中实现了一种Overlay封装,可以让不同host下的VM通过L2 Over L3隧道,实现大二层互通,子网无限扩展。

那么,Docker中有这种方式吗?答案是肯定的。

Docker也有Overlay方式的互联互通网络,叫做swarm。

利用swarm可以实现docker的Overlay互通。

如何实现呢?

请看下回分解。

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

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

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

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档