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

本文涉及的产品
云服务器 ECS,每月免费额度200元 3个月
云服务器ECS,u1 2核4GB 1个月
简介: 《云原生网络数据面可观测性最佳实践》——二、全景剖析阿里云容器网络数据链路——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

相关实践学习
一小时快速掌握 SQL 语法
本实验带您学习SQL的基础语法,快速入门SQL。
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
存储 Kubernetes Docker
容器服务ACK常见问题之阿里云控制台进不去了如何解决
容器服务ACK(阿里云容器服务 Kubernetes 版)是阿里云提供的一种托管式Kubernetes服务,帮助用户轻松使用Kubernetes进行应用部署、管理和扩展。本汇总收集了容器服务ACK使用中的常见问题及答案,包括集群管理、应用部署、服务访问、网络配置、存储使用、安全保障等方面,旨在帮助用户快速解决使用过程中遇到的难题,提升容器管理和运维效率。
|
1月前
|
弹性计算 负载均衡 网络协议
这种情况可能是由于阿里云的API服务出现了短暂的故障或者网络波动导致的
【2月更文挑战第20天】这种情况可能是由于阿里云的API服务出现了短暂的故障或者网络波动导致的
73 1
|
16天前
|
存储 人工智能 架构师
数据库架构模式:分片
本文介绍了数据库分片的概念,以及各自的使用场景,分片可提升可扩展性、性能和高可用性。
|
18天前
|
安全 SDN 数据中心
|
20天前
|
前端开发 安全 JavaScript
计算机软件从 CS 模式到 BS 架构迁移背后的动因
计算机软件从 CS 模式到 BS 架构迁移背后的动因
25 0
|
28天前
|
存储 监控 安全
金石推荐 | 【分布式技术专题】「单点登录技术架构」一文带领你好好认识以下Saml协议的运作机制和流程模式
金石推荐 | 【分布式技术专题】「单点登录技术架构」一文带领你好好认识以下Saml协议的运作机制和流程模式
64 1
|
1月前
|
运维 安全 Linux
LAMP架构调优(八)——Apache Worker模式调优
LAMP架构调优(八)——Apache Worker模式调优
9 0
|
1月前
|
弹性计算 网络协议 关系型数据库
网络技术基础阿里云实验——企业级云上网络构建实践
实验地址:<https://developer.aliyun.com/adc/scenario/65e54c7876324bbe9e1fb18665719179> 本文档指导在阿里云上构建跨地域的网络环境,涉及杭州和北京两个地域。任务包括创建VPC、交换机、ECS实例,配置VPC对等连接,以及设置安全组和网络ACL规则以实现特定服务间的互访。例如,允许北京的研发服务器ECS-DEV访问杭州的文件服务器ECS-FS的SSH服务,ECS-FS访问ECS-WEB01的SSH服务,ECS-WEB01访问ECS-DB01的MySQL服务,并确保ECS-WEB03对外提供HTTP服务。
|
1月前
|
缓存 运维 Linux
LAMP架构调优(七)——Apache Prefork模式调优
LAMP架构调优(七)——Apache Prefork模式调优
19 2
|
1月前
|
消息中间件 存储 缓存
性能基础之大型网站技术架构模式
【2月更文挑战第15天】性能基础之大型网站技术架构模式
70 3
性能基础之大型网站技术架构模式

热门文章

最新文章