Kubernetes POD 间容器网络通信
网络通讯方式
在掌握上述基础概念之后,有必要进一步探讨K8s集群内部docker容器之间的通信机制。在此过程中,需对多种具体情形进行区分分析。
1)位于同一POD内的Container通信
2)处于同一Node但属于不同POD的通信
3)跨Node且隶属于不同POD的通信
接下来将依次解析上述各类情形下的通信方式。
同一个POD上Container通信
在k8s架构中,每个Pod负责管理一组Docker容器,这些Docker容器共同使用相同的网络命名空间。Pod内的每一个Docker容器均具备与Pod一致的IP地址及端口地址范围。由于它们处于同一网络命名空间中,因此能够通过localhost实现彼此间的通信。
是什么机制使得同一个Pod中的多个Docker容器之间能够进行通信?这依赖于Docker提供的一种网络模型:–net=container。
该模式规定新启动的Docker容器将与一个已存在的容器共享同一个网络命名空间,而非与宿主机共享。新创建的容器不会独立配置网卡或IP地址,而是直接使用指定容器所拥有的IP和端口范围等网络资源。
在k8s系统中,每个Pod内部包含一个名为pause的容器,并且该pause容器拥有独立的网络命名空间。当在Pod内部启动Docker容器时,通过采用–net=container参数,可以将当前运行的Docker容器纳入到Pod所拥有的网络命名空间(即pause容器所在的命名空间)之中。

这正是k8s在进行pod调度时,倾向于将关联性较强的服务部署于同一pod内的原因所在,如此一来网络请求所产生的延迟便可被有效降低,由于容器间通信共享了统一的网络环境,其交互效率堪比本地通信。
同一个Node,不同Pod

【上图展示的是同一节点内不同Pod之间实现通信的机制,其核心在于利用Linux虚拟以太网设备,即由两个虚拟接口构成的veth对,从而将多个网络命名空间连接在一起(这些命名空间对应于不同的Pod)。
通过网桥技术,将veth0与veth1组合成一个以太网结构,二者之间能够直接进行数据交互。同时,借助veth对的连接方式,使pod1中的eth0接口与veth0、pod2中的eth0接口与veth1建立关联关系,最终实现pod1与pod2之间的通信功能。
不同Node,不同Pod


【上图展示了不同节点之间Pod的通信过程,具体说明了Node1中的Pod1是如何与Node2中的Pod4进行通信的,下面将详细分析整个流程:
1)首先,Pod1通过自身的以太网设备eth0将数据包发送至与之关联的root命名空间中的veth0接口
2)随后,该数据包被Node1上的网桥设备接收,网桥在查找转发表时未能找到Pod4的Mac地址信息,因此会将该数据包转发至默认路由路径(即root命名空间下的eth0设备)
3)接下来,数据包通过eth0接口离开Node1,并被传输至网络中
4)当数据包抵达Node2后,首先由root命名空间中的eth0设备接收
5)之后,网桥设备将数据包路由至虚拟接口veth1,并最终将数据包传递至与veth1配对的另一端口(即Pod4的eth0接口)
每个节点都具备将数据包转发至其内部运行的Pod的能力。当一个数据包到达某个节点后,其内部的数据流动过程与节点内各Pod之间的通信方式类似。
补充说明:关于网络配置的具体实现方式,Kubernetes本身并未提供完整的网络规划逻辑,而是定义了一套CNI(Container Network Interface)接口规范,并将其开放给社区进行实现。其中Flannel是Kubernetes生态中较为知名的一种实现方案。
flannel
flannel构建了一个大规模的二层扁平网络,其中pod的ip地址由flannel统一进行分配,通信过程也通过flannel的网桥完成。
在每个节点上,都会生成一个名为flannel0的虚拟网络接口,用以实现节点间的通信。因此,容器之间可以直接借助pod id完成数据交互。
当进行跨节点通信时,发送方的数据会从docker0接口经过路由传输至flannel0虚拟网卡,而接收方的数据则会从flannel0接口路由至docker0接口。
总结
上述内容中,老顾阐述了多种网络通信的场景及其对应的通信流程,然而k8s的网络通信机制远不止这些内容。还有诸如如何从集群外部访问集群内部资源,以及Service访问的具体作用等关键问题尚未涉及。在下一篇文章中,老顾将对此进行详细讲解,感谢大家的关注!!!
当前业界普遍认为互联网行业正处于寒冬时期,但只要个人技术能力足够扎实,便无需过分担忧。本人特别为Android开发工程师整理了一份包含【Android进阶学习视频
更多Android高级工程师进阶学习资料
提升阶段学习影像资料

随附资料包括:此前在秋季招聘期间整理的一线及二线城市互联网企业Android面试真题合集(涵盖BAT、小米、华为、美团、滴滴等企业),以及本人归纳的Android学习笔记(内容涉及Android基础理论、扩展知识、源码分析、设计模式总结、Gradle相关知识点及常见算法题目汇总)。

里面包含不同方向的自学编程路线、面试题集合/面经、及系列技术文章等,资源持续更新中…
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》 ,点击传送门,即可获取!
动架构视频+大厂面试真题+项目实战源码》,点击传送门,即可获取!**
