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

本文涉及的产品
云服务器 ECS,每月免费额度200元 3个月
云服务器ECS,u1 2核4GB 1个月
简介: 《云原生网络数据面可观测性最佳实践》——二、全景剖析阿里云容器网络数据链路——4. Terway IPVLAN+EBPF 模式架构设计(下)

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

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


8) 场景七:集群内Pod访问的SVC ClusterIP,SVC后端Pod和客户端Pod不属于不同ECS

环境

image.png

 cn-hongkong.10.0.3.15节点上存在 nginx-7d6877d777-j7dqz,IP分为10.0.3.38。

cn-hongkong.10.0.3.93节点上存在 centos-6c48766848-dz8hz,IP分为10.0.3.127

image.png

 通过此节点的terwayPod,我们可以利用 terway-cli show factory的命令看到 nginx-7d6877d777-j7dqz IP 10.0.3.5 属于cn-hongkong.10.0.3.15 上的MAC地址为00:16:3e:04:08:3a的ENI网卡。

image.png

 通过此节点的terwayPod,我们可以利用 terway-cli show factory的命令看到 centos-6c48766848-dz8hz IP  10.0.3.127 属于cn-hongkong.10.0.3.93 上的MAC地址为00:16:3e:02:20:f5的ENI网卡。

 

通过describe svc 可以看到 nginxPod 被加入到了 svc nginx的后端。SVC的CLusterIP是192.168.27.242。如果是集群内访问External IP,对于 Terway 版本≥ 1.20 来说,集群内访问SVC的ClusterIP或External IP,整个链路架构是一致的,此小节不在针对External IP单独说明,统一用ClusterIP作为示例(Terway版本< 1.20 情况下,访问External IP,会在后续小节说明)。

image.png

 

内核路由

Pod访问SVC的Cluster IP,而SVC的后端Pod和Pod部署在不同ECS上,此架构类似 2.4 小节中的不同ECS节点上的Pod间互访情况,只不此场景是Pod访问SVC的ClusterIP,要注意此处是访问ClusterIP,如果是访问External IP,那么场景会进一步复杂了,本门的后面几个小节会详细说明。

 

对于 ClusterIP的ebpf转发进行描述,详细信息可以参考 2.5 小节。中的描述,和前面几个小节一样,在任何dev上都无法捕获到客户端访问的SVC的IP。

小结

数据链路转发示意图:

image.png

 

不会经过任何宿主机ECS网络空间中间节点

整个链路是需要从客户端pod所属ENI网卡出ECS再从目POD所属ENI网卡进入ECS

整个请求链路是ECS1 Pod1 ->ECS1 eth1 -> VPC ->ECS2 eth1 ->ECS2 Pod2

在客户端/服务端Pod内或者ECSENI网卡无法捕捉到 SVC IP,SVC IP 在 客户端Pod网络命名空间内已经通过ebpf转换成了SVC后端PodIP

 

 

9 场景八:集群内Pod访问的SVC ExternalIP(Terway版本≤1.2.0),SVC后端Pod和客户端Pod配属同一个ENI

环境

此处环境和2.5小节 情况类似,不做过多描述,只是此小节是在terway 版本小于1.2.0 情况下,访问External IP 47.243.139.183

image.png

内核路由

请参考2.5 小节。

 

由于客户端Pod和被访问的SVC的后端Pod同属于同一个ENI,那么在terway 版本小于1.2.0的情况下,访问External IP,实际上数据链路会通过ENI出ECS到External IP的SLB,在被转发到同一个ENI上。四层SLB目前是不支持同一个EI同时作为客户端和服务端,所以会形成回环,详细信息可以参考下面连接:

https://help.aliyun.com/document_detail/97467.html#section-krj-kqf-14s

https://help.aliyun.com/document_detail/55206.htm

 

小结

数据链路转发示意图:

image.png

 

整个请求链路是ECS1 Pod1 ->ECS1 eth1 -> VPC -> SLB -> 中断

Terway版本小于1.2.0时,集群内访问external IP,会出ECS ENI到SLB,再由SLB转发到ECS ENI上,如果源pod所属ENI和被转发ENI为同一个,将访问不成功,原因是四层SLB会形成回环

解决方案(任何一个):

通过SVC annotation将SLB配置为7层监听

将Terway版本升级之1.2.0以及上,并开启集群内负载均衡Kube-Proxy会短路集群内访问ExternalIP、LoadBalancer流量,即集群内访问这些外部地址,实际流量不会到外部,而会被转为对应后端Endpoint直接访问在Terway IPvlan模式下,Pod访问这些地址流量由Cilium而不是kube-proxy进行处理在Terway v1.2.0之前版本并不支持这种链路短路在Terway v1.2.0版本发布后,新建集群将默认开启该功能,已创建集群不会开启(此处就2.5小节场景)

 

10 场景九:集群内Pod访问的SVC ExternalIP(Terway版本≤1.2.0),SVC后端Pod和客户端Pod配属不同ENI(同ECS)

环境

此处环境和2.6小节 情况类似,不做过多描述,只是此小节是在terway 版本小于1.2.0 情况下,访问External IP 47.243.139.183

image.png

内核路由

请参考2.6和2.8 小节。

 

由于客户端Pod和被访问的SVC的后端Pod虽然同属于同一个ECS,但是不属于同一个ENI,那么在terway 版本小于1.2.0的情况下,访问External IP,实际上数据链路会通过客户端pod ENI出ECS到External IP的SLB,在被转发到另一个一个ENI上。虽然从外部感知上看 两个客户端Pod和SVC的后端Pod都是在同一个ECS,但是由于属于不同ENI,所以不会形成回环,可以访问成功,此处的结果和2.8 小节完全不同,需要注意

小结

数据链路转发示意图:

 image.png

 

整个请求链路是ECS1 Pod1 ->ECS1 eth1 -> VPC -> SLB ->ECS1 eth2 ->ECS1 Pod2

Terway版本小于1.2.0时,集群内访问external IP,会出ECS ENI到SLB,再由SLB转发到ECS ENI上,如果源pod所属ENI和被转发ENI为同一个,将访问不成功,原因是四层SLB会形成回环

如果源pod所属ENI和被转发ENI为是同一个节点上不同ENI,可以访问成功

 

11 场景十:集群内Pod访问的SVC ExternalIP(Terway版本≤1.2.0),SVC后端Pod和客户端Pod部署于不同ECS

环境

此处环境和2.6小节 情况类似,不做过多描述,只是此小节是在terway 版本小于1.2.0 情况下,访问External IP 47.243.139.183

image.png

 

内核路由

请参考2.7和2.9 小节。

此处和2.7的架构场景相似,都是客户端Pod和SVC的后端Pod不属于不同的ECS节点,客户端去访问SVC的External IP。只有Terway的版本不同,2.7小节 Terway 版本是≥1.2.0,此小节是<1.2.0,仅仅是Terway 版本和eniconfig的不同,两者访问链路一个会经过SLB,一个则不会经过SLB这一点需要关注。置于不同的原因是因为1.2.0 Terway 版本之后开启集群内负载均衡,对于访问ExternalIP 会被负载到Service网段,具体信息请见 2.8 小节。

 

小结

数据链路转发示意图:

image.png

 

整个请求链路是ECS1 Pod1 ->ECS1 eth1 -> VPC -> SLB ->ECS2 eth1 ->ECS2 Pod2

Terway版本小于1.2.0时,集群内访问external IP,会出ECS ENI到SLB,再由SLB转发到ECS ENI上,如果源pod所属ENI和被转发ENI为同一个,将访问不成功,原因是四层SLB会形成回环

 

12 场景十一:集群外访问SVC ExternalIP

环境image.png

 cn-hongkong.10.0.3.15节点上存在 nginx-7d6877d777-j7dqz,IP分为10.0.3.34

通过describe svc 可以看到 nginxPod 被加入到了 svc nginx的后端。SVC的CLusterIP是192.168.27.242。

image.png

 

内核路由

在SLB控制台,可以看到 lb-j6cj07oi6uc705nsc1q4m 虚拟服务器组的后端服务器组是两个后端nginxPod的ENI eni-j6cgs979ky3evp81j3n8image.png

 

从集群外部角度看,SLB的后端虚拟服务器组是SVC的后端Pod所属的ENI网卡,内网的IP 地址就是Pod的地址。

 

小结

数据链路转发示意图:

image.png

 

ExternalTrafficPolicy 为Local或Cluster模式下,SLB只会将Pod分配ENI挂在到SLB虚拟服务器组

数据链路:client -> SLB->Pod ENI +Pod Port ->ECS1 Pod1 eth0

 

13) 小结

本篇文章主要聚焦ACK 在Terway IPVLAN+EBPF模式下,不同SOP场景下的数据链路转发路径。伴随着客户对性能的极致追求的需求,在Terway IPVLAN+EBPF相比Terway ENI,有更高的Pod密度;相比Terway ENIIP,有更高的性能,但因此也带了网络链路的复杂性和可观测性带来了调整,此场景可以分为11个SOP场景,并对这11个场景的转发链路,技术实现原理,云产品配置等一一梳理并总结,这对我们遇到Terway IPVLAN架构下的链路抖动、最优化配置,链路原理等提供了初步指引方向。

 

在Terway IPVLAN模式下,利用EBPF和IPVLAN隧道,避免了数据链路在ECS OS内核协议栈的转发,这必然带来了更高的性能,同时也有ENIIP模式一样的多IP共享ENI的方式来保证Pod密度。但是随着业务场景越来越趋于复杂,业务的ACL管控也更加趋于Pod维度去管理,比如需要针对Pod维度进行安全ACL规则设置的需求等。下一系列我们将进入到Terway ENI-Trunking模式的全景解析。

相关实践学习
一小时快速掌握 SQL 语法
本实验带您学习SQL的基础语法,快速入门SQL。
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情: https://www.aliyun.com/product/ecs
相关文章
|
18小时前
|
Cloud Native Java 关系型数据库
【阿里云云原生专栏】构建云原生应用:基于Spring Boot与阿里云服务的全栈指南
【5月更文挑战第21天】构建云原生应用是企业数字化转型的关键,本文提供了一份基于Spring Boot和阿里云的全栈指南。涵盖从阿里云账号注册、ECS与Docker搭建,到Spring Boot项目创建、业务代码编写和部署。此外,还介绍了如何集成阿里云OSS存储、RDS数据库服务以及ACK容器服务,助力打造高效、可扩展和易管理的云原生应用。
78 3
|
18小时前
|
Cloud Native 数据管理 关系型数据库
【阿里云云原生专栏】云原生数据管理:阿里云数据库服务的分布式实践
【5月更文挑战第21天】阿里云数据库服务在云原生时代展现优势,应对分布式数据管理挑战。PolarDB等服务保证高可用和弹性,通过多副本机制和分布式事务确保数据一致性和可靠性。示例代码展示了在阿里云数据库上进行分布式事务操作。此外,丰富的监控工具协助用户管理数据库性能,支持企业的数字化转型和业务增长。
93 1
|
1天前
|
存储 弹性计算 Cloud Native
AutoMQ:如何基于阿里云计算与存储产品实现云原生架构升级
AutoMQ:如何基于阿里云计算与存储产品实现云原生架构升级
|
1天前
|
监控 负载均衡 Java
【阿里云云原生专栏】微服务架构在阿里云云原生平台上的应用实例与优化策略
【5月更文挑战第20天】本文介绍了在阿里云云原生平台实现微服务架构的步骤,包括基于Spring Cloud的Docker化部署、使用ACK部署微服务,以及优化策略:服务发现与负载均衡(借助Istio)和监控日志管理。通过这种方式,企业能提升应用的可扩展性、可维护性和敏捷性。
170 5
|
1天前
|
存储 弹性计算 Kubernetes
【阿里云云原生专栏】深入解析阿里云Kubernetes服务ACK:企业级容器编排实战
【5月更文挑战第20天】阿里云ACK是高性能的Kubernetes服务,基于开源Kubernetes并融合VPC、SLB等云资源。它提供强大的集群管理、无缝兼容Kubernetes API、弹性伸缩、安全隔离及监控日志功能。用户可通过控制台或kubectl轻松创建和部署应用,如Nginx。此外,ACK支持自动扩缩容、服务发现、负载均衡和持久化存储。多重安全保障和集成监控使其成为企业云原生环境的理想选择。
116 3
|
1天前
|
运维 Cloud Native Serverless
【阿里云云原生专栏】阿里云云原生实践:从容器化到Serverless的无缝过渡
【5月更文挑战第20天】本文介绍了如何在阿里云上实现从容器化到Serverless的平滑过渡。首先,通过阿里云容器服务(ACK)创建和管理容器集群,部署应用。接着,利用函数计算(FC)构建Serverless架构,编写和部署函数代码。最后,借助函数工作流(Fn)进行任务编排,实现容器化应用与Serverless应用的统一管理,从而提升应用弹性和可扩展性,降低运维成本,支持企业高效数字化转型。
163 3
|
4天前
|
人工智能 Serverless 异构计算
上海站丨飞天技术沙龙 Serverless + AI 专场开启报名!
"飞天技术沙龙——Serverless 技术实践营"将于2024年5月31日举行,聚焦Serverless在AI中的应用。活动包括演讲、实操,探讨Serverless演进趋势、AI应用开发及降低成本等议题。限额80人,报名审核制,现场还有大奖和证书待您领取。扫描链接<https://summit.aliyun.com/Serverless2024shanghai>报名。
上海站丨飞天技术沙龙 Serverless + AI 专场开启报名!
|
6天前
|
Cloud Native 关系型数据库 分布式数据库
PolarDB是阿里云自主研发的关系型云原生数据库
【5月更文挑战第14天】PolarDB是阿里云自主研发的关系型云原生数据库
46 3
|
6天前
|
存储 Cloud Native 对象存储
AutoMQ:如何基于阿里云计算与存储产品实现云原生架构升级
AutoMQ[1] 是新一代基于共享存储架构实现的云原生 Kafka。得益于其存算分离的共享存储架构,通过和阿里云合作,深度使用阿里云可靠、先进的云服务如对象存储OSS、块存储 ESSD、弹性伸缩ESS以及抢占式实例实现了相比 Apache Kafka 10倍的成本优势并且提供了自动弹性的能力。
83463 5
AutoMQ:如何基于阿里云计算与存储产品实现云原生架构升级

热门文章

最新文章