暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

《容器云网络,看这一篇就够了》(上)

289

点击蓝字  关注我们

CloudTech TEAM 

本文探讨了Linux网络协议栈的复杂性与功能,强调了协议无关层、BSD Socket层和INET Socket层在数据传输过程中的关键作用。接着,文章讨论了虚拟网络设备如Tun/Tap、veth、bridge和OVS在网络数据传输中的重要性。文章还详细分析了容器网络的构建与运作,特别是网络命名空间在实现隔离中的核心作用,以及Docker在建立基础网络设施和组织容器通信中的关键角色。

CloudTech TEAM                               文 / 孙连辰


01 Linux网络深度剖析

探索网络协议栈的复杂性与功能

优先讨论容器网络架构之前,我们要深入了解Linux网络的结构与基础功能。在容器云网络的构成上,Linux网络起着根本性作用。网络连接的复杂过程,涵盖从硬件数据的封装到更高层的程序调用和连接,这一连串的操作体现为需要对数据进行逐层封装的操作。因此层与层之间的数据传递都是有序进行的,这就导出了众所周知的OSI七层协议模型。



在探讨网络协议层面时,我们关注以下几个层次:

  • 协议无关层(Protocol Agnostic Interface) —— 为了简化网络协议层的多样性(如TCP、UDP、SCTP等),此层提供给系统调用一个简单、统一的接口,让上层无需关心底层协议的复杂性。

  • BSD Socket层 —— 提供一个统一的SOCKET操作接口,与socket结构体紧密相关联。

  • INET Socket层 —— 主要调用IP层协议,同样与sock结构体密切联系。

这些层次控制从应用数据的产生到物理网卡发送的整个过程。对于运维人员而言,掌握网络协议栈的基础结构知识即可应对大多数工作需求。Linux网络协议栈包括多个函数和数据结构(如file、socket、sock、sock_common等),这些都是网络传输的基础。图示可以明确展示各层间的关联和数据的流向。

基于虚拟网络设备的传输实现

Linux网络的实现需要依赖于虚拟网络设备,包括Tun/Tap、veth、bridge以及Open vSwitch (OVS)。通过这些设备,网络数据才能在用户空间与内核空间对换,并最终通过物理网卡送出。特别是对于虚拟设备的应用,Tun/Tap为数据提供点对点传输模式,veth设备则因其成对的特性,适用于连接不同的网络命名空间。



图解中提到,数据传递需要借助CPU缓冲区(buffer),以及网卡的DMA。虚拟设备不仅仅是数据传输过程中的中转站,更是网络隔离与虚拟网络构建的基石。例如,通过配置虚拟网卡接口的IP、子网掩码,可以将其接入到网桥,进一步扩展虚拟网络的边界。


02 容器网络的构建与运作

在提到容器网络时,网络命名空间(net限定的Namespace)扮演核心角色。隔离是通过定义不同的Namespace来实现,比如IPC、Net、Mount等,这样处于不同namespace的进程看似在独立的实例中运行而不互相干扰。



从Docker角度来看,它在启动时会建立基础网络设施,比如docker0网桥,它关联后续创建的容器。使用的网络模式包括host、container、none和bridge,其中bridge是最为普遍的模式。



容器网络的组织与通信

Docker服务器启动后所创建的docker0虚拟桥接以及容器中的虚拟网卡是容器通信的两个关键组件。这些虚拟网卡一端在容器内,另一端在docker0上,它们支持容器内部通信或主机与容器间的通讯。当涉及到外部网络接入时,Network Address Translation (NAT) 或Direct Network Access Translation (DNAT) 被用以实现网络的连接。而整体连接则如下图所示:



03 总结

容器网络的构造详解到此告一段落,随后的章节中,我会继续分享多服务如何在Kubernetes集群中发布,以及Kubernetes使用的更为复杂的网络策略等内容。希望这些分享能够为理解容器网络的构建与管理提供基础。


    END    


欢迎转发、点赞点击在看,让更多同行看到

点击公众号名片阅读更多内容

# 往期推荐 #

#  全链路系统自主服务装置

#  基于趋势预测的容器云性能指标监控告警策略调研

#  国产分布式对象存储多站点架构分析及功能测试

#  浅谈私有云容量管理

文章转载自戏说数据那点事,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论