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

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

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

《云原生网络数据面可观测性最佳实践》——二、全景剖析阿里云容器网络数据链路——3. Terway ENIIP 模式架构设计(上):https://developer.aliyun.com/article/1221455?groupCode=supportservice

Service的ExternalTrafficPolicy是Local

SVC nginx CLusterIP是192.168.2.115,ExternalIP是10.0.3.62。后端是10.0.1.104和10.0.3.58

image.png

cn-hongkong.10.0.1.82

对于SVC的ClusterIP,可以看到SVC的后端两个Pod都会被加到IPVS的转发规则。

image.png

对于SVC的ExternalIP,可以看到SVC的后端,只有该节点的后端Pod 10.0.1.104才会被加到IPVS的转发规则

image.png

在LoadBalancer的SVC模式下,如果ExternalTrafficPolicy为Local,对于ClusterIP来说,会把所有SVC后端Pod都会加到该节点的IPVS转发规则;对于ExternalIP,只会把该节点上的SVC后端Pod才会加到IPVS规则中。如果该节点没有SVC后端Pod,则该节点上的Pod访问SVC的ExternalIP将会是失败。


Service的ExternalTrafficPolicy是Cluster

SVC nginx1 CLusterIP是192.168.2.253,ExternalIP是10.0.3.63,后端是10.0.1.104和10.0.3.58

image.png

cn-hongkong.10.0.1.82

对于SVC的ClusterIP,可以看到SVC的后端两个Pod都会被加到IPVS的转发规则。

image.png 对于SVC的ExternalIP,可以看到SVC的后端两个Pod都会被加到IPVS的转发规则。

image.png

 

在LoadBalancer的SVC模式下,如果ExternalTrafficPolicy为Cluster,对于ClusterIP或ExternalIP来说,会把所有SVC后端Pod都会加到该节点的IPVS转发规则。

 

小结

可以访问到目

 

Conntrack表信息

Service nginx的ExternalTrafficPolicy是Local

SVC nginx CLusterIP是192.168.2.115,ExternalIP是10.0.3.62。后端是10.0.1.104和10.0.3.58

 

如果访问是SVCClusterIP,通过conntrack 信息,可以看到src是源端Pod 10.0.1.91dstSVC ClusterIP 192.168.2.115,dport是SVC中port并且期望是10.0.1.104 来回包给 10.0.1.91

image.png

如果访问是SVCExternalIP,通过conntrack 信息,可以看到src是源端Pod 10.0.1.91dstSVC ExternalIP 10.0.3.62。dport是SVC中port并且期望是10.0.1.104 来回包给 10.0.1.91

image.png

Service nginx1ExternalTrafficPolicy是Cluster

SVC nginx1 CLusterIP192.168.2.253ExternalIP是10.0.3.63后端是10.0.1.10410.0.3.58

如果访问是SVCClusterIP,通过conntrack 信息,可以看到src是源端Pod 10.0.1.91dstSVC ClusterIP 192.168.2.253dport是SVC中port并且期望是10.0.1.104 来回包给 10.0.1.91

image.png

如果访问是SVCExternalIP,通过conntrack 信息,可以看到src是源端Pod 10.0.1.91dstSVC ExternalIP 10.0.3.63dport是SVC中port并且期望是节点ECSIP 10.0.1.82 来回包给 10.0.1.91

image.png

 综上可以看到src变换了多次,故在Cluster 模式下,会存在丢失真实客户端IP情况

 

数据链路转发示意图:

image.png

 

会经过calicao网卡,每个非hostnetworkpod会和calicao网卡形成veth pair,用于和其他pod或node进行通信

整个链路不会和请求不会经过pod所分配ENI,直接在OSns中命中Ip rule 被转发

整个请求链路是ECS1 Pod1 eth0 ->Pod1 calixxxx ->Pod2 calixxxx ->ECS1 Pod2 eth0

访问SVC IPSVC 会在源端pod eth0和calixxx网卡捕捉到,在目端podeth0和calixxx时捕捉不到

在LoadBalancerSVC模式下,如果ExternalTrafficPolicy为Local,对于ClusterIP来说,会把所有SVC后端Pod都会加到该节点IPVS转发规则;对于ExternalIP,只会把该节点上SVC后端Pod才会加到IPVS规则中

在LoadBalancerSVC模式下,如果ExternalTrafficPolicy为Cluster,对于ClusterIP或ExternalIP来说,会把所有SVC后端Pod都会加到该节点IPVS转发规则,同时无法保留src地址

数据链路要经过三次内核协议栈,是Pod1协议栈、ECS1协议栈、Pod2协议

4) 场景三:访问PodIP,异节点pod间互访

环境

image.png

 

cn-hongkong.10.0.1.82 节点上存在 centos-67756b6dc8-h5wnp和10.0.1.91

cn-hongkong.10.0.3.49 节点上存在 nginx-7d6877d777-lwrfc和10.0.3.58

内核路由

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

用上述类似办法可以发现centos-67756b6dc8-h5wnp的veth pair的cali44ae9fbceeb,Pod网络空间只有默认路由。

image.png

image.png

 

在ECS OS内,有指向Pod IP,下一跳为calixxxx的路由,通过前文可以知道calixxx网卡是和每个pod内的veth1组成的pair,所以,pod内访问SVC的CIDR会有指向veth1的路由,不会走默认的eth0路由。故:calixx网卡在这里的主要作用是用于:1.节点访问Pod 2. 当节点或者Pod访问 SVC的CIDR时,会走ECS OS内核协议栈转换,走到calixxx和eth0访问pod,对于目的为外部地址,则走Pod所属的ENI 出ECS进入到了VPC。

image.png

 

小结

可以访问到目

数据链路转发示意图:

image.png

 

会经过calicao网卡,每个非hostnetworkpod会和calicao网卡形成veth pair,用于和其他pod或node进行通信;

整个链路请求会经过pod所分配ENI,直接在OSns中命中Ip rule 被转发;

出ECS后,根据要访问pod和该pod ENI所属vswitch,命中VPC路由规则或者直接VSW上二层转发;

整个请求链路是ECS1 Pod1 eth0->ECS1 Pod1 calixxxxx->ECS1 ethx -> vpc route rule(如有) ->ECS2 ethx ->ECS2 Pod2 calixxxxx->ECS2 Pod2 eth0;

数据链路要经过四次内核协议栈,Pod1协议栈、ECS1协议栈、Pod2协议栈、ECS2协议;

 

5) 场景四:群内非SVC后端pod所在节点访问SVC ClusterIP

环境

image.png

image.png

image.png cn-hongkong.10.0.3.49节点上存在 nginx-7d6877d777-h4jtf和10.0.3.58

cn-hongkong.10.0.1.82 节点上存在 centos-67756b6dc8-h5wnp和10.0.1.91

Service1 是nginx,ClusterIP是192.168.2.115 ExternalIP是10.0.3.62。

Service2 是ngin1,ClusterIP是192.168.2.253 ExternalIP是10.0.3.63

内核路由

内核路由部分已经在2.2和2.3 小结中详细说明,这里不再进行过多阐述。

源端ECS上的IPVS规则

根据2.2 小结中的源端ECS上的IPVS规则,我们可以得到:无论在哪种SVC模式下,对于ClusterIP来说,会把所有SVC后端Pod都会加到该节点的IPVS转发规则

 

小结

可以访问到目

 

Conntrack表信息

Service nginxExternalTrafficPolicy是Local

SVC nginx CLusterIP是192.168.2.115,ExternalIP是10.0.3.62。后端是10.0.1.104和10.0.3.58

cn-hongkong.10.0.1.82

 image.png

源端ECS上src是源端Pod 10.0.1.91,dst是SVC ClusterIP 192.168.2.115,dport是SVC中的port。并且期望是10.0.3.58 来回包给 10.0.1.91。

 

cn-hongkong.10.0.3.49

image.png

 

目的端ECS上src是源端Pod 10.0.1.91,dst是Pod的IP 10.0.3.58,port是pod的port。并且期望此pod 来回包给 10.0.1.91。

 

Service nginx1ExternalTrafficPolicy是Cluster

SVC nginx1 CLusterIP是192.168.2.253,ExternalIP是10.0.3.63,后端是10.0.1.104和10.0.3.58

 

cn-hongkong.10.0.1.82  image.png 源端ECS上src是源端Pod 10.0.1.91,dstSVC ClusterIP 192.168.2.115,dport是SVC中的port。并且期望是10.0.3.58 来回包给 10.0.1.91。

 

cn-hongkong.10.0.3.49

image.png

 

目的端ECS上src是源端Pod 10.0.1.91,dst是Pod的IP 10.0.3.58,dport是pod的port。并且期望此pod 来回包给 10.0.1.91。

 

对于ClusterIP来说,源端ECS会把所有SVC后端Pod都会加到该节点IPVS转发规则,目端ECS是捕获不到任何SVC ClusterIP信息,只能捕获到源端PodIP,所以回包时候会回到源端Pod附属网卡上

 

数据链路转发示意图:

 image.png

 

会经过calicao网卡,每个非hostnetworkpod会和calicao网卡形成veth pair,用于和其他pod或node进行通信

整个链路请求会经过pod所分配ENI,直接在OSns中命中Ip rule 被转发;

出ECS后,根据要访问pod和该pod ENI所属vswitch,命中VPC路由规则或者直接VSW上二层转发;

整个请求链路是

去方向:

ECS1 Pod1 eth0 ->ECS1 Pod1 calixxxxxx ->ECS1 主网卡eth0 -> vpc route rule(如有) ->ECS2 附属网卡ethx ->ECS2 Pod2 calixxxxx ->ECS2 Pod2 eth0

回方向:

ECS2 Pod2 eth0 ->ECS2 Pod2 calixxxxx ->ECS2 附属网卡ethx -> vpc route rule(如有) ->ECS1 附属网卡eth1 ->ECS1 Pod1 calixxxxxx ->ECS1 Pod1 eth0

 

对于ClusterIP来说,源端ECS会把所有SVC后端Pod都会加到该节点IPVS转发规则,目端ECS是捕获不到任何SVC ClusterIP信息,只能捕获到源端PodIP,所以回包时候会回到源端Pod附属网卡上

数据链路要经过四次内核协议栈,Pod1协议栈、ECS1协议栈、Pod2协议栈、ECS2协议

 


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

《云原生网络数据面可观测性最佳实践》——二、全景剖析阿里云容器网络数据链路——3. Terway ENIIP 模式架构设计(下):https://developer.aliyun.com/article/1221452?groupCode=supportservice

相关实践学习
通义万相文本绘图与人像美化
本解决方案展示了如何利用自研的通义万相AIGC技术在Web服务中实现先进的图像生成。
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情: https://www.aliyun.com/product/ecs
相关文章
|
11月前
|
Kubernetes Cloud Native 安全
云原生机密计算新范式 PeerPods技术方案在阿里云上的落地和实践
PeerPods 技术价值已在阿里云实际场景中深度落地。
|
11月前
|
存储 运维 监控
云服务运行安全创新标杆:阿里云飞天洛神云网络子系统“齐天”再次斩获奖项
阿里云“超大规模云计算网络一体化运行管理平台——齐天系统”凭借卓越的技术创新与实践成果,荣获“云服务运行安全创新成果奖”,同时,齐天团队负责人吕彪获评“全栈型”专家认证。
|
7月前
|
Cloud Native Serverless API
微服务架构实战指南:从单体应用到云原生的蜕变之路
🌟蒋星熠Jaxonic,代码为舟的星际旅人。深耕微服务架构,擅以DDD拆分服务、构建高可用通信与治理体系。分享从单体到云原生的实战经验,探索技术演进的无限可能。
微服务架构实战指南:从单体应用到云原生的蜕变之路
|
7月前
|
弹性计算 安全 应用服务中间件
阿里云渠道商:怎么配置阿里云网络ACL?
阿里云网络ACL是子网级无状态防火墙,支持精准流量控制、规则热生效且免费使用。本文详解5步配置流程,助您实现Web与数据库层的安全隔离,提升云上网络安全。
|
7月前
|
人工智能 安全 架构师
2025云栖大会 | 阿里云网络技术Session主题资料和视频回放归档
2025年9月24日-26日,杭州,一年一度的云栖大会如期而至;阿里云飞天洛神云网络作为阿里云计算的连接底座,是飞天云操作系统的核心组件,致力于为上云企业提供高可靠、高性能、高弹性、智能的连接服务。本次云栖,云网络产品线也带来全系列产品升级,以及创新技术重磅解读,围绕增强确定性、提效自动化、深耕智能化和敏捷全球化带来技术、产品和服务升级,以及全新的云网络产品生态合作计划发布。
840 4
|
7月前
|
Java Linux 虚拟化
【Docker】(1)Docker的概述与架构,手把手带你安装Docker,云原生路上不可缺少的一门技术!
1. Docker简介 1.1 Docker是什么 为什么docker会出现? 假定您在开发一款平台项目,您的开发环境具有特定的配置。其他开发人员身处的环境配置也各有不同。 您正在开发的应用依赖于您当前的配置且还要依赖于某些配置文件。 您的企业还拥有标准化的测试和生产环境,且具有自身的配置和一系列支持文件。 **要求:**希望尽可能多在本地模拟这些环境而不产生重新创建服务器环境的开销 问题: 要如何确保应用能够在这些环境中运行和通过质量检测? 在部署过程中不出现令人头疼的版本、配置问题 无需重新编写代码和进行故障修复
624 2
|
7月前
|
弹性计算 网络安全 数据中心
阿里云创建专有网络VPC的【IPv4网段】如何选择?有什么区别?
阿里云VPC创建时需选IPv4网段,默认提供10.0.0.0/16、172.16.0.0/16、192.168.0.0/16,三者无功能差异。若仅单VPC且不连本地数据中心,可任选其一,确保不冲突即可。多VPC或混合云场景需规划避免IP重叠。不支持100.64.0.0/10等特殊网段。建议结合IPAM进行地址管理。
|
8月前
|
存储 Kubernetes 网络安全
关于阿里云 Kubernetes 容器服务(ACK)添加镜像仓库的快速说明
本文介绍了在中国大陆地区因网络限制无法正常拉取 Docker 镜像的解决方案。作者所在的阿里云 Kubernetes 集群使用的是较旧版本的 containerd(1.2x),且无法直接通过 SSH 修改节点配置,因此采用了一种无需更改 Kubernetes 配置文件的方法。通过为 `docker.io` 添加 containerd 的镜像源,并使用脚本自动修改 containerd 配置文件中的路径错误(将错误的 `cert.d` 改为 `certs.d`),最终实现了通过多个镜像站点拉取镜像。作者还提供了一个可重复运行的脚本,用于动态配置镜像源。虽然该方案能缓解镜像拉取问题,
843 2
|
7月前
|
人工智能 Kubernetes Cloud Native
Higress(云原生AI网关) 架构学习指南
Higress 架构学习指南 🚀写在前面: 嘿,欢迎你来到 Higress 的学习之旅!
2507 0