更多精彩内容,欢迎观看:
《云原生网络数据面可观测性最佳实践》——二、全景剖析阿里云容器网络数据链路——2. Terway ENI 模式架构设计(中):https://developer.aliyun.com/article/1221645?spm=a2c6h.13148508.setting.24.15f94f0em5pyNO
7) 场景六:集群内访问SVC IP (External IP),源端和SVC后端Pod为同一节点
环境
ap-southeast-1.10.0.0.196节点上存在两个pod:centos-59cdc5c9c4-89f8x IP地址10.0.0.202和nginx1-5969d8fc89-9t99h和10.0.0.203
Service是nginx1集群内clusterIP是192.168.221.163,external IP是10.0.2.89。
内核路由
centos-59cdc5c9c4-89f8x IP地址10.0.0.202,该容器在宿主机表现的PID是2314075,该容器网络命名空间有指向容器eth0的默认路由。和下一跳为veth1,目的网段为service的ClusterIP的两条路由。
SLB相关配置
在SLB控制台,可以看到虚拟服务器组的后端只有nginx1-5969d8fc89-9t99h的ENI eni-t4n6qvabpwi24w0dcy55。
综上,可以判断如果访问的是SVC的External IP,是走默认路由 eth0,直接出ECS 进入到avs,访问到 SLB的实例,再由SLB实例转发到后端eni上。
小结
可以访问到目的端
数据链路转发示意图:
● 数据链路是ECS1 Pod1 netns eth0 -> VPC -> SLB -> VPC->ECS1 Pod2 netns eth0。数据链路不经过宿主机host namespace,数据链路会先出ECS1,到AVS再回到ECS1;
● 在pod内的net namespace中,直接命中默认路由规则,从eth0网卡出pod直接到VPC。这里的eth0 其实就是附属网卡ENI,直接被挂载在了pod的net ns,走了PCI设备;
● 该网卡为被分配的pod独占,无法和其他pod进行共享;
● 与 2.4 场景可以看到非常大的不同,虽然都是前后端Pod都是部署在同一个ECS访问SVC的IP,但是可以看到如果访问的是SVC的ClusterIP,则数据链路会进入到ECS OS 层面,会经过三次协议栈;如果访问的是External IP,则不会经过ECS OS,直接出ECS,经过SLB转发到目的Pod上,只经过两次协议栈(Pod1和Pod2);
8) 场景七:集群内访问SVC IP(External IP),源端和SVC后端Pod为不同节点
环境
ap-southeast-1.10.0.0.196节点上存在pod:centos-59cdc5c9c4-89f8x IP地址10.0.0.202。
ap-southeast-1.10.0.2.80节点上存在pod:nginx-6f545cb57c-jmbrq和10.0.2.86。
Service是nginx集群内clusterIP是192.168.254.141,external IP是10.0.2.90。
内核路由
centos-59cdc5c9c4-89f8x IP地址10.0.0.202,该容器在宿主机表现的PID是2314075,该容器网络命名空间有指向容器eth0的默认路由。和下一跳为veth1,目的网段为service的ClusterIP的两条路由。
SLB相关配置
在SLB控制台,可以看到lb-t4nih6p8w8b1dc7p587j9虚拟服务器组的后端只有nginx-6f545cb57c-jmbrq的ENI eni-t4n5kzo553dfak2sp68j。
综上,可以判断如果访问的是SVC的External IP,是走默认路由 eth0,直接出ECS 进入到avs,访问到 SLB的实例,再由SLB实例转发到后端eni上。
小结
可以访问到目的端
数据链路转发示意图:
● 数据链路是ECS1 Pod1 netns eth0 -> VPC -> SLB -> VPC->ECS2 Pod2 netns eth0。数据链路不经过宿主机host namespace,数据链路会先出ECS1,到SLB再回到ECS2;
● 在pod内的net namespace中,直接命中默认路由规则,从eth0网卡出pod直接到VPC。这里的eth0 其实就是附属网卡ENI,直接被挂载在了pod的net ns,走了PCI设备;
● 该网卡为被分配的pod独占,无法和其他pod进行共享;
● 与 2.5 场景可以看到非常大的不同,虽然都是前后端Pod都是部署在不同ECS访问SVC的IP,但是可以看到如果访问的是SVC的ClusterIP,则数据链路会进入到ECS OS 层面,通过ECS的eth0出ECS,进入到AVS,会经过三次协议栈;如果访问的是External IP,则不会经过ECS OS,直接通过Pod所属的附属ENI 出ECS,经过SLB转发到目的Pod上,只经过两次协议栈(Pod1和Pod2);
9) 场景八:集群外访问SVC External IP
环境
ap-southeast-1.10.0.2.80节点上存在pod:nginx-6f545cb57c-jmbrq和10.0.2.86。
ap-southeast-1.10.0.1.233节点上存在pod:nginx-6f545cb57c-25k9z和10.0.1.239。
Service是nginx集群内clusterIP是192.168.254.141,external IP是10.0.2.90。
SLB相关配置
在SLB控制台,可以看到lb-t4nih6p8w8b1dc7p587j9虚拟服务器组的后端服务器组是两个后端nginxPod的ENI eni-t4n5kzo553dfak2sp68j和eni-t4naaozjxiehvmg2lwfo。
从集群外部角度看,SLB的后端虚拟服务器组是SVC的后端Pod所属的两个ENI网卡,内网的IP 地址就是Pod的地址。没有经过后端Pod所在的ECS的OS层面,直接进入到了OS的协议栈。
小结
可以访问到目的端
数据链路转发示意图:
● 数据链路:client -> SLB->Pod ENI +Pod Port->ECS1 Pod1 eth0;
● 数据链路要经过一次内核协议栈,是Pod1协议栈;
10) 小结
本篇文章主要聚焦ACK 在Terway ENI模式下,不同SOP场景下的数据链路转发路径。伴随着客户对性能的极致追求的需求,在Terway ENI模式下,一共可以分为8个SOP场景,并对这八个场景的转发链路,技术实现原理,云产品配置等一一梳理并总结,这对我们遇到Terway ENI架构下的链路抖动、最优化配置,链路原理等提供了初步指引方向。
在Terway ENI 模式下,ENI是以PCI方式直接挂载到Pod的命名空间内,这就以为ENI属于被分配的Pod独享,而ECS所能部署的Pod数量取决于ECS所能挂载ENI网卡数量的限制,而这个限制和ECS的实例规格类型有关,比如神龙ecs.ebmg7.32xlarge,128C 512GB也只支持最多32个ENI,这往往会造成资源的浪费和部署密度的降低,为了解决这个资源效率问题,ACK 带来了Terway ENIIP的方式,来实现ENI网卡可以被多个Pod所共享,这大大增加了单个ECS上的Pod数量quota,提升了部署密度,这也是目前线上集群采用最多的架构。
下一系列我们将进入到Terway ENIIP模式的全景解析。