《云原生网络数据面可观测性最佳实践》——二、全景剖析阿里云容器网络数据链路——1. Flannel 模式架构设计(上)

简介: 《云原生网络数据面可观测性最佳实践》——二、全景剖析阿里云容器网络数据链路——1. Flannel 模式架构设计(上)

Flannel 模式下,ECS只有一个主网卡ENI,无其他附属网卡,ECS和节点上的Pod与外部通信都需要通过主网卡进行。ACK Flannel会在每个节点创建cni0虚拟网卡作为Pod网络和ECS的主网卡eth0之间的桥梁。

image.png

image.png

 

集群的每个节点会起一个flannel agent,并且会给每个节点预分配一个Pod CIDR,这个Pod CIDR是ACK集群的Pod CIDR的子集。

image.png

 

容器的网络命名空间内会有一个eth0的虚拟网卡,同时存在下一跳指向该网卡的路由,该网卡会作为容器和宿主内核进行数据交换的出入口。容器和宿主机之间的数据链路是通过veth pair进行交换的,现在我们已经找到veth pair其中一个,如何去找另一个veth呢?

 image.png

image.png 

 

如上图所示,我们可以容器的网络命名空间中通过ip addr 看到一eth0@if8的标志位,其中‘81' 这个将会协助我们在ECS的OS内找到和容器网络命名空间中的veth pair相对一个。在ECS OS 内我们通过ip addr | grep 81: 可以找到vethd7e7c6fd 这个虚拟网卡,这个就是veth pair在ECS OS侧相对的那一个。

 image.png

 

到目前为止容器内和OS 数据链路已经建立链接了,那么ECS OS内对于数据流量是怎么判断去哪个容器呢?

 

通过OS Linux Routing我们可以看到,所有目的是Pod CIDR 网段的流量都会被转发到cni0这张虚拟网卡,那么cni0是通过bridge方式将不同目的数据链路指向到不同的vethxxx。到这里为止,ECS OS和Pod的网络命名空间已经建立好完整的出入链路配置了。

 image.png

 

1) Flannel 模式容器网络数据链路剖析

针对容器网络特点,我们可以将Flannel模式下的网络链路大体分为以Pod IP对外提供服务和以SVC对外提供服务两个大的SOP场景,进一步细分可以拆分到10个不同的小的SOP场景。

 image.png

 

对这10个场景的数据链路梳理合并,这些场景可以归纳为下面5类典型的场景:

 

Client和服务端Pod部署于同一个ECS

Client和服务端Pod部署于不同ECS

访问SVC External IPExternalTrafficPolicy 为Cluster时,Client和服务端Pod部署于不同ECS,其中client为集群外

访问SVC External IPExternalTrafficPolicy 为Local时, Client和服务端Pod部署于不同ECS,其中client为集群内

访问SVC External IPExternalTrafficPolicy 为Local时, Client和服务端Pod部署于不同ECS,其中client为集群外

 

2) 场景一:Client和服务端Pod部署于同一个ECS

此场景包含下面几个子场景,数据链路可以归纳为一种:

以Pod IP对外提供服务,Client和Pod部署于同一个节点;

以SVC ClusterIP对外提供服务,Client和SVC 后端Pod部署于同一节点;

以SVC ExternalIP对外提供服务,ExternalTrafficPolicy为Cluster/Local情况下,Client和SVC后端Pod部署于同一节点

环境

image.png

 

ap-southeast-1.10.0.0.180节点上存在两个pod:centos-67756b6dc8-rmmxt IP地址172.23.96.23和nginx-7d6877d777-6jkfg和172.23.96.24

内核路由

centos-67756b6dc8-rmmxt IP地址172.23.96.23,该容器在宿主机表现的PID是503478,该容器网络命名空间有指向容器eth0的默认路由。

 image.pngimage.png

 

该容器eth0在ECS OS 内对应veth pair是vethd7e7c6fd

image.png

image.png

通过上述类似的办法,可以找到nginx-7d6877d777-6jkfg IP地址172.23.96.24,该容器在宿主机表现的PID是2981608,该容器eth0在ECS OS 内对应veth pair是vethd3fc7ff4image.png

在ECS OS内,有指向Pod CIDR,下一跳为cni0的路由,以及cni0中有两个容器的vethxxx 网桥信息

image.png

image.png 

小结

可以访问到目的端

数据链路转发示意图:

image.png 

  内核协议栈示意图:

 image.png

 

数据链路:ECS1 Pod1 eth0 -> vethxxx1 -> cni0 -> vethxxxx2 ->ECS1 Pod2 eth0

数据链路要经过三次内核协议栈,分别是Pod1协议栈,ECS OS协议栈和Pod2协议

 

更多精彩内容,欢迎观看:

《云原生网络数据面可观测性最佳实践》——二、全景剖析阿里云容器网络数据链路——1. Flannel 模式架构设计(中):https://developer.aliyun.com/article/1221680?spm=a2c6h.13148508.setting.21.15f94f0eeQ735s

相关实践学习
通义万相文本绘图与人像美化
本解决方案展示了如何利用自研的通义万相AIGC技术在Web服务中实现先进的图像生成。
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情: https://www.aliyun.com/product/ecs
相关文章
|
8月前
|
数据采集 运维 Serverless
云函数采集架构:Serverless模式下的动态IP与冷启动优化
本文探讨了在Serverless架构中使用云函数进行网页数据采集的挑战与解决方案。针对动态IP、冷启动及目标网站反爬策略等问题,提出了动态代理IP、请求头优化、云函数预热及容错设计等方法。通过网易云音乐歌曲信息采集案例,展示了如何结合Python代码实现高效的数据抓取,包括搜索、歌词与评论的获取。此方案不仅解决了传统采集方式在Serverless环境下的局限,还提升了系统的稳定性和性能。
239 0
|
5月前
|
存储 Linux 容器
【Container App】在容器中抓取网络包的方法
本文介绍在Azure Container App中安装tcpdump抓取网络包,并通过Storage Account上传抓包文件的方法。内容包括使用curl和nc测试外部接口连通性、长Ping端口、安装tcpdump、抓取网络包、以及通过crul命令上传文件至Azure Storage。适用于需要分析网络请求和排查网络问题的场景。
191 1
|
6月前
|
Docker 容器
Docker网关冲突导致容器启动网络异常解决方案
当执行`docker-compose up`命令时,服务器网络可能因Docker创建新网桥导致IP段冲突而中断。原因是Docker默认的docker0网卡(172.17.0.1/16)与宿主机网络地址段重叠,引发路由异常。解决方法为修改docker0地址段,通过配置`/etc/docker/daemon.json`调整为非冲突段(如192.168.200.1/24),并重启服务。同时,在`docker-compose.yml`中指定网络模式为`bridge`,最后通过检查docker0地址、网络接口列表及测试容器启动验证修复效果。
1063 39
|
12月前
|
人工智能 弹性计算 运维
ACK Edge与IDC:高效容器网络通信新突破
本文介绍如何基于ACK Edge以及高效的容器网络插件管理IDC进行容器化。
|
7月前
|
网络协议 Docker 容器
使用网络--容器互联
使用网络--容器互联
164 18
|
7月前
|
Kubernetes Cloud Native 区块链
Arista cEOS 4.30.10M - 针对云原生环境设计的容器化网络操作系统
Arista cEOS 4.30.10M - 针对云原生环境设计的容器化网络操作系统
235 0
|
12月前
|
NoSQL 关系型数据库 MySQL
《docker高级篇(大厂进阶):4.Docker网络》包括:是什么、常用基本命令、能干嘛、网络模式、docker平台架构图解
《docker高级篇(大厂进阶):4.Docker网络》包括:是什么、常用基本命令、能干嘛、网络模式、docker平台架构图解
421 56
《docker高级篇(大厂进阶):4.Docker网络》包括:是什么、常用基本命令、能干嘛、网络模式、docker平台架构图解
|
9月前
|
运维 供应链 前端开发
中小医院云HIS系统源码,系统融合HIS与EMR功能,采用B/S架构与SaaS模式,快速交付并简化运维
这是一套专为中小医院和乡镇卫生院设计的云HIS系统源码,基于云端部署,采用B/S架构与SaaS模式,快速交付并简化运维。系统融合HIS与EMR功能,涵盖门诊挂号、预约管理、一体化电子病历、医生护士工作站、收费财务、药品进销存及统计分析等模块。技术栈包括前端Angular+Nginx,后端Java+Spring系列框架,数据库使用MySQL+MyCat。该系统实现患者管理、医嘱处理、费用结算、药品管控等核心业务全流程数字化,助力医疗机构提升效率和服务质量。
529 4
|
存储 Cloud Native 数据处理
从嵌入式状态管理到云原生架构:Apache Flink 的演进与下一代增量计算范式
本文整理自阿里云资深技术专家、Apache Flink PMC 成员梅源在 Flink Forward Asia 新加坡 2025上的分享,深入解析 Flink 状态管理系统的发展历程,从核心设计到 Flink 2.0 存算分离架构,并展望未来基于流批一体的通用增量计算方向。
312 0
从嵌入式状态管理到云原生架构:Apache Flink 的演进与下一代增量计算范式
|
4月前
|
运维 监控 Cloud Native
从本土到全球,云原生架构护航灵犀互娱游戏出海
本文内容整理自「 2025 中企出海大会·游戏与互娱出海分论坛」,灵犀互娱基础架构负责人朱晓靖的演讲内容,从技术层面分享云原生架构护航灵犀互娱游戏出海经验。
446 16

热门文章

最新文章