前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >谈谈同主机容器间的网络

谈谈同主机容器间的网络

作者头像
shysh95
发布2023-08-23 09:55:09
1610
发布2023-08-23 09:55:09
举报
文章被收录于专栏:shysh95shysh95

Hi~朋友,关注置顶防止错过消息

网络栈包含哪些东西?

  • 网卡
  • 回环设备
  • 路由表
  • iptables规则

同一台主机隔离的容器如何跟其他Ntework NameSpace里面的容器进行交互?

将容器比作一台主机的话,多台主机之前的通信需要通过网线将其连接在一台交换机上,而在Linux中能够起到虚拟交换机作用的就是网桥(Bridge)。docker默认会在宿主机上创建一个docker0的网桥。

什么是网桥?

网桥是工作在数据链路层的设备,主要根据MAC地址学习将数据包转发到网桥的不同端口上。

容器如何连接到docker0的网桥上?

需要通过Veth Pair的虚拟设备。

Veth Pair虚拟设备的作用是?

  1. 以两张虚拟网卡的形式成对出现
  2. 从一张网卡发出的数据包可以直接出现在与它对应的另一张网卡中,即使两张网卡在不同的Network Space中

通过上图我们可以看到容器中有一张eth0的网卡,且eth0是容器中的默认路由设备。

Veth Pair设备的另一端网卡则存在于我们的宿主机上,我们可以通过上图中的一些命令精准的找到容器内网卡对应的宿主机的网卡,可以看到Veth Pair设备名称是veth31978dd。

veth设备会被插在dokcer0网桥上,如下图,在我们的docker0网桥上插入了4张虚拟网卡

什么是从设备,从设备的特点?

一张虚拟网卡如果被插在网桥上,则会变成网桥的从设备。

从设备会失去调用网络协议栈处理数据包的资格,变成为网桥上的一个普通端口,该端口的作用就是用来接收流入的数据包,数据包的转发或者丢弃统一交给网桥决定。

同主机多容器通信

在容器A(172.17.0.5)中去ping另一个容器B(172.17.0.2),网络是畅通的,首先容器A通过自身的路由表,目的地址会匹配到第二条规则,第二条规则的网关是0.0.0.0,表明这是一个直连,凡是匹配到这条规则的都会经过自身的eth0网卡,通过二层网络直接发往目的主机,但是通过二层网络需要知道对端的MAC地址,而MAC地址的获取则需要通过ARP广播来进行查找。

什么是ARP,ARP广播的流程

ARP是通过三层的IP地址找到对应的二层MAC地址协议。

eth0是个Veth Pair设备,同时宿主机的Veth Pair设备被插在了docker0网桥上成为了从设备,因此ARP广播请求会被docker0收到,此时docker0会将广播请求转发到其他插在自己身上的虚拟网关,此时符合条件的容器(也就是ron)会将自己的MAC地址回复给容器A,在此过程中,docker0会将MAC地址和对应的端口记录到一个CAM表中,当收到具体的MAC地址通过查询表就知道了应该将数据包转发给谁。

一句话概括同主机的不同容器见的网络通信

通过Veth Pari设备 + docker网桥的方式,实现同主机不同容器见的网络通信。

多主机的容器网络通信

通过单主机的思路,多主机间其实就是通过软件的方式为整个集群创建一个公用的网桥,所有的容器都插在这个网桥上即可相互通信,这种技术称之为Overlay Network。

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

本文分享自 程序员修炼笔记 微信公众号,前往查看

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

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

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