Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >容器网络硬核技术内幕 (3) 批判的武器和武器的批判

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

作者头像
用户8289326
发布于 2022-07-27 13:44:43
发布于 2022-07-27 13:44:43
3971
举报

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

因此,今天我们拿出了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 删除。

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

评论
登录后参与评论
1 条评论
热度
最新
301被墙域名跳转@azhi2023
301被墙域名跳转@azhi2023
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
容器网络硬核技术内幕 (4) 命运共同体
上一节我们讲到,同一宿主机内部的容器可以通过docker0作为网桥互通,而宿主机之间的容器,可以通过VXLAN的方式互通。
用户8289326
2022/07/27
2650
容器网络硬核技术内幕 (4) 命运共同体
容器网络硬核技术内幕 (2) 容器
上回说到,虽然虚拟化技术大大提升了计算机硬件资源的利用率,也让业务部署变得更加灵活,但由于虚拟化技术的部分限制,在虚拟机上运行RDMA等ICT关键业务加速特性几乎成了不可能的,或者要付出极大的代价。
用户8289326
2022/07/27
3230
容器网络硬核技术内幕 (2) 容器
容器网络硬核技术内幕 (12) 美丽的法兰绒 (上)
但是,实际上,大家不知道的是,法兰绒因其制作工艺,以及紧致柔软的特点,也得到了很多姑娘们的青睐。
用户8289326
2022/07/28
3950
容器网络硬核技术内幕 (12) 美丽的法兰绒 (上)
容器网络硬核技术内幕 (6) 天堑变通途
上回说到,docker自带的网桥br0,在跨宿主机通讯时,默认充当了VXLAN的VTEP,因此,会造成较大的互通开销。
用户8289326
2022/07/27
6960
容器网络硬核技术内幕 (6) 天堑变通途
腾讯云私有化容器平台之网络
刚开始接触容器集群的人会发现,与在单节点上使用容器相比,容器集群一个很复杂的领域就是网络。Kubernetes 作为容器编排领域的事实标准,对容器集群的网络进行了合理抽象,并开放了容器网络标准 CNI,供各公司根据自身应用场景和底层基础设施选用开源方案或者自行实现一套网络插件。本文主要介绍腾讯云容器平台针对私有化不同场景的一些网络方案实践。
腾讯云原生
2020/02/14
9.1K0
解密Docker容器网络
一个Linux容器能看见的“网络栈”,被隔离在它自己的Network Namespace中。
JavaEdge
2023/07/09
3740
解密Docker容器网络
Docker单机网络模型动手实验
容器的本质就是一个进程,只不过对它进行了Linux Namesapce隔离,让它看不到外面的世界,用Cgroups限制了它能使用的资源,同时利用系统调用pivot_root或chroot切换了进程的根目录,把容器镜像挂载为根文件系统rootfs。rootfs中不仅有要运行的应用程序,还包含了应用的所有依赖库,以及操作系统的目录和文件。rootfs打包了应用运行的完整环境,这样就保证了在开发、测试、线上等多个场景的一致性。
mazhen
2023/11/24
3040
Docker单机网络模型动手实验
深入解析容器网络
在使用kubernetes之前, 最为火热的技术就是Docker技术了。 它完成了从虚拟机时代的过度,是走向云原生时代的开端。 但是由于docker的故步自封导致被google的开源的kubernetes后来居上, 现在的Docker虽然在积极改进, 但是主流大势已经被kubernetes掌握, 所以也只能起到助力作用。 回归正题, 在kubernetes的服务发现, 服务网格等技术火热之前, 是怎么来实现容器之间的通信呢 ?本文我们就来探讨一下。
用户11097514
2024/08/05
1900
深入解析容器网络
K8s网络模型
容器不是模拟一个完整的操作系统,而是对进程进行隔离,对容器里的进程来说它接触到的各种资源都是独享的,比虚拟机启动快、占用资源少。
冬夜先生
2021/09/02
1.9K0
Docker 跨主机网络方案分析
上篇文章介绍了容器网络的单主机网络,本文将进一步介绍多主机网络,也就是跨主机的网络。总结下来,多主机网络解决方案包括但不限于以下几种:overlay、macvlan、flannel、weave、cacico 等,下面将分别一一介绍这几种网络, PS:本文仅从原理上对几种网络进行简单的对比总结,不涉及太多的细节。 overlay 俗称隧道网络,它是基于 VxLAN 协议来将二层数据包封装到 UDP 中进行传输的,目的是扩展二层网段,因为 VLAN 使用 12bit 标记 VLAN ID,最多支持 4094 个
Linux云计算网络
2018/05/28
2.5K0
一文读懂 Kubernetes 容器网络
在Kubernetes中要保证容器之间网络互通,网络至关重要。而Kubernetes本身并没有自己实现容器网络,而是通过插件化的方式自由接入进来。在容器网络接入进来需要满足如下基本原则:
iMike
2021/02/07
6790
Docker 之容器间通信配置
当你开始大规模使用Docker时,你会发现需要了解很多关于网络的知识。Docker作为目前最火的轻量级容器技术,有很多令人称道的功能,如Docker的镜像管理。然而,Docker同样有着很多不完善的地方,网络方面就是Docker比较薄弱的部分。因此,我们有必要深入了解Docker的网络知识,以满足更高的网络需求。
小手冰凉
2020/08/05
5.3K0
Kubernetes网络模型
在Kubernetes中设计了一种网络模型,要求无论容器运行在集群中的哪个节点,所有容器都能通过一个扁平的网络平面进行通信,即在同一IP网络中。需要注意的是:在K8S集群中,IP地址分配是以Pod对象为单位,而非容器,同一Pod内的所有容器共享同一网络名称空间。
mikelLam
2022/10/31
1.2K0
Kubernetes网络模型
docker浅入深出4
带着我们就这些问题,我们来学习一下docker的网络模型,最后我会通过抓包的方式,给大家演示一下数据包在容器和宿主机之间的转换过程。
萧晚歌
2020/09/04
9750
docker浅入深出4
Docker核心技术之网络管理
容器中可以运行一些网络应用(如nginx、web应用、数据库等),如果要让外部也可以访问这些容器内运行的网络应用,那么就需要配置网络来实现。
Lansonli
2021/10/09
5130
容器网络硬核技术内幕 (5) 为人民服务重于泰山
在上一期中,我们实现了Docker通过swarm组建的Overlay网络,经过VXLAN封装,解决了docker跨宿主机互联互通的问题。
用户8289326
2022/07/27
2410
容器网络硬核技术内幕 (5) 为人民服务重于泰山
Docker | Docker技术基础梳理(五) - Docker网络管理
容器的网络默认与宿主机、与其他容器相互隔离,且容器中可以运行一些网络应用,比如nginx、web应用、数据库等,如果需要让外部也可以访问这些容器中运行的网络应用,那么就需要配置网络来实现。
咸鱼学Python
2019/10/09
8240
容器网络简介
在容器内,可以看见的“网络栈”其实就是隔离在该容器内 Network Namespace 当中的,其中就包括了网卡(Network Interface)、回环设备(Loopback Device)、路由表(Routing Table)和iptables 规则。这些要素,就构成了网络请求的基本环境。
周萝卜
2020/06/29
7570
容器网络硬核技术内幕 (11) 西直门桥的传说
上回我们说到,bridge插件在kubernetes的node之间,为pod的互联互通架起了简单直接的一座大桥,像南京长江大桥一样实现了天堑变通途。
用户8289326
2022/07/28
4580
容器网络硬核技术内幕 (11) 西直门桥的传说
Docker 容器虚拟化
Network Namespace 是 Linux 内核提供的功能,是实现网络虚拟化的重要功能,它能创建多个隔离的网络空间,它们有独自网络栈信息。不管是虚拟机还是容器,运行的时候仿佛自己都在独立的网络中。而且不同Network Namespace的资源相互不可见,彼此之间无法通信。
Alone-林
2022/08/23
7640
Docker 容器虚拟化
相关推荐
容器网络硬核技术内幕 (4) 命运共同体
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档