深入理解K8S节点内容器通信

我们在pod的好处和坏处_量子学习法的博客-CSDN博客中初略讲过一个Pod内容器都是通过infra容器进行与外界通信的。那么具体如何通信呢?本篇文章将介绍一个节点内不同namespace容器通信。

就像多台主机之间通信需要网线将他们连在一台交换机上一样,为了实现宿主机上容器间的通信,宿主机上会建一个叫docker0的网桥。凡事连接在docker0网桥上的主机都可以通信。

那么我们需要如何将容器连接上呢?我们先上图。

我们需要Veth Pair的虚拟设备。Veth Pair通常是成对出现的,例如上图eth0 和veth9c02e56。所以Veth Pair就是连接不同network Namespace的网线。

这时候我们在 nginx-1 容器里 ping 一下 nginx-2 容器的 IP 地址(172.17.0.3),就 会发现同一宿主机上的两个容器默认就是相互连通的。

具体原理,我们来解释一下:

1,nginx-1访问nginx-2 容器的 IP 地址匹配到的是直连规则,则通过eth0进行ARP广播。

2,此时docker0 网桥就会扮演二层交换机的角色,将ARP转发到其他插到docker0端口上的网卡上。

3,同样连接在 docker0 上的 nginx-2 容器的网络协议栈就会收到这个 ARP 请求,从而将 172.17.0.3 所对应的 MAC 地 址回复给 nginx-1 容器。

4,有了这个目的 MAC 地址,nginx-1 容器的 eth0 网卡就可以将数据包发出去。nginx-1 容器的 eth0 网卡将包发往docker0网桥上,docker0根据数据包的mac地址,在它的CAM表中查到对应的端口后把数据包发向这个端口。

需要注意的是,在实际的数据传递时,上述数据的传递过程在网络协议栈的不同层次,都有 Linux 内核 Netfilter 参与其中。

总结

在默认情况下,被限制在 Network Namespace 里的容器进程,实际上是通过 Veth Pair 设备 + 宿主机网桥的方式,实现了跟同其他容器的数据交换。而宿主机网桥实际上充当我们二层网络交换机的角色,根据MAC地址继续转发。

那么,不同节点间的容器如何通信呢?

我们可以看看下一篇文章深入理解容器跨主机通信_量子学习法的博客-CSDN博客

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值